Name: series-workflowt2c7g Phase: Succeeded StartedAt: 2026-07-24 00:15:27 +0000 UTC FinishedAt: 2026-07-24 05:04:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[0] Phase: Succeeded StartedAt: 2026-07-24 00:15:27 +0000 UTC FinishedAt: 2026-07-24 00:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 00:15:27 +0000 UTC FinishedAt: 2026-07-24 00:39:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_map_extent", "hfsplus_iomap_begin", "hfsplus_write_iomap_begin", "hfsplus_write_iomap_end", "hfsplus_iomap_cont_expand", "hfsplus_writeback_range", "hfsplus_file_write_dio_end_io", "hfsplus_fallback_buffered_write", "hfsplus_dio_write_iter", "hfsplus_file_write_iter", "hfsplus_file_read_iter", "hfsplus_file_llseek", "hfsplus_file_fsync", "hfsplus_block_allocate", "hfsplus_block_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX21hcF9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfZW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8mIzM0OywKICAgICYjMzQ7aGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2xsc2VlayYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibG9ja19hbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAwOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODU2ZmU3NmY0MWUwOTY0ZTBiNGRjMjdiMzAyMTcwMDM5NjA4NTdkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDAwOjM4OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZDUuLmI0NDMyYzY0ZGIzYmVjIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWdcbkBAIC01LDcgJiM0Mzs1LDcgQEAgY29uZmlnIEhGU1BMVVNfRlNcbiBcdHNlbGVjdCBCVUZGRVJfSEVBRFxuIFx0c2VsZWN0IE5MU1xuIFx0c2VsZWN0IE5MU19VVEY4XG4tXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuJiM0MztcdHNlbGVjdCBGU19JT01BUFxuIFx0aGVscFxuIFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcbiBcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5pbmRleCBmMmE5YWU2OTdlODExNC4uM2RkZWE2OWE5YzY5ODMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICYjNDM7NSw5IEBAXG4gXG4gb2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpICYjNDM7PSBoZnNwbHVzLm9cbiBcbi1oZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBpb2N0bC5vIGV4dGVudHMubyBjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBcXFxuLVx0XHRibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuJiM0MztoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuJiM0MztcdFx0Y2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyBcXFxuJiM0MztcdFx0dW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4gXHRcdGF0dHJpYnV0ZXMubyB4YXR0ci5vIHhhdHRyX3VzZXIubyB4YXR0cl9zZWN1cml0eS5vIHhhdHRyX3RydXN0ZWQub1xuIFxuICMgS1VuaXQgdGVzdHNcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JpdG1hcC5jIGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xuaW5kZXggMWIzYWY4Yzg3Y2FkYjUuLjU3MTY1MmZiYWVkYTNiIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiM0MztcdGxvY2tfcGFnZShwYWdlKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciAmIzQzOyAob2Zmc2V0IFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XG4gXHRpID0gb2Zmc2V0ICUgMzI7XG5AQCAtNzUsNiAmIzQzOzc2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VyciYjNDM7JiM0Mzs7XG4gXHRcdH1cbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZT0gc2l6ZSlcbiBcdFx0XHRicmVhaztcbkBAIC04NCw2ICYjNDM7ODYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGlmICgoc2l6ZSBeIG9mZnNldCkgLyBQQUdFX0NBQ0hFX0JJVFMpXG4gXHRcdFx0ZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC05OCw2ICYjNDM7MTAxLDkgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRzdGFydCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaTtcbiBcdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbiBcdFx0aGZzX2RiZyhcJiMzNDtiaXRtYXAgZnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHQvKiBkbyBhbnkgcGFydGlhbCB1MzIgYXQgdGhlIHN0YXJ0ICovXG5AQCAtMTI4LDYgJiM0MzsxMzQsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0fVxuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLFxuIFx0XHRcdFx0XHQgTlVMTCk7XG5AQCAtMTM1LDYgJiM0MzsxNDIsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMTUyLDYgJiM0MzsxNjAsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdCpjdXJyID0gY3B1X3RvX2JlMzIobik7XG4gXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdGt1bm1hcF9sb2NhbChwcHRyKTtcbiYjNDM7XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdCptYXggPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGkgLSBzdGFydDtcbiBcdHNiaS1cdTAwM2VmcmVlX2Jsb2NrcyAtPSAqbWF4O1xuIFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XG5AQCAtMTg1LDYgJiM0MzsxOTQsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbiBcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0Z290byBrYWJvb207XG4mIzQzO1x0bG9ja19wYWdlKHBhZ2UpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICYjNDM7IChvZmZzZXQgXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcbiBcdGVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMjE2LDkgJiM0MzsyMjYsMTEgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICYjNDM7JiM0MztwbnIsIE5VTEwpO1xuIFx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuIFx0XHRcdGdvdG8ga2Fib29tO1xuJiM0MztcdFx0bG9ja19wYWdlKHBhZ2UpO1xuIFx0XHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRjdXJyID0gcHB0cjtcbiBcdFx0ZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiAmIzQzOzI0NCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIG91dDpcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzICYjNDM7PSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjU0Li44ZjdmNTYwY2VjNjQyNyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19mcy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19yYXcuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpb21hcC5oXCYjMzQ7XG4gXG4gLyogQ29tcGFyZSB0d28gZXh0ZW50cyBrZXlzLCByZXR1cm5zIDAgb24gc2FtZSwgcG9zL25lZyBmb3IgZGlmZmVyZW5jZSAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbkBAIC00OCwxOCAmIzQzOzQ5LDI5IEBAIHN0YXRpYyB2b2lkIGhmc3BsdXNfZXh0X2J1aWxkX2tleShoZnNwbHVzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCxcbiBcdGtleS1cdTAwM2VleHQucGFkID0gMDtcbiB9XG4gXG4tc3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmKVxuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKCkgLSBmaW5kIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYmxvY2tcbiYjNDM7ICpcbiYjNDM7ICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAmIzM5O29mZiYjMzk7IHdpdGhpbiBhbiA4LWVudHJ5XG4mIzQzOyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbiYjNDM7ICogdGhhdCBhcmUgY29udGlndW91cyB3aXRoIGl0IGluIHRoZSBzYW1lIGV4dGVudCBlbnRyeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbiYjNDM7XHRcdFx0XHQgdTMyICpkYmxvY2spXG4ge1xuIFx0aW50IGk7XG4gXHR1MzIgY291bnQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvdW50ID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbi1cdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpXG4tXHRcdFx0cmV0dXJuIGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VzdGFydF9ibG9jaykgJiM0Mzsgb2ZmO1xuJiM0MztcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbiYjNDM7XHRcdFx0KmRibG9jayA9IGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VzdGFydF9ibG9jaykgJiM0Mzsgb2ZmO1xuJiM0MztcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4mIzQzO1x0XHR9XG4gXHRcdG9mZiAtPSBjb3VudDtcbiBcdH1cbiBcdC8qIHBhbmljPyAqL1xuJiM0MztcdCpkYmxvY2sgPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTY4LDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOylcbiBcdFx0Y291bnQgJiM0Mzs9IGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VibG9ja19jb3VudCk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuQEAgLTIyMywzNyAmIzQzOzIzNSw0NiBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuLS8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovXG4taW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbi1cdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfbWFwX2V4dGVudCgpIC0gZmluZCBvciBhbGxvY2F0ZSBhIHNlcXVlbmNlIG9mIGFsbG9jYXRpb24gYmxvY2tzXG4mIzQzOyAqXG4mIzQzOyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICYjMzk7YWJsb2NrJiMzOTsgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlXG4mIzQzOyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbiYjNDM7ICogJiMzOTtjcmVhdGUmIzM5OyBpcyBzZXQgYW5kICYjMzk7YWJsb2NrJiMzOTsgbGllcyBiZXlvbmQgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogT24gc3VjY2VzcywgKmRibG9jayBpcyB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGJhY2tpbmcgJiMzOTthYmxvY2smIzM5OyxcbiYjNDM7ICogYW5kICptYXhfYmxvY2tzIGlzIHRoZSBudW1iZXIgb2YgZnVydGhlciBhbGxvY2F0aW9uIGJsb2NrcyB0aGF0IGFyZVxuJiM0MzsgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeVxuJiM0MzsgKiB0aGF0IGNvbnRhaW5zICYjMzk7YWJsb2NrJiMzOTspLCB3aGljaCBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSB3aG9sZSBmaWxlJiMzOTtzXG4mIzQzOyAqIHJlbWFpbmluZyBhbGxvY2F0aW9uIHdoZW4gdGhlIGZvcmsgaXMgZnJhZ21lbnRlZCBhY3Jvc3Mgc2V2ZXJhbFxuJiM0MzsgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGVcbiYjNDM7ICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4mIzQzOyAqL1xuJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXG4mIzQzO1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4mIzQzO1x0aW50IHdhc19kaXJ0eTtcbiYjNDM7XHRpbnQgcmVzO1xuIFxuLVx0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cbi1cdGFibG9jayA9IGlibG9jayBcdTAwM2VcdTAwM2Ugc2JpLVx1MDAzZWZzX3NoaWZ0O1xuJiM0MztcdGlmIChiYWxsb2MpXG4mIzQzO1x0XHQqYmFsbG9jID0gZmFsc2U7XG4gXG4tXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuJiM0MztcdGlmIChhYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlYWxsb2NfYmxvY2tzKSB7XG4gXHRcdGlmICghY3JlYXRlKVxuLVx0XHRcdHJldHVybiAwO1xuLVx0XHRpZiAoaWJsb2NrIFx1MDAzZSBoaXAtXHUwMDNlZnNfYmxvY2tzKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuLVx0XHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuLVx0XHRcdHJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTtcbi1cdFx0XHRpZiAocmVzKVxuLVx0XHRcdFx0cmV0dXJuIHJlcztcbi1cdFx0fVxuLVx0fSBlbHNlXG4tXHRcdGNyZWF0ZSA9IDA7XG4mIzQzO1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0aWYgKGJhbGxvYylcbiYjNDM7XHRcdFx0KmJhbGxvYyA9IHRydWU7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGFibG9jayBcdTAwM2MgaGlwLVx1MDAzZWZpcnN0X2Jsb2Nrcykge1xuLVx0XHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VmaXJzdF9leHRlbnRzLCBhYmxvY2spO1xuLVx0XHRnb3RvIGRvbmU7XG4mIzQzO1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYWJsb2NrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGRibG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSAmIzQzOzI5Myw0NCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2aGlwLVx1MDAzZWV4dGVudHNfbG9jayk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuLVx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsXG4tXHRcdFx0XHRcdGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQpO1xuJiM0MztcdCptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGRibG9jayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aGlwLVx1MDAzZWV4dGVudHNfbG9jayk7XG4gXG4tZG9uZTpcbiYjNDM7XHRpZiAod2FzX2RpcnR5KVxuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuJiM0MztpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbiYjNDM7XHRzZWN0b3JfdCBzZWN0b3I7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cbiYjNDM7XHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlibG9jayBcdTAwM2U9IGhpcC1cdTAwM2Vmc19ibG9ja3MpIHtcbiYjNDM7XHRcdGlmICghY3JlYXRlKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGlmIChpYmxvY2sgXHUwMDNlIGhpcC1cdTAwM2Vmc19ibG9ja3MpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH0gZWxzZVxuJiM0MztcdFx0Y3JlYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuJiM0MztcdFx0XHRcdCAgTlVMTCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuIFx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgaWJsb2NrICVsbHUgLSBkYmxvY2sgJXVcXG5cJiMzNDssXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSAmIzQzOzM0NCw4IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdGhpcC1cdTAwM2VwaHlzX3NpemUgJiM0Mzs9IHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuIFx0XHRoaXAtXHUwMDNlZnNfYmxvY2tzJiM0MzsmIzQzOztcbiBcdFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHR9XG4tXHRpZiAoY3JlYXRlIHx8IHdhc19kaXJ0eSlcbiBcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTU1MywyMCAmIzQzOzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4mIzQzO1x0XHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdHJlcyA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2l6ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRcdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdFx0ICBpbm9kZS1cdTAwM2VpX3NpemUsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zaXplLCAwLCAwLFxuJiM0MztcdFx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbiYjNDM7XHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0cmVzID0gaGZzcGx1c193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBzaXplLCAwLFxuLVx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwgMCxcbi1cdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4tXHRcdGlmIChyZXMgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fSBlbHNlIGlmIChpbm9kZS1cdTAwM2VpX3NpemUgPT0gaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZmlsZS5jIGIvZnMvaGZzcGx1cy9maWxlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOGM5MmUxNDUyOTVjYTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5AQCAtMCwwICYjNDM7MSwzMDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogIGxpbnV4L2ZzL2hmc3BsdXMvZmlsZS5jXG4mIzQzOyAqXG4mIzQzOyAqIEZpbGUgb3BlcmF0aW9uczogb3Blbi9yZWxlYXNlL2ZzeW5jIGFuZCBpb21hcC1iYXNlZCByZWFkL3dyaXRlL3NlZWtcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19mcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfcmF3LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuJiM0MztcdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4mIzQzO1x0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXHUwMDNlb3BlbmNudCk7XG4mIzQzO1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XG4mIzQzO1x0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4mIzQzO1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbiYjNDM7XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4mIzQzO1x0XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG4mIzQzO1x0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4mIzQzO1x0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbiYjNDM7XHRcdFx0XHRcdCAgIEhGU1BMVVNfU0Ioc2IpLVx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xuJiM0MztcdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuJiM0MztcdFx0ICAgICAgIGludCBkYXRhc3luYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4mIzQzO1x0aW50IGVycm9yID0gMCwgZXJyb3IyO1xuJiM0MztcbiYjNDM7XHRoZnNfZGJnKFwmIzM0O2lub2RlLVx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVycm9yMiA9XG4mIzQzO1x0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4mIzQzO1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuJiM0MztcdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0ZXJyb3IyID1cbiYjNDM7XHRcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxuJiM0MztcdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHRcdFx0aWYgKCFlcnJvcilcbiYjNDM7XHRcdFx0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3N5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHRcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRcdGVycm9yID0gZXJyb3IyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuJiM0MztcdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdGVycm9yID0gZXJyb3IyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcbiYjNDM7ICogdGFpbCBvZiBhIHdyaXRlIHRoYXQgaW9tYXBfZGlvX3J3KCkgY291bGQgbm90IHBlcmZvcm0gZGlyZWN0bHlcbiYjNDM7ICogKHVuYWxpZ25lZCB0YWlsLCBvciBubyBibG9ja3MgY291bGQgYmUgbWFwcGVkIHdpdGhvdXQgYWxsb2NhdGlvblxuJiM0MzsgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYixcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0bG9mZl90IG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zLCBlbmQ7XG4mIzQzO1x0c3NpemVfdCB3cml0dGVuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4mIzQzO1xuJiM0MztcdHdyaXR0ZW4gPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4mIzQzO1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0ZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgJiM0Mzsgd3JpdHRlbiAtIDE7XG4mIzQzO1x0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuJiM0MztcdFx0XHRcdFx0ICAgb2Zmc2V0LCBlbmQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4mIzQzO1x0XHRcdFx0IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHQgZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxuJiM0MztcdFx0XHQgICBcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcbiYjNDM7XHRcdFx0ICAgXHUwMDI2aGZzcGx1c193cml0ZV9kaW9fb3BzLFxuJiM0MztcdFx0XHQgICAwLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FTk9UQkxLKVxuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbiYjNDM7XHRcdHNzaXplX3Qgd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0XHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcbiYjNDM7XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XHRcdHJldCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0bG9mZl90IHRvdGFsX2NhcGFjaXR5O1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlub2RlX2xvY2soaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHR0b3RhbF9jYXBhY2l0eSA9IChsb2ZmX3Qpc2JpLVx1MDAzZXRvdGFsX2Jsb2NrcyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUZCSUc7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZpbGVfbW9kaWZpZWQoZmlsZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuJiM0MztcdFx0bG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuJiM0MztcdFx0bG9mZl90IG5ld19zaXplID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4mIzQzO1x0XHRcdG5ld19zaXplID0gbWF4X3QobG9mZl90LCBuZXdfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdCAgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X3NpemUpO1xuJiM0MztcdFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdH0gZWxzZSBpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpXG4mIzQzO1x0XHRyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpO1xuJiM0MztcdGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcbiYjNDM7XHRcdFx0XHRcdFx0TlVMTCwgTlVMTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7dW5sb2NrOlxuJiM0MztcdGlub2RlX3VubG9jayhpbm9kZSk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkge1xuJiM0MztcdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMsXG4mIzQzO1x0XHRcdFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4mIzQzO1x0fSBlbHNlXG4mIzQzO1x0XHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3Q7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAod2hlbmNlKSB7XG4mIzQzO1x0Y2FzZSBTRUVLX0hPTEU6XG4mIzQzO1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNFRUtfREFUQTpcbiYjNDM7XHRcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcbiYjNDM7XHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO1x0XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4Ynl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuJiM0MztcdC5sbHNlZWtcdFx0PSBoZnNwbHVzX2ZpbGVfbGxzZWVrLFxuJiM0MztcdC5yZWFkX2l0ZXJcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcbiYjNDM7XHQud3JpdGVfaXRlclx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcixcbiYjNDM7XHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4mIzQzO1x0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4mIzQzO1x0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuJiM0MztcdC5mc3luY1x0XHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcbiYjNDM7XHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuJiM0MztcdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuJiM0MztcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3ODcuLmI5Y2FkYmM2YzZkMjE2IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG5AQCAtMTc1LDYgJiM0MzsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAmIzM5O2RibG9jayYjMzk7IG9uIHRoZSB2b2x1bWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdTMyIGRibG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuJiM0MztcdGxvZmZfdCBwaHlzX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuJiM0MztcdHBoeXNfYnl0ZXMgXHUwMDNjXHUwMDNjPSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4mIzQzO1x0cGh5c19ieXRlcyAmIzQzOz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuJiM0MztcdHBoeXNfYnl0ZXMgXHUwMDNjXHUwMDNjPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5c19ieXRlcztcbiYjNDM7fVxuIFxuIHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8ge1xuIFx0YXRvbWljX3Qgb3BlbmNudDtcbkBAIC00MzYsNiAmIzQzOzQ1Miw4IEBAIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKTtcbiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuJiM0MztcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpO1xuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbiBcdFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xuQEAgLTQ0Myw2ICYjNDM7NDYxLDcgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucztcbiBcbkBAIC00NjIsMTIgJiM0Mzs0ODEsMTUgQEAgaW50IGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHQgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLFxuIFx0XHQgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTtcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXG4mIzQzOy8qIGZpbGUuYyAqL1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuJiM0MztcdFx0ICAgICAgIGludCBkYXRhc3luYyk7XG4mIzQzO1xuIC8qIGlvY3RsLmMgKi9cbiBsb25nIGhmc3BsdXNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmNcbmluZGV4IDFjNTdjODczZjA1ZDYxLi4xZjE2NjYzZWFkYjA5NSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTIgJiM0MzsxOCwxNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWF0dHIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19mcy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19yYXcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hhdHRyLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuIFxuLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbkBAIC0xMjAsNjYgJiM0MzsxMjIsNyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaylcbiBcdHJldHVybiByZXMgPyB0cnlfdG9fZnJlZV9idWZmZXJzKGZvbGlvKSA6IGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi17XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbi1cdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0bG9mZl90IGlzaXplO1xuLVx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XG4tXHRsb2ZmX3QgZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgJiM0MzsgY291bnQ7XG4tXHRzc2l6ZV90IHJldDtcbi1cbi1cdC8qXG4tXHQgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLlxuLVx0ICogRm9yIGRpcmVjdCB3cml0ZXMgYmV5b25kIEVPRiwgZXhwYW5kIHRoZSBmaWxlIGZpcnN0LlxuLVx0ICovXG4tXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbi1cdFx0bG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjtcbi1cdFx0bG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlO1xuLVxuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cbi1cdFx0Lypcbi1cdFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXG4tXHRcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cbi1cdFx0ICovXG4tXHRcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcbi1cbi1cdFx0cmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9vZmYgPSBpc2l6ZTtcbi1cdFx0ZW5kX29mZiA9IChlbmQgXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcbi1cbi1cdFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGVuZF9wYWdlID0gZW5kX29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cbi1cdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpO1xuLVx0fVxuLVxuLVx0cmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKGlvY2IsIGlub2RlLCBpdGVyLCBoZnNwbHVzX2dldF9ibG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSW4gY2FzZSBvZiBlcnJvciBleHRlbmRpbmcgd3JpdGUgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3XG4tXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxuLVx0ICovXG4tXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IHJldCBcdTAwM2MgMCkpIHtcbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdGlmIChlbmQgXHUwMDNlIGlzaXplKVxuLVx0XHRcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuQEAgLTE4OCw4ICYjNDM7MTMxLDggQEAgc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4gXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4tXHQucmVhZF9mb2xpb1x0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4tXHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX3dyaXRlcGFnZXMsXG4mIzQzO1x0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyxcbiYjNDM7XHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG5AQCAtMTk3LDE4ICYjNDM7MTQwLDU5IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LnJlbGVhc2VfZm9saW9cdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxuIH07XG4gXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XG4mIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4gXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4tXHQucmVhZF9mb2xpb1x0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4mIzQzO1x0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5ibWFwXHRcdD0gaGZzcGx1c19ibWFwLFxuLVx0LmRpcmVjdF9JT1x0PSBoZnNwbHVzX2RpcmVjdF9JTyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbiYjNDM7XHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoZnNwbHVzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbiYjNDM7e1xuJiM0MztcdGlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcbiYjNDM7XHRcdC5pbm9kZVx0PSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjXHQ9IHdiYyxcbiYjNDM7XHRcdC5vcHNcdD0gXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuJiM0MztcdC5yZWFkX2ZvbGlvXHRcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkYWhlYWRcdFx0PSBoZnNwbHVzX3JlYWRhaGVhZCxcbiYjNDM7XHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbiYjNDM7XHQuZGlydHlfZm9saW9cdFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbiYjNDM7XHQuYm1hcFx0XHRcdD0gaGZzcGx1c19hb3BfYm1hcCxcbiYjNDM7XHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbiYjNDM7XHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlXHQ9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbiYjNDM7XHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXHQ9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuJiM0MztcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiYjNDM7XHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuJiM0MztcdC5zd2FwX2FjdGl2YXRlXHRcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxuJiM0Mzt9O1xuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHtcbiBcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxuIFx0LmRfY29tcGFyZSAgICA9IGhmc3BsdXNfY29tcGFyZV9kZW50cnksXG5AQCAtMjY4LDM1ICYjNDM7MjUyLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIC1FSU87XG4gfVxuIFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4tXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuLVx0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbi1cdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4tXHRcdGlub2RlX2xvY2soaW5vZGUpO1xuLVx0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVx1MDAzZWlfaW5vLFxuLVx0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbi1cdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4tXHRcdH1cbi1cdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG5AQCAtMzExLDEwICYjNDM7MjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0XHRsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiYjNDM7XHRcdFx0XHRlcnJvciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiBcdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbkBAIC0zNTMsODYgJiM0MzszMjAsNiBAQCBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXHUwMDNlc192aGRyO1xuLVx0aW50IGVycm9yID0gMCwgZXJyb3IyO1xuLVxuLVx0aGZzX2RiZyhcJiMzNDtpbm9kZS1cdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcblwmIzM0Oyxcbi1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuLVxuLVx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cbi1cdC8qXG4tXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbi1cdCAqL1xuLVx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXG4tXHQvKlxuLVx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXG4tXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdH1cbi1cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9XG4tXHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlZXh0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlcnJvcjIgPVxuLVx0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbi1cdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4tXHRcdFx0cHJfZXJyKFwmIzM0O3N5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwmIzM0Oyk7XG4tXHR9XG4tXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShzYmktXHUwMDNlYWxsb2NfZmlsZSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cbi1cdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRlcnJvciA9IGVycm9yMjtcbi1cbi1cdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFx1MDAyNnNiaS1cdTAwM2VmbGFncykpXG4tXHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXG4tXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuLVxuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuc2V0YXR0clx0PSBoZnNwbHVzX3NldGF0dHIsXG4gXHQuZ2V0YXR0clx0PSBoZnNwbHVzX2dldGF0dHIsXG5AQCAtNDU0LDE5ICYjNDM7MzQxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxpc3R4YXR0clx0PSBoZnNwbHVzX2xpc3R4YXR0cixcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuLVx0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuLVx0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3Blbixcbi1cdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuLVx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbi19O1xuLVxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuQEAgLTUxMyw3ICYjNDM7Mzg3LDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0c2JpLVx1MDAzZWZpbGVfY291bnQmIzQzOyYjNDM7O1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHRoaXAtXHUwMDNlY2x1bXBfYmxvY2tzID0gMTtcbiBcdH0gZWxzZSBpZiAoU19JU0NIUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fFxuIFx0XHQgICBTX0lTRklGTyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbkBAIC02NTQsNyAmIzQzOzUyOCw3IEBAIGludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4mIzQzO1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmMgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTAwMTQ0YjI3YzE4NmFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaW9tYXAuY1xuQEAgLTAsMCAmIzQzOzEsMjA5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqICBsaW51eC9mcy9oZnNwbHVzL2lvbWFwLmNcbiYjNDM7ICpcbiYjNDM7ICogaW9tYXAgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0IGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGlvbWFwICppb21hcCwgYm9vbCBtYXlfYWxsb2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHUzMiBhYmxvY2ssIGRibG9jaywgbWF4X2Jsb2NrcztcbiYjNDM7XHRsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzO1xuJiM0MztcdGxvZmZfdCBibG9ja19zdGFydDtcbiYjNDM7XHRib29sIGlzX25ldztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heV9hbGxvYykge1xuJiM0MztcdFx0LyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovXG4mIzQzO1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VhZGRyID0gSU9NQVBfTlVMTF9BRERSO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogQ2xhbXAgbGVuZ3RoIGlmIHRoZSByZXF1ZXN0ZWQgcmFuZ2UgZ29lcyBiZXlvbmQgaV9zaXplICovXG4mIzQzO1x0XHRpZiAob2Zmc2V0ICYjNDM7IGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4mIzQzO1x0XHRcdGxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFibG9jayA9IG9mZnNldCBcdTAwM2VcdTAwM2Ugc2JpLVx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCBcdTAwMjZkYmxvY2ssXG4mIzQzO1x0XHRcdFx0IFx1MDAyNm1heF9ibG9ja3MsIE5VTEwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoc2JpLVx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XG4mIzQzO1x0YWJsb2NrX2J5dGVzID0gKGxvZmZfdCltYXhfYmxvY2tzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBhYmxvY2tfYnl0ZXMgLSBhYmxvY2tfb2Zmc2V0KTtcbiYjNDM7XHRibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpO1xuJiM0MztcdGlzX25ldyA9IG1heV9hbGxvYyBcdTAwMjZcdTAwMjYgYmxvY2tfc3RhcnQgXHUwMDNlPSBoaXAtXHUwMDNlcGh5c19zaXplO1xuJiM0MztcdGlmIChtYXlfYWxsb2MgXHUwMDI2XHUwMDI2ICFpc19uZXcgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2MgaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbiYjNDM7XHRcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtXHUwMDNlcGh5c19zaXplIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0aW9tYXAtXHUwMDNlYmRldiA9IHNiLVx1MDAzZXNfYmRldjtcbiYjNDM7XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xuJiM0MztcdGlvbWFwLVx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICYjNDM7IGFibG9ja19vZmZzZXQ7XG4mIzQzO1x0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcbiYjNDM7XHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfbmV3KVxuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgaW9tYXAsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBpb21hcCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKClcbiYjNDM7ICpcbiYjNDM7ICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXG4mIzQzOyAqIChoaXAtXHUwMDNlcGh5c19zaXplIC8gaGlwLVx1MDAzZWZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4mIzQzO1x0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0bG9mZl90IGVuZDtcbiYjNDM7XHRib29sIGRpcnRpZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3cml0dGVuKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVuZCA9IHJvdW5kX3VwKHBvcyAmIzQzOyB3cml0dGVuLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGlmIChoaXAtXHUwMDNlcGh5c19zaXplIFx1MDAzYyBlbmQpIHtcbiYjNDM7XHRcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLVx1MDAzZXBoeXNfc2l6ZSk7XG4mIzQzO1x0XHRoaXAtXHUwMDNlcGh5c19zaXplID0gZW5kO1xuJiM0MztcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyA9IGVuZCBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiYjNDM7XHRcdGRpcnRpZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRpcnRpZWQpXG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKVxuJiM0MzsgKlxuJiM0MzsgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAmIzM5O3NpemUmIzM5Oy5cbiYjNDM7ICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS5cbiYjNDM7ICovXG4mIzQzO2ludCBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbiYjNDM7XHRsb2ZmX3Qgc3RhcnQgPSBoaXAtXHUwMDNlcGh5c19zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBzdGFydCwgc2l6ZSAtIHN0YXJ0LCBOVUxMLFxuJiM0MztcdFx0XHRcdFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLCBOVUxMLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlZCBmb3IgZWFjaCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrLiBJZiB0aGUgZm9saW8gZmFsbHMgb3V0c2lkZVxuJiM0MzsgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuJiM0MztcdCAgICBvZmZzZXQgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICYjNDM7IHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbiYjNDM7XHRcdGVyciA9IF9faGZzcGx1c19pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgb2Zmc2V0LCBsZW4sIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcbiYjNDM7XHQud3JpdGViYWNrX3JhbmdlXHQ9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLFxuJiM0MztcdC53cml0ZWJhY2tfc3VibWl0XHQ9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbygpIC0gRGlyZWN0IEkvTyB3cml0ZSBjb21wbGV0aW9uIGhhbmRsZXJcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNjIGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IHNpemUpIHtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgJiM0Mzsgc2l6ZSk7XG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHMgPSB7XG4mIzQzO1x0LmVuZF9pb1x0XHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9kaW9fZW5kX2lvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaW9tYXBfc3dhcGZpbGVfYWN0aXZhdGUoc2lzLCBmaWxlLCBzcGFuLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWVhMzMzM2MxZTA3NTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaW9tYXAuaFxuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogIGxpbnV4L2ZzL2hmc3BsdXMvaW9tYXAuaFxuJiM0MzsgKlxuJiM0MzsgKiBpb21hcCBjYWxsYmFjayBkZWNsYXJhdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfSEZTUExVU19JT01BUF9IXG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHM7XG4mIzQzO1xuJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7XG4mIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlZS4uMTQxN2UxOWQ5NGJjZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbkBAIC0xNzEsMTggJiM0MzsxNzEsMjIgQEAgZW51bSB7XG4gXHRIRlNfWEFUVFJfTkFNRSxcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVFx0KDMpXG4mIzQzO1xuIHN0cnVjdCBoZnNfZXh0ZW50IHtcbiBcdF9fYmUxNiBibG9jaztcbiBcdF9fYmUxNiBjb3VudDtcbiB9O1xuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XG4mIzQzO3R5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbSEZTX0ZPUktfRVhURU5UX0NPVU5UXTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFx0KDgpXG4gXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2V4dGVudCB7XG4gXHRfX2JlMzIgc3RhcnRfYmxvY2s7XG4gXHRfX2JlMzIgYmxvY2tfY291bnQ7XG4gfSBfX3BhY2tlZDtcbi10eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbOF07XG4mIzQzO3R5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1tIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXTtcbiBcbiAvKiBJbmZvcm1hdGlvbiBmb3IgYSBcJiMzNDtGb3JrXCYjMzQ7IGluIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfbWFwX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZV9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9jb250X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlYmFja19yYW5nZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfbGxzZWVrJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9mc3luYyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfYmxvY2tfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udmVydHMgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NmZlNzZmNDFlMDk2NGUwYjRkYzI3YjMwMjE3MDAzOTYwODU3ZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAwMDozODo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZwppbmRleCBjYTg0MDFjYjY5NTRkNS4uYjQ0MzJjNjRkYjNiZWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWcKQEAgLTUsNyAmIzQzOzUsNyBAQCBjb25maWcgSEZTUExVU19GUwogCXNlbGVjdCBCVUZGRVJfSEVBRAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgTkxTX1VURjgKLQlzZWxlY3QgTEVHQUNZX0RJUkVDVF9JTwomIzQzOwlzZWxlY3QgRlNfSU9NQVAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXQKIAkgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlCmluZGV4IGYyYTlhZTY5N2U4MTE0Li4zZGRlYTY5YTljNjk4MyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL01ha2VmaWxlCkBAIC01LDggJiM0Mzs1LDkgQEAKIAogb2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpICYjNDM7PSBoZnNwbHVzLm8KIAotaGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXAotCQlibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcCiYjNDM7aGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gZmlsZS5vIGlvbWFwLm8gaW9jdGwubyBleHRlbnRzLm8gXAomIzQzOwkJY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyBcCiYjNDM7CQl1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXAogCQlhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm8KIAogIyBLVW5pdCB0ZXN0cwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKaW5kZXggMWIzYWY4Yzg3Y2FkYjUuLjU3MTY1MmZiYWVkYTNiIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKQEAgLTM5LDYgJiM0MzszOSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLAogCQlzdGFydCA9IHNpemU7CiAJCWdvdG8gb3V0OwogCX0KJiM0MzsJbG9ja19wYWdlKHBhZ2UpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJaSA9IG9mZnNldCAlIDMyOwpAQCAtNzUsNiAmIzQzOzc2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQljdXJyJiM0MzsmIzQzOzsKIAkJfQogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJb2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7CiAJCWlmIChvZmZzZXQgJmd0Oz0gc2l6ZSkKIAkJCWJyZWFrOwpAQCAtODQsNiAmIzQzOzg2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQlzdGFydCA9IHNpemU7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKIAkJaWYgKChzaXplIF4gb2Zmc2V0KSAvIFBBR0VfQ0FDSEVfQklUUykKIAkJCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC05OCw2ICYjNDM7MTAxLDkgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJc3RhcnQgPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGk7CiAJaWYgKHN0YXJ0ICZndDs9IHNpemUpIHsKIAkJaGZzX2RiZygmIzM0O2JpdG1hcCBmdWxsXG4mIzM0Oyk7CiYjNDM7CQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKJiM0MzsJCXN0YXJ0ID0gc2l6ZTsKIAkJZ290byBvdXQ7CiAJfQogCS8qIGRvIGFueSBwYXJ0aWFsIHUzMiBhdCB0aGUgc3RhcnQgKi8KQEAgLTEyOCw2ICYjNDM7MTM0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCX0KIAkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlvZmZzZXQgJiM0Mzs9IFBBR0VfQ0FDSEVfQklUUzsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUywKIAkJCQkJIE5VTEwpOwpAQCAtMTM1LDYgJiM0MzsxNDIsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkJCXN0YXJ0ID0gc2l6ZTsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CQlsb2NrX3BhZ2UocGFnZSk7CiAJCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJCWN1cnIgPSBwcHRyOwogCQllbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyOwpAQCAtMTUyLDYgJiM0MzsxNjAsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkqY3VyciA9IGNwdV90b19iZTMyKG4pOwogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJdW5sb2NrX3BhZ2UocGFnZSk7CiAJKm1heCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaSAtIHN0YXJ0OwogCXNiaS0mZ3Q7ZnJlZV9ibG9ja3MgLT0gKm1heDsKIAloZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTsKQEAgLTE4NSw2ICYjNDM7MTk0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpCiAJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIHBuciwgTlVMTCk7CiAJaWYgKElTX0VSUihwYWdlKSkKIAkJZ290byBrYWJvb207CiYjNDM7CWxvY2tfcGFnZShwYWdlKTsKIAlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCWN1cnIgPSBwcHRyICYjNDM7IChvZmZzZXQgJmFtcDsgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyOwogCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0yMTYsOSAmIzQzOzIyNiwxMSBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudCkKIAkJCWJyZWFrOwogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCAmIzQzOyYjNDM7cG5yLCBOVUxMKTsKIAkJaWYgKElTX0VSUihwYWdlKSkKIAkJCWdvdG8ga2Fib29tOwomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwogCQlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0cjsKIAkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTIzMiw2ICYjNDM7MjQ0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpCiBvdXQ6CiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwl1bmxvY2tfcGFnZShwYWdlKTsKIAlzYmktJmd0O2ZyZWVfYmxvY2tzICYjNDM7PSBsZW47CiAJaGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7c2JpLSZndDthbGxvY19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IDgxM2U2OGI4ZWNkNjU0Li44ZjdmNTYwY2VjNjQyNyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKIAogLyogQ29tcGFyZSB0d28gZXh0ZW50cyBrZXlzLCByZXR1cm5zIDAgb24gc2FtZSwgcG9zL25lZyBmb3IgZGlmZmVyZW5jZSAqLwogaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLApAQCAtNDgsMTggJiM0Mzs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsCiAJa2V5LSZndDtleHQucGFkID0gMDsKIH0KIAotc3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmKQomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19leHRfZmluZF9ibG9jaygpIC0gZmluZCBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJsb2NrCiYjNDM7ICoKJiM0MzsgKiBGaW5kIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgZm9yICYjMzk7b2ZmJiMzOTsgd2l0aGluIGFuIDgtZW50cnkKJiM0MzsgKiBleHRlbnQgcmVjb3JkLCBhbmQgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzCiYjNDM7ICogdGhhdCBhcmUgY29udGlndW91cyB3aXRoIGl0IGluIHRoZSBzYW1lIGV4dGVudCBlbnRyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYsCiYjNDM7CQkJCSB1MzIgKmRibG9jaykKIHsKIAlpbnQgaTsKIAl1MzIgY291bnQ7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgODsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiAJCWNvdW50ID0gYmUzMl90b19jcHUoZXh0LSZndDtibG9ja19jb3VudCk7Ci0JCWlmIChvZmYgJmx0OyBjb3VudCkKLQkJCXJldHVybiBiZTMyX3RvX2NwdShleHQtJmd0O3N0YXJ0X2Jsb2NrKSAmIzQzOyBvZmY7CiYjNDM7CQlpZiAob2ZmICZsdDsgY291bnQpIHsKJiM0MzsJCQkqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LSZndDtzdGFydF9ibG9jaykgJiM0Mzsgb2ZmOwomIzQzOwkJCXJldHVybiBjb3VudCAtIG9mZjsKJiM0MzsJCX0KIAkJb2ZmIC09IGNvdW50OwogCX0KIAkvKiBwYW5pYz8gKi8KJiM0MzsJKmRibG9jayA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY4LDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpCiAJaW50IGk7CiAJdTMyIGNvdW50ID0gMDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KQogCQljb3VudCAmIzQzOz0gYmUzMl90b19jcHUoZXh0LSZndDtibG9ja19jb3VudCk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjIzLDM3ICYjNDM7MjM1LDQ2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKQogCXJldHVybiByZXM7CiB9CiAKLS8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovCi1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAotCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfbWFwX2V4dGVudCgpIC0gZmluZCBvciBhbGxvY2F0ZSBhIHNlcXVlbmNlIG9mIGFsbG9jYXRpb24gYmxvY2tzCiYjNDM7ICoKJiM0MzsgKiBMb29rcyB1cCB0aGUgYWxsb2NhdGlvbiBibG9jayBhdCAmIzM5O2FibG9jayYjMzk7IGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZQomIzQzOyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW4KJiM0MzsgKiAmIzM5O2NyZWF0ZSYjMzk7IGlzIHNldCBhbmQgJiMzOTthYmxvY2smIzM5OyBsaWVzIGJleW9uZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uLgomIzQzOyAqCiYjNDM7ICogT24gc3VjY2VzcywgKmRibG9jayBpcyB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGJhY2tpbmcgJiMzOTthYmxvY2smIzM5OywKJiM0MzsgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlCiYjNDM7ICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnkKJiM0MzsgKiB0aGF0IGNvbnRhaW5zICYjMzk7YWJsb2NrJiMzOTspLCB3aGljaCBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSB3aG9sZSBmaWxlJiMzOTtzCiYjNDM7ICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsCiYjNDM7ICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlCiYjNDM7ICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuCiYjNDM7ICovCiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLAomIzQzOwkJCXUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYykKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7Ci0Jc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiAJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKLQlpbnQgcmVzID0gLUVJTzsKLQl1MzIgYWJsb2NrLCBkYmxvY2ssIG1hc2s7Ci0Jc2VjdG9yX3Qgc2VjdG9yOwotCWludCB3YXNfZGlydHkgPSAwOwomIzQzOwlpbnQgd2FzX2RpcnR5OwomIzQzOwlpbnQgcmVzOwogCi0JLyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi8KLQlhYmxvY2sgPSBpYmxvY2sgJmd0OyZndDsgc2JpLSZndDtmc19zaGlmdDsKJiM0MzsJaWYgKGJhbGxvYykKJiM0MzsJCSpiYWxsb2MgPSBmYWxzZTsKIAotCWlmIChpYmxvY2sgJmd0Oz0gaGlwLSZndDtmc19ibG9ja3MpIHsKJiM0MzsJaWYgKGFibG9jayAmZ3Q7PSBoaXAtJmd0O2FsbG9jX2Jsb2NrcykgewogCQlpZiAoIWNyZWF0ZSkKLQkJCXJldHVybiAwOwotCQlpZiAoaWJsb2NrICZndDsgaGlwLSZndDtmc19ibG9ja3MpCiAJCQlyZXR1cm4gLUVJTzsKLQkJaWYgKGFibG9jayAmZ3Q7PSBoaXAtJmd0O2FsbG9jX2Jsb2NrcykgewotCQkJcmVzID0gaGZzcGx1c19maWxlX2V4dGVuZChpbm9kZSwgZmFsc2UpOwotCQkJaWYgKHJlcykKLQkJCQlyZXR1cm4gcmVzOwotCQl9Ci0JfSBlbHNlCi0JCWNyZWF0ZSA9IDA7CiYjNDM7CQlyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlpZiAoYmFsbG9jKQomIzQzOwkJCSpiYWxsb2MgPSB0cnVlOwomIzQzOwl9CiAKIAlpZiAoYWJsb2NrICZsdDsgaGlwLSZndDtmaXJzdF9ibG9ja3MpIHsKLQkJZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2ZpcnN0X2V4dGVudHMsIGFibG9jayk7Ci0JCWdvdG8gZG9uZTsKJiM0MzsJCSptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2ZpcnN0X2V4dGVudHMsCiYjNDM7CQkJCQkJICAgICBhYmxvY2ssCiYjNDM7CQkJCQkJICAgICBkYmxvY2spOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGlub2RlLSZndDtpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKQpAQCAtMjcyLDExICYjNDM7MjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiAJCW11dGV4X3VubG9jaygmYW1wO2hpcC0mZ3Q7ZXh0ZW50c19sb2NrKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWRibG9jayA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLSZndDtjYWNoZWRfZXh0ZW50cywKLQkJCQkJYWJsb2NrIC0gaGlwLSZndDtjYWNoZWRfc3RhcnQpOwomIzQzOwkqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLSZndDtjYWNoZWRfZXh0ZW50cywKJiM0MzsJCQkJCSAgICAgYWJsb2NrIC0gaGlwLSZndDtjYWNoZWRfc3RhcnQsCiYjNDM7CQkJCQkgICAgIGRibG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7aGlwLSZndDtleHRlbnRzX2xvY2spOwogCi1kb25lOgomIzQzOwlpZiAod2FzX2RpcnR5KQomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqLwomIzQzO2ludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiYjNDM7CQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrczsKJiM0MzsJc2VjdG9yX3Qgc2VjdG9yOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqLwomIzQzOwlhYmxvY2sgPSBpYmxvY2sgJmd0OyZndDsgc2JpLSZndDtmc19zaGlmdDsKJiM0MzsKJiM0MzsJaWYgKGlibG9jayAmZ3Q7PSBoaXAtJmd0O2ZzX2Jsb2NrcykgewomIzQzOwkJaWYgKCFjcmVhdGUpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlpZiAoaWJsb2NrICZndDsgaGlwLSZndDtmc19ibG9ja3MpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CX0gZWxzZQomIzQzOwkJY3JlYXRlID0gMDsKJiM0MzsKJiM0MzsJcmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgJmFtcDtkYmxvY2ssICZhbXA7bWF4X2Jsb2NrcywKJiM0MzsJCQkJICBOVUxMKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiAJaGZzX2RiZygmIzM0O2lubyAlbGx1LCBpYmxvY2sgJWxsdSAtIGRibG9jayAldVxuJiMzNDssCiAJCWlub2RlLSZndDtpX2lubywgKGxvbmcgbG9uZylpYmxvY2ssIGRibG9jayk7CiAKQEAgLTI5MCw5ICYjNDM7MzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJaGlwLSZndDtwaHlzX3NpemUgJiM0Mzs9IHNiLSZndDtzX2Jsb2Nrc2l6ZTsKIAkJaGlwLSZndDtmc19ibG9ja3MmIzQzOyYjNDM7OwogCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLSZndDtzX2Jsb2Nrc2l6ZSk7Ci0JfQotCWlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KQogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQogCXJldHVybiAwOwogfQogCkBAIC01NTMsMjAgJiM0Mzs2MDYsMzIgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJaW5vZGUtJmd0O2lfaW5vLCAobG9uZyBsb25nKWhpcC0mZ3Q7cGh5c19zaXplLCBpbm9kZS0mZ3Q7aV9zaXplKTsKIAogCWlmIChpbm9kZS0mZ3Q7aV9zaXplICZndDsgaGlwLSZndDtwaHlzX3NpemUpIHsKLQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCQl2b2lkICpmc2RhdGEgPSBOVUxMOwotCQlsb2ZmX3Qgc2l6ZSA9IGlub2RlLSZndDtpX3NpemU7CiYjNDM7CQlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCXJlcyA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlub2RlLSZndDtpX3NpemUpOwomIzQzOwkJCWlmIChyZXMpCiYjNDM7CQkJCXJldHVybjsKJiM0MzsKJiM0MzsJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQkJdm9pZCAqZnNkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJCQlyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsCiYjNDM7CQkJCQkJICBpbm9kZS0mZ3Q7aV9zaXplLCAwLAomIzQzOwkJCQkJCSAgJmFtcDtmb2xpbywgJmFtcDtmc2RhdGEpOwomIzQzOwkJCWlmIChyZXMpCiYjNDM7CQkJCXJldHVybjsKJiM0MzsKJiM0MzsJCQlyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLAomIzQzOwkJCQkJCWlub2RlLSZndDtpX3NpemUsIDAsIDAsCiYjNDM7CQkJCQkJZm9saW8sIGZzZGF0YSk7CiYjNDM7CQkJaWYgKHJlcyAmbHQ7IDApCiYjNDM7CQkJCXJldHVybjsKJiM0MzsKJiM0MzsJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJCX0KIAotCQlyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsCi0JCQkJCSAgJmFtcDtmb2xpbywgJmFtcDtmc2RhdGEpOwotCQlpZiAocmVzKQotCQkJcmV0dXJuOwotCQlyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLAotCQkJCQlmb2xpbywgZnNkYXRhKTsKLQkJaWYgKHJlcyAmbHQ7IDApCi0JCQlyZXR1cm47Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChpbm9kZS0mZ3Q7aV9zaXplID09IGhpcC0mZ3Q7cGh5c19zaXplKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2ZpbGUuYyBiL2ZzL2hmc3BsdXMvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi44YzkyZTE0NTI5NWNhMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jCkBAIC0wLDAgJiM0MzsxLDMwOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiAgbGludXgvZnMvaGZzcGx1cy9maWxlLmMKJiM0MzsgKgomIzQzOyAqIEZpbGUgb3BlcmF0aW9uczogb3Blbi9yZWxlYXNlL2ZzeW5jIGFuZCBpb21hcC1iYXNlZCByZWFkL3dyaXRlL3NlZWsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiYjNDM7CQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7CiYjNDM7CWlmICghKGZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19MQVJHRUZJTEUpICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZndDsgTUFYX05PTl9MRlMpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsJYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwomIzQzOwlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwomIzQzOwlpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSkKJiM0MzsJCWlub2RlID0gSEZTUExVU19JKGlub2RlKS0mZ3Q7cnNyY19pbm9kZTsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewomIzQzOwkJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CQloZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpOwomIzQzOwkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewomIzQzOwkJCWhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS0mZ3Q7aV9pbm8sCiYjNDM7CQkJCQkgICBIRlNQTFVTX1NCKHNiKS0mZ3Q7aGlkZGVuX2RpciwgTlVMTCk7CiYjNDM7CQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwomIzQzOwkJfQomIzQzOwkJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAomIzQzOwkJICAgICAgIGludCBkYXRhc3luYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLSZndDtzX3ZoZHI7CiYjNDM7CWludCBlcnJvciA9IDAsIGVycm9yMjsKJiM0MzsKJiM0MzsJaGZzX2RiZygmIzM0O2lub2RlLSZndDtpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxuJiMzNDssCiYjNDM7CQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwomIzQzOwomIzQzOwllcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuCiYjNDM7CSAqLwomIzQzOwlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7Y2F0X3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewomIzQzOwkJY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7CiYjNDM7CQllcnJvcjIgPQomIzQzOwkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQlpZiAoIWVycm9yKQomIzQzOwkJCWVycm9yID0gZXJyb3IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzYmktJmd0O2F0dHJfdHJlZSkgewomIzQzOwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCQljbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7CiYjNDM7CQkJZXJyb3IyID0KJiM0MzsJCQkJZmlsZW1hcF93cml0ZV9hbmRfd2FpdCgKJiM0MzsJCQkJCSAgICBzYmktJmd0O2F0dHJfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQkJaWYgKCFlcnJvcikKJiM0MzsJCQkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXByX2VycigmIzM0O3N5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLAomIzQzOwkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7CiYjNDM7CQllcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7YWxsb2NfZmlsZS0mZ3Q7aV9tYXBwaW5nKTsKJiM0MzsJCWlmICghZXJyb3IpCiYjNDM7CQkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3NiaS0mZ3Q7dmhfbXV0ZXgpOwomIzQzOwloZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKJiM0MzsKJiM0MzsJZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQllcnJvciA9IGVycm9yMjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKJiM0MzsJCWJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19iZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoKSAtIGZhbGwgYmFjayB0byBidWZmZXJlZCBJL08gZm9yIHRoZQomIzQzOyAqIHRhaWwgb2YgYSB3cml0ZSB0aGF0IGlvbWFwX2Rpb19ydygpIGNvdWxkIG5vdCBwZXJmb3JtIGRpcmVjdGx5CiYjNDM7ICogKHVuYWxpZ25lZCB0YWlsLCBvciBubyBibG9ja3MgY291bGQgYmUgbWFwcGVkIHdpdGhvdXQgYWxsb2NhdGlvbgomIzQzOyAqIG91dHNpZGUgdGhlIGRpcmVjdCBwYXRoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCQlzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiYjNDM7ewomIzQzOwlsb2ZmX3Qgb2Zmc2V0ID0gaW9jYi0mZ3Q7a2lfcG9zLCBlbmQ7CiYjNDM7CXNzaXplX3Qgd3JpdHRlbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDs9IH5JT0NCX0RJUkVDVDsKJiM0MzsKJiM0MzsJd3JpdHRlbiA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwKJiM0MzsJCQkJCSAgICAmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCQkJICAgIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAod3JpdHRlbiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gd3JpdHRlbjsKJiM0MzsKJiM0MzsJZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHdyaXR0ZW4gLSAxOwomIzQzOwlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZywKJiM0MzsJCQkJCSAgIG9mZnNldCwgZW5kKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nLAomIzQzOwkJCQkgb2Zmc2V0ICZndDsmZ3Q7IFBBR0VfU0hJRlQsCiYjNDM7CQkJCSBlbmQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiB3cml0dGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwKJiM0MzsJCQkgICAmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCSAgICZhbXA7aGZzcGx1c193cml0ZV9kaW9fb3BzLAomIzQzOwkJCSAgIDAsIE5VTEwsIDApOwomIzQzOwlpZiAocmV0ID09IC1FTk9UQkxLKQomIzQzOwkJcmV0ID0gMDsKJiM0MzsJZWxzZSBpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChpb3ZfaXRlcl9jb3VudChmcm9tKSkgewomIzQzOwkJc3NpemVfdCB3cml0dGVuOwomIzQzOwomIzQzOwkJd3JpdHRlbiA9IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSk7CiYjNDM7CQlpZiAod3JpdHRlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CQlyZXQgJiM0Mzs9IHdyaXR0ZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJCQkJc3RydWN0IGlvdl9pdGVyICppdGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CWxvZmZfdCB0b3RhbF9jYXBhY2l0eTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXRvdGFsX2NhcGFjaXR5ID0gKGxvZmZfdClzYmktJmd0O3RvdGFsX2Jsb2NrcyAmbHQ7Jmx0OyBzYmktJmd0O2FsbG9jX2Jsa3N6X3NoaWZ0OwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICZndDs9IHRvdGFsX2NhcGFjaXR5KSB7CiYjNDM7CQlyZXQgPSAtRUZCSUc7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlyZXQgPSBlcnI7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQlsb2ZmX3Qgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiYjNDM7CQlsb2ZmX3QgbmV3X3NpemUgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpIHsKJiM0MzsJCQluZXdfc2l6ZSA9IG1heF90KGxvZmZfdCwgbmV3X3NpemUsCiYjNDM7CQkJCQkgIEhGU1BMVVNfSShpbm9kZSktJmd0O3BoeXNfc2l6ZSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTsKJiM0MzsJCWVyciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJaV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7CiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0gZWxzZSBpZiAoKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKSAmYW1wOyZhbXA7CiYjNDM7CQkgICBIRlNQTFVTX0koaW5vZGUpLSZndDtwaHlzX3NpemUgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS0mZ3Q7cGh5c19zaXplKTsKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkKJiM0MzsJCXJldCA9IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgaXRlcik7CiYjNDM7CWVsc2UgewomIzQzOwkJcmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLAomIzQzOwkJCQkJCSZhbXA7aGZzcGx1c193cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJCQkJTlVMTCwgTlVMTCk7CiYjNDM7CX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJCQkJc3RydWN0IGlvdl9pdGVyICppdGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkgewomIzQzOwkJZmlsZV9hY2Nlc3NlZChpb2NiLSZndDtraV9maWxwKTsKJiM0MzsJCXJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLAomIzQzOwkJCQkgICAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzLAomIzQzOwkJCQkgICBOVUxMLCAwLCBOVUxMLCAwKTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIGl0ZXIpOwomIzQzOwomIzQzOwlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsKJiM0MzsJc3dpdGNoICh3aGVuY2UpIHsKJiM0MzsJY2FzZSBTRUVLX0hPTEU6CiYjNDM7CQlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgJmFtcDtoZnNwbHVzX2lvbWFwX29wcyk7CiYjNDM7CQlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNFRUtfREFUQToKJiM0MzsJCWlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCW9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJCWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9mZnNldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLSZndDtpX3NiLSZndDtzX21heGJ5dGVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKJiM0MzsJLmxsc2VlawkJPSBoZnNwbHVzX2ZpbGVfbGxzZWVrLAomIzQzOwkucmVhZF9pdGVyCT0gaGZzcGx1c19maWxlX3JlYWRfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlciwKJiM0MzsJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiYjNDM7CS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiYjNDM7CS5zcGxpY2Vfd3JpdGUJPSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLAomIzQzOwkuZnN5bmMJCT0gaGZzcGx1c19maWxlX2ZzeW5jLAomIzQzOwkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKJiM0MzsJLnJlbGVhc2UJPSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSwKJiM0MzsJLnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAppbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uYjljYWRiYzZjNmQyMTYgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCkBAIC0xNzUsNiAmIzQzOzE3NSwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlyZXR1cm4gc2ItJmd0O3NfZnNfaW5mbzsKIH0KIAomIzQzOy8qCiYjNDM7ICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAmIzM5O2RibG9jayYjMzk7IG9uIHRoZSB2b2x1bWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBsb2ZmX3QgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkJCSAgdTMyIGRibG9jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpOwomIzQzOwlsb2ZmX3QgcGh5c19ieXRlczsKJiM0MzsKJiM0MzsJcGh5c19ieXRlcyA9IGRibG9jazsKJiM0MzsJcGh5c19ieXRlcyAmbHQ7Jmx0Oz0gc2JpLSZndDtmc19zaGlmdDsKJiM0MzsJcGh5c19ieXRlcyAmIzQzOz0gc2JpLSZndDtibG9ja29mZnNldDsKJiM0MzsJcGh5c19ieXRlcyAmbHQ7Jmx0Oz0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlzX2J5dGVzOwomIzQzO30KIAogc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7CiAJYXRvbWljX3Qgb3BlbmNudDsKQEAgLTQzNiw2ICYjNDM7NDUyLDggQEAgaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLAogaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiAJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKTsKJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsCiYjNDM7CQkJdTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKTsKIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCwKIAkJICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTsKIGludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dCk7CkBAIC00NDMsNiAmIzQzOzQ2MSw3IEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBpbm9kZS5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7CiAKQEAgLTQ2MiwxMiAmIzQzOzQ4MSwxNSBAQCBpbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzaywKIAkJICAgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncyk7Ci1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpOwogaW50IGhmc3BsdXNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIGludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAKJiM0MzsvKiBmaWxlLmMgKi8KJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MztpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiYjNDM7CQkgICAgICAgaW50IGRhdGFzeW5jKTsKJiM0MzsKIC8qIGlvY3RsLmMgKi8KIGxvbmcgaGZzcGx1c19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmMKaW5kZXggMWM1N2M4NzNmMDVkNjEuLjFmMTY2NjNlYWRiMDk1IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xOCwxMiAmIzQzOzE4LDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiAKLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7CiB9CkBAIC0xMjAsNjYgJiM0MzsxMjIsNyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaykKIAlyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTsKIH0KIAotc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCWxvZmZfdCBpc2l6ZTsKLQlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKLQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwotCXNzaXplX3QgcmV0OwotCi0JLyoKLQkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgotCSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KLQkgKi8KLQlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKLQkJbG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlOwotCi0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCS8qCi0JCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQotCQkgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuCi0JCSAqLwotCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7Ci0KLQkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X29mZiA9IGlzaXplOwotCQllbmRfb2ZmID0gKGVuZCAmZ3Q7IDApID8gZW5kIC0gMSA6IGVuZDsKLQotCQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KLQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpOwotCX0KLQotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKLQkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgotCSAqLwotCWlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IHJldCAmbHQ7IDApKSB7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCWlmIChlbmQgJmd0OyBpc2l6ZSkKLQkJCWhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8sCiYjNDM7CS53cml0ZXBhZ2VzCT0gaGZzcGx1c19sZWdhY3lfd3JpdGVwYWdlcywKIAkud3JpdGVfYmVnaW4JPSBoZnNwbHVzX3dyaXRlX2JlZ2luLAogCS53cml0ZV9lbmQJPSBnZW5lcmljX3dyaXRlX2VuZCwKIAkubWlncmF0ZV9mb2xpbwk9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLApAQCAtMTk3LDE4ICYjNDM7MTQwLDU5IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0gewogCS5yZWxlYXNlX2ZvbGlvCT0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLAogfTsKIAotY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHsKIAkuZGlydHlfZm9saW8JPSBibG9ja19kaXJ0eV9mb2xpbywKIAkuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sCi0JLnJlYWRfZm9saW8JPSBoZnNwbHVzX3JlYWRfZm9saW8sCiYjNDM7CS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbywKIAkud3JpdGVfYmVnaW4JPSBoZnNwbHVzX3dyaXRlX2JlZ2luLAogCS53cml0ZV9lbmQJPSBnZW5lcmljX3dyaXRlX2VuZCwKIAkuYm1hcAkJPSBoZnNwbHVzX2JtYXAsCi0JLmRpcmVjdF9JTwk9IGhmc3BsdXNfZGlyZWN0X0lPLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkud3JpdGVwYWdlcwk9IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIH07CiAKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhmc3BsdXNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZQk9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjCT0gd2JjLAomIzQzOwkJLm9wcwk9ICZhbXA7aGZzcGx1c193cml0ZWJhY2tfb3BzLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7CS5yZWFkX2ZvbGlvCQk9IGhmc3BsdXNfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZAkJPSBoZnNwbHVzX3JlYWRhaGVhZCwKJiM0MzsJLndyaXRlcGFnZXMJCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5ibWFwCQkJPSBoZnNwbHVzX2FvcF9ibWFwLAomIzQzOwkubWlncmF0ZV9mb2xpbwkJPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUJPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8JPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0MzsJLnJlbGVhc2VfZm9saW8JCT0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuc3dhcF9hY3RpdmF0ZQkJPSBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUsCiYjNDM7fTsKJiM0MzsKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LApAQCAtMjY4LDM1ICYjNDM7MjUyLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKCEoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX0xBUkdFRklMRSkgJmFtcDsmYW1wOyBpX3NpemVfcmVhZChpbm9kZSkgJmd0OyBNQVhfTk9OX0xGUykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewotCQlpbm9kZV9sb2NrKGlub2RlKTsKLQkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKLQkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewotCQkJaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLSZndDtpX2lubywKLQkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwotCQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwotCQl9Ci0JCWlub2RlX3VubG9jayhpbm9kZSk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMzExLDEwICYjNDM7MjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSAgICBhdHRyLSZndDtpYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiAJCWlmIChhdHRyLSZndDtpYV9zaXplICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewotCQkJZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwKLQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CQkJaWYgKFNfSVNSRUcoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQkJbG9mZl90IG9sZF9zaXplID0gaW5vZGUtJmd0O2lfc2l6ZTsKJiM0MzsKJiM0MzsJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQkJZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLAomIzQzOwkJCQkJCQkJICBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQkJaWYgKGVycm9yKSB7CiYjNDM7CQkJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTsKJiM0MzsJCQkJCXJldHVybiBlcnJvcjsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWVycm9yID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsCiYjNDM7CQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQkJaWYgKGVycm9yKQomIzQzOwkJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCX0KIAkJfQogCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKIAkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKQEAgLTM1Myw4NiAmIzQzOzMyMCw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCXJldHVybiAwOwogfQogCi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLSZndDtpX3NiKTsKLQlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwotCWludCBlcnJvciA9IDAsIGVycm9yMjsKLQotCWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAotCQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwotCi0JZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWlub2RlX2xvY2soaW5vZGUpOwotCi0JLyoKLQkgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy4KLQkgKi8KLQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQotCS8qCi0JICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCi0JICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAotCQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7Ci0JCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCi0JCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQljbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0KLQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwotCQkJZXJyb3IyID0KLQkJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KAotCQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IGVycm9yMjsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncykpCi0JCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQltdXRleF9sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7Ci0JaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKLQltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKLQotCWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyb3IyOwotCi0JaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKLQkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCi0JaW5vZGVfdW5sb2NrKGlub2RlKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gaGZzcGx1c19zZXRhdHRyLAogCS5nZXRhdHRyCT0gaGZzcGx1c19nZXRhdHRyLApAQCAtNDU0LDE5ICYjNDM7MzQxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5saXN0eGF0dHIJPSBoZnNwbHVzX2xpc3R4YXR0ciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi0JLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKLQkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCi19OwotCiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXVtb2RlX3QgbW9kZSkKIHsKQEAgLTUxMyw3ICYjNDM7Mzg3LDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJc2JpLSZndDtmaWxlX2NvdW50JiM0MzsmIzQzOzsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19hb3BzOwogCQloaXAtJmd0O2NsdW1wX2Jsb2NrcyA9IDE7CiAJfSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkgfHwKIAkJICAgU19JU0ZJRk8oaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtJmd0O2lfbW9kZSkpIHsKQEAgLTY1NCw3ICYjNDM7NTI4LDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWlub2RlX25vaGlnaG1lbShpbm9kZSk7Ci0JCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfYW9wczsKIAkJfSBlbHNlIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZTAwMTQ0YjI3YzE4NmEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lvbWFwLmMKQEAgLTAsMCAmIzQzOzEsMjA5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqICBsaW51eC9mcy9oZnNwbHVzL2lvbWFwLmMKJiM0MzsgKgomIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbQomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwkJCQkgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJCQkgc3RydWN0IGlvbWFwICppb21hcCwgYm9vbCBtYXlfYWxsb2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwl1MzIgYWJsb2NrLCBkYmxvY2ssIG1heF9ibG9ja3M7CiYjNDM7CWxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7CiYjNDM7CWxvZmZfdCBibG9ja19zdGFydDsKJiM0MzsJYm9vbCBpc19uZXc7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghbWF5X2FsbG9jKSB7CiYjNDM7CQkvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi8KJiM0MzsJCWlmIChpX3NpemVfcmVhZChpbm9kZSkgJmx0Oz0gb2Zmc2V0KSB7CiYjNDM7CQkJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9IT0xFOwomIzQzOwkJCWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwkJCWlvbWFwLSZndDtvZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CQkJaW9tYXAtJmd0O2xlbmd0aCA9IGxlbmd0aDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqLwomIzQzOwkJaWYgKG9mZnNldCAmIzQzOyBsZW5ndGggJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCQlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwkJCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7CiYjNDM7CQkJbGVuZ3RoID0gcm91bmRfdXAoaV9zaXplLCBibG9ja3NpemUpIC0gb2Zmc2V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWFibG9jayA9IG9mZnNldCAmZ3Q7Jmd0OyBzYmktJmd0O2FsbG9jX2Jsa3N6X3NoaWZ0OwomIzQzOwomIzQzOwllcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCAmYW1wO2RibG9jaywKJiM0MzsJCQkJICZhbXA7bWF4X2Jsb2NrcywgTlVMTCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0ICZhbXA7IChzYmktJmd0O2FsbG9jX2Jsa3N6IC0gMSk7CiYjNDM7CWFibG9ja19ieXRlcyA9IChsb2ZmX3QpbWF4X2Jsb2NrcyAmbHQ7Jmx0OyBzYmktJmd0O2FsbG9jX2Jsa3N6X3NoaWZ0OwomIzQzOwomIzQzOwlsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7CiYjNDM7CWJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7CiYjNDM7CWlzX25ldyA9IG1heV9hbGxvYyAmYW1wOyZhbXA7IGJsb2NrX3N0YXJ0ICZndDs9IGhpcC0mZ3Q7cGh5c19zaXplOwomIzQzOwlpZiAobWF5X2FsbG9jICZhbXA7JmFtcDsgIWlzX25ldyAmYW1wOyZhbXA7IG9mZnNldCAmbHQ7IGhpcC0mZ3Q7cGh5c19zaXplKQomIzQzOwkJbGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC0mZ3Q7cGh5c19zaXplIC0gb2Zmc2V0KTsKJiM0MzsKJiM0MzsJaW9tYXAtJmd0O2JkZXYgPSBzYi0mZ3Q7c19iZGV2OwomIzQzOwlpb21hcC0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwlpb21hcC0mZ3Q7bGVuZ3RoID0gbGVuZ3RoOwomIzQzOwlpb21hcC0mZ3Q7YWRkciA9IGhmc3BsdXNfYWJsb2NrX3RvX3BoeXNfYnl0ZXMoc2IsIGRibG9jaykgJiM0MzsgYWJsb2NrX29mZnNldDsKJiM0MzsJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CWlvbWFwLSZndDtmbGFncyA9IElPTUFQX0ZfTUVSR0VEOwomIzQzOwomIzQzOwlpZiAoaXNfbmV3KQomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzIHw9IElPTUFQX0ZfTkVXOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CQkJCWxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCQkJc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLAomIzQzOwkJCQkgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncywKJiM0MzsJCQkJICAgICBpb21hcCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJCQkJICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkJCSAgICAgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLAomIzQzOwkJCQkgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncywKJiM0MzsJCQkJICAgICBpb21hcCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHMgPSB7CiYjNDM7CS5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKCkKJiM0MzsgKgomIzQzOyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFyawomIzQzOyAqIChoaXAtJmd0O3BoeXNfc2l6ZSAvIGhpcC0mZ3Q7ZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsCiYjNDM7CQkJCSAgIGxvZmZfdCBsZW5ndGgsIHNzaXplX3Qgd3JpdHRlbiwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlsb2ZmX3QgZW5kOwomIzQzOwlib29sIGRpcnRpZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCF3cml0dGVuKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVuZCA9IHJvdW5kX3VwKHBvcyAmIzQzOyB3cml0dGVuLCBzYi0mZ3Q7c19ibG9ja3NpemUpOwomIzQzOwomIzQzOwlpZiAoaGlwLSZndDtwaHlzX3NpemUgJmx0OyBlbmQpIHsKJiM0MzsJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLSZndDtwaHlzX3NpemUpOwomIzQzOwkJaGlwLSZndDtwaHlzX3NpemUgPSBlbmQ7CiYjNDM7CQloaXAtJmd0O2ZzX2Jsb2NrcyA9IGVuZCAmZ3Q7Jmd0OyBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsJCWRpcnRpZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChkaXJ0aWVkKQomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiB3cml0dGVuOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4JPSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLAomIzQzOwkuaW9tYXBfZW5kCT0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKQomIzQzOyAqCiYjNDM7ICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJiMzOTtzaXplJiMzOTsuCiYjNDM7ICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS4KJiM0MzsgKi8KJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CWxvZmZfdCBzdGFydCA9IGhpcC0mZ3Q7cGh5c19zaXplOwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmbHQ7PSBzdGFydCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgc3RhcnQsIHNpemUgLSBzdGFydCwgTlVMTCwKJiM0MzsJCQkJJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrCiYjNDM7ICoKJiM0MzsgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGUKJiM0MzsgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywKJiM0MzsJCQkJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyB3cGMtJmd0O2lvbWFwLm9mZnNldCB8fAomIzQzOwkgICAgb2Zmc2V0ICZndDs9IHdwYy0mZ3Q7aW9tYXAub2Zmc2V0ICYjNDM7IHdwYy0mZ3Q7aW9tYXAubGVuZ3RoKSB7CiYjNDM7CQllcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwKJiM0MzsJCQkJCSAgICBvZmZzZXQsIGxlbiwgMCwKJiM0MzsJCQkJCSAgICAmYW1wO3dwYy0mZ3Q7aW9tYXAsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzID0gewomIzQzOwkud3JpdGViYWNrX3JhbmdlCT0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsCiYjNDM7CS53cml0ZWJhY2tfc3VibWl0CT0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oKSAtIERpcmVjdCBJL08gd3JpdGUgY29tcGxldGlvbiBoYW5kbGVyCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwKJiM0MzsJCQkJCSBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChzaXplICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZsdDsgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpOwomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHsKJiM0MzsJLmVuZF9pbwkJPSBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbywKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywKJiM0MzsJCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3BhbikKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuaCBiL2ZzL2hmc3BsdXMvaW9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMWVhMzMzM2MxZTA3NTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lvbWFwLmgKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogIGxpbnV4L2ZzL2hmc3BsdXMvaW9tYXAuaAomIzQzOyAqCiYjNDM7ICogaW9tYXAgY2FsbGJhY2sgZGVjbGFyYXRpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfTElOVVhfSEZTUExVU19JT01BUF9ICiYjNDM7I2RlZmluZSBfTElOVVhfSEZTUExVU19JT01BUF9ICiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzOwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTsKJiM0MztpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsCiYjNDM7CQkJCXN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKaW5kZXggNDVmYjRjOWZmOWY1ZWUuLjE0MTdlMTlkOTRiY2VjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaApAQCAtMTcxLDE4ICYjNDM7MTcxLDIyIEBAIGVudW0gewogCUhGU19YQVRUUl9OQU1FLAogfTsKIAomIzQzOyNkZWZpbmUgSEZTX0ZPUktfRVhURU5UX0NPVU5UCSgzKQomIzQzOwogc3RydWN0IGhmc19leHRlbnQgewogCV9fYmUxNiBibG9jazsKIAlfX2JlMTYgY291bnQ7CiB9OwotdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1szXTsKJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07CiYjNDM7CiYjNDM7I2RlZmluZSBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UCSg4KQogCiAvKiBBIHNpbmdsZSBjb250aWd1b3VzIGFyZWEgb2YgYSBmaWxlICovCiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgewogCV9fYmUzMiBzdGFydF9ibG9jazsKIAlfX2JlMzIgYmxvY2tfY291bnQ7CiB9IF9fcGFja2VkOwotdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdOwomIzQzO3R5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1tIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXTsKIAogLyogSW5mb3JtYXRpb24gZm9yIGEgJiMzNDtGb3JrJiMzNDsgaW4gYSBmaWxlICovCiBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzU5CgkJCQkJCQlvdXRwdXQ6IDI4MAoJCQkJCQkJdGhvdWdodHM6IDEyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSEZTJiM0MzsgaW9tYXAgQ29udmVyc2lvbjogRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCBmdW5kYW1lbnRhbGx5IHJlZmFjdG9ycyB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSwgcmVwbGFjaW5nIHRoZSBsZWdhY3kgSS9PIHdpdGggaW9tYXAuIFRoaXMgaXMgYSBiaWcgZGVhbDsgd2UmIzM5O3JlIHRhbGtpbmcgY29yZSBmaWxlIEkvTyBvcGVyYXRpb25zIOKAkyByZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUg4oCTIGFsbCBiZWluZyByZWRpcmVjdGVkIHRocm91Z2ggYSBuZXcgcGF0aC4gVGhhdCYjMzk7cyBhIGh1Z2UgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucywgc28gZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGxzLCBzbyB0aGF0IG1ha2VzIHRoaW5ncyBzdHJhaWdodGZvcndhcmQuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBXZSYjMzk7dmUgZ290IHR3byBuZXcgZmlsZXM6IGBpb21hcC5jYCBhbmQgYGZpbGUuY2AuIGBpb21hcC5jYCBpbXBsZW1lbnRzIHRoZSBpb21hcCBvcGVyYXRpb25zOiBgX19oZnNwbHVzX2lvbWFwX2JlZ2luYCwgYGhmc3BsdXNfaW9tYXBfYmVnaW5gLCBgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbmAsIGBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZGAsIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYCwgYGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9kaW9fZW5kX2lvYCwgYW5kIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLiBUaGVzZSBhcmUgdGhlIGRpcmVjdCBpb21hcCBpbXBsZW1lbnRhdGlvbnMuCgpUaGVuIHRoZXJlJiMzOTtzIGBmaWxlLmNgLCB3aGljaCBub3cgaG91c2VzIHRoZSBmaWxlIG9wZXJhdGlvbnMuIFdlIGhhdmU6IGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfcmVsZWFzZWAsIGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZWAsIGBoZnNwbHVzX2Rpb193cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJgLCBhbmQgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgcG9pbnRzIGZvciB0ZXN0aW5nIHRoZSBuZXcgSS9PIGZsb3cuCgpCZXlvbmQgdGhvc2UsIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIGluIGBleHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgLCBgaGZzcGx1c19tYXBfZXh0ZW50YCwgYGhmc3BsdXNfZ2V0X2Jsb2NrYCwgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgLiAgYGJpdG1hcC5jYCBhbHNvIGdldHMgc29tZSBhdHRlbnRpb24gd2l0aCBgaGZzcGx1c19ibG9ja19hbGxvY2F0ZWAgYW5kIGBoZnNwbHVzX2Jsb2NrX2ZyZWVgLCBzbyB0aGVzZSBhcmUgYWxzbyByZWxldmFudCwgZXNwZWNpYWxseSBzaW5jZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBjYW4gYmUgdHJpY2t5LgoKVG8gcnVuIHRoaXMsIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgaXMgYENPTkZJR19IRlNQTFVTX0ZTYCwgd2hpY2ggaXMgdGhlIG1haW4gSEZTJiM0MzsgY29uZmlnLgoKU28sIGxldCYjMzk7cyBkaXN0aWxsIHRoYXQgZG93biB0byBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzoKCiogICBgaGZzcGx1c19tYXBfZXh0ZW50YAoqICAgYGhmc3BsdXNfaW9tYXBfYmVnaW5gCiogICBgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbmAKKiAgIGBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZGAKKiAgIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYAoqICAgYGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlYAoqICAgYGhmc3BsdXNfZmlsZV93cml0ZV9kaW9fZW5kX2lvYAoqICAgYGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVgCiogICBgaGZzcGx1c19kaW9fd3JpdGVfaXRlcmAKKiAgIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYAoqICAgYGhmc3BsdXNfZmlsZV9sbHNlZWtgCiogICBgaGZzcGx1c19maWxlX2ZzeW5jYAoqICAgYGhmc3BsdXNfYmxvY2tfYWxsb2NhdGVgCiogICBgaGZzcGx1c19ibG9ja19mcmVlYAoKRXZlcnl0aGluZyBwb2ludHMgdG8gdGhpcyBiZWluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFdlIG5lZWQgdG8gdGhvcm91Z2hseSB0ZXN0IGV2ZXJ5IGFzcGVjdCBvZiB0aGUgbmV3IGlvbWFwIGludGVncmF0aW9uLCBmcm9tIGJhc2ljIHJlYWRzIGFuZCB3cml0ZXMgdG8gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgbGlrZSB0cnVuY2F0ZSwgc3luYywgYW5kIGJsb2NrIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRvIGVuc3VyZSB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSByZW1haW5zIHN0YWJsZSBhbmQgY29ycmVjdCB1bmRlciB0aGUgbmV3IGlvbWFwIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfbWFwX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZV9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9jb250X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlYmFja19yYW5nZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfbGxzZWVrJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9mc3luYyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfYmxvY2tfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udmVydHMgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX21hcF9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfZW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8mIzM0OywKICAgICYjMzQ7aGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2xsc2VlayYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibG9ja19hbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMDA6Mzg6NDIuNjM5MDMxMDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NTY3MjMyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9lbmRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRcIixcbiAgICBcImhmc3BsdXNfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pb1wiLFxuICAgIFwiaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZVwiLFxuICAgIFwiaGZzcGx1c19kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9sbHNlZWtcIixcbiAgICBcImhmc3BsdXNfZmlsZV9mc3luY1wiLFxuICAgIFwiaGZzcGx1c19ibG9ja19hbGxvY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19ibG9ja19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAwOjM4OjQyLjYzOTAzOTE0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4OTQ1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODU2ZmU3NmY0MWUwOTY0ZTBiNGRjMjdiMzAyMTcwMDM5NjA4NTdkZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAwMDozODo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL0tjb25maWcgYi9mcy9oZnNwbHVzL0tjb25maWdcXG5pbmRleCBjYTg0MDFjYjY5NTRkNS4uYjQ0MzJjNjRkYjNiZWMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9LY29uZmlnXFxuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXFxuQEAgLTUsNyArNSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXFxuIFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiBcXHRzZWxlY3QgTkxTXFxuIFxcdHNlbGVjdCBOTFNfVVRGOFxcbi1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbitcXHRzZWxlY3QgRlNfSU9NQVBcXG4gXFx0aGVscFxcbiBcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxcbiBcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG5pbmRleCBmMmE5YWU2OTdlODExNC4uM2RkZWE2OWE5YzY5ODMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9NYWtlZmlsZVxcbisrKyBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG5AQCAtNSw4ICs1LDkgQEBcXG4gXFxuIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSArPSBoZnNwbHVzLm9cXG4gXFxuLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXFxcXG4tXFx0XFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxcXFxuK1xcdFxcdGNhdGFsb2cubyBkaXIubyBidHJlZS5vIGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gXFxcXFxcbitcXHRcXHR1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbiBcXHRcXHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cXG4gXFxuICMgS1VuaXQgdGVzdHNcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcXG5pbmRleCAxYjNhZjhjODdjYWRiNS4uNTcxNjUyZmJhZWRhM2IgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuY1xcbisrKyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcXG5AQCAtMzksNiArMzksNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbitcXHRsb2NrX3BhZ2UocGFnZSk7XFxuIFxcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcXG4gXFx0aSA9IG9mZnNldCAlIDMyO1xcbkBAIC03NSw2ICs3Niw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRcXHRjdXJyKys7XFxuIFxcdFxcdH1cXG4gXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4gXFx0XFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcXG4gXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSBzaXplKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtODQsNiArODYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXHRcXHRsb2NrX3BhZ2UocGFnZSk7XFxuIFxcdFxcdGN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRcXHRpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKVxcbiBcXHRcXHRcXHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XFxuQEAgLTk4LDYgKzEwMSw5IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRzdGFydCA9IG9mZnNldCArIChjdXJyIC0gcHB0cikgKiAzMiArIGk7XFxuIFxcdGlmIChzdGFydCBcXHUwMDNlPSBzaXplKSB7XFxuIFxcdFxcdGhmc19kYmcoXFxcImJpdG1hcCBmdWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4rXFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHQvKiBkbyBhbnkgcGFydGlhbCB1MzIgYXQgdGhlIHN0YXJ0ICovXFxuQEAgLTEyOCw2ICsxMzQsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0fVxcbiBcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4gXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4gXFx0XFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcXG4gXFx0XFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUyxcXG4gXFx0XFx0XFx0XFx0XFx0IE5VTEwpO1xcbkBAIC0xMzUsNiArMTQyLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuIFxcdFxcdFxcdHN0YXJ0ID0gc2l6ZTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRcXHRjdXJyID0gcHB0cjtcXG4gXFx0XFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xcbkBAIC0xNTIsNiArMTYwLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuIFxcdCpjdXJyID0gY3B1X3RvX2JlMzIobik7XFxuIFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHQqbWF4ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaSAtIHN0YXJ0O1xcbiBcXHRzYmktXFx1MDAzZWZyZWVfYmxvY2tzIC09ICptYXg7XFxuIFxcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xcbkBAIC0xODUsNiArMTk0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXFxuIFxcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xcbiBcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbiBcXHRcXHRnb3RvIGthYm9vbTtcXG4rXFx0bG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XFxuIFxcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcXG5AQCAtMjE2LDkgKzIyNiwxMSBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdFxcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgKytwbnIsIE5VTEwpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbiBcXHRcXHRcXHRnb3RvIGthYm9vbTtcXG4rXFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRcXHRjdXJyID0gcHB0cjtcXG4gXFx0XFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xcbkBAIC0yMzIsNiArMjQ0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXFxuIG91dDpcXG4gXFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuIFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuIFxcdHNiaS1cXHUwMDNlZnJlZV9ibG9ja3MgKz0gbGVuO1xcbiBcXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzYmktXFx1MDAzZWFsbG9jX211dGV4KTtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbmluZGV4IDgxM2U2OGI4ZWNkNjU0Li44ZjdmNTYwY2VjNjQyNyAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4gXFxuIC8qIENvbXBhcmUgdHdvIGV4dGVudHMga2V5cywgcmV0dXJucyAwIG9uIHNhbWUsIHBvcy9uZWcgZm9yIGRpZmZlcmVuY2UgKi9cXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxcbkBAIC00OCwxOCArNDksMjkgQEAgc3RhdGljIHZvaWQgaGZzcGx1c19leHRfYnVpbGRfa2V5KGhmc3BsdXNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLFxcbiBcXHRrZXktXFx1MDAzZWV4dC5wYWQgPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYpXFxuKy8qXFxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xcbisgKlxcbisgKiBGaW5kIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgZm9yICdvZmYnIHdpdGhpbiBhbiA4LWVudHJ5XFxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcXG4rICogdGhhdCBhcmUgY29udGlndW91cyB3aXRoIGl0IGluIHRoZSBzYW1lIGV4dGVudCBlbnRyeS5cXG4rICovXFxuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcXG4rXFx0XFx0XFx0XFx0IHUzMiAqZGJsb2NrKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHR1MzIgY291bnQ7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgODsgZXh0KyssIGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKykge1xcbiBcXHRcXHRjb3VudCA9IGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlYmxvY2tfY291bnQpO1xcbi1cXHRcXHRpZiAob2ZmIFxcdTAwM2MgY291bnQpXFxuLVxcdFxcdFxcdHJldHVybiBiZTMyX3RvX2NwdShleHQtXFx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcXG4rXFx0XFx0aWYgKG9mZiBcXHUwMDNjIGNvdW50KSB7XFxuK1xcdFxcdFxcdCpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtXFx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcXG4rXFx0XFx0XFx0cmV0dXJuIGNvdW50IC0gb2ZmO1xcbitcXHRcXHR9XFxuIFxcdFxcdG9mZiAtPSBjb3VudDtcXG4gXFx0fVxcbiBcXHQvKiBwYW5pYz8gKi9cXG4rXFx0KmRibG9jayA9IDA7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuIFxcdGludCBpO1xcbiBcXHR1MzIgY291bnQgPSAwO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDg7IGV4dCsrLCBpKyspXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQrKywgaSsrKVxcbiBcXHRcXHRjb3VudCArPSBiZTMyX3RvX2NwdShleHQtXFx1MDAzZWJsb2NrX2NvdW50KTtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuQEAgLTIyMywzNyArMjM1LDQ2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuIFxcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xcbi1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcXG4rLypcXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcXG4rICpcXG4rICogTG9va3MgdXAgdGhlIGFsbG9jYXRpb24gYmxvY2sgYXQgJ2FibG9jaycgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlXFxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cXG4rICogJ2NyZWF0ZScgaXMgc2V0IGFuZCAnYWJsb2NrJyBsaWVzIGJleW9uZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uLlxcbisgKlxcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcXG4rICogYW5kICptYXhfYmxvY2tzIGlzIHRoZSBudW1iZXIgb2YgZnVydGhlciBhbGxvY2F0aW9uIGJsb2NrcyB0aGF0IGFyZVxcbisgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeVxcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXFxuKyAqIHJlbWFpbmluZyBhbGxvY2F0aW9uIHdoZW4gdGhlIGZvcmsgaXMgZnJhZ21lbnRlZCBhY3Jvc3Mgc2V2ZXJhbFxcbisgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGVcXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXFxuKyAqL1xcbitpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXFxuK1xcdFxcdFxcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcXG4ge1xcbi1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbiBcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbi1cXHRpbnQgcmVzID0gLUVJTztcXG4tXFx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xcbi1cXHRzZWN0b3JfdCBzZWN0b3I7XFxuLVxcdGludCB3YXNfZGlydHkgPSAwO1xcbitcXHRpbnQgd2FzX2RpcnR5O1xcbitcXHRpbnQgcmVzO1xcbiBcXG4tXFx0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cXG4tXFx0YWJsb2NrID0gaWJsb2NrIFxcdTAwM2VcXHUwMDNlIHNiaS1cXHUwMDNlZnNfc2hpZnQ7XFxuK1xcdGlmIChiYWxsb2MpXFxuK1xcdFxcdCpiYWxsb2MgPSBmYWxzZTtcXG4gXFxuLVxcdGlmIChpYmxvY2sgXFx1MDAzZT0gaGlwLVxcdTAwM2Vmc19ibG9ja3MpIHtcXG4rXFx0aWYgKGFibG9jayBcXHUwMDNlPSBoaXAtXFx1MDAzZWFsbG9jX2Jsb2Nrcykge1xcbiBcXHRcXHRpZiAoIWNyZWF0ZSlcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdGlmIChpYmxvY2sgXFx1MDAzZSBoaXAtXFx1MDAzZWZzX2Jsb2NrcylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdFxcdGlmIChhYmxvY2sgXFx1MDAzZT0gaGlwLVxcdTAwM2VhbGxvY19ibG9ja3MpIHtcXG4tXFx0XFx0XFx0cmVzID0gaGZzcGx1c19maWxlX2V4dGVuZChpbm9kZSwgZmFsc2UpO1xcbi1cXHRcXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZVxcbi1cXHRcXHRjcmVhdGUgPSAwO1xcbitcXHRcXHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdGlmIChiYWxsb2MpXFxuK1xcdFxcdFxcdCpiYWxsb2MgPSB0cnVlO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoYWJsb2NrIFxcdTAwM2MgaGlwLVxcdTAwM2VmaXJzdF9ibG9ja3MpIHtcXG4tXFx0XFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXFx1MDAzZWZpcnN0X2V4dGVudHMsIGFibG9jayk7XFxuLVxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0XFx0Km1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cXHUwMDNlZmlyc3RfZXh0ZW50cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhYmxvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGJsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gSEZTUExVU19FWFRfQ05JRClcXG5AQCAtMjcyLDExICsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoaXAtXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuLVxcdGRibG9jayA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0YWJsb2NrIC0gaGlwLVxcdTAwM2VjYWNoZWRfc3RhcnQpO1xcbitcXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBhYmxvY2sgLSBoaXAtXFx1MDAzZWNhY2hlZF9zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBkYmxvY2spO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmhpcC1cXHUwMDNlZXh0ZW50c19sb2NrKTtcXG4gXFxuLWRvbmU6XFxuK1xcdGlmICh3YXNfZGlydHkpXFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovXFxuK2ludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuK1xcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcXG4rXFx0c2VjdG9yX3Qgc2VjdG9yO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cXG4rXFx0YWJsb2NrID0gaWJsb2NrIFxcdTAwM2VcXHUwMDNlIHNiaS1cXHUwMDNlZnNfc2hpZnQ7XFxuK1xcbitcXHRpZiAoaWJsb2NrIFxcdTAwM2U9IGhpcC1cXHUwMDNlZnNfYmxvY2tzKSB7XFxuK1xcdFxcdGlmICghY3JlYXRlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKGlibG9jayBcXHUwMDNlIGhpcC1cXHUwMDNlZnNfYmxvY2tzKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fSBlbHNlXFxuK1xcdFxcdGNyZWF0ZSA9IDA7XFxuK1xcbitcXHRyZXMgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgY3JlYXRlLCBcXHUwMDI2ZGJsb2NrLCBcXHUwMDI2bWF4X2Jsb2NrcyxcXG4rXFx0XFx0XFx0XFx0ICBOVUxMKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuIFxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBpYmxvY2sgJWxsdSAtIGRibG9jayAldVxcXFxuXFxcIixcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcXG4gXFxuQEAgLTI5MCw5ICszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbiBcXHRcXHRoaXAtXFx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuIFxcdFxcdGhpcC1cXHUwMDNlZnNfYmxvY2tzKys7XFxuIFxcdFxcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4tXFx0fVxcbi1cXHRpZiAoY3JlYXRlIHx8IHdhc19kaXJ0eSlcXG4gXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTU1MywyMCArNjA2LDMyIEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXFx1MDAzZXBoeXNfc2l6ZSwgaW5vZGUtXFx1MDAzZWlfc2l6ZSk7XFxuIFxcbiBcXHRpZiAoaW5vZGUtXFx1MDAzZWlfc2l6ZSBcXHUwMDNlIGhpcC1cXHUwMDNlcGh5c19zaXplKSB7XFxuLVxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0XFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcXG4tXFx0XFx0bG9mZl90IHNpemUgPSBpbm9kZS1cXHUwMDNlaV9zaXplO1xcbitcXHRcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXHRcXHRcXHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0XFx0XFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcXG4rXFxuK1xcdFxcdFxcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBpbm9kZS1cXHUwMDNlaV9zaXplLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZmb2xpbywgXFx1MDAyNmZzZGF0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdFxcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUsIDAsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZvbGlvLCBmc2RhdGEpO1xcbitcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Zm9saW8sIFxcdTAwMjZmc2RhdGEpO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvLCBmc2RhdGEpO1xcbi1cXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9IGVsc2UgaWYgKGlub2RlLVxcdTAwM2VpX3NpemUgPT0gaGlwLVxcdTAwM2VwaHlzX3NpemUpXFxuIFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjhjOTJlMTQ1Mjk1Y2ExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXFxuQEAgLTAsMCArMSwzMDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogIGxpbnV4L2ZzL2hmc3BsdXMvZmlsZS5jXFxuKyAqXFxuKyAqIEZpbGUgb3BlcmF0aW9uczogb3Blbi9yZWxlYXNlL2ZzeW5jIGFuZCBpb21hcC1iYXNlZCByZWFkL3dyaXRlL3NlZWtcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW91bnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiaGZzcGx1c19mcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaGZzcGx1c19yYXcuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImlvbWFwLmhcXFwiXFxuK1xcbitzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbitcXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuK1xcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0xBUkdFRklMRSkgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2UgTUFYX05PTl9MRlMpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KTtcXG4rXFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcbitcXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcXG4rXFx0XFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2Vyc3JjX2lub2RlO1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2SEZTUExVU19JKGlub2RlKS1cXHUwMDNlb3BlbmNudCkpIHtcXG4rXFx0XFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdFxcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XFxuK1xcdFxcdGlmIChpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IFNfREVBRCkge1xcbitcXHRcXHRcXHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXFx1MDAzZWlfaW5vLFxcbitcXHRcXHRcXHRcXHRcXHQgICBIRlNQTFVTX1NCKHNiKS1cXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XFxuK1xcdFxcdFxcdGhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuK1xcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXFx1MDAzZXNfdmhkcjtcXG4rXFx0aW50IGVycm9yID0gMCwgZXJyb3IyO1xcbitcXG4rXFx0aGZzX2RiZyhcXFwiaW5vZGUtXFx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xcbitcXG4rXFx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxcbitcXHQgKi9cXG4rXFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWNhdF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IyID1cXG4rXFx0XFx0XFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWV4dF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzYmktXFx1MDAzZWF0dHJfdHJlZSkge1xcbitcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRlcnJvcjIgPVxcbitcXHRcXHRcXHRcXHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc2JpLVxcdTAwM2VhdHRyX3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbitcXHRcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdFxcdHByX2VycihcXFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koc2JpLVxcdTAwM2VhbGxvY19maWxlKS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWFsbG9jX2ZpbGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK1xcdFxcdGlmICghZXJyb3IpXFxuK1xcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4rXFx0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4rXFxuK1xcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFxcdTAwMjZzYmktXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcXG4rICogdGFpbCBvZiBhIHdyaXRlIHRoYXQgaW9tYXBfZGlvX3J3KCkgY291bGQgbm90IHBlcmZvcm0gZGlyZWN0bHlcXG4rICogKHVuYWxpZ25lZCB0YWlsLCBvciBubyBibG9ja3MgY291bGQgYmUgbWFwcGVkIHdpdGhvdXQgYWxsb2NhdGlvblxcbisgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbit7XFxuK1xcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MsIGVuZDtcXG4rXFx0c3NpemVfdCB3cml0dGVuO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNj0gfklPQ0JfRElSRUNUO1xcbitcXG4rXFx0d3JpdHRlbiA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXG4rXFx0ZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgd3JpdHRlbiAtIDE7XFxuK1xcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQsIGVuZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHQgZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIHdyaXR0ZW47XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSxcXG4rXFx0XFx0XFx0ICAgXFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHQgICBcXHUwMDI2aGZzcGx1c193cml0ZV9kaW9fb3BzLFxcbitcXHRcXHRcXHQgICAwLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0ZWxzZSBpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbitcXHRcXHRzc2l6ZV90IHdyaXR0ZW47XFxuK1xcbitcXHRcXHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcXG4rXFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gd3JpdHRlbjtcXG4rXFx0XFx0cmV0ICs9IHdyaXR0ZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRsb2ZmX3QgdG90YWxfY2FwYWNpdHk7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcbitcXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHRvdGFsX2NhcGFjaXR5ID0gKGxvZmZfdClzYmktXFx1MDAzZXRvdGFsX2Jsb2NrcyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XFxuK1xcdFxcdHJldCA9IC1FRkJJRztcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGZpbGVfbW9kaWZpZWQoZmlsZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbitcXHRcXHRsb2ZmX3Qgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuK1xcdFxcdGxvZmZfdCBuZXdfc2l6ZSA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFxuK1xcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSB7XFxuK1xcdFxcdFxcdG5ld19zaXplID0gbWF4X3QobG9mZl90LCBuZXdfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VwaHlzX3NpemUpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcXG4rXFx0XFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fSBlbHNlIGlmICgoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcGh5c19zaXplIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcGh5c19zaXplKTtcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbitcXHRcXHRyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpO1xcbitcXHRlbHNlIHtcXG4rXFx0XFx0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIE5VTEwpO1xcbitcXHR9XFxuK1xcbit1bmxvY2s6XFxuK1xcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcXG4rXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSB7XFxuK1xcdFxcdGZpbGVfYWNjZXNzZWQoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMsXFxuK1xcdFxcdFxcdFxcdCAgIE5VTEwsIDAsIE5VTEwsIDApO1xcbitcXHR9IGVsc2VcXG4rXFx0XFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcXG4rXFxuK1xcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3Q7XFxuK1xcbitcXHRzd2l0Y2ggKHdoZW5jZSkge1xcbitcXHRjYXNlIFNFRUtfSE9MRTpcXG4rXFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXHRcXHRvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rXFx0XFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNFRUtfREFUQTpcXG4rXFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXHRcXHRvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rXFx0XFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhieXRlcyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XFxuK1xcdC5sbHNlZWtcXHRcXHQ9IGhmc3BsdXNfZmlsZV9sbHNlZWssXFxuK1xcdC5yZWFkX2l0ZXJcXHQ9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsXFxuK1xcdC53cml0ZV9pdGVyXFx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcixcXG4rXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4rXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbitcXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbitcXHQuZnN5bmNcXHRcXHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcXG4rXFx0Lm9wZW5cXHRcXHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxcbitcXHQucmVsZWFzZVxcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXFxuK1xcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG5pbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uYjljYWRiYzZjNmQyMTYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbkBAIC0xNzUsNiArMTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4gfVxcbiBcXG4rLypcXG4rICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAnZGJsb2NrJyBvbiB0aGUgdm9sdW1lLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBsb2ZmX3QgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBkYmxvY2spXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuK1xcdGxvZmZfdCBwaHlzX2J5dGVzO1xcbitcXG4rXFx0cGh5c19ieXRlcyA9IGRibG9jaztcXG4rXFx0cGh5c19ieXRlcyBcXHUwMDNjXFx1MDAzYz0gc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFx0cGh5c19ieXRlcyArPSBzYmktXFx1MDAzZWJsb2Nrb2Zmc2V0O1xcbitcXHRwaHlzX2J5dGVzIFxcdTAwM2NcXHUwMDNjPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4rXFxuK1xcdHJldHVybiBwaHlzX2J5dGVzO1xcbit9XFxuIFxcbiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcXG4gXFx0YXRvbWljX3Qgb3BlbmNudDtcXG5AQCAtNDM2LDYgKzQ1Miw4IEBAIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcXG4gaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xcbitpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXFxuK1xcdFxcdFxcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7XFxuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcXG4gaW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KTtcXG5AQCAtNDQzLDYgKzQ2MSw3IEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gLyogaW5vZGUuYyAqL1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucztcXG4gXFxuQEAgLTQ2MiwxMiArNDgxLDE1IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXFxuIFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcXVlcnlfZmxhZ3MpO1xcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuLVxcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcbisvKiBmaWxlLmMgKi9cXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4rXFx0XFx0ICAgICAgIGludCBkYXRhc3luYyk7XFxuK1xcbiAvKiBpb2N0bC5jICovXFxuIGxvbmcgaGZzcGx1c19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jXFxuaW5kZXggMWM1N2M4NzNmMDVkNjEuLjFmMTY2NjNlYWRiMDk1IDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbisrKyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbkBAIC0xOCwxMiArMTgsMTQgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZWF0dHIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaGZzcGx1c19mcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaGZzcGx1c19yYXcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhhdHRyLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5oXFxcIlxcbiBcXG4tc3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIH1cXG5AQCAtMTIwLDY2ICsxMjIsNyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaylcXG4gXFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi17XFxuLVxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4tXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRsb2ZmX3QgaXNpemU7XFxuLVxcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xcbi1cXHRsb2ZmX3QgZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgY291bnQ7XFxuLVxcdHNzaXplX3QgcmV0O1xcbi1cXG4tXFx0LypcXG4tXFx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cXG4tXFx0ICogRm9yIGRpcmVjdCB3cml0ZXMgYmV5b25kIEVPRiwgZXhwYW5kIHRoZSBmaWxlIGZpcnN0Llxcbi1cXHQgKi9cXG4tXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbi1cXHRcXHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xcbi1cXHRcXHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XFxuLVxcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxcbi1cXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuLVxcbi1cXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdFxcdHN0YXJ0X29mZiA9IGlzaXplO1xcbi1cXHRcXHRlbmRfb2ZmID0gKGVuZCBcXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcXG4tXFxuLVxcdFxcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdFxcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0XFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcbi1cXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSW4gY2FzZSBvZiBlcnJvciBleHRlbmRpbmcgd3JpdGUgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3XFxuLVxcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXFx1MDAyNlxcdTAwMjYgcmV0IFxcdTAwM2MgMCkpIHtcXG4tXFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuLVxcbi1cXHRcXHRpZiAoZW5kIFxcdTAwM2UgaXNpemUpXFxuLVxcdFxcdFxcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitzdGF0aWMgaW50IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xcbkBAIC0xODgsOCArMTMxLDggQEAgc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbiBcXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbiBcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuLVxcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuLVxcdC53cml0ZXBhZ2VzXFx0PSBoZnNwbHVzX3dyaXRlcGFnZXMsXFxuK1xcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX2xlZ2FjeV9yZWFkX2ZvbGlvLFxcbitcXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c19sZWdhY3lfd3JpdGVwYWdlcyxcXG4gXFx0LndyaXRlX2JlZ2luXFx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxcbiBcXHQud3JpdGVfZW5kXFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW9cXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxcbkBAIC0xOTcsMTggKzE0MCw1OSBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcXG4gXFx0LnJlbGVhc2VfZm9saW9cXHQ9IGhmc3BsdXNfcmVsZWFzZV9mb2xpbyxcXG4gfTtcXG4gXFxuLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xcbitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzID0ge1xcbiBcXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbiBcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuLVxcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX2xlZ2FjeV9yZWFkX2ZvbGlvLFxcbiBcXHQud3JpdGVfYmVnaW5cXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmRcXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxcbiBcXHQuYm1hcFxcdFxcdD0gaGZzcGx1c19ibWFwLFxcbi1cXHQuZGlyZWN0X0lPXFx0PSBoZnNwbHVzX2RpcmVjdF9JTyxcXG4tXFx0LndyaXRlcGFnZXNcXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcXG4rXFx0LndyaXRlcGFnZXNcXHQ9IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMsXFxuIFxcdC5taWdyYXRlX2ZvbGlvXFx0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXFxuK3tcXG4rXFx0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdD0gbWFwcGluZy1cXHUwMDNlaG9zdCxcXG4rXFx0XFx0LndiY1xcdD0gd2JjLFxcbitcXHRcXHQub3BzXFx0PSBcXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4re1xcbitcXHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XFxuK1xcdC5yZWFkX2ZvbGlvXFx0XFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkYWhlYWRcXHRcXHQ9IGhmc3BsdXNfcmVhZGFoZWFkLFxcbitcXHQud3JpdGVwYWdlc1xcdFxcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQuZGlydHlfZm9saW9cXHRcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxcbitcXHQuYm1hcFxcdFxcdFxcdD0gaGZzcGx1c19hb3BfYm1hcCxcXG4rXFx0Lm1pZ3JhdGVfZm9saW9cXHRcXHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcXG4rXFx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZVxcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxcbitcXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXFx0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG4rXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbitcXHQuc3dhcF9hY3RpdmF0ZVxcdFxcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxcbit9O1xcbitcXG4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuIFxcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxcbiBcXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcXG5AQCAtMjY4LDM1ICsyNTIsNiBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZ2V0X3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAtRUlPO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi17XFxuLVxcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbi1cXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuLVxcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0xBUkdFRklMRSkgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2UgTUFYX05PTl9MRlMpXFxuLVxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbi1cXHRhdG9taWNfaW5jKFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLXtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXFxuLVxcdFxcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcnNyY19pbm9kZTtcXG4tXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZW9wZW5jbnQpKSB7XFxuLVxcdFxcdGlub2RlX2xvY2soaW5vZGUpO1xcbi1cXHRcXHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHRcXHRpZiAoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX0RFQUQpIHtcXG4tXFx0XFx0XFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVxcdTAwM2VpX2lubyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgSEZTUExVU19TQihzYiktXFx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xcbi1cXHRcXHRcXHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbiB7XFxuQEAgLTMxMSwxMCArMjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHQgICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4gXFx0XFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xcbiBcXHRcXHRpZiAoYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRcXHRcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXHRcXHRcXHRcXHRsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS1cXHUwMDNlaV9zaXplO1xcbitcXG4rXFx0XFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHItXFx1MDAzZWlhX3NpemUpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHR0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4gXFx0XFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcXG5AQCAtMzUzLDg2ICszMjAsNiBAQCBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tXFx0XFx0ICAgICAgIGludCBkYXRhc3luYylcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbi1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cXHUwMDNlc192aGRyO1xcbi1cXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XFxuLVxcbi1cXHRoZnNfZGJnKFxcXCJpbm9kZS1cXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXFxcblxcXCIsXFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XFxuLVxcbi1cXHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxcbi1cXHQgKi9cXG4tXFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cXG4tXFx0ICovXFxuLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWNhdF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4tXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0ZXJyb3IyID1cXG4tXFx0XFx0XFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWV4dF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tXFx0XFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChzYmktXFx1MDAzZWF0dHJfdHJlZSkge1xcbi1cXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRlcnJvcjIgPVxcbi1cXHRcXHRcXHRcXHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2JpLVxcdTAwM2VhdHRyX3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbi1cXHRcXHRcXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdHByX2VycihcXFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxcXG5cXFwiKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koc2JpLVxcdTAwM2VhbGxvY19maWxlKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWFsbG9jX2ZpbGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbi1cXHR9XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4tXFx0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4tXFxuLVxcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRlcnJvciA9IGVycm9yMjtcXG4tXFxuLVxcdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFxcdTAwMjZzYmktXFx1MDAzZWZsYWdzKSlcXG4tXFx0XFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbi1cXG4tXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tXFxuLVxcdHJldHVybiBlcnJvcjtcXG4tfVxcbi1cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbiBcXHQuc2V0YXR0clxcdD0gaGZzcGx1c19zZXRhdHRyLFxcbiBcXHQuZ2V0YXR0clxcdD0gaGZzcGx1c19nZXRhdHRyLFxcbkBAIC00NTQsMTkgKzM0MSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lmxpc3R4YXR0clxcdD0gaGZzcGx1c19saXN0eGF0dHIsXFxuIH07XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tXFx0LnJlYWRfaXRlclxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4tXFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbi1cXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbi1cXHQuc3BsaWNlX3JlYWRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuLVxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuLVxcdC5mc3luY1xcdFxcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxcbi1cXHQub3BlblxcdFxcdD0gaGZzcGx1c19maWxlX29wZW4sXFxuLVxcdC5yZWxlYXNlXFx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcXG4tXFx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcXG4tfTtcXG4tXFxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbkBAIC01MTMsNyArMzg3LDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0c2JpLVxcdTAwM2VmaWxlX2NvdW50Kys7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xcbiBcXHRcXHRoaXAtXFx1MDAzZWNsdW1wX2Jsb2NrcyA9IDE7XFxuIFxcdH0gZWxzZSBpZiAoU19JU0NIUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8XFxuIFxcdFxcdCAgIFNfSVNGSUZPKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuQEAgLTY1NCw3ICs1MjgsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIFxcdFxcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbitcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7XFxuIFxcdFxcdFxcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXFx1MDAzZWlfbW9kZSxcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5jIGIvZnMvaGZzcGx1cy9pb21hcC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTAwMTQ0YjI3YzE4NmFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5jXFxuQEAgLTAsMCArMSwyMDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogIGxpbnV4L2ZzL2hmc3BsdXMvaW9tYXAuY1xcbisgKlxcbisgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBib29sIG1heV9hbGxvYylcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1heF9ibG9ja3M7XFxuK1xcdGxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7XFxuK1xcdGxvZmZfdCBibG9ja19zdGFydDtcXG4rXFx0Ym9vbCBpc19uZXc7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIW1heV9hbGxvYykge1xcbitcXHRcXHQvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi9cXG4rXFx0XFx0aWYgKGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNjPSBvZmZzZXQpIHtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xcbitcXHRcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xcbitcXHRcXHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdFxcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XFxuK1xcdFxcdFxcdGxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRhYmxvY2sgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2Ugc2JpLVxcdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcXG4rXFxuK1xcdGVyciA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBtYXlfYWxsb2MsIFxcdTAwMjZkYmxvY2ssXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2bWF4X2Jsb2NrcywgTlVMTCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFxcdTAwMjYgKHNiaS1cXHUwMDNlYWxsb2NfYmxrc3ogLSAxKTtcXG4rXFx0YWJsb2NrX2J5dGVzID0gKGxvZmZfdCltYXhfYmxvY2tzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XFxuK1xcbitcXHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7XFxuK1xcdGJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7XFxuK1xcdGlzX25ldyA9IG1heV9hbGxvYyBcXHUwMDI2XFx1MDAyNiBibG9ja19zdGFydCBcXHUwMDNlPSBoaXAtXFx1MDAzZXBoeXNfc2l6ZTtcXG4rXFx0aWYgKG1heV9hbGxvYyBcXHUwMDI2XFx1MDAyNiAhaXNfbmV3IFxcdTAwMjZcXHUwMDI2IG9mZnNldCBcXHUwMDNjIGhpcC1cXHUwMDNlcGh5c19zaXplKVxcbitcXHRcXHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgaGlwLVxcdTAwM2VwaHlzX3NpemUgLSBvZmZzZXQpO1xcbitcXG4rXFx0aW9tYXAtXFx1MDAzZWJkZXYgPSBzYi1cXHUwMDNlc19iZGV2O1xcbitcXHRpb21hcC1cXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXHRpb21hcC1cXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xcbitcXHRpb21hcC1cXHUwMDNlYWRkciA9IGhmc3BsdXNfYWJsb2NrX3RvX3BoeXNfYnl0ZXMoc2IsIGRibG9jaykgKyBhYmxvY2tfb2Zmc2V0O1xcbitcXHRpb21hcC1cXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcXG4rXFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gSU9NQVBfRl9NRVJHRUQ7XFxuK1xcbitcXHRpZiAoaXNfbmV3KVxcbitcXHRcXHRpb21hcC1cXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW9tYXAsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIGlvbWFwLCB0cnVlKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKClcXG4rICpcXG4rICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXFxuKyAqIChoaXAtXFx1MDAzZXBoeXNfc2l6ZSAvIGhpcC1cXHUwMDNlZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcyxcXG4rXFx0XFx0XFx0XFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRsb2ZmX3QgZW5kO1xcbitcXHRib29sIGRpcnRpZWQgPSBmYWxzZTtcXG4rXFxuK1xcdGlmICghd3JpdHRlbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlbmQgPSByb3VuZF91cChwb3MgKyB3cml0dGVuLCBzYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXG4rXFx0aWYgKGhpcC1cXHUwMDNlcGh5c19zaXplIFxcdTAwM2MgZW5kKSB7XFxuK1xcdFxcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLVxcdTAwM2VwaHlzX3NpemUpO1xcbitcXHRcXHRoaXAtXFx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcXG4rXFx0XFx0aGlwLVxcdTAwM2Vmc19ibG9ja3MgPSBlbmQgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuK1xcdFxcdGRpcnRpZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZGlydGllZClcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gd3JpdHRlbjtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luXFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kXFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKVxcbisgKlxcbisgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAnc2l6ZScuXFxuKyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuXFxuKyAqL1xcbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHRsb2ZmX3Qgc3RhcnQgPSBoaXAtXFx1MDAzZXBoeXNfc2l6ZTtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBzdGFydCwgc2l6ZSAtIHN0YXJ0LCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX3dyaXRlYmFja19yYW5nZSgpIC0gbWFwIGZvbGlvIGR1cmluZyB3cml0ZWJhY2tcXG4rICpcXG4rICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlXFxuKyAqIHRoZSBjdXJyZW50IGlvbWFwLCByZW1hcHMgYnkgY2FsbGluZyBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oKSBhZ2Fpbi5cXG4rICovXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2Mgd3BjLVxcdTAwM2Vpb21hcC5vZmZzZXQgfHxcXG4rXFx0ICAgIG9mZnNldCBcXHUwMDNlPSB3cGMtXFx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cXHUwMDNlaW9tYXAubGVuZ3RoKSB7XFxuK1xcdFxcdGVyciA9IF9faGZzcGx1c19pb21hcF9iZWdpbih3cGMtXFx1MDAzZWlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgb2Zmc2V0LCBsZW4sIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzID0ge1xcbitcXHQud3JpdGViYWNrX3JhbmdlXFx0PSBoZnNwbHVzX3dyaXRlYmFja19yYW5nZSxcXG4rXFx0LndyaXRlYmFja19zdWJtaXRcXHQ9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXFxuK307XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbygpIC0gRGlyZWN0IEkvTyB3cml0ZSBjb21wbGV0aW9uIGhhbmRsZXJcXG4rICovXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2MgaW9jYi1cXHUwMDNla2lfcG9zICsgc2l6ZSkge1xcbitcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3BvcyArIHNpemUpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHtcXG4rXFx0LmVuZF9pb1xcdFxcdD0gaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8sXFxuK307XFxuK1xcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXFxuK3tcXG4rXFx0cmV0dXJuIGlvbWFwX3N3YXBmaWxlX2FjdGl2YXRlKHNpcywgZmlsZSwgc3BhbiwgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xZWEzMzMzYzFlMDc1OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmhcXG5AQCAtMCwwICsxLDIwIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqICBsaW51eC9mcy9oZnNwbHVzL2lvbWFwLmhcXG4rICpcXG4rICogaW9tYXAgY2FsbGJhY2sgZGVjbGFyYXRpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfTElOVVhfSEZTUExVU19JT01BUF9IXFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzO1xcbitcXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpO1xcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XFxuK1xcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuaW5kZXggNDVmYjRjOWZmOWY1ZWUuLjE0MTdlMTlkOTRiY2VjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcXG5AQCAtMTcxLDE4ICsxNzEsMjIgQEAgZW51bSB7XFxuIFxcdEhGU19YQVRUUl9OQU1FLFxcbiB9O1xcbiBcXG4rI2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcXHQoMylcXG4rXFxuIHN0cnVjdCBoZnNfZXh0ZW50IHtcXG4gXFx0X19iZTE2IGJsb2NrO1xcbiBcXHRfX2JlMTYgY291bnQ7XFxuIH07XFxuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XFxuK3R5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbSEZTX0ZPUktfRVhURU5UX0NPVU5UXTtcXG4rXFxuKyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFxcdCg4KVxcbiBcXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xcbiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQge1xcbiBcXHRfX2JlMzIgc3RhcnRfYmxvY2s7XFxuIFxcdF9fYmUzMiBibG9ja19jb3VudDtcXG4gfSBfX3BhY2tlZDtcXG4tdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdO1xcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XFxuIFxcbiAvKiBJbmZvcm1hdGlvbiBmb3IgYSBcXFwiRm9ya1xcXCIgaW4gYSBmaWxlICovXFxuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDA6Mzg6NDMuMzk4NTU0NTg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM4OTcxODQ2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9lbmRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRcIixcbiAgICBcImhmc3BsdXNfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pb1wiLFxuICAgIFwiaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZVwiLFxuICAgIFwiaGZzcGx1c19kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9sbHNlZWtcIixcbiAgICBcImhmc3BsdXNfZmlsZV9mc3luY1wiLFxuICAgIFwiaGZzcGx1c19ibG9ja19hbGxvY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19ibG9ja19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODU2ZmU3NmY0MWUwOTY0ZTBiNGRjMjdiMzAyMTcwMDM5NjA4NTdkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDAwOjM4OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9LY29uZmlnIGIvZnMvaGZzcGx1cy9LY29uZmlnXG5pbmRleCBjYTg0MDFjYjY5NTRkNS4uYjQ0MzJjNjRkYjNiZWMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL0tjb25maWdcbisrKyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuQEAgLTUsNyArNSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXG4gXHRzZWxlY3QgQlVGRkVSX0hFQURcbiBcdHNlbGVjdCBOTFNcbiBcdHNlbGVjdCBOTFNfVVRGOFxuLVx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbitcdHNlbGVjdCBGU19JT01BUFxuIFx0aGVscFxuIFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcbiBcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5pbmRleCBmMmE5YWU2OTdlODExNC4uM2RkZWE2OWE5YzY5ODMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXG4gXG4taGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXFxcbi1cdFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuK1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4rXHRcdHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuIFx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbiBcbiAjIEtVbml0IHRlc3RzXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbmluZGV4IDFiM2FmOGM4N2NhZGI1Li41NzE2NTJmYmFlZGEzYiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmNcbisrKyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbkBAIC0zOSw2ICszOSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuK1x0bG9ja19wYWdlKHBhZ2UpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0aSA9IG9mZnNldCAlIDMyO1xuQEAgLTc1LDYgKzc2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VycisrO1xuIFx0XHR9XG4gXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSBzaXplKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTg0LDYgKzg2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGxvY2tfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGlmICgoc2l6ZSBeIG9mZnNldCkgLyBQQUdFX0NBQ0hFX0JJVFMpXG4gXHRcdFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTk4LDYgKzEwMSw5IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0c3RhcnQgPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpO1xuIFx0aWYgKHN0YXJ0IFx1MDAzZT0gc2l6ZSkge1xuIFx0XHRoZnNfZGJnKFwiYml0bWFwIGZ1bGxcXG5cIik7XG4rXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4rXHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHQvKiBkbyBhbnkgcGFydGlhbCB1MzIgYXQgdGhlIHN0YXJ0ICovXG5AQCAtMTI4LDYgKzEzNCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHR9XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0XHRvZmZzZXQgKz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLFxuIFx0XHRcdFx0XHQgTlVMTCk7XG5AQCAtMTM1LDYgKzE0Miw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1x0XHRsb2NrX3BhZ2UocGFnZSk7XG4gXHRcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGN1cnIgPSBwcHRyO1xuIFx0XHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMTUyLDYgKzE2MCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0KmN1cnIgPSBjcHVfdG9fYmUzMihuKTtcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHQqbWF4ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaSAtIHN0YXJ0O1xuIFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzIC09ICptYXg7XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbkBAIC0xODUsNiArMTk0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgcG5yLCBOVUxMKTtcbiBcdGlmIChJU19FUlIocGFnZSkpXG4gXHRcdGdvdG8ga2Fib29tO1xuK1x0bG9ja19wYWdlKHBhZ2UpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTIxNiw5ICsyMjYsMTEgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgKytwbnIsIE5VTEwpO1xuIFx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuIFx0XHRcdGdvdG8ga2Fib29tO1xuK1x0XHRsb2NrX3BhZ2UocGFnZSk7XG4gXHRcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGN1cnIgPSBwcHRyO1xuIFx0XHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMjMyLDYgKzI0NCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIG91dDpcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgKz0gbGVuO1xuIFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZWFsbG9jX211dGV4KTtcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG5pbmRleCA4MTNlNjhiOGVjZDY1NC4uOGY3ZjU2MGNlYzY0MjcgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuICNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbisvKlxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xuKyAqXG4rICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAnb2ZmJyB3aXRoaW4gYW4gOC1lbnRyeVxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxuKyAqL1xuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbitcdFx0XHRcdCB1MzIgKmRibG9jaylcbiB7XG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGV4dCsrLCBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspIHtcbiBcdFx0Y291bnQgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuLVx0XHRpZiAob2ZmIFx1MDAzYyBjb3VudClcbi1cdFx0XHRyZXR1cm4gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbitcdFx0XHQqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4rXHRcdH1cbiBcdFx0b2ZmIC09IGNvdW50O1xuIFx0fVxuIFx0LyogcGFuaWM/ICovXG4rXHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQrKywgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKylcbiBcdFx0Y291bnQgKz0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbiBcdHJldHVybiBjb3VudDtcbiB9XG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuKy8qXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcbisgKlxuKyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICdhYmxvY2snIGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4rICpcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXG4rICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXG4rICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4rICovXG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4rXHRpbnQgd2FzX2RpcnR5O1xuK1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdGlmIChiYWxsb2MpXG4rXHRcdCpiYWxsb2MgPSBmYWxzZTtcbiBcbi1cdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4rXHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuK1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGJhbGxvYylcbitcdFx0XHQqYmFsbG9jID0gdHJ1ZTtcbitcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuK1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4rXHRcdFx0XHRcdFx0ICAgICBhYmxvY2ssXG4rXHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSArMjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbi1cdFx0XHRcdFx0YWJsb2NrIC0gaGlwLVx1MDAzZWNhY2hlZF9zdGFydCk7XG4rXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuK1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgZGJsb2NrKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcbi1kb25lOlxuK1x0aWYgKHdhc19kaXJ0eSlcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbitpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuK1x0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbitcdHNlY3Rvcl90IHNlY3RvcjtcbitcdGludCByZXM7XG4rXG4rXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xuK1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4rXG4rXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuK1x0XHRpZiAoIWNyZWF0ZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcdH0gZWxzZVxuK1x0XHRjcmVhdGUgPSAwO1xuK1xuK1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuK1x0XHRcdFx0ICBOVUxMKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4gXHRoZnNfZGJnKFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCIsXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSArMzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcysrO1xuIFx0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdH1cbi1cdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgKzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4rXHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdFx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuK1xuK1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHQgIGlub2RlLVx1MDAzZWlfc2l6ZSwgMCxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NpemUsIDAsIDAsXG4rXHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybjtcbitcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuIFxuLVx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsXG4tXHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLFxuLVx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbi1cdFx0aWYgKHJlcyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKGlub2RlLVx1MDAzZWlfc2l6ZSA9PSBoaXAtXHUwMDNlcGh5c19zaXplKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44YzkyZTE0NTI5NWNhMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9maWxlLmNcbkBAIC0wLDAgKzEsMzA5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqICBsaW51eC9mcy9oZnNwbHVzL2ZpbGUuY1xuKyAqXG4rICogRmlsZSBvcGVyYXRpb25zOiBvcGVuL3JlbGVhc2UvZnN5bmMgYW5kIGlvbWFwLWJhc2VkIHJlYWQvd3JpdGUvc2Vla1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91aW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuKyNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbitcbitzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuK1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbitcdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbitcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXG4rXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbitcdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4rXHRcdGlub2RlX2xvY2soaW5vZGUpO1xuK1x0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuK1x0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4rXHRcdFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVx1MDAzZWlfaW5vLFxuK1x0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbitcdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4rXHRcdH1cbitcdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3Q7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXHUwMDNlc192aGRyO1xuK1x0aW50IGVycm9yID0gMCwgZXJyb3IyO1xuK1xuK1x0aGZzX2RiZyhcImlub2RlLVx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxuXCIsXG4rXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBzdGFydCwgZW5kKTtcbitcbitcdGVycm9yID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0LypcbitcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxuK1x0ICovXG4rXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbitcbitcdC8qXG4rXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VjYXRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IyID1cbitcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VleHRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRpZiAoIWVycm9yKVxuK1x0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0fVxuK1xuK1x0aWYgKHNiaS1cdTAwM2VhdHRyX3RyZWUpIHtcbitcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcbitcdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdGVycm9yMiA9XG4rXHRcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxuK1x0XHRcdFx0XHQgICAgc2JpLVx1MDAzZWF0dHJfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRlcnJvciA9IGVycm9yMjtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKSlcbitcdFx0XHRwcl9lcnIoXCJzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cIik7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbitcdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShzYmktXHUwMDNlYWxsb2NfZmlsZSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4rXHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbitcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRlcnJvciA9IGVycm9yMjtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbitcdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbitcbitcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRpZiAoIWVycm9yKVxuK1x0XHRlcnJvciA9IGVycm9yMjtcbitcbitcdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFx1MDAyNnNiaS1cdTAwM2VmbGFncykpXG4rXHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuKy8qXG4rICogaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSgpIC0gZmFsbCBiYWNrIHRvIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlXG4rICogdGFpbCBvZiBhIHdyaXRlIHRoYXQgaW9tYXBfZGlvX3J3KCkgY291bGQgbm90IHBlcmZvcm0gZGlyZWN0bHlcbisgKiAodW5hbGlnbmVkIHRhaWwsIG9yIG5vIGJsb2NrcyBjb3VsZCBiZSBtYXBwZWQgd2l0aG91dCBhbGxvY2F0aW9uXG4rICogb3V0c2lkZSB0aGUgZGlyZWN0IHBhdGgpLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRsb2ZmX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MsIGVuZDtcbitcdHNzaXplX3Qgd3JpdHRlbjtcbitcdGludCByZXQ7XG4rXG4rXHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1xuK1x0d3JpdHRlbiA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSxcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4rXHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXG4rXHRlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIHdyaXR0ZW4gLSAxO1xuK1x0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuK1x0XHRcdFx0XHQgICBvZmZzZXQsIGVuZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuK1x0XHRcdFx0IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbitcdFx0XHRcdCBlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1xuK1x0cmV0dXJuIHdyaXR0ZW47XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSxcbitcdFx0XHQgICBcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHQgICBcdTAwMjZoZnNwbHVzX3dyaXRlX2Rpb19vcHMsXG4rXHRcdFx0ICAgMCwgTlVMTCwgMCk7XG4rXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuK1x0XHRyZXQgPSAwO1xuK1x0ZWxzZSBpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4rXHRcdHNzaXplX3Qgd3JpdHRlbjtcbitcbitcdFx0d3JpdHRlbiA9IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSk7XG4rXHRcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiB3cml0dGVuO1xuK1x0XHRyZXQgKz0gd3JpdHRlbjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbitcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxuK3tcbitcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4rXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0bG9mZl90IHRvdGFsX2NhcGFjaXR5O1xuK1x0c3NpemVfdCByZXQ7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aW5vZGVfbG9jayhpbm9kZSk7XG4rXG4rXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdHRvdGFsX2NhcGFjaXR5ID0gKGxvZmZfdClzYmktXHUwMDNldG90YWxfYmxvY2tzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4rXHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlPSB0b3RhbF9jYXBhY2l0eSkge1xuK1x0XHRyZXQgPSAtRUZCSUc7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0cmV0ID0gZXJyO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGxvZmZfdCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbitcdFx0bG9mZl90IG5ld19zaXplID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4rXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkge1xuK1x0XHRcdG5ld19zaXplID0gbWF4X3QobG9mZl90LCBuZXdfc2l6ZSxcbitcdFx0XHRcdFx0ICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSk7XG4rXHRcdH1cbitcbitcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBuZXdfc2l6ZSk7XG4rXHRcdGVyciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpO1xuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH0gZWxzZSBpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHR9XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpXG4rXHRcdHJldCA9IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgaXRlcik7XG4rXHRlbHNlIHtcbitcdFx0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLFxuK1x0XHRcdFx0XHRcdFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwpO1xuK1x0fVxuK1xuK3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXG4rXHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4rXHRcdGZpbGVfYWNjZXNzZWQoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsXG4rXHRcdFx0XHQgICBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyxcbitcdFx0XHRcdCAgIE5VTEwsIDAsIE5VTEwsIDApO1xuK1x0fSBlbHNlXG4rXHRcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgaXRlcik7XG4rXG4rXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcbitcdHN3aXRjaCAod2hlbmNlKSB7XG4rXHRjYXNlIFNFRUtfSE9MRTpcbitcdFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuK1x0XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNFRUtfREFUQTpcbitcdFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuK1x0XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7XG4rXHR9XG4rXG4rXHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4Ynl0ZXMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuK1x0Lmxsc2Vla1x0XHQ9IGhmc3BsdXNfZmlsZV9sbHNlZWssXG4rXHQucmVhZF9pdGVyXHQ9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsXG4rXHQud3JpdGVfaXRlclx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcixcbitcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbitcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuK1x0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuK1x0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuK1x0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3BlbixcbitcdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuK1x0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbit9O1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li5iOWNhZGJjNmM2ZDIxNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTE3NSw2ICsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbisvKlxuKyAqIFBoeXNpY2FsIGJ5dGUgb2Zmc2V0IG9mIGFsbG9jYXRpb24gYmxvY2sgJ2RibG9jaycgb24gdGhlIHZvbHVtZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4rXG4rXHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdHBoeXNfYnl0ZXMgKz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXG4rXHRyZXR1cm4gcGh5c19ieXRlcztcbit9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzNiw2ICs0NTIsOCBAQCBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXG4gaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuIFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7XG4gaW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxuIFx0XHQgICAgICBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaywgaW50IHR5cGUpO1xuIGludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dCk7XG5AQCAtNDQzLDYgKzQ2MSw3IEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qIGlub2RlLmMgKi9cbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucztcbiBcbkBAIC00NjIsMTIgKzQ4MSwxNSBAQCBpbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdCAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXG4gXHRcdCAgICB1bnNpZ25lZCBpbnQgcXVlcnlfZmxhZ3MpO1xuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi1cdFx0ICAgICAgIGludCBkYXRhc3luYyk7XG4gaW50IGhmc3BsdXNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcbisvKiBmaWxlLmMgKi9cbitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuK1xuIC8qIGlvY3RsLmMgKi9cbiBsb25nIGhmc3BsdXNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmNcbmluZGV4IDFjNTdjODczZjA1ZDYxLi4xZjE2NjYzZWFkYjA5NSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTIgKzE4LDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaGZzcGx1c19mcy5oXCJcbiAjaW5jbHVkZSBcImhmc3BsdXNfcmF3LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbkBAIC0xMjAsNjYgKzEyMiw3IEBAIHN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuIFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLXtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuLVx0c3NpemVfdCByZXQ7XG4tXG4tXHQvKlxuLVx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbi1cdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbi1cdCAqL1xuLVx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4tXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbi1cbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuLVx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4tXHRcdCAqL1xuLVx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4tXG4tXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4tXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4tXG4tXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4tXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbi1cdH1cbi1cbi1cdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugb2YgZXJyb3IgZXh0ZW5kaW5nIHdyaXRlIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZld1xuLVx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiByZXQgXHUwMDNjIDApKSB7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbi1cdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rc3RhdGljIGludCBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuQEAgLTE4OCw4ICsxMzEsOCBAQCBzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8sXG4rXHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG5AQCAtMTk3LDE4ICsxNDAsNTkgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XG4gXHQucmVsZWFzZV9mb2xpb1x0PSBoZnNwbHVzX3JlbGVhc2VfZm9saW8sXG4gfTtcbiBcbi1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuIFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuLVx0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuK1x0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5ibWFwXHRcdD0gaGZzcGx1c19ibWFwLFxuLVx0LmRpcmVjdF9JT1x0PSBoZnNwbHVzX2RpcmVjdF9JTyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiB9O1xuIFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4re1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGVcdD0gbWFwcGluZy1cdTAwM2Vob3N0LFxuK1x0XHQud2JjXHQ9IHdiYyxcbitcdFx0Lm9wc1x0PSBcdTAwMjZoZnNwbHVzX3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4rc3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYW9wX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuK3tcbitcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuK1x0LnJlYWRfZm9saW9cdFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkXHRcdD0gaGZzcGx1c19yZWFkYWhlYWQsXG4rXHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmJtYXBcdFx0XHQ9IGhmc3BsdXNfYW9wX2JtYXAsXG4rXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGVcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpb1x0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbitcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuc3dhcF9hY3RpdmF0ZVx0XHQ9IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSxcbit9O1xuK1xuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfaGFzaCAgICAgICA9IGhmc3BsdXNfaGFzaF9kZW50cnksXG4gXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcbkBAIC0yNjgsMzUgKzI1Miw2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAtRUlPO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuLVx0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbi1cdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuLVx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbi1cdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuLVx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuLVx0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbi1cdFx0XHRcdFx0ICAgSEZTUExVU19TQihzYiktXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuLVx0XHR9XG4tXHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuQEAgLTMxMSwxMCArMjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHRcdFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRcdFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuK1xuK1x0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLVx1MDAzZWlhX3NpemUpO1xuK1x0XHRcdFx0ZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4rXHRcdFx0XHRpZiAoZXJyb3IpIHtcbitcdFx0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4rXHRcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbitcdFx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHR0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLVx1MDAzZWlhX3NpemUpO1xuIFx0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuQEAgLTM1Myw4NiArMzIwLDYgQEAgaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLVx1MDAzZXNfdmhkcjtcbi1cdGludCBlcnJvciA9IDAsIGVycm9yMjtcbi1cbi1cdGhmc19kYmcoXCJpbm9kZS1cdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcblwiLFxuLVx0XHRpbm9kZS1cdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XG4tXG4tXHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdHJldHVybiBlcnJvcjtcbi1cdGlub2RlX2xvY2soaW5vZGUpO1xuLVxuLVx0Lypcbi1cdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxuLVx0ICovXG4tXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cbi1cdC8qXG4tXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cbi1cdCAqL1xuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLFxuLVx0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VjYXRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxuLVx0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyb3IyID1cbi1cdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VleHRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuLVx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdGVycm9yID0gZXJyb3IyO1xuLVx0fVxuLVxuLVx0aWYgKHNiaS1cdTAwM2VhdHRyX3RyZWUpIHtcbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRcdGVycm9yMiA9XG4tXHRcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxuLVx0XHRcdFx0XHQgICAgc2JpLVx1MDAzZWF0dHJfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuLVx0XHRcdGlmICghZXJyb3IpXG4tXHRcdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRwcl9lcnIoXCJzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cIik7XG4tXHR9XG4tXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShzYmktXHUwMDNlYWxsb2NfZmlsZSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cbi1cdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRlcnJvciA9IGVycm9yMjtcbi1cbi1cdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFx1MDAyNnNiaS1cdTAwM2VmbGFncykpXG4tXHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXG4tXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuLVxuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuc2V0YXR0clx0PSBoZnNwbHVzX3NldGF0dHIsXG4gXHQuZ2V0YXR0clx0PSBoZnNwbHVzX2dldGF0dHIsXG5AQCAtNDU0LDE5ICszNDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQubGlzdHhhdHRyXHQ9IGhmc3BsdXNfbGlzdHhhdHRyLFxuIH07XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuLVx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4tXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4tXHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4tXHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuLVx0LnJlbGVhc2VcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXG4tXHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuLX07XG4tXG4gc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG5AQCAtNTEzLDcgKzM4Nyw3IEBAIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHNiaS1cdTAwM2VmaWxlX2NvdW50Kys7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuK1x0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBcdFx0aGlwLVx1MDAzZWNsdW1wX2Jsb2NrcyA9IDE7XG4gXHR9IGVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbiBcdFx0ICAgU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTU09DSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG5AQCAtNjU0LDcgKzUyOCw3IEBAIGludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4rXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lMDAxNDRiMjdjMTg2YVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5jXG5AQCAtMCwwICsxLDIwOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiAgbGludXgvZnMvaGZzcGx1cy9pb21hcC5jXG4rICpcbisgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuKyNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbitcbitzdGF0aWMgaW50IF9faGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0IGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0XHRcdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBib29sIG1heV9hbGxvYylcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWF4X2Jsb2NrcztcbitcdGxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7XG4rXHRsb2ZmX3QgYmxvY2tfc3RhcnQ7XG4rXHRib29sIGlzX25ldztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIW1heV9hbGxvYykge1xuK1x0XHQvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi9cbitcdFx0aWYgKGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2M9IG9mZnNldCkge1xuK1x0XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuK1x0XHRcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4rXHRcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuK1x0XHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHQvKiBDbGFtcCBsZW5ndGggaWYgdGhlIHJlcXVlc3RlZCByYW5nZSBnb2VzIGJleW9uZCBpX3NpemUgKi9cbitcdFx0aWYgKG9mZnNldCArIGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdFx0bG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gaV9ibG9ja3NpemUoaW5vZGUpO1xuK1x0XHRcdGxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0YWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4rXG4rXHRlcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCBcdTAwMjZkYmxvY2ssXG4rXHRcdFx0XHQgXHUwMDI2bWF4X2Jsb2NrcywgTlVMTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWJsb2NrX29mZnNldCA9IG9mZnNldCBcdTAwMjYgKHNiaS1cdTAwM2VhbGxvY19ibGtzeiAtIDEpO1xuK1x0YWJsb2NrX2J5dGVzID0gKGxvZmZfdCltYXhfYmxvY2tzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4rXG4rXHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7XG4rXHRibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpO1xuK1x0aXNfbmV3ID0gbWF5X2FsbG9jIFx1MDAyNlx1MDAyNiBibG9ja19zdGFydCBcdTAwM2U9IGhpcC1cdTAwM2VwaHlzX3NpemU7XG4rXHRpZiAobWF5X2FsbG9jIFx1MDAyNlx1MDAyNiAhaXNfbmV3IFx1MDAyNlx1MDAyNiBvZmZzZXQgXHUwMDNjIGhpcC1cdTAwM2VwaHlzX3NpemUpXG4rXHRcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtXHUwMDNlcGh5c19zaXplIC0gb2Zmc2V0KTtcbitcbitcdGlvbWFwLVx1MDAzZWJkZXYgPSBzYi1cdTAwM2VzX2JkZXY7XG4rXHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4rXHRpb21hcC1cdTAwM2VsZW5ndGggPSBsZW5ndGg7XG4rXHRpb21hcC1cdTAwM2VhZGRyID0gaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzYiwgZGJsb2NrKSArIGFibG9ja19vZmZzZXQ7XG4rXHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfTUFQUEVEO1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbitcbitcdGlmIChpc19uZXcpXG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzIHw9IElPTUFQX0ZfTkVXO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0c3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSxcbitcdFx0XHRcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxuK1x0XHRcdFx0ICAgICBpb21hcCwgZmFsc2UpO1xuK31cbitcbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdFx0XHRcdCAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuK1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIGlvbWFwLCB0cnVlKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sXG4rfTtcbitcbisvKlxuKyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKClcbisgKlxuKyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFya1xuKyAqIChoaXAtXHUwMDNlcGh5c19zaXplIC8gaGlwLVx1MDAzZWZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuXG4rICovXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxuK1x0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdGxvZmZfdCBlbmQ7XG4rXHRib29sIGRpcnRpZWQgPSBmYWxzZTtcbitcbitcdGlmICghd3JpdHRlbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRlbmQgPSByb3VuZF91cChwb3MgKyB3cml0dGVuLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4rXG4rXHRpZiAoaGlwLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2MgZW5kKSB7XG4rXHRcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLVx1MDAzZXBoeXNfc2l6ZSk7XG4rXHRcdGhpcC1cdTAwM2VwaHlzX3NpemUgPSBlbmQ7XG4rXHRcdGhpcC1cdTAwM2Vmc19ibG9ja3MgPSBlbmQgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXHRcdGRpcnRpZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKGRpcnRpZWQpXG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHdyaXR0ZW47XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XG4rXHQuaW9tYXBfYmVnaW5cdD0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbixcbitcdC5pb21hcF9lbmRcdD0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsXG4rfTtcbitcbisvKlxuKyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKVxuKyAqXG4rICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJ3NpemUnLlxuKyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuXG4rICovXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4re1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdGxvZmZfdCBzdGFydCA9IGhpcC1cdTAwM2VwaHlzX3NpemU7XG4rXG4rXHRpZiAoc2l6ZSBcdTAwM2M9IHN0YXJ0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBzdGFydCwgc2l6ZSAtIHN0YXJ0LCBOVUxMLFxuK1x0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpO1xuK31cbitcbisvKlxuKyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFja1xuKyAqXG4rICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlXG4rICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4rXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAob2Zmc2V0IFx1MDAzYyB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0IHx8XG4rXHQgICAgb2Zmc2V0IFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbitcdFx0ZXJyID0gX19oZnNwbHVzX2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSxcbitcdFx0XHRcdFx0ICAgIG9mZnNldCwgbGVuLCAwLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHMgPSB7XG4rXHQud3JpdGViYWNrX3JhbmdlXHQ9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLFxuK1x0LndyaXRlYmFja19zdWJtaXRcdD0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCxcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oKSAtIERpcmVjdCBJL08gd3JpdGUgY29tcGxldGlvbiBoYW5kbGVyXG4rICovXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0IGludCBlcnJvciwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNjIGlvY2ItXHUwMDNla2lfcG9zICsgc2l6ZSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zICsgc2l6ZSk7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHtcbitcdC5lbmRfaW9cdFx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyxcbit9O1xuK1xuK2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbitcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXG4re1xuK1x0cmV0dXJuIGlvbWFwX3N3YXBmaWxlX2FjdGl2YXRlKHNpcywgZmlsZSwgc3BhbiwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuK31cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWVhMzMzM2MxZTA3NTlcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2hmc3BsdXMvaW9tYXAuaFxuQEAgLTAsMCArMSwyMCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiAgbGludXgvZnMvaGZzcGx1cy9pb21hcC5oXG4rICpcbisgKiBpb21hcCBjYWxsYmFjayBkZWNsYXJhdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cbisgKi9cbitcbisjaWZuZGVmIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbisjZGVmaW5lIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHM7XG4rXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpO1xuK2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbitcdFx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XG4rXG4rI2VuZGlmIC8qIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlZS4uMTQxN2UxOWQ5NGJjZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbkBAIC0xNzEsMTggKzE3MSwyMiBAQCBlbnVtIHtcbiBcdEhGU19YQVRUUl9OQU1FLFxuIH07XG4gXG4rI2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcdCgzKVxuK1xuIHN0cnVjdCBoZnNfZXh0ZW50IHtcbiBcdF9fYmUxNiBibG9jaztcbiBcdF9fYmUxNiBjb3VudDtcbiB9O1xuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XG4rdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1tIRlNfRk9SS19FWFRFTlRfQ09VTlRdO1xuK1xuKyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFx0KDgpXG4gXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2V4dGVudCB7XG4gXHRfX2JlMzIgc3RhcnRfYmxvY2s7XG4gXHRfX2JlMzIgYmxvY2tfY291bnQ7XG4gfSBfX3BhY2tlZDtcbi10eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbOF07XG4rdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjW0hGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlRdO1xuIFxuIC8qIEluZm9ybWF0aW9uIGZvciBhIFwiRm9ya1wiIGluIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAwOjM4OjQzLjM5ODU1NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzczMjgxNjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipIRlMrIGlvbWFwIENvbnZlcnNpb246IEZ1enppbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSB0aGF0IGZ1bmRhbWVudGFsbHkgcmVmYWN0b3JzIHRoZSBIRlMrIGZpbGVzeXN0ZW0sIHJlcGxhY2luZyB0aGUgbGVnYWN5IEkvTyB3aXRoIGlvbWFwLiBUaGlzIGlzIGEgYmlnIGRlYWw7IHdlJ3JlIHRhbGtpbmcgY29yZSBmaWxlIEkvTyBvcGVyYXRpb25zIOKAkyByZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUg4oCTIGFsbCBiZWluZyByZWRpcmVjdGVkIHRocm91Z2ggYSBuZXcgcGF0aC4gVGhhdCdzIGEgaHVnZSBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb25zLCBzbyBmdXp6aW5nIHRoaXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSXQncyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBzeXNjYWxscywgc28gdGhhdCBtYWtlcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIFdlJ3ZlIGdvdCB0d28gbmV3IGZpbGVzOiBgaW9tYXAuY2AgYW5kIGBmaWxlLmNgLiBgaW9tYXAuY2AgaW1wbGVtZW50cyB0aGUgaW9tYXAgb3BlcmF0aW9uczogYF9faGZzcGx1c19pb21hcF9iZWdpbmAsIGBoZnNwbHVzX2lvbWFwX2JlZ2luYCwgYGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5gLCBgaGZzcGx1c193cml0ZV9pb21hcF9lbmRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX3dyaXRlYmFja19yYW5nZWAsIGBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pb2AsIGFuZCBgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlYC4gVGhlc2UgYXJlIHRoZSBkaXJlY3QgaW9tYXAgaW1wbGVtZW50YXRpb25zLlxuXG5UaGVuIHRoZXJlJ3MgYGZpbGUuY2AsIHdoaWNoIG5vdyBob3VzZXMgdGhlIGZpbGUgb3BlcmF0aW9ucy4gV2UgaGF2ZTogYGhmc3BsdXNfZmlsZV9vcGVuYCwgYGhmc3BsdXNfZmlsZV9yZWxlYXNlYCwgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlYCwgYGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJgLCBgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJgLCBgaGZzcGx1c19maWxlX3JlYWRfaXRlcmAsIGFuZCBgaGZzcGx1c19maWxlX2xsc2Vla2AuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBwb2ludHMgZm9yIHRlc3RpbmcgdGhlIG5ldyBJL08gZmxvdy5cblxuQmV5b25kIHRob3NlLCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyBpbiBgZXh0ZW50cy5jYCwgc3BlY2lmaWNhbGx5IGBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrYCwgYGhmc3BsdXNfbWFwX2V4dGVudGAsIGBoZnNwbHVzX2dldF9ibG9ja2AsIGFuZCBgaGZzcGx1c19maWxlX3RydW5jYXRlYC4gIGBiaXRtYXAuY2AgYWxzbyBnZXRzIHNvbWUgYXR0ZW50aW9uIHdpdGggYGhmc3BsdXNfYmxvY2tfYWxsb2NhdGVgIGFuZCBgaGZzcGx1c19ibG9ja19mcmVlYCwgc28gdGhlc2UgYXJlIGFsc28gcmVsZXZhbnQsIGVzcGVjaWFsbHkgc2luY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gY2FuIGJlIHRyaWNreS5cblxuVG8gcnVuIHRoaXMsIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgaXMgYENPTkZJR19IRlNQTFVTX0ZTYCwgd2hpY2ggaXMgdGhlIG1haW4gSEZTKyBjb25maWcuXG5cblNvLCBsZXQncyBkaXN0aWxsIHRoYXQgZG93biB0byBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzpcblxuKiAgIGBoZnNwbHVzX21hcF9leHRlbnRgXG4qICAgYGhmc3BsdXNfaW9tYXBfYmVnaW5gXG4qICAgYGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5gXG4qICAgYGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kYFxuKiAgIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYFxuKiAgIGBoZnNwbHVzX3dyaXRlYmFja19yYW5nZWBcbiogICBgaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW9gXG4qICAgYGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVgXG4qICAgYGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJgXG4qICAgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYFxuKiAgIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYFxuKiAgIGBoZnNwbHVzX2ZpbGVfbGxzZWVrYFxuKiAgIGBoZnNwbHVzX2ZpbGVfZnN5bmNgXG4qICAgYGhmc3BsdXNfYmxvY2tfYWxsb2NhdGVgXG4qICAgYGhmc3BsdXNfYmxvY2tfZnJlZWBcblxuRXZlcnl0aGluZyBwb2ludHMgdG8gdGhpcyBiZWluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFdlIG5lZWQgdG8gdGhvcm91Z2hseSB0ZXN0IGV2ZXJ5IGFzcGVjdCBvZiB0aGUgbmV3IGlvbWFwIGludGVncmF0aW9uLCBmcm9tIGJhc2ljIHJlYWRzIGFuZCB3cml0ZXMgdG8gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgbGlrZSB0cnVuY2F0ZSwgc3luYywgYW5kIGJsb2NrIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRvIGVuc3VyZSB0aGUgSEZTKyBmaWxlc3lzdGVtIHJlbWFpbnMgc3RhYmxlIGFuZCBjb3JyZWN0IHVuZGVyIHRoZSBuZXcgaW9tYXAgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM1OSwiT3V0cHV0VG9rZW5zIjoyODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDA6Mzg6NTcuMTMxMzc1MTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQzNjEwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX21hcF9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kXCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kXCIsXG4gICAgXCJoZnNwbHVzX3dyaXRlYmFja19yYW5nZVwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW9cIixcbiAgICBcImhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVcIixcbiAgICBcImhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfbGxzZWVrXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfYWxsb2NhdGVcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX21hcF9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kXCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kXCIsXG4gICAgXCJoZnNwbHVzX3dyaXRlYmFja19yYW5nZVwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW9cIixcbiAgICBcImhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVcIixcbiAgICBcImhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfbGxzZWVrXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfYWxsb2NhdGVcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 00:15:27 +0000 UTC FinishedAt: 2026-07-24 00:38:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "ce76d9d4f5f36501013bd94bb65dd067f04b2913", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_map_extent", "hfsplus_iomap_begin", "hfsplus_write_iomap_begin", "hfsplus_write_iomap_end", "hfsplus_iomap_cont_expand", "hfsplus_writeback_range", "hfsplus_file_write_dio_end_io", "hfsplus_fallback_buffered_write", "hfsplus_dio_write_iter", "hfsplus_file_write_iter", "hfsplus_file_read_iter", "hfsplus_file_llseek", "hfsplus_file_fsync", "hfsplus_block_allocate", "hfsplus_block_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX21hcF9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfZW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8mIzM0OywKICAgICYjMzQ7aGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2xsc2VlayYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibG9ja19hbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAwOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODU2ZmU3NmY0MWUwOTY0ZTBiNGRjMjdiMzAyMTcwMDM5NjA4NTdkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDAwOjM4OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZDUuLmI0NDMyYzY0ZGIzYmVjIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWdcbkBAIC01LDcgJiM0Mzs1LDcgQEAgY29uZmlnIEhGU1BMVVNfRlNcbiBcdHNlbGVjdCBCVUZGRVJfSEVBRFxuIFx0c2VsZWN0IE5MU1xuIFx0c2VsZWN0IE5MU19VVEY4XG4tXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuJiM0MztcdHNlbGVjdCBGU19JT01BUFxuIFx0aGVscFxuIFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcbiBcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5pbmRleCBmMmE5YWU2OTdlODExNC4uM2RkZWE2OWE5YzY5ODMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICYjNDM7NSw5IEBAXG4gXG4gb2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpICYjNDM7PSBoZnNwbHVzLm9cbiBcbi1oZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBpb2N0bC5vIGV4dGVudHMubyBjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBcXFxuLVx0XHRibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuJiM0MztoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuJiM0MztcdFx0Y2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyBcXFxuJiM0MztcdFx0dW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4gXHRcdGF0dHJpYnV0ZXMubyB4YXR0ci5vIHhhdHRyX3VzZXIubyB4YXR0cl9zZWN1cml0eS5vIHhhdHRyX3RydXN0ZWQub1xuIFxuICMgS1VuaXQgdGVzdHNcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JpdG1hcC5jIGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xuaW5kZXggMWIzYWY4Yzg3Y2FkYjUuLjU3MTY1MmZiYWVkYTNiIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiM0MztcdGxvY2tfcGFnZShwYWdlKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciAmIzQzOyAob2Zmc2V0IFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XG4gXHRpID0gb2Zmc2V0ICUgMzI7XG5AQCAtNzUsNiAmIzQzOzc2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VyciYjNDM7JiM0Mzs7XG4gXHRcdH1cbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZT0gc2l6ZSlcbiBcdFx0XHRicmVhaztcbkBAIC04NCw2ICYjNDM7ODYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGlmICgoc2l6ZSBeIG9mZnNldCkgLyBQQUdFX0NBQ0hFX0JJVFMpXG4gXHRcdFx0ZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC05OCw2ICYjNDM7MTAxLDkgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRzdGFydCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaTtcbiBcdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbiBcdFx0aGZzX2RiZyhcJiMzNDtiaXRtYXAgZnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHQvKiBkbyBhbnkgcGFydGlhbCB1MzIgYXQgdGhlIHN0YXJ0ICovXG5AQCAtMTI4LDYgJiM0MzsxMzQsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0fVxuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLFxuIFx0XHRcdFx0XHQgTlVMTCk7XG5AQCAtMTM1LDYgJiM0MzsxNDIsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMTUyLDYgJiM0MzsxNjAsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdCpjdXJyID0gY3B1X3RvX2JlMzIobik7XG4gXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdGt1bm1hcF9sb2NhbChwcHRyKTtcbiYjNDM7XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdCptYXggPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGkgLSBzdGFydDtcbiBcdHNiaS1cdTAwM2VmcmVlX2Jsb2NrcyAtPSAqbWF4O1xuIFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XG5AQCAtMTg1LDYgJiM0MzsxOTQsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbiBcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0Z290byBrYWJvb207XG4mIzQzO1x0bG9ja19wYWdlKHBhZ2UpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICYjNDM7IChvZmZzZXQgXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcbiBcdGVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMjE2LDkgJiM0MzsyMjYsMTEgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICYjNDM7JiM0MztwbnIsIE5VTEwpO1xuIFx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuIFx0XHRcdGdvdG8ga2Fib29tO1xuJiM0MztcdFx0bG9ja19wYWdlKHBhZ2UpO1xuIFx0XHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRjdXJyID0gcHB0cjtcbiBcdFx0ZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiAmIzQzOzI0NCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIG91dDpcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzICYjNDM7PSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjU0Li44ZjdmNTYwY2VjNjQyNyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19mcy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19yYXcuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtpb21hcC5oXCYjMzQ7XG4gXG4gLyogQ29tcGFyZSB0d28gZXh0ZW50cyBrZXlzLCByZXR1cm5zIDAgb24gc2FtZSwgcG9zL25lZyBmb3IgZGlmZmVyZW5jZSAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbkBAIC00OCwxOCAmIzQzOzQ5LDI5IEBAIHN0YXRpYyB2b2lkIGhmc3BsdXNfZXh0X2J1aWxkX2tleShoZnNwbHVzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCxcbiBcdGtleS1cdTAwM2VleHQucGFkID0gMDtcbiB9XG4gXG4tc3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmKVxuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKCkgLSBmaW5kIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYmxvY2tcbiYjNDM7ICpcbiYjNDM7ICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAmIzM5O29mZiYjMzk7IHdpdGhpbiBhbiA4LWVudHJ5XG4mIzQzOyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbiYjNDM7ICogdGhhdCBhcmUgY29udGlndW91cyB3aXRoIGl0IGluIHRoZSBzYW1lIGV4dGVudCBlbnRyeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbiYjNDM7XHRcdFx0XHQgdTMyICpkYmxvY2spXG4ge1xuIFx0aW50IGk7XG4gXHR1MzIgY291bnQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNvdW50ID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbi1cdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpXG4tXHRcdFx0cmV0dXJuIGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VzdGFydF9ibG9jaykgJiM0Mzsgb2ZmO1xuJiM0MztcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbiYjNDM7XHRcdFx0KmRibG9jayA9IGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VzdGFydF9ibG9jaykgJiM0Mzsgb2ZmO1xuJiM0MztcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4mIzQzO1x0XHR9XG4gXHRcdG9mZiAtPSBjb3VudDtcbiBcdH1cbiBcdC8qIHBhbmljPyAqL1xuJiM0MztcdCpkYmxvY2sgPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTY4LDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOylcbiBcdFx0Y291bnQgJiM0Mzs9IGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VibG9ja19jb3VudCk7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuQEAgLTIyMywzNyAmIzQzOzIzNSw0NiBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaylcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuLS8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovXG4taW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbi1cdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfbWFwX2V4dGVudCgpIC0gZmluZCBvciBhbGxvY2F0ZSBhIHNlcXVlbmNlIG9mIGFsbG9jYXRpb24gYmxvY2tzXG4mIzQzOyAqXG4mIzQzOyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICYjMzk7YWJsb2NrJiMzOTsgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlXG4mIzQzOyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbiYjNDM7ICogJiMzOTtjcmVhdGUmIzM5OyBpcyBzZXQgYW5kICYjMzk7YWJsb2NrJiMzOTsgbGllcyBiZXlvbmQgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogT24gc3VjY2VzcywgKmRibG9jayBpcyB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGJhY2tpbmcgJiMzOTthYmxvY2smIzM5OyxcbiYjNDM7ICogYW5kICptYXhfYmxvY2tzIGlzIHRoZSBudW1iZXIgb2YgZnVydGhlciBhbGxvY2F0aW9uIGJsb2NrcyB0aGF0IGFyZVxuJiM0MzsgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeVxuJiM0MzsgKiB0aGF0IGNvbnRhaW5zICYjMzk7YWJsb2NrJiMzOTspLCB3aGljaCBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSB3aG9sZSBmaWxlJiMzOTtzXG4mIzQzOyAqIHJlbWFpbmluZyBhbGxvY2F0aW9uIHdoZW4gdGhlIGZvcmsgaXMgZnJhZ21lbnRlZCBhY3Jvc3Mgc2V2ZXJhbFxuJiM0MzsgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGVcbiYjNDM7ICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4mIzQzOyAqL1xuJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXG4mIzQzO1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4mIzQzO1x0aW50IHdhc19kaXJ0eTtcbiYjNDM7XHRpbnQgcmVzO1xuIFxuLVx0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cbi1cdGFibG9jayA9IGlibG9jayBcdTAwM2VcdTAwM2Ugc2JpLVx1MDAzZWZzX3NoaWZ0O1xuJiM0MztcdGlmIChiYWxsb2MpXG4mIzQzO1x0XHQqYmFsbG9jID0gZmFsc2U7XG4gXG4tXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuJiM0MztcdGlmIChhYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlYWxsb2NfYmxvY2tzKSB7XG4gXHRcdGlmICghY3JlYXRlKVxuLVx0XHRcdHJldHVybiAwO1xuLVx0XHRpZiAoaWJsb2NrIFx1MDAzZSBoaXAtXHUwMDNlZnNfYmxvY2tzKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuLVx0XHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuLVx0XHRcdHJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTtcbi1cdFx0XHRpZiAocmVzKVxuLVx0XHRcdFx0cmV0dXJuIHJlcztcbi1cdFx0fVxuLVx0fSBlbHNlXG4tXHRcdGNyZWF0ZSA9IDA7XG4mIzQzO1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0aWYgKGJhbGxvYylcbiYjNDM7XHRcdFx0KmJhbGxvYyA9IHRydWU7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGFibG9jayBcdTAwM2MgaGlwLVx1MDAzZWZpcnN0X2Jsb2Nrcykge1xuLVx0XHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VmaXJzdF9leHRlbnRzLCBhYmxvY2spO1xuLVx0XHRnb3RvIGRvbmU7XG4mIzQzO1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYWJsb2NrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGRibG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSAmIzQzOzI5Myw0NCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2aGlwLVx1MDAzZWV4dGVudHNfbG9jayk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuLVx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsXG4tXHRcdFx0XHRcdGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQpO1xuJiM0MztcdCptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlY2FjaGVkX2V4dGVudHMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGRibG9jayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aGlwLVx1MDAzZWV4dGVudHNfbG9jayk7XG4gXG4tZG9uZTpcbiYjNDM7XHRpZiAod2FzX2RpcnR5KVxuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuJiM0MztpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbiYjNDM7XHRzZWN0b3JfdCBzZWN0b3I7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cbiYjNDM7XHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlibG9jayBcdTAwM2U9IGhpcC1cdTAwM2Vmc19ibG9ja3MpIHtcbiYjNDM7XHRcdGlmICghY3JlYXRlKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGlmIChpYmxvY2sgXHUwMDNlIGhpcC1cdTAwM2Vmc19ibG9ja3MpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH0gZWxzZVxuJiM0MztcdFx0Y3JlYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuJiM0MztcdFx0XHRcdCAgTlVMTCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuIFx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgaWJsb2NrICVsbHUgLSBkYmxvY2sgJXVcXG5cJiMzNDssXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSAmIzQzOzM0NCw4IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdGhpcC1cdTAwM2VwaHlzX3NpemUgJiM0Mzs9IHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuIFx0XHRoaXAtXHUwMDNlZnNfYmxvY2tzJiM0MzsmIzQzOztcbiBcdFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHR9XG4tXHRpZiAoY3JlYXRlIHx8IHdhc19kaXJ0eSlcbiBcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTU1MywyMCAmIzQzOzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4mIzQzO1x0XHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdHJlcyA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2l6ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRcdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdFx0ICBpbm9kZS1cdTAwM2VpX3NpemUsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4mIzQzO1x0XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zaXplLCAwLCAwLFxuJiM0MztcdFx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbiYjNDM7XHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0cmVzID0gaGZzcGx1c193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBzaXplLCAwLFxuLVx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwgMCxcbi1cdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4tXHRcdGlmIChyZXMgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fSBlbHNlIGlmIChpbm9kZS1cdTAwM2VpX3NpemUgPT0gaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZmlsZS5jIGIvZnMvaGZzcGx1cy9maWxlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOGM5MmUxNDUyOTVjYTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5AQCAtMCwwICYjNDM7MSwzMDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogIGxpbnV4L2ZzL2hmc3BsdXMvZmlsZS5jXG4mIzQzOyAqXG4mIzQzOyAqIEZpbGUgb3BlcmF0aW9uczogb3Blbi9yZWxlYXNlL2ZzeW5jIGFuZCBpb21hcC1iYXNlZCByZWFkL3dyaXRlL3NlZWtcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19mcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfcmF3LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuJiM0MztcdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4mIzQzO1x0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXHUwMDNlb3BlbmNudCk7XG4mIzQzO1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XG4mIzQzO1x0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4mIzQzO1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbiYjNDM7XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4mIzQzO1x0XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG4mIzQzO1x0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4mIzQzO1x0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbiYjNDM7XHRcdFx0XHRcdCAgIEhGU1BMVVNfU0Ioc2IpLVx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xuJiM0MztcdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuJiM0MztcdFx0ICAgICAgIGludCBkYXRhc3luYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4mIzQzO1x0aW50IGVycm9yID0gMCwgZXJyb3IyO1xuJiM0MztcbiYjNDM7XHRoZnNfZGJnKFwmIzM0O2lub2RlLVx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVycm9yMiA9XG4mIzQzO1x0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4mIzQzO1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuJiM0MztcdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0ZXJyb3IyID1cbiYjNDM7XHRcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxuJiM0MztcdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHRcdFx0aWYgKCFlcnJvcilcbiYjNDM7XHRcdFx0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3N5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbiYjNDM7XHRcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRcdGVycm9yID0gZXJyb3IyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuJiM0MztcdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdGVycm9yID0gZXJyb3IyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcbiYjNDM7ICogdGFpbCBvZiBhIHdyaXRlIHRoYXQgaW9tYXBfZGlvX3J3KCkgY291bGQgbm90IHBlcmZvcm0gZGlyZWN0bHlcbiYjNDM7ICogKHVuYWxpZ25lZCB0YWlsLCBvciBubyBibG9ja3MgY291bGQgYmUgbWFwcGVkIHdpdGhvdXQgYWxsb2NhdGlvblxuJiM0MzsgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYixcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0bG9mZl90IG9mZnNldCA9IGlvY2ItXHUwMDNla2lfcG9zLCBlbmQ7XG4mIzQzO1x0c3NpemVfdCB3cml0dGVuO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4mIzQzO1xuJiM0MztcdHdyaXR0ZW4gPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4mIzQzO1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0ZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgJiM0Mzsgd3JpdHRlbiAtIDE7XG4mIzQzO1x0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuJiM0MztcdFx0XHRcdFx0ICAgb2Zmc2V0LCBlbmQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4mIzQzO1x0XHRcdFx0IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHQgZW5kIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxuJiM0MztcdFx0XHQgICBcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcbiYjNDM7XHRcdFx0ICAgXHUwMDI2aGZzcGx1c193cml0ZV9kaW9fb3BzLFxuJiM0MztcdFx0XHQgICAwLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FTk9UQkxLKVxuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbiYjNDM7XHRcdHNzaXplX3Qgd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0XHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcbiYjNDM7XHRcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gd3JpdHRlbjtcbiYjNDM7XHRcdHJldCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0bG9mZl90IHRvdGFsX2NhcGFjaXR5O1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlub2RlX2xvY2soaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHR0b3RhbF9jYXBhY2l0eSA9IChsb2ZmX3Qpc2JpLVx1MDAzZXRvdGFsX2Jsb2NrcyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUZCSUc7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZpbGVfbW9kaWZpZWQoZmlsZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuJiM0MztcdFx0bG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuJiM0MztcdFx0bG9mZl90IG5ld19zaXplID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4mIzQzO1x0XHRcdG5ld19zaXplID0gbWF4X3QobG9mZl90LCBuZXdfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdCAgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X3NpemUpO1xuJiM0MztcdFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdH0gZWxzZSBpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpXG4mIzQzO1x0XHRyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpO1xuJiM0MztcdGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcbiYjNDM7XHRcdFx0XHRcdFx0TlVMTCwgTlVMTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7dW5sb2NrOlxuJiM0MztcdGlub2RlX3VubG9jayhpbm9kZSk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkge1xuJiM0MztcdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMsXG4mIzQzO1x0XHRcdFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4mIzQzO1x0fSBlbHNlXG4mIzQzO1x0XHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3Q7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAod2hlbmNlKSB7XG4mIzQzO1x0Y2FzZSBTRUVLX0hPTEU6XG4mIzQzO1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNFRUtfREFUQTpcbiYjNDM7XHRcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcbiYjNDM7XHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO1x0XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4Ynl0ZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuJiM0MztcdC5sbHNlZWtcdFx0PSBoZnNwbHVzX2ZpbGVfbGxzZWVrLFxuJiM0MztcdC5yZWFkX2l0ZXJcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcbiYjNDM7XHQud3JpdGVfaXRlclx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcixcbiYjNDM7XHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4mIzQzO1x0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4mIzQzO1x0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuJiM0MztcdC5mc3luY1x0XHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcbiYjNDM7XHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuJiM0MztcdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuJiM0MztcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3ODcuLmI5Y2FkYmM2YzZkMjE2IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG5AQCAtMTc1LDYgJiM0MzsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAmIzM5O2RibG9jayYjMzk7IG9uIHRoZSB2b2x1bWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdTMyIGRibG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuJiM0MztcdGxvZmZfdCBwaHlzX2J5dGVzO1xuJiM0MztcbiYjNDM7XHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuJiM0MztcdHBoeXNfYnl0ZXMgXHUwMDNjXHUwMDNjPSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4mIzQzO1x0cGh5c19ieXRlcyAmIzQzOz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuJiM0MztcdHBoeXNfYnl0ZXMgXHUwMDNjXHUwMDNjPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5c19ieXRlcztcbiYjNDM7fVxuIFxuIHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8ge1xuIFx0YXRvbWljX3Qgb3BlbmNudDtcbkBAIC00MzYsNiAmIzQzOzQ1Miw4IEBAIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKTtcbiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuJiM0MztcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpO1xuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbiBcdFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xuQEAgLTQ0Myw2ICYjNDM7NDYxLDcgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucztcbiBcbkBAIC00NjIsMTIgJiM0Mzs0ODEsMTUgQEAgaW50IGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHQgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLFxuIFx0XHQgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTtcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXG4mIzQzOy8qIGZpbGUuYyAqL1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuJiM0MztcdFx0ICAgICAgIGludCBkYXRhc3luYyk7XG4mIzQzO1xuIC8qIGlvY3RsLmMgKi9cbiBsb25nIGhmc3BsdXNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmNcbmluZGV4IDFjNTdjODczZjA1ZDYxLi4xZjE2NjYzZWFkYjA5NSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTIgJiM0MzsxOCwxNCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWF0dHIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19mcy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGZzcGx1c19yYXcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hhdHRyLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuIFxuLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbkBAIC0xMjAsNjYgJiM0MzsxMjIsNyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaylcbiBcdHJldHVybiByZXMgPyB0cnlfdG9fZnJlZV9idWZmZXJzKGZvbGlvKSA6IGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi17XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbi1cdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0bG9mZl90IGlzaXplO1xuLVx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XG4tXHRsb2ZmX3QgZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgJiM0MzsgY291bnQ7XG4tXHRzc2l6ZV90IHJldDtcbi1cbi1cdC8qXG4tXHQgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLlxuLVx0ICogRm9yIGRpcmVjdCB3cml0ZXMgYmV5b25kIEVPRiwgZXhwYW5kIHRoZSBmaWxlIGZpcnN0LlxuLVx0ICovXG4tXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbi1cdFx0bG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjtcbi1cdFx0bG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlO1xuLVxuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cbi1cdFx0Lypcbi1cdFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXG4tXHRcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cbi1cdFx0ICovXG4tXHRcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcbi1cbi1cdFx0cmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9vZmYgPSBpc2l6ZTtcbi1cdFx0ZW5kX29mZiA9IChlbmQgXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcbi1cbi1cdFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGVuZF9wYWdlID0gZW5kX29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cbi1cdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpO1xuLVx0fVxuLVxuLVx0cmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKGlvY2IsIGlub2RlLCBpdGVyLCBoZnNwbHVzX2dldF9ibG9jayk7XG4tXG4tXHQvKlxuLVx0ICogSW4gY2FzZSBvZiBlcnJvciBleHRlbmRpbmcgd3JpdGUgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3XG4tXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxuLVx0ICovXG4tXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IHJldCBcdTAwM2MgMCkpIHtcbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdGlmIChlbmQgXHUwMDNlIGlzaXplKVxuLVx0XHRcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuQEAgLTE4OCw4ICYjNDM7MTMxLDggQEAgc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4gXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4tXHQucmVhZF9mb2xpb1x0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4tXHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX3dyaXRlcGFnZXMsXG4mIzQzO1x0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyxcbiYjNDM7XHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG5AQCAtMTk3LDE4ICYjNDM7MTQwLDU5IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LnJlbGVhc2VfZm9saW9cdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxuIH07XG4gXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XG4mIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHMgPSB7XG4gXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4gXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXG4tXHQucmVhZF9mb2xpb1x0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4mIzQzO1x0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5ibWFwXHRcdD0gaGZzcGx1c19ibWFwLFxuLVx0LmRpcmVjdF9JT1x0PSBoZnNwbHVzX2RpcmVjdF9JTyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbiYjNDM7XHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoZnNwbHVzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbiYjNDM7e1xuJiM0MztcdGlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcbiYjNDM7XHRcdC5pbm9kZVx0PSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjXHQ9IHdiYyxcbiYjNDM7XHRcdC5vcHNcdD0gXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuJiM0MztcdC5yZWFkX2ZvbGlvXHRcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkYWhlYWRcdFx0PSBoZnNwbHVzX3JlYWRhaGVhZCxcbiYjNDM7XHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbiYjNDM7XHQuZGlydHlfZm9saW9cdFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbiYjNDM7XHQuYm1hcFx0XHRcdD0gaGZzcGx1c19hb3BfYm1hcCxcbiYjNDM7XHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbiYjNDM7XHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlXHQ9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbiYjNDM7XHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXHQ9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuJiM0MztcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiYjNDM7XHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuJiM0MztcdC5zd2FwX2FjdGl2YXRlXHRcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxuJiM0Mzt9O1xuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHtcbiBcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxuIFx0LmRfY29tcGFyZSAgICA9IGhmc3BsdXNfY29tcGFyZV9kZW50cnksXG5AQCAtMjY4LDM1ICYjNDM7MjUyLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIC1FSU87XG4gfVxuIFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4tXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuLVx0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbi1cdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4tXHRcdGlub2RlX2xvY2soaW5vZGUpO1xuLVx0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVx1MDAzZWlfaW5vLFxuLVx0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbi1cdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4tXHRcdH1cbi1cdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG5AQCAtMzExLDEwICYjNDM7MjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1x0XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0XHRsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiYjNDM7XHRcdFx0XHRlcnJvciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiBcdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbkBAIC0zNTMsODYgJiM0MzszMjAsNiBAQCBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpXG4te1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXHUwMDNlc192aGRyO1xuLVx0aW50IGVycm9yID0gMCwgZXJyb3IyO1xuLVxuLVx0aGZzX2RiZyhcJiMzNDtpbm9kZS1cdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcblwmIzM0Oyxcbi1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuLVxuLVx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cbi1cdC8qXG4tXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbi1cdCAqL1xuLVx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXG4tXHQvKlxuLVx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXG4tXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdH1cbi1cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9XG4tXHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlZXh0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlcnJvcjIgPVxuLVx0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbi1cdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4tXHRcdFx0cHJfZXJyKFwmIzM0O3N5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwmIzM0Oyk7XG4tXHR9XG4tXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShzYmktXHUwMDNlYWxsb2NfZmlsZSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cbi1cdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRlcnJvciA9IGVycm9yMjtcbi1cbi1cdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFx1MDAyNnNiaS1cdTAwM2VmbGFncykpXG4tXHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXG4tXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuLVxuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuc2V0YXR0clx0PSBoZnNwbHVzX3NldGF0dHIsXG4gXHQuZ2V0YXR0clx0PSBoZnNwbHVzX2dldGF0dHIsXG5AQCAtNDU0LDE5ICYjNDM7MzQxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxpc3R4YXR0clx0PSBoZnNwbHVzX2xpc3R4YXR0cixcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuLVx0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuLVx0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3Blbixcbi1cdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuLVx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbi19O1xuLVxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuQEAgLTUxMyw3ICYjNDM7Mzg3LDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0c2JpLVx1MDAzZWZpbGVfY291bnQmIzQzOyYjNDM7O1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHRoaXAtXHUwMDNlY2x1bXBfYmxvY2tzID0gMTtcbiBcdH0gZWxzZSBpZiAoU19JU0NIUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fFxuIFx0XHQgICBTX0lTRklGTyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbkBAIC02NTQsNyAmIzQzOzUyOCw3IEBAIGludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4mIzQzO1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmMgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTAwMTQ0YjI3YzE4NmFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaW9tYXAuY1xuQEAgLTAsMCAmIzQzOzEsMjA5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqICBsaW51eC9mcy9oZnNwbHVzL2lvbWFwLmNcbiYjNDM7ICpcbiYjNDM7ICogaW9tYXAgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0IGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGlvbWFwICppb21hcCwgYm9vbCBtYXlfYWxsb2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHUzMiBhYmxvY2ssIGRibG9jaywgbWF4X2Jsb2NrcztcbiYjNDM7XHRsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzO1xuJiM0MztcdGxvZmZfdCBibG9ja19zdGFydDtcbiYjNDM7XHRib29sIGlzX25ldztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heV9hbGxvYykge1xuJiM0MztcdFx0LyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovXG4mIzQzO1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VhZGRyID0gSU9NQVBfTlVMTF9BRERSO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogQ2xhbXAgbGVuZ3RoIGlmIHRoZSByZXF1ZXN0ZWQgcmFuZ2UgZ29lcyBiZXlvbmQgaV9zaXplICovXG4mIzQzO1x0XHRpZiAob2Zmc2V0ICYjNDM7IGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4mIzQzO1x0XHRcdGxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFibG9jayA9IG9mZnNldCBcdTAwM2VcdTAwM2Ugc2JpLVx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCBcdTAwMjZkYmxvY2ssXG4mIzQzO1x0XHRcdFx0IFx1MDAyNm1heF9ibG9ja3MsIE5VTEwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoc2JpLVx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XG4mIzQzO1x0YWJsb2NrX2J5dGVzID0gKGxvZmZfdCltYXhfYmxvY2tzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBhYmxvY2tfYnl0ZXMgLSBhYmxvY2tfb2Zmc2V0KTtcbiYjNDM7XHRibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpO1xuJiM0MztcdGlzX25ldyA9IG1heV9hbGxvYyBcdTAwMjZcdTAwMjYgYmxvY2tfc3RhcnQgXHUwMDNlPSBoaXAtXHUwMDNlcGh5c19zaXplO1xuJiM0MztcdGlmIChtYXlfYWxsb2MgXHUwMDI2XHUwMDI2ICFpc19uZXcgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2MgaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbiYjNDM7XHRcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtXHUwMDNlcGh5c19zaXplIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0aW9tYXAtXHUwMDNlYmRldiA9IHNiLVx1MDAzZXNfYmRldjtcbiYjNDM7XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0aW9tYXAtXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xuJiM0MztcdGlvbWFwLVx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICYjNDM7IGFibG9ja19vZmZzZXQ7XG4mIzQzO1x0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcbiYjNDM7XHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfbmV3KVxuJiM0MztcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgaW9tYXAsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICAgICBpb21hcCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKClcbiYjNDM7ICpcbiYjNDM7ICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXG4mIzQzOyAqIChoaXAtXHUwMDNlcGh5c19zaXplIC8gaGlwLVx1MDAzZWZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4mIzQzO1x0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0bG9mZl90IGVuZDtcbiYjNDM7XHRib29sIGRpcnRpZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3cml0dGVuKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVuZCA9IHJvdW5kX3VwKHBvcyAmIzQzOyB3cml0dGVuLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGlmIChoaXAtXHUwMDNlcGh5c19zaXplIFx1MDAzYyBlbmQpIHtcbiYjNDM7XHRcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLVx1MDAzZXBoeXNfc2l6ZSk7XG4mIzQzO1x0XHRoaXAtXHUwMDNlcGh5c19zaXplID0gZW5kO1xuJiM0MztcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyA9IGVuZCBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiYjNDM7XHRcdGRpcnRpZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRpcnRpZWQpXG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XG4mIzQzO1x0LmlvbWFwX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4sXG4mIzQzO1x0LmlvbWFwX2VuZFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKVxuJiM0MzsgKlxuJiM0MzsgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAmIzM5O3NpemUmIzM5Oy5cbiYjNDM7ICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS5cbiYjNDM7ICovXG4mIzQzO2ludCBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbiYjNDM7XHRsb2ZmX3Qgc3RhcnQgPSBoaXAtXHUwMDNlcGh5c19zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZSBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBzdGFydCwgc2l6ZSAtIHN0YXJ0LCBOVUxMLFxuJiM0MztcdFx0XHRcdFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLCBOVUxMLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXG4mIzQzOyAqXG4mIzQzOyAqIENhbGxlZCBmb3IgZWFjaCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrLiBJZiB0aGUgZm9saW8gZmFsbHMgb3V0c2lkZVxuJiM0MzsgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2Mgd3BjLVx1MDAzZWlvbWFwLm9mZnNldCB8fFxuJiM0MztcdCAgICBvZmZzZXQgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICYjNDM7IHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbiYjNDM7XHRcdGVyciA9IF9faGZzcGx1c19pb21hcF9iZWdpbih3cGMtXHUwMDNlaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgb2Zmc2V0LCBsZW4sIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcbiYjNDM7XHQud3JpdGViYWNrX3JhbmdlXHQ9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLFxuJiM0MztcdC53cml0ZWJhY2tfc3VibWl0XHQ9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbygpIC0gRGlyZWN0IEkvTyB3cml0ZSBjb21wbGV0aW9uIGhhbmRsZXJcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNjIGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IHNpemUpIHtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgJiM0Mzsgc2l6ZSk7XG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHMgPSB7XG4mIzQzO1x0LmVuZF9pb1x0XHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9kaW9fZW5kX2lvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaW9tYXBfc3dhcGZpbGVfYWN0aXZhdGUoc2lzLCBmaWxlLCBzcGFuLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWVhMzMzM2MxZTA3NTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaW9tYXAuaFxuQEAgLTAsMCAmIzQzOzEsMjAgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogIGxpbnV4L2ZzL2hmc3BsdXMvaW9tYXAuaFxuJiM0MzsgKlxuJiM0MzsgKiBpb21hcCBjYWxsYmFjayBkZWNsYXJhdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfSEZTUExVU19JT01BUF9IXG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHM7XG4mIzQzO1xuJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7XG4mIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlZS4uMTQxN2UxOWQ5NGJjZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbkBAIC0xNzEsMTggJiM0MzsxNzEsMjIgQEAgZW51bSB7XG4gXHRIRlNfWEFUVFJfTkFNRSxcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVFx0KDMpXG4mIzQzO1xuIHN0cnVjdCBoZnNfZXh0ZW50IHtcbiBcdF9fYmUxNiBibG9jaztcbiBcdF9fYmUxNiBjb3VudDtcbiB9O1xuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XG4mIzQzO3R5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbSEZTX0ZPUktfRVhURU5UX0NPVU5UXTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFx0KDgpXG4gXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2V4dGVudCB7XG4gXHRfX2JlMzIgc3RhcnRfYmxvY2s7XG4gXHRfX2JlMzIgYmxvY2tfY291bnQ7XG4gfSBfX3BhY2tlZDtcbi10eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbOF07XG4mIzQzO3R5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1tIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXTtcbiBcbiAvKiBJbmZvcm1hdGlvbiBmb3IgYSBcJiMzNDtGb3JrXCYjMzQ7IGluIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfbWFwX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZV9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9jb250X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlYmFja19yYW5nZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfbGxzZWVrJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9mc3luYyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfYmxvY2tfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udmVydHMgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1NmZlNzZmNDFlMDk2NGUwYjRkYzI3YjMwMjE3MDAzOTYwODU3ZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAwMDozODo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZwppbmRleCBjYTg0MDFjYjY5NTRkNS4uYjQ0MzJjNjRkYjNiZWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWcKQEAgLTUsNyAmIzQzOzUsNyBAQCBjb25maWcgSEZTUExVU19GUwogCXNlbGVjdCBCVUZGRVJfSEVBRAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgTkxTX1VURjgKLQlzZWxlY3QgTEVHQUNZX0RJUkVDVF9JTwomIzQzOwlzZWxlY3QgRlNfSU9NQVAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXQKIAkgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlCmluZGV4IGYyYTlhZTY5N2U4MTE0Li4zZGRlYTY5YTljNjk4MyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL01ha2VmaWxlCkBAIC01LDggJiM0Mzs1LDkgQEAKIAogb2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpICYjNDM7PSBoZnNwbHVzLm8KIAotaGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXAotCQlibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcCiYjNDM7aGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gZmlsZS5vIGlvbWFwLm8gaW9jdGwubyBleHRlbnRzLm8gXAomIzQzOwkJY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyBcCiYjNDM7CQl1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXAogCQlhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm8KIAogIyBLVW5pdCB0ZXN0cwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKaW5kZXggMWIzYWY4Yzg3Y2FkYjUuLjU3MTY1MmZiYWVkYTNiIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKQEAgLTM5LDYgJiM0MzszOSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLAogCQlzdGFydCA9IHNpemU7CiAJCWdvdG8gb3V0OwogCX0KJiM0MzsJbG9ja19wYWdlKHBhZ2UpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJaSA9IG9mZnNldCAlIDMyOwpAQCAtNzUsNiAmIzQzOzc2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQljdXJyJiM0MzsmIzQzOzsKIAkJfQogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJb2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7CiAJCWlmIChvZmZzZXQgJmd0Oz0gc2l6ZSkKIAkJCWJyZWFrOwpAQCAtODQsNiAmIzQzOzg2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQlzdGFydCA9IHNpemU7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKIAkJaWYgKChzaXplIF4gb2Zmc2V0KSAvIFBBR0VfQ0FDSEVfQklUUykKIAkJCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC05OCw2ICYjNDM7MTAxLDkgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJc3RhcnQgPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGk7CiAJaWYgKHN0YXJ0ICZndDs9IHNpemUpIHsKIAkJaGZzX2RiZygmIzM0O2JpdG1hcCBmdWxsXG4mIzM0Oyk7CiYjNDM7CQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKJiM0MzsJCXN0YXJ0ID0gc2l6ZTsKIAkJZ290byBvdXQ7CiAJfQogCS8qIGRvIGFueSBwYXJ0aWFsIHUzMiBhdCB0aGUgc3RhcnQgKi8KQEAgLTEyOCw2ICYjNDM7MTM0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCX0KIAkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlvZmZzZXQgJiM0Mzs9IFBBR0VfQ0FDSEVfQklUUzsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUywKIAkJCQkJIE5VTEwpOwpAQCAtMTM1LDYgJiM0MzsxNDIsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkJCXN0YXJ0ID0gc2l6ZTsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CQlsb2NrX3BhZ2UocGFnZSk7CiAJCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJCWN1cnIgPSBwcHRyOwogCQllbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyOwpAQCAtMTUyLDYgJiM0MzsxNjAsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkqY3VyciA9IGNwdV90b19iZTMyKG4pOwogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJdW5sb2NrX3BhZ2UocGFnZSk7CiAJKm1heCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaSAtIHN0YXJ0OwogCXNiaS0mZ3Q7ZnJlZV9ibG9ja3MgLT0gKm1heDsKIAloZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTsKQEAgLTE4NSw2ICYjNDM7MTk0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpCiAJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIHBuciwgTlVMTCk7CiAJaWYgKElTX0VSUihwYWdlKSkKIAkJZ290byBrYWJvb207CiYjNDM7CWxvY2tfcGFnZShwYWdlKTsKIAlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCWN1cnIgPSBwcHRyICYjNDM7IChvZmZzZXQgJmFtcDsgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyOwogCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0yMTYsOSAmIzQzOzIyNiwxMSBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudCkKIAkJCWJyZWFrOwogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCAmIzQzOyYjNDM7cG5yLCBOVUxMKTsKIAkJaWYgKElTX0VSUihwYWdlKSkKIAkJCWdvdG8ga2Fib29tOwomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwogCQlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0cjsKIAkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTIzMiw2ICYjNDM7MjQ0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpCiBvdXQ6CiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwl1bmxvY2tfcGFnZShwYWdlKTsKIAlzYmktJmd0O2ZyZWVfYmxvY2tzICYjNDM7PSBsZW47CiAJaGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7c2JpLSZndDthbGxvY19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IDgxM2U2OGI4ZWNkNjU0Li44ZjdmNTYwY2VjNjQyNyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKIAogLyogQ29tcGFyZSB0d28gZXh0ZW50cyBrZXlzLCByZXR1cm5zIDAgb24gc2FtZSwgcG9zL25lZyBmb3IgZGlmZmVyZW5jZSAqLwogaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLApAQCAtNDgsMTggJiM0Mzs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsCiAJa2V5LSZndDtleHQucGFkID0gMDsKIH0KIAotc3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmKQomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19leHRfZmluZF9ibG9jaygpIC0gZmluZCBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJsb2NrCiYjNDM7ICoKJiM0MzsgKiBGaW5kIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgZm9yICYjMzk7b2ZmJiMzOTsgd2l0aGluIGFuIDgtZW50cnkKJiM0MzsgKiBleHRlbnQgcmVjb3JkLCBhbmQgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzCiYjNDM7ICogdGhhdCBhcmUgY29udGlndW91cyB3aXRoIGl0IGluIHRoZSBzYW1lIGV4dGVudCBlbnRyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYsCiYjNDM7CQkJCSB1MzIgKmRibG9jaykKIHsKIAlpbnQgaTsKIAl1MzIgY291bnQ7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgODsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiAJCWNvdW50ID0gYmUzMl90b19jcHUoZXh0LSZndDtibG9ja19jb3VudCk7Ci0JCWlmIChvZmYgJmx0OyBjb3VudCkKLQkJCXJldHVybiBiZTMyX3RvX2NwdShleHQtJmd0O3N0YXJ0X2Jsb2NrKSAmIzQzOyBvZmY7CiYjNDM7CQlpZiAob2ZmICZsdDsgY291bnQpIHsKJiM0MzsJCQkqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LSZndDtzdGFydF9ibG9jaykgJiM0Mzsgb2ZmOwomIzQzOwkJCXJldHVybiBjb3VudCAtIG9mZjsKJiM0MzsJCX0KIAkJb2ZmIC09IGNvdW50OwogCX0KIAkvKiBwYW5pYz8gKi8KJiM0MzsJKmRibG9jayA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY4LDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpCiAJaW50IGk7CiAJdTMyIGNvdW50ID0gMDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KQogCQljb3VudCAmIzQzOz0gYmUzMl90b19jcHUoZXh0LSZndDtibG9ja19jb3VudCk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjIzLDM3ICYjNDM7MjM1LDQ2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKQogCXJldHVybiByZXM7CiB9CiAKLS8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovCi1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAotCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfbWFwX2V4dGVudCgpIC0gZmluZCBvciBhbGxvY2F0ZSBhIHNlcXVlbmNlIG9mIGFsbG9jYXRpb24gYmxvY2tzCiYjNDM7ICoKJiM0MzsgKiBMb29rcyB1cCB0aGUgYWxsb2NhdGlvbiBibG9jayBhdCAmIzM5O2FibG9jayYjMzk7IGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZQomIzQzOyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW4KJiM0MzsgKiAmIzM5O2NyZWF0ZSYjMzk7IGlzIHNldCBhbmQgJiMzOTthYmxvY2smIzM5OyBsaWVzIGJleW9uZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uLgomIzQzOyAqCiYjNDM7ICogT24gc3VjY2VzcywgKmRibG9jayBpcyB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGJhY2tpbmcgJiMzOTthYmxvY2smIzM5OywKJiM0MzsgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlCiYjNDM7ICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnkKJiM0MzsgKiB0aGF0IGNvbnRhaW5zICYjMzk7YWJsb2NrJiMzOTspLCB3aGljaCBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSB3aG9sZSBmaWxlJiMzOTtzCiYjNDM7ICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsCiYjNDM7ICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlCiYjNDM7ICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuCiYjNDM7ICovCiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLAomIzQzOwkJCXUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYykKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7Ci0Jc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiAJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKLQlpbnQgcmVzID0gLUVJTzsKLQl1MzIgYWJsb2NrLCBkYmxvY2ssIG1hc2s7Ci0Jc2VjdG9yX3Qgc2VjdG9yOwotCWludCB3YXNfZGlydHkgPSAwOwomIzQzOwlpbnQgd2FzX2RpcnR5OwomIzQzOwlpbnQgcmVzOwogCi0JLyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi8KLQlhYmxvY2sgPSBpYmxvY2sgJmd0OyZndDsgc2JpLSZndDtmc19zaGlmdDsKJiM0MzsJaWYgKGJhbGxvYykKJiM0MzsJCSpiYWxsb2MgPSBmYWxzZTsKIAotCWlmIChpYmxvY2sgJmd0Oz0gaGlwLSZndDtmc19ibG9ja3MpIHsKJiM0MzsJaWYgKGFibG9jayAmZ3Q7PSBoaXAtJmd0O2FsbG9jX2Jsb2NrcykgewogCQlpZiAoIWNyZWF0ZSkKLQkJCXJldHVybiAwOwotCQlpZiAoaWJsb2NrICZndDsgaGlwLSZndDtmc19ibG9ja3MpCiAJCQlyZXR1cm4gLUVJTzsKLQkJaWYgKGFibG9jayAmZ3Q7PSBoaXAtJmd0O2FsbG9jX2Jsb2NrcykgewotCQkJcmVzID0gaGZzcGx1c19maWxlX2V4dGVuZChpbm9kZSwgZmFsc2UpOwotCQkJaWYgKHJlcykKLQkJCQlyZXR1cm4gcmVzOwotCQl9Ci0JfSBlbHNlCi0JCWNyZWF0ZSA9IDA7CiYjNDM7CQlyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlpZiAoYmFsbG9jKQomIzQzOwkJCSpiYWxsb2MgPSB0cnVlOwomIzQzOwl9CiAKIAlpZiAoYWJsb2NrICZsdDsgaGlwLSZndDtmaXJzdF9ibG9ja3MpIHsKLQkJZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2ZpcnN0X2V4dGVudHMsIGFibG9jayk7Ci0JCWdvdG8gZG9uZTsKJiM0MzsJCSptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2ZpcnN0X2V4dGVudHMsCiYjNDM7CQkJCQkJICAgICBhYmxvY2ssCiYjNDM7CQkJCQkJICAgICBkYmxvY2spOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGlub2RlLSZndDtpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKQpAQCAtMjcyLDExICYjNDM7MjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiAJCW11dGV4X3VubG9jaygmYW1wO2hpcC0mZ3Q7ZXh0ZW50c19sb2NrKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWRibG9jayA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLSZndDtjYWNoZWRfZXh0ZW50cywKLQkJCQkJYWJsb2NrIC0gaGlwLSZndDtjYWNoZWRfc3RhcnQpOwomIzQzOwkqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLSZndDtjYWNoZWRfZXh0ZW50cywKJiM0MzsJCQkJCSAgICAgYWJsb2NrIC0gaGlwLSZndDtjYWNoZWRfc3RhcnQsCiYjNDM7CQkJCQkgICAgIGRibG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7aGlwLSZndDtleHRlbnRzX2xvY2spOwogCi1kb25lOgomIzQzOwlpZiAod2FzX2RpcnR5KQomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqLwomIzQzO2ludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiYjNDM7CQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrczsKJiM0MzsJc2VjdG9yX3Qgc2VjdG9yOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqLwomIzQzOwlhYmxvY2sgPSBpYmxvY2sgJmd0OyZndDsgc2JpLSZndDtmc19zaGlmdDsKJiM0MzsKJiM0MzsJaWYgKGlibG9jayAmZ3Q7PSBoaXAtJmd0O2ZzX2Jsb2NrcykgewomIzQzOwkJaWYgKCFjcmVhdGUpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlpZiAoaWJsb2NrICZndDsgaGlwLSZndDtmc19ibG9ja3MpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CX0gZWxzZQomIzQzOwkJY3JlYXRlID0gMDsKJiM0MzsKJiM0MzsJcmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgJmFtcDtkYmxvY2ssICZhbXA7bWF4X2Jsb2NrcywKJiM0MzsJCQkJICBOVUxMKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiAJaGZzX2RiZygmIzM0O2lubyAlbGx1LCBpYmxvY2sgJWxsdSAtIGRibG9jayAldVxuJiMzNDssCiAJCWlub2RlLSZndDtpX2lubywgKGxvbmcgbG9uZylpYmxvY2ssIGRibG9jayk7CiAKQEAgLTI5MCw5ICYjNDM7MzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJaGlwLSZndDtwaHlzX3NpemUgJiM0Mzs9IHNiLSZndDtzX2Jsb2Nrc2l6ZTsKIAkJaGlwLSZndDtmc19ibG9ja3MmIzQzOyYjNDM7OwogCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLSZndDtzX2Jsb2Nrc2l6ZSk7Ci0JfQotCWlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KQogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQogCXJldHVybiAwOwogfQogCkBAIC01NTMsMjAgJiM0Mzs2MDYsMzIgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJaW5vZGUtJmd0O2lfaW5vLCAobG9uZyBsb25nKWhpcC0mZ3Q7cGh5c19zaXplLCBpbm9kZS0mZ3Q7aV9zaXplKTsKIAogCWlmIChpbm9kZS0mZ3Q7aV9zaXplICZndDsgaGlwLSZndDtwaHlzX3NpemUpIHsKLQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCQl2b2lkICpmc2RhdGEgPSBOVUxMOwotCQlsb2ZmX3Qgc2l6ZSA9IGlub2RlLSZndDtpX3NpemU7CiYjNDM7CQlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCXJlcyA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlub2RlLSZndDtpX3NpemUpOwomIzQzOwkJCWlmIChyZXMpCiYjNDM7CQkJCXJldHVybjsKJiM0MzsKJiM0MzsJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQkJdm9pZCAqZnNkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJCQlyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsCiYjNDM7CQkJCQkJICBpbm9kZS0mZ3Q7aV9zaXplLCAwLAomIzQzOwkJCQkJCSAgJmFtcDtmb2xpbywgJmFtcDtmc2RhdGEpOwomIzQzOwkJCWlmIChyZXMpCiYjNDM7CQkJCXJldHVybjsKJiM0MzsKJiM0MzsJCQlyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLAomIzQzOwkJCQkJCWlub2RlLSZndDtpX3NpemUsIDAsIDAsCiYjNDM7CQkJCQkJZm9saW8sIGZzZGF0YSk7CiYjNDM7CQkJaWYgKHJlcyAmbHQ7IDApCiYjNDM7CQkJCXJldHVybjsKJiM0MzsKJiM0MzsJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJCX0KIAotCQlyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsCi0JCQkJCSAgJmFtcDtmb2xpbywgJmFtcDtmc2RhdGEpOwotCQlpZiAocmVzKQotCQkJcmV0dXJuOwotCQlyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLAotCQkJCQlmb2xpbywgZnNkYXRhKTsKLQkJaWYgKHJlcyAmbHQ7IDApCi0JCQlyZXR1cm47Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChpbm9kZS0mZ3Q7aV9zaXplID09IGhpcC0mZ3Q7cGh5c19zaXplKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2ZpbGUuYyBiL2ZzL2hmc3BsdXMvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi44YzkyZTE0NTI5NWNhMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jCkBAIC0wLDAgJiM0MzsxLDMwOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiAgbGludXgvZnMvaGZzcGx1cy9maWxlLmMKJiM0MzsgKgomIzQzOyAqIEZpbGUgb3BlcmF0aW9uczogb3Blbi9yZWxlYXNlL2ZzeW5jIGFuZCBpb21hcC1iYXNlZCByZWFkL3dyaXRlL3NlZWsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiYjNDM7CQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7CiYjNDM7CWlmICghKGZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19MQVJHRUZJTEUpICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZndDsgTUFYX05PTl9MRlMpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsJYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwomIzQzOwlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwomIzQzOwlpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSkKJiM0MzsJCWlub2RlID0gSEZTUExVU19JKGlub2RlKS0mZ3Q7cnNyY19pbm9kZTsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewomIzQzOwkJaW5vZGVfbG9jayhpbm9kZSk7CiYjNDM7CQloZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpOwomIzQzOwkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewomIzQzOwkJCWhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS0mZ3Q7aV9pbm8sCiYjNDM7CQkJCQkgICBIRlNQTFVTX1NCKHNiKS0mZ3Q7aGlkZGVuX2RpciwgTlVMTCk7CiYjNDM7CQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwomIzQzOwkJfQomIzQzOwkJaW5vZGVfdW5sb2NrKGlub2RlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAomIzQzOwkJICAgICAgIGludCBkYXRhc3luYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLSZndDtzX3ZoZHI7CiYjNDM7CWludCBlcnJvciA9IDAsIGVycm9yMjsKJiM0MzsKJiM0MzsJaGZzX2RiZygmIzM0O2lub2RlLSZndDtpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxuJiMzNDssCiYjNDM7CQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwomIzQzOwomIzQzOwllcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuCiYjNDM7CSAqLwomIzQzOwlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7Y2F0X3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewomIzQzOwkJY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7CiYjNDM7CQllcnJvcjIgPQomIzQzOwkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQlpZiAoIWVycm9yKQomIzQzOwkJCWVycm9yID0gZXJyb3IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzYmktJmd0O2F0dHJfdHJlZSkgewomIzQzOwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCQljbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7CiYjNDM7CQkJZXJyb3IyID0KJiM0MzsJCQkJZmlsZW1hcF93cml0ZV9hbmRfd2FpdCgKJiM0MzsJCQkJCSAgICBzYmktJmd0O2F0dHJfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQkJaWYgKCFlcnJvcikKJiM0MzsJCQkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXByX2VycigmIzM0O3N5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLAomIzQzOwkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7CiYjNDM7CQllcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7YWxsb2NfZmlsZS0mZ3Q7aV9tYXBwaW5nKTsKJiM0MzsJCWlmICghZXJyb3IpCiYjNDM7CQkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3NiaS0mZ3Q7dmhfbXV0ZXgpOwomIzQzOwloZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKJiM0MzsKJiM0MzsJZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQllcnJvciA9IGVycm9yMjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKJiM0MzsJCWJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19iZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoKSAtIGZhbGwgYmFjayB0byBidWZmZXJlZCBJL08gZm9yIHRoZQomIzQzOyAqIHRhaWwgb2YgYSB3cml0ZSB0aGF0IGlvbWFwX2Rpb19ydygpIGNvdWxkIG5vdCBwZXJmb3JtIGRpcmVjdGx5CiYjNDM7ICogKHVuYWxpZ25lZCB0YWlsLCBvciBubyBibG9ja3MgY291bGQgYmUgbWFwcGVkIHdpdGhvdXQgYWxsb2NhdGlvbgomIzQzOyAqIG91dHNpZGUgdGhlIGRpcmVjdCBwYXRoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCQlzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiYjNDM7ewomIzQzOwlsb2ZmX3Qgb2Zmc2V0ID0gaW9jYi0mZ3Q7a2lfcG9zLCBlbmQ7CiYjNDM7CXNzaXplX3Qgd3JpdHRlbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDs9IH5JT0NCX0RJUkVDVDsKJiM0MzsKJiM0MzsJd3JpdHRlbiA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSwKJiM0MzsJCQkJCSAgICAmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCQkJICAgIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAod3JpdHRlbiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gd3JpdHRlbjsKJiM0MzsKJiM0MzsJZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHdyaXR0ZW4gLSAxOwomIzQzOwlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZywKJiM0MzsJCQkJCSAgIG9mZnNldCwgZW5kKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nLAomIzQzOwkJCQkgb2Zmc2V0ICZndDsmZ3Q7IFBBR0VfU0hJRlQsCiYjNDM7CQkJCSBlbmQgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiB3cml0dGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSwKJiM0MzsJCQkgICAmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCSAgICZhbXA7aGZzcGx1c193cml0ZV9kaW9fb3BzLAomIzQzOwkJCSAgIDAsIE5VTEwsIDApOwomIzQzOwlpZiAocmV0ID09IC1FTk9UQkxLKQomIzQzOwkJcmV0ID0gMDsKJiM0MzsJZWxzZSBpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChpb3ZfaXRlcl9jb3VudChmcm9tKSkgewomIzQzOwkJc3NpemVfdCB3cml0dGVuOwomIzQzOwomIzQzOwkJd3JpdHRlbiA9IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSk7CiYjNDM7CQlpZiAod3JpdHRlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CQlyZXQgJiM0Mzs9IHdyaXR0ZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJCQkJc3RydWN0IGlvdl9pdGVyICppdGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CWxvZmZfdCB0b3RhbF9jYXBhY2l0eTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwomIzQzOwlyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXRvdGFsX2NhcGFjaXR5ID0gKGxvZmZfdClzYmktJmd0O3RvdGFsX2Jsb2NrcyAmbHQ7Jmx0OyBzYmktJmd0O2FsbG9jX2Jsa3N6X3NoaWZ0OwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICZndDs9IHRvdGFsX2NhcGFjaXR5KSB7CiYjNDM7CQlyZXQgPSAtRUZCSUc7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlyZXQgPSBlcnI7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQlsb2ZmX3Qgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiYjNDM7CQlsb2ZmX3QgbmV3X3NpemUgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpIHsKJiM0MzsJCQluZXdfc2l6ZSA9IG1heF90KGxvZmZfdCwgbmV3X3NpemUsCiYjNDM7CQkJCQkgIEhGU1BMVVNfSShpbm9kZSktJmd0O3BoeXNfc2l6ZSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTsKJiM0MzsJCWVyciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJaV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7CiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0gZWxzZSBpZiAoKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKSAmYW1wOyZhbXA7CiYjNDM7CQkgICBIRlNQTFVTX0koaW5vZGUpLSZndDtwaHlzX3NpemUgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS0mZ3Q7cGh5c19zaXplKTsKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkKJiM0MzsJCXJldCA9IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgaXRlcik7CiYjNDM7CWVsc2UgewomIzQzOwkJcmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLAomIzQzOwkJCQkJCSZhbXA7aGZzcGx1c193cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJCQkJTlVMTCwgTlVMTCk7CiYjNDM7CX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJCQkJc3RydWN0IGlvdl9pdGVyICppdGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkgewomIzQzOwkJZmlsZV9hY2Nlc3NlZChpb2NiLSZndDtraV9maWxwKTsKJiM0MzsJCXJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLAomIzQzOwkJCQkgICAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzLAomIzQzOwkJCQkgICBOVUxMLCAwLCBOVUxMLCAwKTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIGl0ZXIpOwomIzQzOwomIzQzOwlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsKJiM0MzsJc3dpdGNoICh3aGVuY2UpIHsKJiM0MzsJY2FzZSBTRUVLX0hPTEU6CiYjNDM7CQlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgJmFtcDtoZnNwbHVzX2lvbWFwX29wcyk7CiYjNDM7CQlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNFRUtfREFUQToKJiM0MzsJCWlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCW9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJCWlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9mZnNldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2Zmc2V0OwomIzQzOwomIzQzOwlyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLSZndDtpX3NiLSZndDtzX21heGJ5dGVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKJiM0MzsJLmxsc2VlawkJPSBoZnNwbHVzX2ZpbGVfbGxzZWVrLAomIzQzOwkucmVhZF9pdGVyCT0gaGZzcGx1c19maWxlX3JlYWRfaXRlciwKJiM0MzsJLndyaXRlX2l0ZXIJPSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlciwKJiM0MzsJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCiYjNDM7CS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiYjNDM7CS5zcGxpY2Vfd3JpdGUJPSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLAomIzQzOwkuZnN5bmMJCT0gaGZzcGx1c19maWxlX2ZzeW5jLAomIzQzOwkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKJiM0MzsJLnJlbGVhc2UJPSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSwKJiM0MzsJLnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAppbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uYjljYWRiYzZjNmQyMTYgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCkBAIC0xNzUsNiAmIzQzOzE3NSwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlyZXR1cm4gc2ItJmd0O3NfZnNfaW5mbzsKIH0KIAomIzQzOy8qCiYjNDM7ICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAmIzM5O2RibG9jayYjMzk7IG9uIHRoZSB2b2x1bWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBsb2ZmX3QgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQkJCSAgdTMyIGRibG9jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpOwomIzQzOwlsb2ZmX3QgcGh5c19ieXRlczsKJiM0MzsKJiM0MzsJcGh5c19ieXRlcyA9IGRibG9jazsKJiM0MzsJcGh5c19ieXRlcyAmbHQ7Jmx0Oz0gc2JpLSZndDtmc19zaGlmdDsKJiM0MzsJcGh5c19ieXRlcyAmIzQzOz0gc2JpLSZndDtibG9ja29mZnNldDsKJiM0MzsJcGh5c19ieXRlcyAmbHQ7Jmx0Oz0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlzX2J5dGVzOwomIzQzO30KIAogc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7CiAJYXRvbWljX3Qgb3BlbmNudDsKQEAgLTQzNiw2ICYjNDM7NDUyLDggQEAgaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLAogaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCiAJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKTsKJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsCiYjNDM7CQkJdTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKTsKIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCwKIAkJICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTsKIGludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dCk7CkBAIC00NDMsNiAmIzQzOzQ2MSw3IEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBpbm9kZS5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7CiAKQEAgLTQ2MiwxMiAmIzQzOzQ4MSwxNSBAQCBpbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzaywKIAkJICAgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncyk7Ci1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpOwogaW50IGhmc3BsdXNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIGludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7CiAKJiM0MzsvKiBmaWxlLmMgKi8KJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MztpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiYjNDM7CQkgICAgICAgaW50IGRhdGFzeW5jKTsKJiM0MzsKIC8qIGlvY3RsLmMgKi8KIGxvbmcgaGZzcGx1c19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmMKaW5kZXggMWM1N2M4NzNmMDVkNjEuLjFmMTY2NjNlYWRiMDk1IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xOCwxMiAmIzQzOzE4LDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiAKLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7CiB9CkBAIC0xMjAsNjYgJiM0MzsxMjIsNyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaykKIAlyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTsKIH0KIAotc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCWxvZmZfdCBpc2l6ZTsKLQlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKLQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwotCXNzaXplX3QgcmV0OwotCi0JLyoKLQkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgotCSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KLQkgKi8KLQlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKLQkJbG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlOwotCi0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCS8qCi0JCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQotCQkgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuCi0JCSAqLwotCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7Ci0KLQkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X29mZiA9IGlzaXplOwotCQllbmRfb2ZmID0gKGVuZCAmZ3Q7IDApID8gZW5kIC0gMSA6IGVuZDsKLQotCQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KLQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpOwotCX0KLQotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKLQkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgotCSAqLwotCWlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IHJldCAmbHQ7IDApKSB7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCWlmIChlbmQgJmd0OyBpc2l6ZSkKLQkJCWhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8sCiYjNDM7CS53cml0ZXBhZ2VzCT0gaGZzcGx1c19sZWdhY3lfd3JpdGVwYWdlcywKIAkud3JpdGVfYmVnaW4JPSBoZnNwbHVzX3dyaXRlX2JlZ2luLAogCS53cml0ZV9lbmQJPSBnZW5lcmljX3dyaXRlX2VuZCwKIAkubWlncmF0ZV9mb2xpbwk9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLApAQCAtMTk3LDE4ICYjNDM7MTQwLDU5IEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0gewogCS5yZWxlYXNlX2ZvbGlvCT0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLAogfTsKIAotY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHsKIAkuZGlydHlfZm9saW8JPSBibG9ja19kaXJ0eV9mb2xpbywKIAkuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sCi0JLnJlYWRfZm9saW8JPSBoZnNwbHVzX3JlYWRfZm9saW8sCiYjNDM7CS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbywKIAkud3JpdGVfYmVnaW4JPSBoZnNwbHVzX3dyaXRlX2JlZ2luLAogCS53cml0ZV9lbmQJPSBnZW5lcmljX3dyaXRlX2VuZCwKIAkuYm1hcAkJPSBoZnNwbHVzX2JtYXAsCi0JLmRpcmVjdF9JTwk9IGhmc3BsdXNfZGlyZWN0X0lPLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkud3JpdGVwYWdlcwk9IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIH07CiAKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhmc3BsdXNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZQk9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjCT0gd2JjLAomIzQzOwkJLm9wcwk9ICZhbXA7aGZzcGx1c193cml0ZWJhY2tfb3BzLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7CS5yZWFkX2ZvbGlvCQk9IGhmc3BsdXNfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZAkJPSBoZnNwbHVzX3JlYWRhaGVhZCwKJiM0MzsJLndyaXRlcGFnZXMJCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5ibWFwCQkJPSBoZnNwbHVzX2FvcF9ibWFwLAomIzQzOwkubWlncmF0ZV9mb2xpbwkJPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUJPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8JPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0MzsJLnJlbGVhc2VfZm9saW8JCT0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuc3dhcF9hY3RpdmF0ZQkJPSBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUsCiYjNDM7fTsKJiM0MzsKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LApAQCAtMjY4LDM1ICYjNDM7MjUyLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKCEoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX0xBUkdFRklMRSkgJmFtcDsmYW1wOyBpX3NpemVfcmVhZChpbm9kZSkgJmd0OyBNQVhfTk9OX0xGUykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewotCQlpbm9kZV9sb2NrKGlub2RlKTsKLQkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKLQkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewotCQkJaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLSZndDtpX2lubywKLQkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwotCQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwotCQl9Ci0JCWlub2RlX3VubG9jayhpbm9kZSk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMzExLDEwICYjNDM7MjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSAgICBhdHRyLSZndDtpYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiAJCWlmIChhdHRyLSZndDtpYV9zaXplICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewotCQkJZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwKLQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CQkJaWYgKFNfSVNSRUcoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQkJbG9mZl90IG9sZF9zaXplID0gaW5vZGUtJmd0O2lfc2l6ZTsKJiM0MzsKJiM0MzsJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQkJZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLAomIzQzOwkJCQkJCQkJICBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQkJaWYgKGVycm9yKSB7CiYjNDM7CQkJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTsKJiM0MzsJCQkJCXJldHVybiBlcnJvcjsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWVycm9yID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsCiYjNDM7CQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQkJaWYgKGVycm9yKQomIzQzOwkJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCX0KIAkJfQogCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKIAkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKQEAgLTM1Myw4NiAmIzQzOzMyMCw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCXJldHVybiAwOwogfQogCi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLSZndDtpX3NiKTsKLQlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwotCWludCBlcnJvciA9IDAsIGVycm9yMjsKLQotCWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAotCQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwotCi0JZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWlub2RlX2xvY2soaW5vZGUpOwotCi0JLyoKLQkgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy4KLQkgKi8KLQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQotCS8qCi0JICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCi0JICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAotCQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7Ci0JCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCi0JCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQljbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0KLQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwotCQkJZXJyb3IyID0KLQkJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KAotCQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IGVycm9yMjsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncykpCi0JCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQltdXRleF9sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7Ci0JaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKLQltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKLQotCWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyb3IyOwotCi0JaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKLQkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCi0JaW5vZGVfdW5sb2NrKGlub2RlKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gaGZzcGx1c19zZXRhdHRyLAogCS5nZXRhdHRyCT0gaGZzcGx1c19nZXRhdHRyLApAQCAtNDU0LDE5ICYjNDM7MzQxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5saXN0eGF0dHIJPSBoZnNwbHVzX2xpc3R4YXR0ciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi0JLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKLQkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCi19OwotCiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXVtb2RlX3QgbW9kZSkKIHsKQEAgLTUxMyw3ICYjNDM7Mzg3LDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJc2JpLSZndDtmaWxlX2NvdW50JiM0MzsmIzQzOzsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19hb3BzOwogCQloaXAtJmd0O2NsdW1wX2Jsb2NrcyA9IDE7CiAJfSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkgfHwKIAkJICAgU19JU0ZJRk8oaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtJmd0O2lfbW9kZSkpIHsKQEAgLTY1NCw3ICYjNDM7NTI4LDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWlub2RlX25vaGlnaG1lbShpbm9kZSk7Ci0JCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfYW9wczsKIAkJfSBlbHNlIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZTAwMTQ0YjI3YzE4NmEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lvbWFwLmMKQEAgLTAsMCAmIzQzOzEsMjA5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqICBsaW51eC9mcy9oZnNwbHVzL2lvbWFwLmMKJiM0MzsgKgomIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbQomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwkJCQkgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJCQkgc3RydWN0IGlvbWFwICppb21hcCwgYm9vbCBtYXlfYWxsb2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwl1MzIgYWJsb2NrLCBkYmxvY2ssIG1heF9ibG9ja3M7CiYjNDM7CWxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7CiYjNDM7CWxvZmZfdCBibG9ja19zdGFydDsKJiM0MzsJYm9vbCBpc19uZXc7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghbWF5X2FsbG9jKSB7CiYjNDM7CQkvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi8KJiM0MzsJCWlmIChpX3NpemVfcmVhZChpbm9kZSkgJmx0Oz0gb2Zmc2V0KSB7CiYjNDM7CQkJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9IT0xFOwomIzQzOwkJCWlvbWFwLSZndDthZGRyID0gSU9NQVBfTlVMTF9BRERSOwomIzQzOwkJCWlvbWFwLSZndDtvZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CQkJaW9tYXAtJmd0O2xlbmd0aCA9IGxlbmd0aDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqLwomIzQzOwkJaWYgKG9mZnNldCAmIzQzOyBsZW5ndGggJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCQlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwkJCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7CiYjNDM7CQkJbGVuZ3RoID0gcm91bmRfdXAoaV9zaXplLCBibG9ja3NpemUpIC0gb2Zmc2V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWFibG9jayA9IG9mZnNldCAmZ3Q7Jmd0OyBzYmktJmd0O2FsbG9jX2Jsa3N6X3NoaWZ0OwomIzQzOwomIzQzOwllcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCAmYW1wO2RibG9jaywKJiM0MzsJCQkJICZhbXA7bWF4X2Jsb2NrcywgTlVMTCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0ICZhbXA7IChzYmktJmd0O2FsbG9jX2Jsa3N6IC0gMSk7CiYjNDM7CWFibG9ja19ieXRlcyA9IChsb2ZmX3QpbWF4X2Jsb2NrcyAmbHQ7Jmx0OyBzYmktJmd0O2FsbG9jX2Jsa3N6X3NoaWZ0OwomIzQzOwomIzQzOwlsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7CiYjNDM7CWJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7CiYjNDM7CWlzX25ldyA9IG1heV9hbGxvYyAmYW1wOyZhbXA7IGJsb2NrX3N0YXJ0ICZndDs9IGhpcC0mZ3Q7cGh5c19zaXplOwomIzQzOwlpZiAobWF5X2FsbG9jICZhbXA7JmFtcDsgIWlzX25ldyAmYW1wOyZhbXA7IG9mZnNldCAmbHQ7IGhpcC0mZ3Q7cGh5c19zaXplKQomIzQzOwkJbGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC0mZ3Q7cGh5c19zaXplIC0gb2Zmc2V0KTsKJiM0MzsKJiM0MzsJaW9tYXAtJmd0O2JkZXYgPSBzYi0mZ3Q7c19iZGV2OwomIzQzOwlpb21hcC0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwlpb21hcC0mZ3Q7bGVuZ3RoID0gbGVuZ3RoOwomIzQzOwlpb21hcC0mZ3Q7YWRkciA9IGhmc3BsdXNfYWJsb2NrX3RvX3BoeXNfYnl0ZXMoc2IsIGRibG9jaykgJiM0MzsgYWJsb2NrX29mZnNldDsKJiM0MzsJaW9tYXAtJmd0O3R5cGUgPSBJT01BUF9NQVBQRUQ7CiYjNDM7CWlvbWFwLSZndDtmbGFncyA9IElPTUFQX0ZfTUVSR0VEOwomIzQzOwomIzQzOwlpZiAoaXNfbmV3KQomIzQzOwkJaW9tYXAtJmd0O2ZsYWdzIHw9IElPTUFQX0ZfTkVXOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CQkJCWxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCQkJc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLAomIzQzOwkJCQkgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncywKJiM0MzsJCQkJICAgICBpb21hcCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJCQkJICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkJCSAgICAgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLAomIzQzOwkJCQkgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncywKJiM0MzsJCQkJICAgICBpb21hcCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHMgPSB7CiYjNDM7CS5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKCkKJiM0MzsgKgomIzQzOyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFyawomIzQzOyAqIChoaXAtJmd0O3BoeXNfc2l6ZSAvIGhpcC0mZ3Q7ZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsCiYjNDM7CQkJCSAgIGxvZmZfdCBsZW5ndGgsIHNzaXplX3Qgd3JpdHRlbiwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlsb2ZmX3QgZW5kOwomIzQzOwlib29sIGRpcnRpZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCF3cml0dGVuKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVuZCA9IHJvdW5kX3VwKHBvcyAmIzQzOyB3cml0dGVuLCBzYi0mZ3Q7c19ibG9ja3NpemUpOwomIzQzOwomIzQzOwlpZiAoaGlwLSZndDtwaHlzX3NpemUgJmx0OyBlbmQpIHsKJiM0MzsJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLSZndDtwaHlzX3NpemUpOwomIzQzOwkJaGlwLSZndDtwaHlzX3NpemUgPSBlbmQ7CiYjNDM7CQloaXAtJmd0O2ZzX2Jsb2NrcyA9IGVuZCAmZ3Q7Jmd0OyBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsJCWRpcnRpZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChkaXJ0aWVkKQomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiB3cml0dGVuOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4JPSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLAomIzQzOwkuaW9tYXBfZW5kCT0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKQomIzQzOyAqCiYjNDM7ICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJiMzOTtzaXplJiMzOTsuCiYjNDM7ICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS4KJiM0MzsgKi8KJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CWxvZmZfdCBzdGFydCA9IGhpcC0mZ3Q7cGh5c19zaXplOwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmbHQ7PSBzdGFydCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgc3RhcnQsIHNpemUgLSBzdGFydCwgTlVMTCwKJiM0MzsJCQkJJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrCiYjNDM7ICoKJiM0MzsgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGUKJiM0MzsgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywKJiM0MzsJCQkJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyB3cGMtJmd0O2lvbWFwLm9mZnNldCB8fAomIzQzOwkgICAgb2Zmc2V0ICZndDs9IHdwYy0mZ3Q7aW9tYXAub2Zmc2V0ICYjNDM7IHdwYy0mZ3Q7aW9tYXAubGVuZ3RoKSB7CiYjNDM7CQllcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLSZndDtpbm9kZSwKJiM0MzsJCQkJCSAgICBvZmZzZXQsIGxlbiwgMCwKJiM0MzsJCQkJCSAgICAmYW1wO3dwYy0mZ3Q7aW9tYXAsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzID0gewomIzQzOwkud3JpdGViYWNrX3JhbmdlCT0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsCiYjNDM7CS53cml0ZWJhY2tfc3VibWl0CT0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oKSAtIERpcmVjdCBJL08gd3JpdGUgY29tcGxldGlvbiBoYW5kbGVyCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwKJiM0MzsJCQkJCSBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChzaXplICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZsdDsgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpOwomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHsKJiM0MzsJLmVuZF9pbwkJPSBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbywKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywKJiM0MzsJCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3BhbikKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuaCBiL2ZzL2hmc3BsdXMvaW9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMWVhMzMzM2MxZTA3NTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lvbWFwLmgKQEAgLTAsMCAmIzQzOzEsMjAgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogIGxpbnV4L2ZzL2hmc3BsdXMvaW9tYXAuaAomIzQzOyAqCiYjNDM7ICogaW9tYXAgY2FsbGJhY2sgZGVjbGFyYXRpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfTElOVVhfSEZTUExVU19JT01BUF9ICiYjNDM7I2RlZmluZSBfTElOVVhfSEZTUExVU19JT01BUF9ICiYjNDM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wczsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzOwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTsKJiM0MztpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsCiYjNDM7CQkJCXN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKaW5kZXggNDVmYjRjOWZmOWY1ZWUuLjE0MTdlMTlkOTRiY2VjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaApAQCAtMTcxLDE4ICYjNDM7MTcxLDIyIEBAIGVudW0gewogCUhGU19YQVRUUl9OQU1FLAogfTsKIAomIzQzOyNkZWZpbmUgSEZTX0ZPUktfRVhURU5UX0NPVU5UCSgzKQomIzQzOwogc3RydWN0IGhmc19leHRlbnQgewogCV9fYmUxNiBibG9jazsKIAlfX2JlMTYgY291bnQ7CiB9OwotdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1szXTsKJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07CiYjNDM7CiYjNDM7I2RlZmluZSBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UCSg4KQogCiAvKiBBIHNpbmdsZSBjb250aWd1b3VzIGFyZWEgb2YgYSBmaWxlICovCiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgewogCV9fYmUzMiBzdGFydF9ibG9jazsKIAlfX2JlMzIgYmxvY2tfY291bnQ7CiB9IF9fcGFja2VkOwotdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdOwomIzQzO3R5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1tIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXTsKIAogLyogSW5mb3JtYXRpb24gZm9yIGEgJiMzNDtGb3JrJiMzNDsgaW4gYSBmaWxlICovCiBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDAwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzU5CgkJCQkJCQlvdXRwdXQ6IDI4MAoJCQkJCQkJdGhvdWdodHM6IDEyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSEZTJiM0MzsgaW9tYXAgQ29udmVyc2lvbjogRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCBmdW5kYW1lbnRhbGx5IHJlZmFjdG9ycyB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSwgcmVwbGFjaW5nIHRoZSBsZWdhY3kgSS9PIHdpdGggaW9tYXAuIFRoaXMgaXMgYSBiaWcgZGVhbDsgd2UmIzM5O3JlIHRhbGtpbmcgY29yZSBmaWxlIEkvTyBvcGVyYXRpb25zIOKAkyByZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUg4oCTIGFsbCBiZWluZyByZWRpcmVjdGVkIHRocm91Z2ggYSBuZXcgcGF0aC4gVGhhdCYjMzk7cyBhIGh1Z2UgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucywgc28gZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5c2NhbGxzLCBzbyB0aGF0IG1ha2VzIHRoaW5ncyBzdHJhaWdodGZvcndhcmQuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBXZSYjMzk7dmUgZ290IHR3byBuZXcgZmlsZXM6IGBpb21hcC5jYCBhbmQgYGZpbGUuY2AuIGBpb21hcC5jYCBpbXBsZW1lbnRzIHRoZSBpb21hcCBvcGVyYXRpb25zOiBgX19oZnNwbHVzX2lvbWFwX2JlZ2luYCwgYGhmc3BsdXNfaW9tYXBfYmVnaW5gLCBgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbmAsIGBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZGAsIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYCwgYGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9kaW9fZW5kX2lvYCwgYW5kIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLiBUaGVzZSBhcmUgdGhlIGRpcmVjdCBpb21hcCBpbXBsZW1lbnRhdGlvbnMuCgpUaGVuIHRoZXJlJiMzOTtzIGBmaWxlLmNgLCB3aGljaCBub3cgaG91c2VzIHRoZSBmaWxlIG9wZXJhdGlvbnMuIFdlIGhhdmU6IGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfcmVsZWFzZWAsIGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZWAsIGBoZnNwbHVzX2Rpb193cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJgLCBhbmQgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgcG9pbnRzIGZvciB0ZXN0aW5nIHRoZSBuZXcgSS9PIGZsb3cuCgpCZXlvbmQgdGhvc2UsIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIGluIGBleHRlbnRzLmNgLCBzcGVjaWZpY2FsbHkgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgLCBgaGZzcGx1c19tYXBfZXh0ZW50YCwgYGhmc3BsdXNfZ2V0X2Jsb2NrYCwgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgLiAgYGJpdG1hcC5jYCBhbHNvIGdldHMgc29tZSBhdHRlbnRpb24gd2l0aCBgaGZzcGx1c19ibG9ja19hbGxvY2F0ZWAgYW5kIGBoZnNwbHVzX2Jsb2NrX2ZyZWVgLCBzbyB0aGVzZSBhcmUgYWxzbyByZWxldmFudCwgZXNwZWNpYWxseSBzaW5jZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBjYW4gYmUgdHJpY2t5LgoKVG8gcnVuIHRoaXMsIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgaXMgYENPTkZJR19IRlNQTFVTX0ZTYCwgd2hpY2ggaXMgdGhlIG1haW4gSEZTJiM0MzsgY29uZmlnLgoKU28sIGxldCYjMzk7cyBkaXN0aWxsIHRoYXQgZG93biB0byBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzoKCiogICBgaGZzcGx1c19tYXBfZXh0ZW50YAoqICAgYGhmc3BsdXNfaW9tYXBfYmVnaW5gCiogICBgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbmAKKiAgIGBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZGAKKiAgIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYAoqICAgYGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlYAoqICAgYGhmc3BsdXNfZmlsZV93cml0ZV9kaW9fZW5kX2lvYAoqICAgYGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVgCiogICBgaGZzcGx1c19kaW9fd3JpdGVfaXRlcmAKKiAgIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYAoqICAgYGhmc3BsdXNfZmlsZV9sbHNlZWtgCiogICBgaGZzcGx1c19maWxlX2ZzeW5jYAoqICAgYGhmc3BsdXNfYmxvY2tfYWxsb2NhdGVgCiogICBgaGZzcGx1c19ibG9ja19mcmVlYAoKRXZlcnl0aGluZyBwb2ludHMgdG8gdGhpcyBiZWluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFdlIG5lZWQgdG8gdGhvcm91Z2hseSB0ZXN0IGV2ZXJ5IGFzcGVjdCBvZiB0aGUgbmV3IGlvbWFwIGludGVncmF0aW9uLCBmcm9tIGJhc2ljIHJlYWRzIGFuZCB3cml0ZXMgdG8gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgbGlrZSB0cnVuY2F0ZSwgc3luYywgYW5kIGJsb2NrIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRvIGVuc3VyZSB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSByZW1haW5zIHN0YWJsZSBhbmQgY29ycmVjdCB1bmRlciB0aGUgbmV3IGlvbWFwIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfbWFwX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZV9pb21hcF9lbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9jb250X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlYmFja19yYW5nZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZGlvX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfbGxzZWVrJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9mc3luYyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfYmxvY2tfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udmVydHMgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX21hcF9leHRlbnQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfd3JpdGVfaW9tYXBfZW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c193cml0ZWJhY2tfcmFuZ2UmIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8mIzM0OywKICAgICYjMzQ7aGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Rpb193cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZmlsZV9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7aGZzcGx1c19maWxlX2xsc2VlayYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibG9ja19hbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2Jsb2NrX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMDA6Mzg6NDIuNjM5MDMxMDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NTY3MjMyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9lbmRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRcIixcbiAgICBcImhmc3BsdXNfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pb1wiLFxuICAgIFwiaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZVwiLFxuICAgIFwiaGZzcGx1c19kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9sbHNlZWtcIixcbiAgICBcImhmc3BsdXNfZmlsZV9mc3luY1wiLFxuICAgIFwiaGZzcGx1c19ibG9ja19hbGxvY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19ibG9ja19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAwOjM4OjQyLjYzOTAzOTE0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4OTQ1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODU2ZmU3NmY0MWUwOTY0ZTBiNGRjMjdiMzAyMTcwMDM5NjA4NTdkZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAwMDozODo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL0tjb25maWcgYi9mcy9oZnNwbHVzL0tjb25maWdcXG5pbmRleCBjYTg0MDFjYjY5NTRkNS4uYjQ0MzJjNjRkYjNiZWMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9LY29uZmlnXFxuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXFxuQEAgLTUsNyArNSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXFxuIFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiBcXHRzZWxlY3QgTkxTXFxuIFxcdHNlbGVjdCBOTFNfVVRGOFxcbi1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbitcXHRzZWxlY3QgRlNfSU9NQVBcXG4gXFx0aGVscFxcbiBcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxcbiBcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG5pbmRleCBmMmE5YWU2OTdlODExNC4uM2RkZWE2OWE5YzY5ODMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9NYWtlZmlsZVxcbisrKyBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG5AQCAtNSw4ICs1LDkgQEBcXG4gXFxuIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSArPSBoZnNwbHVzLm9cXG4gXFxuLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXFxcXG4tXFx0XFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxcXFxuK1xcdFxcdGNhdGFsb2cubyBkaXIubyBidHJlZS5vIGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gXFxcXFxcbitcXHRcXHR1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbiBcXHRcXHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cXG4gXFxuICMgS1VuaXQgdGVzdHNcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcXG5pbmRleCAxYjNhZjhjODdjYWRiNS4uNTcxNjUyZmJhZWRhM2IgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuY1xcbisrKyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcXG5AQCAtMzksNiArMzksNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbitcXHRsb2NrX3BhZ2UocGFnZSk7XFxuIFxcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcXG4gXFx0aSA9IG9mZnNldCAlIDMyO1xcbkBAIC03NSw2ICs3Niw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRcXHRjdXJyKys7XFxuIFxcdFxcdH1cXG4gXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4gXFx0XFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcXG4gXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSBzaXplKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtODQsNiArODYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXHRcXHRsb2NrX3BhZ2UocGFnZSk7XFxuIFxcdFxcdGN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRcXHRpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKVxcbiBcXHRcXHRcXHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XFxuQEAgLTk4LDYgKzEwMSw5IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRzdGFydCA9IG9mZnNldCArIChjdXJyIC0gcHB0cikgKiAzMiArIGk7XFxuIFxcdGlmIChzdGFydCBcXHUwMDNlPSBzaXplKSB7XFxuIFxcdFxcdGhmc19kYmcoXFxcImJpdG1hcCBmdWxsXFxcXG5cXFwiKTtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4rXFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHQvKiBkbyBhbnkgcGFydGlhbCB1MzIgYXQgdGhlIHN0YXJ0ICovXFxuQEAgLTEyOCw2ICsxMzQsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0fVxcbiBcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4gXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4gXFx0XFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcXG4gXFx0XFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUyxcXG4gXFx0XFx0XFx0XFx0XFx0IE5VTEwpO1xcbkBAIC0xMzUsNiArMTQyLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuIFxcdFxcdFxcdHN0YXJ0ID0gc2l6ZTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRcXHRjdXJyID0gcHB0cjtcXG4gXFx0XFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xcbkBAIC0xNTIsNiArMTYwLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuIFxcdCpjdXJyID0gY3B1X3RvX2JlMzIobik7XFxuIFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHQqbWF4ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaSAtIHN0YXJ0O1xcbiBcXHRzYmktXFx1MDAzZWZyZWVfYmxvY2tzIC09ICptYXg7XFxuIFxcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xcbkBAIC0xODUsNiArMTk0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXFxuIFxcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xcbiBcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbiBcXHRcXHRnb3RvIGthYm9vbTtcXG4rXFx0bG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XFxuIFxcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcXG5AQCAtMjE2LDkgKzIyNiwxMSBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdFxcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgKytwbnIsIE5VTEwpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbiBcXHRcXHRcXHRnb3RvIGthYm9vbTtcXG4rXFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRcXHRjdXJyID0gcHB0cjtcXG4gXFx0XFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xcbkBAIC0yMzIsNiArMjQ0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXFxuIG91dDpcXG4gXFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuIFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuIFxcdHNiaS1cXHUwMDNlZnJlZV9ibG9ja3MgKz0gbGVuO1xcbiBcXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzYmktXFx1MDAzZWFsbG9jX211dGV4KTtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbmluZGV4IDgxM2U2OGI4ZWNkNjU0Li44ZjdmNTYwY2VjNjQyNyAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xcbisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4gXFxuIC8qIENvbXBhcmUgdHdvIGV4dGVudHMga2V5cywgcmV0dXJucyAwIG9uIHNhbWUsIHBvcy9uZWcgZm9yIGRpZmZlcmVuY2UgKi9cXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxcbkBAIC00OCwxOCArNDksMjkgQEAgc3RhdGljIHZvaWQgaGZzcGx1c19leHRfYnVpbGRfa2V5KGhmc3BsdXNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLFxcbiBcXHRrZXktXFx1MDAzZWV4dC5wYWQgPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYpXFxuKy8qXFxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xcbisgKlxcbisgKiBGaW5kIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgZm9yICdvZmYnIHdpdGhpbiBhbiA4LWVudHJ5XFxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcXG4rICogdGhhdCBhcmUgY29udGlndW91cyB3aXRoIGl0IGluIHRoZSBzYW1lIGV4dGVudCBlbnRyeS5cXG4rICovXFxuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcXG4rXFx0XFx0XFx0XFx0IHUzMiAqZGJsb2NrKVxcbiB7XFxuIFxcdGludCBpO1xcbiBcXHR1MzIgY291bnQ7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgODsgZXh0KyssIGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKykge1xcbiBcXHRcXHRjb3VudCA9IGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlYmxvY2tfY291bnQpO1xcbi1cXHRcXHRpZiAob2ZmIFxcdTAwM2MgY291bnQpXFxuLVxcdFxcdFxcdHJldHVybiBiZTMyX3RvX2NwdShleHQtXFx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcXG4rXFx0XFx0aWYgKG9mZiBcXHUwMDNjIGNvdW50KSB7XFxuK1xcdFxcdFxcdCpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtXFx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcXG4rXFx0XFx0XFx0cmV0dXJuIGNvdW50IC0gb2ZmO1xcbitcXHRcXHR9XFxuIFxcdFxcdG9mZiAtPSBjb3VudDtcXG4gXFx0fVxcbiBcXHQvKiBwYW5pYz8gKi9cXG4rXFx0KmRibG9jayA9IDA7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuIFxcdGludCBpO1xcbiBcXHR1MzIgY291bnQgPSAwO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDg7IGV4dCsrLCBpKyspXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQrKywgaSsrKVxcbiBcXHRcXHRjb3VudCArPSBiZTMyX3RvX2NwdShleHQtXFx1MDAzZWJsb2NrX2NvdW50KTtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuQEAgLTIyMywzNyArMjM1LDQ2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuIFxcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xcbi1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbi1cXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcXG4rLypcXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcXG4rICpcXG4rICogTG9va3MgdXAgdGhlIGFsbG9jYXRpb24gYmxvY2sgYXQgJ2FibG9jaycgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlXFxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cXG4rICogJ2NyZWF0ZScgaXMgc2V0IGFuZCAnYWJsb2NrJyBsaWVzIGJleW9uZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uLlxcbisgKlxcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcXG4rICogYW5kICptYXhfYmxvY2tzIGlzIHRoZSBudW1iZXIgb2YgZnVydGhlciBhbGxvY2F0aW9uIGJsb2NrcyB0aGF0IGFyZVxcbisgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeVxcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXFxuKyAqIHJlbWFpbmluZyBhbGxvY2F0aW9uIHdoZW4gdGhlIGZvcmsgaXMgZnJhZ21lbnRlZCBhY3Jvc3Mgc2V2ZXJhbFxcbisgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGVcXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXFxuKyAqL1xcbitpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXFxuK1xcdFxcdFxcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcXG4ge1xcbi1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbiBcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbi1cXHRpbnQgcmVzID0gLUVJTztcXG4tXFx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xcbi1cXHRzZWN0b3JfdCBzZWN0b3I7XFxuLVxcdGludCB3YXNfZGlydHkgPSAwO1xcbitcXHRpbnQgd2FzX2RpcnR5O1xcbitcXHRpbnQgcmVzO1xcbiBcXG4tXFx0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cXG4tXFx0YWJsb2NrID0gaWJsb2NrIFxcdTAwM2VcXHUwMDNlIHNiaS1cXHUwMDNlZnNfc2hpZnQ7XFxuK1xcdGlmIChiYWxsb2MpXFxuK1xcdFxcdCpiYWxsb2MgPSBmYWxzZTtcXG4gXFxuLVxcdGlmIChpYmxvY2sgXFx1MDAzZT0gaGlwLVxcdTAwM2Vmc19ibG9ja3MpIHtcXG4rXFx0aWYgKGFibG9jayBcXHUwMDNlPSBoaXAtXFx1MDAzZWFsbG9jX2Jsb2Nrcykge1xcbiBcXHRcXHRpZiAoIWNyZWF0ZSlcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdGlmIChpYmxvY2sgXFx1MDAzZSBoaXAtXFx1MDAzZWZzX2Jsb2NrcylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdFxcdGlmIChhYmxvY2sgXFx1MDAzZT0gaGlwLVxcdTAwM2VhbGxvY19ibG9ja3MpIHtcXG4tXFx0XFx0XFx0cmVzID0gaGZzcGx1c19maWxlX2V4dGVuZChpbm9kZSwgZmFsc2UpO1xcbi1cXHRcXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZVxcbi1cXHRcXHRjcmVhdGUgPSAwO1xcbitcXHRcXHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdGlmIChiYWxsb2MpXFxuK1xcdFxcdFxcdCpiYWxsb2MgPSB0cnVlO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoYWJsb2NrIFxcdTAwM2MgaGlwLVxcdTAwM2VmaXJzdF9ibG9ja3MpIHtcXG4tXFx0XFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXFx1MDAzZWZpcnN0X2V4dGVudHMsIGFibG9jayk7XFxuLVxcdFxcdGdvdG8gZG9uZTtcXG4rXFx0XFx0Km1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cXHUwMDNlZmlyc3RfZXh0ZW50cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhYmxvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgZGJsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gSEZTUExVU19FWFRfQ05JRClcXG5AQCAtMjcyLDExICsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZoaXAtXFx1MDAzZWV4dGVudHNfbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuLVxcdGRibG9jayA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG4tXFx0XFx0XFx0XFx0XFx0YWJsb2NrIC0gaGlwLVxcdTAwM2VjYWNoZWRfc3RhcnQpO1xcbitcXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVxcdTAwM2VjYWNoZWRfZXh0ZW50cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBhYmxvY2sgLSBoaXAtXFx1MDAzZWNhY2hlZF9zdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBkYmxvY2spO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmhpcC1cXHUwMDNlZXh0ZW50c19sb2NrKTtcXG4gXFxuLWRvbmU6XFxuK1xcdGlmICh3YXNfZGlydHkpXFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovXFxuK2ludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuK1xcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcXG4rXFx0c2VjdG9yX3Qgc2VjdG9yO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0LyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi9cXG4rXFx0YWJsb2NrID0gaWJsb2NrIFxcdTAwM2VcXHUwMDNlIHNiaS1cXHUwMDNlZnNfc2hpZnQ7XFxuK1xcbitcXHRpZiAoaWJsb2NrIFxcdTAwM2U9IGhpcC1cXHUwMDNlZnNfYmxvY2tzKSB7XFxuK1xcdFxcdGlmICghY3JlYXRlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKGlibG9jayBcXHUwMDNlIGhpcC1cXHUwMDNlZnNfYmxvY2tzKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fSBlbHNlXFxuK1xcdFxcdGNyZWF0ZSA9IDA7XFxuK1xcbitcXHRyZXMgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgY3JlYXRlLCBcXHUwMDI2ZGJsb2NrLCBcXHUwMDI2bWF4X2Jsb2NrcyxcXG4rXFx0XFx0XFx0XFx0ICBOVUxMKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuIFxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBpYmxvY2sgJWxsdSAtIGRibG9jayAldVxcXFxuXFxcIixcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcXG4gXFxuQEAgLTI5MCw5ICszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbiBcXHRcXHRoaXAtXFx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuIFxcdFxcdGhpcC1cXHUwMDNlZnNfYmxvY2tzKys7XFxuIFxcdFxcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4tXFx0fVxcbi1cXHRpZiAoY3JlYXRlIHx8IHdhc19kaXJ0eSlcXG4gXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTU1MywyMCArNjA2LDMyIEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXFx1MDAzZXBoeXNfc2l6ZSwgaW5vZGUtXFx1MDAzZWlfc2l6ZSk7XFxuIFxcbiBcXHRpZiAoaW5vZGUtXFx1MDAzZWlfc2l6ZSBcXHUwMDNlIGhpcC1cXHUwMDNlcGh5c19zaXplKSB7XFxuLVxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0XFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcXG4tXFx0XFx0bG9mZl90IHNpemUgPSBpbm9kZS1cXHUwMDNlaV9zaXplO1xcbitcXHRcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXHRcXHRcXHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXFx1MDAzZWlfbWFwcGluZztcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0XFx0XFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcXG4rXFxuK1xcdFxcdFxcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBpbm9kZS1cXHUwMDNlaV9zaXplLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZmb2xpbywgXFx1MDAyNmZzZGF0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdFxcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUsIDAsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZvbGlvLCBmc2RhdGEpO1xcbitcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Zm9saW8sIFxcdTAwMjZmc2RhdGEpO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvLCBmc2RhdGEpO1xcbi1cXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9IGVsc2UgaWYgKGlub2RlLVxcdTAwM2VpX3NpemUgPT0gaGlwLVxcdTAwM2VwaHlzX3NpemUpXFxuIFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjhjOTJlMTQ1Mjk1Y2ExXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXFxuQEAgLTAsMCArMSwzMDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogIGxpbnV4L2ZzL2hmc3BsdXMvZmlsZS5jXFxuKyAqXFxuKyAqIEZpbGUgb3BlcmF0aW9uczogb3Blbi9yZWxlYXNlL2ZzeW5jIGFuZCBpb21hcC1iYXNlZCByZWFkL3dyaXRlL3NlZWtcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW91bnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiaGZzcGx1c19mcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaGZzcGx1c19yYXcuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImlvbWFwLmhcXFwiXFxuK1xcbitzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbitcXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuK1xcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0xBUkdFRklMRSkgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2UgTUFYX05PTl9MRlMpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KTtcXG4rXFx0ZmlsZS1cXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcbitcXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcXG4rXFx0XFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2Vyc3JjX2lub2RlO1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2SEZTUExVU19JKGlub2RlKS1cXHUwMDNlb3BlbmNudCkpIHtcXG4rXFx0XFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcdFxcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XFxuK1xcdFxcdGlmIChpbm9kZS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IFNfREVBRCkge1xcbitcXHRcXHRcXHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXFx1MDAzZWlfaW5vLFxcbitcXHRcXHRcXHRcXHRcXHQgICBIRlNQTFVTX1NCKHNiKS1cXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XFxuK1xcdFxcdFxcdGhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuK1xcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXFx1MDAzZXNfdmhkcjtcXG4rXFx0aW50IGVycm9yID0gMCwgZXJyb3IyO1xcbitcXG4rXFx0aGZzX2RiZyhcXFwiaW5vZGUtXFx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xcbitcXG4rXFx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxcbitcXHQgKi9cXG4rXFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWNhdF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IyID1cXG4rXFx0XFx0XFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWV4dF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzYmktXFx1MDAzZWF0dHJfdHJlZSkge1xcbitcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRlcnJvcjIgPVxcbitcXHRcXHRcXHRcXHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc2JpLVxcdTAwM2VhdHRyX3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbitcXHRcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdFxcdHByX2VycihcXFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koc2JpLVxcdTAwM2VhbGxvY19maWxlKS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWFsbG9jX2ZpbGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK1xcdFxcdGlmICghZXJyb3IpXFxuK1xcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4rXFx0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4rXFxuK1xcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFxcdTAwMjZzYmktXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcXG4rICogdGFpbCBvZiBhIHdyaXRlIHRoYXQgaW9tYXBfZGlvX3J3KCkgY291bGQgbm90IHBlcmZvcm0gZGlyZWN0bHlcXG4rICogKHVuYWxpZ25lZCB0YWlsLCBvciBubyBibG9ja3MgY291bGQgYmUgbWFwcGVkIHdpdGhvdXQgYWxsb2NhdGlvblxcbisgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbit7XFxuK1xcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MsIGVuZDtcXG4rXFx0c3NpemVfdCB3cml0dGVuO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNj0gfklPQ0JfRElSRUNUO1xcbitcXG4rXFx0d3JpdHRlbiA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXG4rXFx0ZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgd3JpdHRlbiAtIDE7XFxuK1xcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQsIGVuZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXFx1MDAzZWtpX2ZpbHAtXFx1MDAzZWZfbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHQgZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIHdyaXR0ZW47XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSxcXG4rXFx0XFx0XFx0ICAgXFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHQgICBcXHUwMDI2aGZzcGx1c193cml0ZV9kaW9fb3BzLFxcbitcXHRcXHRcXHQgICAwLCBOVUxMLCAwKTtcXG4rXFx0aWYgKHJldCA9PSAtRU5PVEJMSylcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0ZWxzZSBpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChpb3ZfaXRlcl9jb3VudChmcm9tKSkge1xcbitcXHRcXHRzc2l6ZV90IHdyaXR0ZW47XFxuK1xcbitcXHRcXHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcXG4rXFx0XFx0aWYgKHdyaXR0ZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gd3JpdHRlbjtcXG4rXFx0XFx0cmV0ICs9IHdyaXR0ZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRsb2ZmX3QgdG90YWxfY2FwYWNpdHk7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuK1xcbitcXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHRvdGFsX2NhcGFjaXR5ID0gKGxvZmZfdClzYmktXFx1MDAzZXRvdGFsX2Jsb2NrcyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XFxuK1xcdFxcdHJldCA9IC1FRkJJRztcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGZpbGVfbW9kaWZpZWQoZmlsZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbitcXHRcXHRsb2ZmX3Qgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuK1xcdFxcdGxvZmZfdCBuZXdfc2l6ZSA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFxuK1xcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSB7XFxuK1xcdFxcdFxcdG5ld19zaXplID0gbWF4X3QobG9mZl90LCBuZXdfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VwaHlzX3NpemUpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcXG4rXFx0XFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fSBlbHNlIGlmICgoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcGh5c19zaXplIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcGh5c19zaXplKTtcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKVxcbitcXHRcXHRyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpO1xcbitcXHRlbHNlIHtcXG4rXFx0XFx0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIE5VTEwpO1xcbitcXHR9XFxuK1xcbit1bmxvY2s6XFxuK1xcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGlub2RlX2xvY2tfc2hhcmVkKGlub2RlKTtcXG4rXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSB7XFxuK1xcdFxcdGZpbGVfYWNjZXNzZWQoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdFxcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMsXFxuK1xcdFxcdFxcdFxcdCAgIE5VTEwsIDAsIE5VTEwsIDApO1xcbitcXHR9IGVsc2VcXG4rXFx0XFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcXG4rXFxuK1xcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3Q7XFxuK1xcbitcXHRzd2l0Y2ggKHdoZW5jZSkge1xcbitcXHRjYXNlIFNFRUtfSE9MRTpcXG4rXFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXHRcXHRvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rXFx0XFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNFRUtfREFUQTpcXG4rXFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXHRcXHRvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rXFx0XFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2Zmc2V0O1xcbitcXG4rXFx0cmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhieXRlcyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XFxuK1xcdC5sbHNlZWtcXHRcXHQ9IGhmc3BsdXNfZmlsZV9sbHNlZWssXFxuK1xcdC5yZWFkX2l0ZXJcXHQ9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsXFxuK1xcdC53cml0ZV9pdGVyXFx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcixcXG4rXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4rXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbitcXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbitcXHQuZnN5bmNcXHRcXHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcXG4rXFx0Lm9wZW5cXHRcXHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxcbitcXHQucmVsZWFzZVxcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXFxuK1xcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG5pbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uYjljYWRiYzZjNmQyMTYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbkBAIC0xNzUsNiArMTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4gfVxcbiBcXG4rLypcXG4rICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAnZGJsb2NrJyBvbiB0aGUgdm9sdW1lLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBsb2ZmX3QgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBkYmxvY2spXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuK1xcdGxvZmZfdCBwaHlzX2J5dGVzO1xcbitcXG4rXFx0cGh5c19ieXRlcyA9IGRibG9jaztcXG4rXFx0cGh5c19ieXRlcyBcXHUwMDNjXFx1MDAzYz0gc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFx0cGh5c19ieXRlcyArPSBzYmktXFx1MDAzZWJsb2Nrb2Zmc2V0O1xcbitcXHRwaHlzX2J5dGVzIFxcdTAwM2NcXHUwMDNjPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4rXFxuK1xcdHJldHVybiBwaHlzX2J5dGVzO1xcbit9XFxuIFxcbiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcXG4gXFx0YXRvbWljX3Qgb3BlbmNudDtcXG5AQCAtNDM2LDYgKzQ1Miw4IEBAIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcXG4gaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xcbitpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXFxuK1xcdFxcdFxcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7XFxuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcXG4gXFx0XFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcXG4gaW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KTtcXG5AQCAtNDQzLDYgKzQ2MSw3IEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gLyogaW5vZGUuYyAqL1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucztcXG4gXFxuQEAgLTQ2MiwxMiArNDgxLDE1IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXFxuIFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcXVlcnlfZmxhZ3MpO1xcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuLVxcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcbisvKiBmaWxlLmMgKi9cXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4rXFx0XFx0ICAgICAgIGludCBkYXRhc3luYyk7XFxuK1xcbiAvKiBpb2N0bC5jICovXFxuIGxvbmcgaGZzcGx1c19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jXFxuaW5kZXggMWM1N2M4NzNmMDVkNjEuLjFmMTY2NjNlYWRiMDk1IDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbisrKyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbkBAIC0xOCwxMiArMTgsMTQgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZWF0dHIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbWFwLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaGZzcGx1c19mcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaGZzcGx1c19yYXcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhhdHRyLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5oXFxcIlxcbiBcXG4tc3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIH1cXG5AQCAtMTIwLDY2ICsxMjIsNyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaylcXG4gXFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi17XFxuLVxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4tXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRsb2ZmX3QgaXNpemU7XFxuLVxcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xcbi1cXHRsb2ZmX3QgZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgY291bnQ7XFxuLVxcdHNzaXplX3QgcmV0O1xcbi1cXG4tXFx0LypcXG4tXFx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cXG4tXFx0ICogRm9yIGRpcmVjdCB3cml0ZXMgYmV5b25kIEVPRiwgZXhwYW5kIHRoZSBmaWxlIGZpcnN0Llxcbi1cXHQgKi9cXG4tXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbi1cXHRcXHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xcbi1cXHRcXHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XFxuLVxcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxcbi1cXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuLVxcbi1cXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdFxcdHN0YXJ0X29mZiA9IGlzaXplO1xcbi1cXHRcXHRlbmRfb2ZmID0gKGVuZCBcXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcXG4tXFxuLVxcdFxcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdFxcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0XFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcbi1cXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSW4gY2FzZSBvZiBlcnJvciBleHRlbmRpbmcgd3JpdGUgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3XFxuLVxcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXFx1MDAyNlxcdTAwMjYgcmV0IFxcdTAwM2MgMCkpIHtcXG4tXFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuLVxcbi1cXHRcXHRpZiAoZW5kIFxcdTAwM2UgaXNpemUpXFxuLVxcdFxcdFxcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitzdGF0aWMgaW50IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xcbkBAIC0xODgsOCArMTMxLDggQEAgc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbiBcXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbiBcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuLVxcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuLVxcdC53cml0ZXBhZ2VzXFx0PSBoZnNwbHVzX3dyaXRlcGFnZXMsXFxuK1xcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX2xlZ2FjeV9yZWFkX2ZvbGlvLFxcbitcXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c19sZWdhY3lfd3JpdGVwYWdlcyxcXG4gXFx0LndyaXRlX2JlZ2luXFx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxcbiBcXHQud3JpdGVfZW5kXFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcXG4gXFx0Lm1pZ3JhdGVfZm9saW9cXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxcbkBAIC0xOTcsMTggKzE0MCw1OSBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcXG4gXFx0LnJlbGVhc2VfZm9saW9cXHQ9IGhmc3BsdXNfcmVsZWFzZV9mb2xpbyxcXG4gfTtcXG4gXFxuLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xcbitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzID0ge1xcbiBcXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcbiBcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGJsb2NrX2ludmFsaWRhdGVfZm9saW8sXFxuLVxcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkX2ZvbGlvXFx0PSBoZnNwbHVzX2xlZ2FjeV9yZWFkX2ZvbGlvLFxcbiBcXHQud3JpdGVfYmVnaW5cXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmRcXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxcbiBcXHQuYm1hcFxcdFxcdD0gaGZzcGx1c19ibWFwLFxcbi1cXHQuZGlyZWN0X0lPXFx0PSBoZnNwbHVzX2RpcmVjdF9JTyxcXG4tXFx0LndyaXRlcGFnZXNcXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcXG4rXFx0LndyaXRlcGFnZXNcXHQ9IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMsXFxuIFxcdC5taWdyYXRlX2ZvbGlvXFx0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXFxuK3tcXG4rXFx0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdD0gbWFwcGluZy1cXHUwMDNlaG9zdCxcXG4rXFx0XFx0LndiY1xcdD0gd2JjLFxcbitcXHRcXHQub3BzXFx0PSBcXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4re1xcbitcXHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XFxuK1xcdC5yZWFkX2ZvbGlvXFx0XFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkYWhlYWRcXHRcXHQ9IGhmc3BsdXNfcmVhZGFoZWFkLFxcbitcXHQud3JpdGVwYWdlc1xcdFxcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQuZGlydHlfZm9saW9cXHRcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxcbitcXHQuYm1hcFxcdFxcdFxcdD0gaGZzcGx1c19hb3BfYm1hcCxcXG4rXFx0Lm1pZ3JhdGVfZm9saW9cXHRcXHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcXG4rXFx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZVxcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxcbitcXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXFx0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG4rXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbitcXHQuc3dhcF9hY3RpdmF0ZVxcdFxcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxcbit9O1xcbitcXG4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuIFxcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxcbiBcXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcXG5AQCAtMjY4LDM1ICsyNTIsNiBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZ2V0X3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAtRUlPO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi17XFxuLVxcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbi1cXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuLVxcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0xBUkdFRklMRSkgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2UgTUFYX05PTl9MRlMpXFxuLVxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbi1cXHRhdG9taWNfaW5jKFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLXtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXFxuLVxcdFxcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcnNyY19pbm9kZTtcXG4tXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZW9wZW5jbnQpKSB7XFxuLVxcdFxcdGlub2RlX2xvY2soaW5vZGUpO1xcbi1cXHRcXHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHRcXHRpZiAoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX0RFQUQpIHtcXG4tXFx0XFx0XFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVxcdTAwM2VpX2lubyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgSEZTUExVU19TQihzYiktXFx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xcbi1cXHRcXHRcXHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbiB7XFxuQEAgLTMxMSwxMCArMjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHQgICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4gXFx0XFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xcbiBcXHRcXHRpZiAoYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRcXHRcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXHRcXHRcXHRcXHRsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS1cXHUwMDNlaV9zaXplO1xcbitcXG4rXFx0XFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGF0dHItXFx1MDAzZWlhX3NpemUpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHR0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4gXFx0XFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcXG5AQCAtMzUzLDg2ICszMjAsNiBAQCBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tXFx0XFx0ICAgICAgIGludCBkYXRhc3luYylcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbi1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cXHUwMDNlc192aGRyO1xcbi1cXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XFxuLVxcbi1cXHRoZnNfZGJnKFxcXCJpbm9kZS1cXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXFxcblxcXCIsXFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XFxuLVxcbi1cXHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxcbi1cXHQgKi9cXG4tXFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cXG4tXFx0ICovXFxuLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWNhdF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4tXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0ZXJyb3IyID1cXG4tXFx0XFx0XFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWV4dF90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tXFx0XFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChzYmktXFx1MDAzZWF0dHJfdHJlZSkge1xcbi1cXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRlcnJvcjIgPVxcbi1cXHRcXHRcXHRcXHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2JpLVxcdTAwM2VhdHRyX3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbi1cXHRcXHRcXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdHByX2VycihcXFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxcXG5cXFwiKTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koc2JpLVxcdTAwM2VhbGxvY19maWxlKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXFx1MDAzZWFsbG9jX2ZpbGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbi1cXHR9XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4tXFx0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzYmktXFx1MDAzZXZoX211dGV4KTtcXG4tXFxuLVxcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRlcnJvciA9IGVycm9yMjtcXG4tXFxuLVxcdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFxcdTAwMjZzYmktXFx1MDAzZWZsYWdzKSlcXG4tXFx0XFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbi1cXG4tXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tXFxuLVxcdHJldHVybiBlcnJvcjtcXG4tfVxcbi1cXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbiBcXHQuc2V0YXR0clxcdD0gaGZzcGx1c19zZXRhdHRyLFxcbiBcXHQuZ2V0YXR0clxcdD0gaGZzcGx1c19nZXRhdHRyLFxcbkBAIC00NTQsMTkgKzM0MSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lmxpc3R4YXR0clxcdD0gaGZzcGx1c19saXN0eGF0dHIsXFxuIH07XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tXFx0LnJlYWRfaXRlclxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4tXFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbi1cXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbi1cXHQuc3BsaWNlX3JlYWRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuLVxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuLVxcdC5mc3luY1xcdFxcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxcbi1cXHQub3BlblxcdFxcdD0gaGZzcGx1c19maWxlX29wZW4sXFxuLVxcdC5yZWxlYXNlXFx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcXG4tXFx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcXG4tfTtcXG4tXFxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbkBAIC01MTMsNyArMzg3LDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0c2JpLVxcdTAwM2VmaWxlX2NvdW50Kys7XFxuIFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xcbiBcXHRcXHRoaXAtXFx1MDAzZWNsdW1wX2Jsb2NrcyA9IDE7XFxuIFxcdH0gZWxzZSBpZiAoU19JU0NIUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8XFxuIFxcdFxcdCAgIFNfSVNGSUZPKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuQEAgLTY1NCw3ICs1MjgsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIFxcdFxcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbitcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7XFxuIFxcdFxcdFxcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXFx1MDAzZWlfbW9kZSxcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5jIGIvZnMvaGZzcGx1cy9pb21hcC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTAwMTQ0YjI3YzE4NmFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5jXFxuQEAgLTAsMCArMSwyMDkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogIGxpbnV4L2ZzL2hmc3BsdXMvaW9tYXAuY1xcbisgKlxcbisgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBib29sIG1heV9hbGxvYylcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1heF9ibG9ja3M7XFxuK1xcdGxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7XFxuK1xcdGxvZmZfdCBibG9ja19zdGFydDtcXG4rXFx0Ym9vbCBpc19uZXc7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIW1heV9hbGxvYykge1xcbitcXHRcXHQvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi9cXG4rXFx0XFx0aWYgKGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNjPSBvZmZzZXQpIHtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xcbitcXHRcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xcbitcXHRcXHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdFxcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XFxuK1xcdFxcdFxcdGxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRhYmxvY2sgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2Ugc2JpLVxcdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcXG4rXFxuK1xcdGVyciA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBtYXlfYWxsb2MsIFxcdTAwMjZkYmxvY2ssXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2bWF4X2Jsb2NrcywgTlVMTCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFxcdTAwMjYgKHNiaS1cXHUwMDNlYWxsb2NfYmxrc3ogLSAxKTtcXG4rXFx0YWJsb2NrX2J5dGVzID0gKGxvZmZfdCltYXhfYmxvY2tzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XFxuK1xcbitcXHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7XFxuK1xcdGJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7XFxuK1xcdGlzX25ldyA9IG1heV9hbGxvYyBcXHUwMDI2XFx1MDAyNiBibG9ja19zdGFydCBcXHUwMDNlPSBoaXAtXFx1MDAzZXBoeXNfc2l6ZTtcXG4rXFx0aWYgKG1heV9hbGxvYyBcXHUwMDI2XFx1MDAyNiAhaXNfbmV3IFxcdTAwMjZcXHUwMDI2IG9mZnNldCBcXHUwMDNjIGhpcC1cXHUwMDNlcGh5c19zaXplKVxcbitcXHRcXHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgaGlwLVxcdTAwM2VwaHlzX3NpemUgLSBvZmZzZXQpO1xcbitcXG4rXFx0aW9tYXAtXFx1MDAzZWJkZXYgPSBzYi1cXHUwMDNlc19iZGV2O1xcbitcXHRpb21hcC1cXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xcbitcXHRpb21hcC1cXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xcbitcXHRpb21hcC1cXHUwMDNlYWRkciA9IGhmc3BsdXNfYWJsb2NrX3RvX3BoeXNfYnl0ZXMoc2IsIGRibG9jaykgKyBhYmxvY2tfb2Zmc2V0O1xcbitcXHRpb21hcC1cXHUwMDNldHlwZSA9IElPTUFQX01BUFBFRDtcXG4rXFx0aW9tYXAtXFx1MDAzZWZsYWdzID0gSU9NQVBfRl9NRVJHRUQ7XFxuK1xcbitcXHRpZiAoaXNfbmV3KVxcbitcXHRcXHRpb21hcC1cXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXFxuK3tcXG4rXFx0cmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW9tYXAsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIGlvbWFwLCB0cnVlKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKClcXG4rICpcXG4rICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXFxuKyAqIChoaXAtXFx1MDAzZXBoeXNfc2l6ZSAvIGhpcC1cXHUwMDNlZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcyxcXG4rXFx0XFx0XFx0XFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRsb2ZmX3QgZW5kO1xcbitcXHRib29sIGRpcnRpZWQgPSBmYWxzZTtcXG4rXFxuK1xcdGlmICghd3JpdHRlbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlbmQgPSByb3VuZF91cChwb3MgKyB3cml0dGVuLCBzYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXG4rXFx0aWYgKGhpcC1cXHUwMDNlcGh5c19zaXplIFxcdTAwM2MgZW5kKSB7XFxuK1xcdFxcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLVxcdTAwM2VwaHlzX3NpemUpO1xcbitcXHRcXHRoaXAtXFx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcXG4rXFx0XFx0aGlwLVxcdTAwM2Vmc19ibG9ja3MgPSBlbmQgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuK1xcdFxcdGRpcnRpZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZGlydGllZClcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gd3JpdHRlbjtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcXG4rXFx0LmlvbWFwX2JlZ2luXFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxcbitcXHQuaW9tYXBfZW5kXFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKVxcbisgKlxcbisgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAnc2l6ZScuXFxuKyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuXFxuKyAqL1xcbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHRsb2ZmX3Qgc3RhcnQgPSBoaXAtXFx1MDAzZXBoeXNfc2l6ZTtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBzdGFydCwgc2l6ZSAtIHN0YXJ0LCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX3dyaXRlYmFja19yYW5nZSgpIC0gbWFwIGZvbGlvIGR1cmluZyB3cml0ZWJhY2tcXG4rICpcXG4rICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlXFxuKyAqIHRoZSBjdXJyZW50IGlvbWFwLCByZW1hcHMgYnkgY2FsbGluZyBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oKSBhZ2Fpbi5cXG4rICovXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2Mgd3BjLVxcdTAwM2Vpb21hcC5vZmZzZXQgfHxcXG4rXFx0ICAgIG9mZnNldCBcXHUwMDNlPSB3cGMtXFx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cXHUwMDNlaW9tYXAubGVuZ3RoKSB7XFxuK1xcdFxcdGVyciA9IF9faGZzcGx1c19pb21hcF9iZWdpbih3cGMtXFx1MDAzZWlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgb2Zmc2V0LCBsZW4sIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfYWRkX3RvX2lvZW5kKHdwYywgZm9saW8sIG9mZnNldCwgZW5kX3BvcywgbGVuKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzID0ge1xcbitcXHQud3JpdGViYWNrX3JhbmdlXFx0PSBoZnNwbHVzX3dyaXRlYmFja19yYW5nZSxcXG4rXFx0LndyaXRlYmFja19zdWJtaXRcXHQ9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsXFxuK307XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbygpIC0gRGlyZWN0IEkvTyB3cml0ZSBjb21wbGV0aW9uIGhhbmRsZXJcXG4rICovXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2MgaW9jYi1cXHUwMDNla2lfcG9zICsgc2l6ZSkge1xcbitcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3BvcyArIHNpemUpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHtcXG4rXFx0LmVuZF9pb1xcdFxcdD0gaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8sXFxuK307XFxuK1xcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXFxuK3tcXG4rXFx0cmV0dXJuIGlvbWFwX3N3YXBmaWxlX2FjdGl2YXRlKHNpcywgZmlsZSwgc3BhbiwgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xZWEzMzMzYzFlMDc1OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmhcXG5AQCAtMCwwICsxLDIwIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqICBsaW51eC9mcy9oZnNwbHVzL2lvbWFwLmhcXG4rICpcXG4rICogaW9tYXAgY2FsbGJhY2sgZGVjbGFyYXRpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfTElOVVhfSEZTUExVU19JT01BUF9IXFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzO1xcbitcXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpO1xcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XFxuK1xcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuaW5kZXggNDVmYjRjOWZmOWY1ZWUuLjE0MTdlMTlkOTRiY2VjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcXG5AQCAtMTcxLDE4ICsxNzEsMjIgQEAgZW51bSB7XFxuIFxcdEhGU19YQVRUUl9OQU1FLFxcbiB9O1xcbiBcXG4rI2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcXHQoMylcXG4rXFxuIHN0cnVjdCBoZnNfZXh0ZW50IHtcXG4gXFx0X19iZTE2IGJsb2NrO1xcbiBcXHRfX2JlMTYgY291bnQ7XFxuIH07XFxuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XFxuK3R5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbSEZTX0ZPUktfRVhURU5UX0NPVU5UXTtcXG4rXFxuKyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFxcdCg4KVxcbiBcXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xcbiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQge1xcbiBcXHRfX2JlMzIgc3RhcnRfYmxvY2s7XFxuIFxcdF9fYmUzMiBibG9ja19jb3VudDtcXG4gfSBfX3BhY2tlZDtcXG4tdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdO1xcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XFxuIFxcbiAvKiBJbmZvcm1hdGlvbiBmb3IgYSBcXFwiRm9ya1xcXCIgaW4gYSBmaWxlICovXFxuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDA6Mzg6NDMuMzk4NTU0NTg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM4OTcxODQ2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9iZWdpblwiLFxuICAgIFwiaGZzcGx1c193cml0ZV9pb21hcF9lbmRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRcIixcbiAgICBcImhmc3BsdXNfd3JpdGViYWNrX3JhbmdlXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pb1wiLFxuICAgIFwiaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZVwiLFxuICAgIFwiaGZzcGx1c19kaW9fd3JpdGVfaXRlclwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV9sbHNlZWtcIixcbiAgICBcImhmc3BsdXNfZmlsZV9mc3luY1wiLFxuICAgIFwiaGZzcGx1c19ibG9ja19hbGxvY2F0ZVwiLFxuICAgIFwiaGZzcGx1c19ibG9ja19mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMgKHJlYWQsIHdyaXRlLCBzZWVrLCB0cnVuY2F0ZSkuIFRoaXMgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBJL08gcGF0aHMgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODU2ZmU3NmY0MWUwOTY0ZTBiNGRjMjdiMzAyMTcwMDM5NjA4NTdkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDAwOjM4OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9LY29uZmlnIGIvZnMvaGZzcGx1cy9LY29uZmlnXG5pbmRleCBjYTg0MDFjYjY5NTRkNS4uYjQ0MzJjNjRkYjNiZWMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL0tjb25maWdcbisrKyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuQEAgLTUsNyArNSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXG4gXHRzZWxlY3QgQlVGRkVSX0hFQURcbiBcdHNlbGVjdCBOTFNcbiBcdHNlbGVjdCBOTFNfVVRGOFxuLVx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbitcdHNlbGVjdCBGU19JT01BUFxuIFx0aGVscFxuIFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcbiBcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5pbmRleCBmMmE5YWU2OTdlODExNC4uM2RkZWE2OWE5YzY5ODMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXG4gXG4taGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXFxcbi1cdFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuK1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4rXHRcdHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuIFx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbiBcbiAjIEtVbml0IHRlc3RzXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbmluZGV4IDFiM2FmOGM4N2NhZGI1Li41NzE2NTJmYmFlZGEzYiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmNcbisrKyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbkBAIC0zOSw2ICszOSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuK1x0bG9ja19wYWdlKHBhZ2UpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0aSA9IG9mZnNldCAlIDMyO1xuQEAgLTc1LDYgKzc2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VycisrO1xuIFx0XHR9XG4gXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSBzaXplKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTg0LDYgKzg2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGxvY2tfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGlmICgoc2l6ZSBeIG9mZnNldCkgLyBQQUdFX0NBQ0hFX0JJVFMpXG4gXHRcdFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTk4LDYgKzEwMSw5IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0c3RhcnQgPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpO1xuIFx0aWYgKHN0YXJ0IFx1MDAzZT0gc2l6ZSkge1xuIFx0XHRoZnNfZGJnKFwiYml0bWFwIGZ1bGxcXG5cIik7XG4rXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4rXHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHQvKiBkbyBhbnkgcGFydGlhbCB1MzIgYXQgdGhlIHN0YXJ0ICovXG5AQCAtMTI4LDYgKzEzNCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHR9XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0XHRvZmZzZXQgKz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLFxuIFx0XHRcdFx0XHQgTlVMTCk7XG5AQCAtMTM1LDYgKzE0Miw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1x0XHRsb2NrX3BhZ2UocGFnZSk7XG4gXHRcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGN1cnIgPSBwcHRyO1xuIFx0XHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMTUyLDYgKzE2MCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0KmN1cnIgPSBjcHVfdG9fYmUzMihuKTtcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHQqbWF4ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaSAtIHN0YXJ0O1xuIFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzIC09ICptYXg7XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbkBAIC0xODUsNiArMTk0LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgcG5yLCBOVUxMKTtcbiBcdGlmIChJU19FUlIocGFnZSkpXG4gXHRcdGdvdG8ga2Fib29tO1xuK1x0bG9ja19wYWdlKHBhZ2UpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTIxNiw5ICsyMjYsMTEgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0XHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgKytwbnIsIE5VTEwpO1xuIFx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuIFx0XHRcdGdvdG8ga2Fib29tO1xuK1x0XHRsb2NrX3BhZ2UocGFnZSk7XG4gXHRcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGN1cnIgPSBwcHRyO1xuIFx0XHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XG5AQCAtMjMyLDYgKzI0NCw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIG91dDpcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgKz0gbGVuO1xuIFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZWFsbG9jX211dGV4KTtcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXG5pbmRleCA4MTNlNjhiOGVjZDY1NC4uOGY3ZjU2MGNlYzY0MjcgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuICNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbisvKlxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xuKyAqXG4rICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAnb2ZmJyB3aXRoaW4gYW4gOC1lbnRyeVxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxuKyAqL1xuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbitcdFx0XHRcdCB1MzIgKmRibG9jaylcbiB7XG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGV4dCsrLCBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspIHtcbiBcdFx0Y291bnQgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuLVx0XHRpZiAob2ZmIFx1MDAzYyBjb3VudClcbi1cdFx0XHRyZXR1cm4gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbitcdFx0XHQqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4rXHRcdH1cbiBcdFx0b2ZmIC09IGNvdW50O1xuIFx0fVxuIFx0LyogcGFuaWM/ICovXG4rXHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQrKywgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKylcbiBcdFx0Y291bnQgKz0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbiBcdHJldHVybiBjb3VudDtcbiB9XG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuKy8qXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcbisgKlxuKyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICdhYmxvY2snIGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4rICpcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXG4rICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXG4rICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4rICovXG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4rXHRpbnQgd2FzX2RpcnR5O1xuK1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdGlmIChiYWxsb2MpXG4rXHRcdCpiYWxsb2MgPSBmYWxzZTtcbiBcbi1cdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4rXHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuK1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGJhbGxvYylcbitcdFx0XHQqYmFsbG9jID0gdHJ1ZTtcbitcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuK1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4rXHRcdFx0XHRcdFx0ICAgICBhYmxvY2ssXG4rXHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSArMjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbi1cdFx0XHRcdFx0YWJsb2NrIC0gaGlwLVx1MDAzZWNhY2hlZF9zdGFydCk7XG4rXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuK1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgZGJsb2NrKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcbi1kb25lOlxuK1x0aWYgKHdhc19kaXJ0eSlcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbitpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuK1x0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbitcdHNlY3Rvcl90IHNlY3RvcjtcbitcdGludCByZXM7XG4rXG4rXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xuK1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4rXG4rXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuK1x0XHRpZiAoIWNyZWF0ZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcdH0gZWxzZVxuK1x0XHRjcmVhdGUgPSAwO1xuK1xuK1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuK1x0XHRcdFx0ICBOVUxMKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4gXHRoZnNfZGJnKFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCIsXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSArMzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcysrO1xuIFx0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdH1cbi1cdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgKzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4rXHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdFx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuK1xuK1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHQgIGlub2RlLVx1MDAzZWlfc2l6ZSwgMCxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NpemUsIDAsIDAsXG4rXHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybjtcbitcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuIFxuLVx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsXG4tXHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLFxuLVx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbi1cdFx0aWYgKHJlcyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKGlub2RlLVx1MDAzZWlfc2l6ZSA9PSBoaXAtXHUwMDNlcGh5c19zaXplKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44YzkyZTE0NTI5NWNhMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9maWxlLmNcbkBAIC0wLDAgKzEsMzA5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqICBsaW51eC9mcy9oZnNwbHVzL2ZpbGUuY1xuKyAqXG4rICogRmlsZSBvcGVyYXRpb25zOiBvcGVuL3JlbGVhc2UvZnN5bmMgYW5kIGlvbWFwLWJhc2VkIHJlYWQvd3JpdGUvc2Vla1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91aW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuKyNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbitcbitzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuK1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbitcdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbitcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXG4rXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbitcdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4rXHRcdGlub2RlX2xvY2soaW5vZGUpO1xuK1x0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuK1x0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4rXHRcdFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVx1MDAzZWlfaW5vLFxuK1x0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbitcdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4rXHRcdH1cbitcdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3Q7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXHUwMDNlc192aGRyO1xuK1x0aW50IGVycm9yID0gMCwgZXJyb3IyO1xuK1xuK1x0aGZzX2RiZyhcImlub2RlLVx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxuXCIsXG4rXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBzdGFydCwgZW5kKTtcbitcbitcdGVycm9yID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0LypcbitcdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxuK1x0ICovXG4rXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbitcbitcdC8qXG4rXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cbitcdCAqL1xuK1x0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VjYXRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IyID1cbitcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VleHRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRpZiAoIWVycm9yKVxuK1x0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0fVxuK1xuK1x0aWYgKHNiaS1cdTAwM2VhdHRyX3RyZWUpIHtcbitcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcbitcdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdGVycm9yMiA9XG4rXHRcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxuK1x0XHRcdFx0XHQgICAgc2JpLVx1MDAzZWF0dHJfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRlcnJvciA9IGVycm9yMjtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKSlcbitcdFx0XHRwcl9lcnIoXCJzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cIik7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbitcdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShzYmktXHUwMDNlYWxsb2NfZmlsZSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4rXHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbitcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRlcnJvciA9IGVycm9yMjtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbitcdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbitcbitcdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRpZiAoIWVycm9yKVxuK1x0XHRlcnJvciA9IGVycm9yMjtcbitcbitcdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFx1MDAyNnNiaS1cdTAwM2VmbGFncykpXG4rXHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuKy8qXG4rICogaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSgpIC0gZmFsbCBiYWNrIHRvIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlXG4rICogdGFpbCBvZiBhIHdyaXRlIHRoYXQgaW9tYXBfZGlvX3J3KCkgY291bGQgbm90IHBlcmZvcm0gZGlyZWN0bHlcbisgKiAodW5hbGlnbmVkIHRhaWwsIG9yIG5vIGJsb2NrcyBjb3VsZCBiZSBtYXBwZWQgd2l0aG91dCBhbGxvY2F0aW9uXG4rICogb3V0c2lkZSB0aGUgZGlyZWN0IHBhdGgpLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRsb2ZmX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MsIGVuZDtcbitcdHNzaXplX3Qgd3JpdHRlbjtcbitcdGludCByZXQ7XG4rXG4rXHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1xuK1x0d3JpdHRlbiA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSxcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4rXHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXG4rXHRlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIHdyaXR0ZW4gLSAxO1xuK1x0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuK1x0XHRcdFx0XHQgICBvZmZzZXQsIGVuZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuK1x0XHRcdFx0IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbitcdFx0XHRcdCBlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1xuK1x0cmV0dXJuIHdyaXR0ZW47XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSxcbitcdFx0XHQgICBcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHQgICBcdTAwMjZoZnNwbHVzX3dyaXRlX2Rpb19vcHMsXG4rXHRcdFx0ICAgMCwgTlVMTCwgMCk7XG4rXHRpZiAocmV0ID09IC1FTk9UQkxLKVxuK1x0XHRyZXQgPSAwO1xuK1x0ZWxzZSBpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4rXHRcdHNzaXplX3Qgd3JpdHRlbjtcbitcbitcdFx0d3JpdHRlbiA9IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSk7XG4rXHRcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiB3cml0dGVuO1xuK1x0XHRyZXQgKz0gd3JpdHRlbjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbitcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxuK3tcbitcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4rXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0bG9mZl90IHRvdGFsX2NhcGFjaXR5O1xuK1x0c3NpemVfdCByZXQ7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aW5vZGVfbG9jayhpbm9kZSk7XG4rXG4rXHRyZXQgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBpdGVyKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdHRvdGFsX2NhcGFjaXR5ID0gKGxvZmZfdClzYmktXHUwMDNldG90YWxfYmxvY2tzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4rXHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlPSB0b3RhbF9jYXBhY2l0eSkge1xuK1x0XHRyZXQgPSAtRUZCSUc7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0cmV0ID0gZXJyO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGxvZmZfdCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbitcdFx0bG9mZl90IG5ld19zaXplID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4rXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkge1xuK1x0XHRcdG5ld19zaXplID0gbWF4X3QobG9mZl90LCBuZXdfc2l6ZSxcbitcdFx0XHRcdFx0ICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSk7XG4rXHRcdH1cbitcbitcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBuZXdfc2l6ZSk7XG4rXHRcdGVyciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpO1xuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH0gZWxzZSBpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHR9XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpXG4rXHRcdHJldCA9IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgaXRlcik7XG4rXHRlbHNlIHtcbitcdFx0cmV0ID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpdGVyLFxuK1x0XHRcdFx0XHRcdFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwpO1xuK1x0fVxuK1xuK3VubG9jazpcbitcdGlub2RlX3VubG9jayhpbm9kZSk7XG4rXG4rXHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4rXHRcdGZpbGVfYWNjZXNzZWQoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsXG4rXHRcdFx0XHQgICBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyxcbitcdFx0XHRcdCAgIE5VTEwsIDAsIE5VTEwsIDApO1xuK1x0fSBlbHNlXG4rXHRcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgaXRlcik7XG4rXG4rXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcbitcdHN3aXRjaCAod2hlbmNlKSB7XG4rXHRjYXNlIFNFRUtfSE9MRTpcbitcdFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2hvbGUoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuK1x0XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNFRUtfREFUQTpcbitcdFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuK1x0XHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZ2VuZXJpY19maWxlX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSk7XG4rXHR9XG4rXG4rXHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4Ynl0ZXMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuK1x0Lmxsc2Vla1x0XHQ9IGhmc3BsdXNfZmlsZV9sbHNlZWssXG4rXHQucmVhZF9pdGVyXHQ9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsXG4rXHQud3JpdGVfaXRlclx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcixcbitcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbitcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuK1x0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuK1x0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuK1x0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3BlbixcbitcdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuK1x0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbit9O1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li5iOWNhZGJjNmM2ZDIxNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTE3NSw2ICsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbisvKlxuKyAqIFBoeXNpY2FsIGJ5dGUgb2Zmc2V0IG9mIGFsbG9jYXRpb24gYmxvY2sgJ2RibG9jaycgb24gdGhlIHZvbHVtZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4rXG4rXHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdHBoeXNfYnl0ZXMgKz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXG4rXHRyZXR1cm4gcGh5c19ieXRlcztcbit9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzNiw2ICs0NTIsOCBAQCBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXG4gaW50IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuIFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7XG4gaW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxuIFx0XHQgICAgICBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaywgaW50IHR5cGUpO1xuIGludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dCk7XG5AQCAtNDQzLDYgKzQ2MSw3IEBAIHZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qIGlub2RlLmMgKi9cbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucztcbiBcbkBAIC00NjIsMTIgKzQ4MSwxNSBAQCBpbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdCAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXG4gXHRcdCAgICB1bnNpZ25lZCBpbnQgcXVlcnlfZmxhZ3MpO1xuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi1cdFx0ICAgICAgIGludCBkYXRhc3luYyk7XG4gaW50IGhmc3BsdXNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcbisvKiBmaWxlLmMgKi9cbitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuK1xuIC8qIGlvY3RsLmMgKi9cbiBsb25nIGhmc3BsdXNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmNcbmluZGV4IDFjNTdjODczZjA1ZDYxLi4xZjE2NjYzZWFkYjA5NSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTIgKzE4LDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaGZzcGx1c19mcy5oXCJcbiAjaW5jbHVkZSBcImhmc3BsdXNfcmF3LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW50IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbkBAIC0xMjAsNjYgKzEyMiw3IEBAIHN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuIFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLXtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuLVx0c3NpemVfdCByZXQ7XG4tXG4tXHQvKlxuLVx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbi1cdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbi1cdCAqL1xuLVx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4tXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbi1cbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuLVx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4tXHRcdCAqL1xuLVx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4tXG4tXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4tXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4tXG4tXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4tXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbi1cdH1cbi1cbi1cdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugb2YgZXJyb3IgZXh0ZW5kaW5nIHdyaXRlIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZld1xuLVx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiByZXQgXHUwMDNjIDApKSB7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbi1cdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rc3RhdGljIGludCBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuQEAgLTE4OCw4ICsxMzEsOCBAQCBzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfbGVnYWN5X3JlYWRfZm9saW8sXG4rXHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2xlZ2FjeV93cml0ZXBhZ2VzLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG5AQCAtMTk3LDE4ICsxNDAsNTkgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XG4gXHQucmVsZWFzZV9mb2xpb1x0PSBoZnNwbHVzX3JlbGVhc2VfZm9saW8sXG4gfTtcbiBcbi1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuIFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuLVx0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuK1x0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19sZWdhY3lfcmVhZF9mb2xpbyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5ibWFwXHRcdD0gaGZzcGx1c19ibWFwLFxuLVx0LmRpcmVjdF9JT1x0PSBoZnNwbHVzX2RpcmVjdF9JTyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfbGVnYWN5X3dyaXRlcGFnZXMsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiB9O1xuIFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4re1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGVcdD0gbWFwcGluZy1cdTAwM2Vob3N0LFxuK1x0XHQud2JjXHQ9IHdiYyxcbitcdFx0Lm9wc1x0PSBcdTAwMjZoZnNwbHVzX3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4rc3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYW9wX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuK3tcbitcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuK1x0LnJlYWRfZm9saW9cdFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkXHRcdD0gaGZzcGx1c19yZWFkYWhlYWQsXG4rXHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmJtYXBcdFx0XHQ9IGhmc3BsdXNfYW9wX2JtYXAsXG4rXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGVcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpb1x0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbitcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuc3dhcF9hY3RpdmF0ZVx0XHQ9IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSxcbit9O1xuK1xuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfaGFzaCAgICAgICA9IGhmc3BsdXNfaGFzaF9kZW50cnksXG4gXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcbkBAIC0yNjgsMzUgKzI1Miw2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAtRUlPO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuLVx0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbi1cdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuLVx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbi1cdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuLVx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuLVx0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbi1cdFx0XHRcdFx0ICAgSEZTUExVU19TQihzYiktXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuLVx0XHR9XG4tXHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuQEAgLTMxMSwxMCArMjY2LDIyIEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4rXHRcdFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRcdFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuK1xuK1x0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLVx1MDAzZWlhX3NpemUpO1xuK1x0XHRcdFx0ZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4rXHRcdFx0XHRpZiAoZXJyb3IpIHtcbitcdFx0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4rXHRcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbitcdFx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHR0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLVx1MDAzZWlhX3NpemUpO1xuIFx0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuQEAgLTM1Myw4NiArMzIwLDYgQEAgaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLVx1MDAzZXNfdmhkcjtcbi1cdGludCBlcnJvciA9IDAsIGVycm9yMjtcbi1cbi1cdGhmc19kYmcoXCJpbm9kZS1cdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcblwiLFxuLVx0XHRpbm9kZS1cdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XG4tXG4tXHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdHJldHVybiBlcnJvcjtcbi1cdGlub2RlX2xvY2soaW5vZGUpO1xuLVxuLVx0Lypcbi1cdCAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLlxuLVx0ICovXG4tXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cbi1cdC8qXG4tXHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cbi1cdCAqL1xuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLFxuLVx0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VjYXRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLFxuLVx0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0ZXJyb3IyID1cbi1cdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VleHRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuLVx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdGVycm9yID0gZXJyb3IyO1xuLVx0fVxuLVxuLVx0aWYgKHNiaS1cdTAwM2VhdHRyX3RyZWUpIHtcbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRcdGVycm9yMiA9XG4tXHRcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KFxuLVx0XHRcdFx0XHQgICAgc2JpLVx1MDAzZWF0dHJfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuLVx0XHRcdGlmICghZXJyb3IpXG4tXHRcdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRwcl9lcnIoXCJzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cIik7XG4tXHR9XG4tXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShzYmktXHUwMDNlYWxsb2NfZmlsZSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWFsbG9jX2ZpbGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbi1cbi1cdGVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRpZiAoIWVycm9yKVxuLVx0XHRlcnJvciA9IGVycm9yMjtcbi1cbi1cdGlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsIFx1MDAyNnNiaS1cdTAwM2VmbGFncykpXG4tXHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXG4tXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuLVxuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuc2V0YXR0clx0PSBoZnNwbHVzX3NldGF0dHIsXG4gXHQuZ2V0YXR0clx0PSBoZnNwbHVzX2dldGF0dHIsXG5AQCAtNDU0LDE5ICszNDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQubGlzdHhhdHRyXHQ9IGhmc3BsdXNfbGlzdHhhdHRyLFxuIH07XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4tXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi1cdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbi1cdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuLVx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4tXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4tXHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4tXHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuLVx0LnJlbGVhc2VcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXG4tXHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuLX07XG4tXG4gc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG5AQCAtNTEzLDcgKzM4Nyw3IEBAIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHNiaS1cdTAwM2VmaWxlX2NvdW50Kys7XG4gXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuK1x0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBcdFx0aGlwLVx1MDAzZWNsdW1wX2Jsb2NrcyA9IDE7XG4gXHR9IGVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbiBcdFx0ICAgU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTU09DSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG5AQCAtNjU0LDcgKzUyOCw3IEBAIGludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcdFx0fSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4rXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9tb2RlLFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lMDAxNDRiMjdjMTg2YVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5jXG5AQCAtMCwwICsxLDIwOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiAgbGludXgvZnMvaGZzcGx1cy9pb21hcC5jXG4rICpcbisgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuKyNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbitcbitzdGF0aWMgaW50IF9faGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0IGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0XHRcdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBib29sIG1heV9hbGxvYylcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWF4X2Jsb2NrcztcbitcdGxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7XG4rXHRsb2ZmX3QgYmxvY2tfc3RhcnQ7XG4rXHRib29sIGlzX25ldztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIW1heV9hbGxvYykge1xuK1x0XHQvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi9cbitcdFx0aWYgKGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2M9IG9mZnNldCkge1xuK1x0XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuK1x0XHRcdGlvbWFwLVx1MDAzZWFkZHIgPSBJT01BUF9OVUxMX0FERFI7XG4rXHRcdFx0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuK1x0XHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHQvKiBDbGFtcCBsZW5ndGggaWYgdGhlIHJlcXVlc3RlZCByYW5nZSBnb2VzIGJleW9uZCBpX3NpemUgKi9cbitcdFx0aWYgKG9mZnNldCArIGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdFx0bG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gaV9ibG9ja3NpemUoaW5vZGUpO1xuK1x0XHRcdGxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0YWJsb2NrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4rXG4rXHRlcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCBcdTAwMjZkYmxvY2ssXG4rXHRcdFx0XHQgXHUwMDI2bWF4X2Jsb2NrcywgTlVMTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWJsb2NrX29mZnNldCA9IG9mZnNldCBcdTAwMjYgKHNiaS1cdTAwM2VhbGxvY19ibGtzeiAtIDEpO1xuK1x0YWJsb2NrX2J5dGVzID0gKGxvZmZfdCltYXhfYmxvY2tzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XG4rXG4rXHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7XG4rXHRibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpO1xuK1x0aXNfbmV3ID0gbWF5X2FsbG9jIFx1MDAyNlx1MDAyNiBibG9ja19zdGFydCBcdTAwM2U9IGhpcC1cdTAwM2VwaHlzX3NpemU7XG4rXHRpZiAobWF5X2FsbG9jIFx1MDAyNlx1MDAyNiAhaXNfbmV3IFx1MDAyNlx1MDAyNiBvZmZzZXQgXHUwMDNjIGhpcC1cdTAwM2VwaHlzX3NpemUpXG4rXHRcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtXHUwMDNlcGh5c19zaXplIC0gb2Zmc2V0KTtcbitcbitcdGlvbWFwLVx1MDAzZWJkZXYgPSBzYi1cdTAwM2VzX2JkZXY7XG4rXHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4rXHRpb21hcC1cdTAwM2VsZW5ndGggPSBsZW5ndGg7XG4rXHRpb21hcC1cdTAwM2VhZGRyID0gaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzYiwgZGJsb2NrKSArIGFibG9ja19vZmZzZXQ7XG4rXHRpb21hcC1cdTAwM2V0eXBlID0gSU9NQVBfTUFQUEVEO1xuK1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbitcbitcdGlmIChpc19uZXcpXG4rXHRcdGlvbWFwLVx1MDAzZWZsYWdzIHw9IElPTUFQX0ZfTkVXO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0c3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4re1xuK1x0cmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSxcbitcdFx0XHRcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxuK1x0XHRcdFx0ICAgICBpb21hcCwgZmFsc2UpO1xuK31cbitcbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbitcdFx0XHRcdCAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuK1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIGlvbWFwLCB0cnVlKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sXG4rfTtcbitcbisvKlxuKyAqIGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKClcbisgKlxuKyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFya1xuKyAqIChoaXAtXHUwMDNlcGh5c19zaXplIC8gaGlwLVx1MDAzZWZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuXG4rICovXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxuK1x0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdGxvZmZfdCBlbmQ7XG4rXHRib29sIGRpcnRpZWQgPSBmYWxzZTtcbitcbitcdGlmICghd3JpdHRlbilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRlbmQgPSByb3VuZF91cChwb3MgKyB3cml0dGVuLCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4rXG4rXHRpZiAoaGlwLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2MgZW5kKSB7XG4rXHRcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgZW5kIC0gaGlwLVx1MDAzZXBoeXNfc2l6ZSk7XG4rXHRcdGhpcC1cdTAwM2VwaHlzX3NpemUgPSBlbmQ7XG4rXHRcdGhpcC1cdTAwM2Vmc19ibG9ja3MgPSBlbmQgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXHRcdGRpcnRpZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKGRpcnRpZWQpXG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHdyaXR0ZW47XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XG4rXHQuaW9tYXBfYmVnaW5cdD0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbixcbitcdC5pb21hcF9lbmRcdD0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsXG4rfTtcbitcbisvKlxuKyAqIGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoKVxuKyAqXG4rICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJ3NpemUnLlxuKyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuXG4rICovXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4re1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdGxvZmZfdCBzdGFydCA9IGhpcC1cdTAwM2VwaHlzX3NpemU7XG4rXG4rXHRpZiAoc2l6ZSBcdTAwM2M9IHN0YXJ0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBzdGFydCwgc2l6ZSAtIHN0YXJ0LCBOVUxMLFxuK1x0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpO1xuK31cbitcbisvKlxuKyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFja1xuKyAqXG4rICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlXG4rICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG4rXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU2NCBlbmRfcG9zKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAob2Zmc2V0IFx1MDAzYyB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0IHx8XG4rXHQgICAgb2Zmc2V0IFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCArIHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpIHtcbitcdFx0ZXJyID0gX19oZnNwbHVzX2lvbWFwX2JlZ2luKHdwYy1cdTAwM2Vpbm9kZSxcbitcdFx0XHRcdFx0ICAgIG9mZnNldCwgbGVuLCAwLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHMgPSB7XG4rXHQud3JpdGViYWNrX3JhbmdlXHQ9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLFxuK1x0LndyaXRlYmFja19zdWJtaXRcdD0gaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdCxcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW8oKSAtIERpcmVjdCBJL08gd3JpdGUgY29tcGxldGlvbiBoYW5kbGVyXG4rICovXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbitcdFx0XHRcdFx0IGludCBlcnJvciwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNjIGlvY2ItXHUwMDNla2lfcG9zICsgc2l6ZSkge1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zICsgc2l6ZSk7XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHtcbitcdC5lbmRfaW9cdFx0PSBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pbyxcbit9O1xuK1xuK2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbitcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXG4re1xuK1x0cmV0dXJuIGlvbWFwX3N3YXBmaWxlX2FjdGl2YXRlKHNpcywgZmlsZSwgc3BhbiwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuK31cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMWVhMzMzM2MxZTA3NTlcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2hmc3BsdXMvaW9tYXAuaFxuQEAgLTAsMCArMSwyMCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiAgbGludXgvZnMvaGZzcGx1cy9pb21hcC5oXG4rICpcbisgKiBpb21hcCBjYWxsYmFjayBkZWNsYXJhdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cbisgKi9cbitcbisjaWZuZGVmIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbisjZGVmaW5lIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHM7XG4rXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpO1xuK2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbitcdFx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XG4rXG4rI2VuZGlmIC8qIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlZS4uMTQxN2UxOWQ5NGJjZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbkBAIC0xNzEsMTggKzE3MSwyMiBAQCBlbnVtIHtcbiBcdEhGU19YQVRUUl9OQU1FLFxuIH07XG4gXG4rI2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcdCgzKVxuK1xuIHN0cnVjdCBoZnNfZXh0ZW50IHtcbiBcdF9fYmUxNiBibG9jaztcbiBcdF9fYmUxNiBjb3VudDtcbiB9O1xuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XG4rdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1tIRlNfRk9SS19FWFRFTlRfQ09VTlRdO1xuK1xuKyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFx0KDgpXG4gXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2V4dGVudCB7XG4gXHRfX2JlMzIgc3RhcnRfYmxvY2s7XG4gXHRfX2JlMzIgYmxvY2tfY291bnQ7XG4gfSBfX3BhY2tlZDtcbi10eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbOF07XG4rdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjW0hGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlRdO1xuIFxuIC8qIEluZm9ybWF0aW9uIGZvciBhIFwiRm9ya1wiIGluIGEgZmlsZSAqL1xuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDAwOjM4OjQzLjM5ODU1NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzczMjgxNjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipIRlMrIGlvbWFwIENvbnZlcnNpb246IEZ1enppbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSB0aGF0IGZ1bmRhbWVudGFsbHkgcmVmYWN0b3JzIHRoZSBIRlMrIGZpbGVzeXN0ZW0sIHJlcGxhY2luZyB0aGUgbGVnYWN5IEkvTyB3aXRoIGlvbWFwLiBUaGlzIGlzIGEgYmlnIGRlYWw7IHdlJ3JlIHRhbGtpbmcgY29yZSBmaWxlIEkvTyBvcGVyYXRpb25zIOKAkyByZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUg4oCTIGFsbCBiZWluZyByZWRpcmVjdGVkIHRocm91Z2ggYSBuZXcgcGF0aC4gVGhhdCdzIGEgaHVnZSBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb25zLCBzbyBmdXp6aW5nIHRoaXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSXQncyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBzeXNjYWxscywgc28gdGhhdCBtYWtlcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSwgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIFdlJ3ZlIGdvdCB0d28gbmV3IGZpbGVzOiBgaW9tYXAuY2AgYW5kIGBmaWxlLmNgLiBgaW9tYXAuY2AgaW1wbGVtZW50cyB0aGUgaW9tYXAgb3BlcmF0aW9uczogYF9faGZzcGx1c19pb21hcF9iZWdpbmAsIGBoZnNwbHVzX2lvbWFwX2JlZ2luYCwgYGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5gLCBgaGZzcGx1c193cml0ZV9pb21hcF9lbmRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX3dyaXRlYmFja19yYW5nZWAsIGBoZnNwbHVzX2ZpbGVfd3JpdGVfZGlvX2VuZF9pb2AsIGFuZCBgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlYC4gVGhlc2UgYXJlIHRoZSBkaXJlY3QgaW9tYXAgaW1wbGVtZW50YXRpb25zLlxuXG5UaGVuIHRoZXJlJ3MgYGZpbGUuY2AsIHdoaWNoIG5vdyBob3VzZXMgdGhlIGZpbGUgb3BlcmF0aW9ucy4gV2UgaGF2ZTogYGhmc3BsdXNfZmlsZV9vcGVuYCwgYGhmc3BsdXNfZmlsZV9yZWxlYXNlYCwgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlYCwgYGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJgLCBgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJgLCBgaGZzcGx1c19maWxlX3JlYWRfaXRlcmAsIGFuZCBgaGZzcGx1c19maWxlX2xsc2Vla2AuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBwb2ludHMgZm9yIHRlc3RpbmcgdGhlIG5ldyBJL08gZmxvdy5cblxuQmV5b25kIHRob3NlLCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyBpbiBgZXh0ZW50cy5jYCwgc3BlY2lmaWNhbGx5IGBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrYCwgYGhmc3BsdXNfbWFwX2V4dGVudGAsIGBoZnNwbHVzX2dldF9ibG9ja2AsIGFuZCBgaGZzcGx1c19maWxlX3RydW5jYXRlYC4gIGBiaXRtYXAuY2AgYWxzbyBnZXRzIHNvbWUgYXR0ZW50aW9uIHdpdGggYGhmc3BsdXNfYmxvY2tfYWxsb2NhdGVgIGFuZCBgaGZzcGx1c19ibG9ja19mcmVlYCwgc28gdGhlc2UgYXJlIGFsc28gcmVsZXZhbnQsIGVzcGVjaWFsbHkgc2luY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gY2FuIGJlIHRyaWNreS5cblxuVG8gcnVuIHRoaXMsIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgaXMgYENPTkZJR19IRlNQTFVTX0ZTYCwgd2hpY2ggaXMgdGhlIG1haW4gSEZTKyBjb25maWcuXG5cblNvLCBsZXQncyBkaXN0aWxsIHRoYXQgZG93biB0byBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzpcblxuKiAgIGBoZnNwbHVzX21hcF9leHRlbnRgXG4qICAgYGhmc3BsdXNfaW9tYXBfYmVnaW5gXG4qICAgYGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5gXG4qICAgYGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kYFxuKiAgIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYFxuKiAgIGBoZnNwbHVzX3dyaXRlYmFja19yYW5nZWBcbiogICBgaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW9gXG4qICAgYGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVgXG4qICAgYGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJgXG4qICAgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYFxuKiAgIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYFxuKiAgIGBoZnNwbHVzX2ZpbGVfbGxzZWVrYFxuKiAgIGBoZnNwbHVzX2ZpbGVfZnN5bmNgXG4qICAgYGhmc3BsdXNfYmxvY2tfYWxsb2NhdGVgXG4qICAgYGhmc3BsdXNfYmxvY2tfZnJlZWBcblxuRXZlcnl0aGluZyBwb2ludHMgdG8gdGhpcyBiZWluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFdlIG5lZWQgdG8gdGhvcm91Z2hseSB0ZXN0IGV2ZXJ5IGFzcGVjdCBvZiB0aGUgbmV3IGlvbWFwIGludGVncmF0aW9uLCBmcm9tIGJhc2ljIHJlYWRzIGFuZCB3cml0ZXMgdG8gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgbGlrZSB0cnVuY2F0ZSwgc3luYywgYW5kIGJsb2NrIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRvIGVuc3VyZSB0aGUgSEZTKyBmaWxlc3lzdGVtIHJlbWFpbnMgc3RhYmxlIGFuZCBjb3JyZWN0IHVuZGVyIHRoZSBuZXcgaW9tYXAgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM1OSwiT3V0cHV0VG9rZW5zIjoyODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDA6Mzg6NTcuMTMxMzc1MTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQzNjEwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX21hcF9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kXCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kXCIsXG4gICAgXCJoZnNwbHVzX3dyaXRlYmFja19yYW5nZVwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW9cIixcbiAgICBcImhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVcIixcbiAgICBcImhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfbGxzZWVrXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfYWxsb2NhdGVcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX21hcF9leHRlbnRcIixcbiAgICBcImhmc3BsdXNfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW5cIixcbiAgICBcImhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kXCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kXCIsXG4gICAgXCJoZnNwbHVzX3dyaXRlYmFja19yYW5nZVwiLFxuICAgIFwiaGZzcGx1c19maWxlX3dyaXRlX2Rpb19lbmRfaW9cIixcbiAgICBcImhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGVcIixcbiAgICBcImhmc3BsdXNfZGlvX3dyaXRlX2l0ZXJcIixcbiAgICBcImhmc3BsdXNfZmlsZV93cml0ZV9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfbGxzZWVrXCIsXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfYWxsb2NhdGVcIixcbiAgICBcImhmc3BsdXNfYmxvY2tfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgSEZTKyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTyBvcGVyYXRpb25zIChyZWFkLCB3cml0ZSwgc2VlaywgdHJ1bmNhdGUpLiBUaGlzIGlzIGEgbWFqb3IgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgSS9PIHBhdGhzIG9mIHRoZSBmaWxlc3lzdGVtIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[1] Phase: Succeeded StartedAt: 2026-07-24 00:39:09 +0000 UTC FinishedAt: 2026-07-24 00:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 00:39:09 +0000 UTC FinishedAt: 2026-07-24 00:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2] Phase: Succeeded StartedAt: 2026-07-24 00:39:09 +0000 UTC FinishedAt: 2026-07-24 05:04:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 00:39:09 +0000 UTC FinishedAt: 2026-07-24 05:04:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 00:39:09 +0000 UTC FinishedAt: 2026-07-24 00:39:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 00:39:09 +0000 UTC FinishedAt: 2026-07-24 00:39:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowt2c7g/series-workflowt2c7g-convert-artifact-28278697/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 00:39:30 +0000 UTC FinishedAt: 2026-07-24 01:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 00:39:30 +0000 UTC FinishedAt: 2026-07-24 01:15:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*25a830ab-959d-47fd-9776-e28846f8e1cc,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-workflowt2c7g/series-workflowt2c7g-convert-artifact-28278697/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": "6c3c9076-d020-444d-8239-97eb33fd9a73", "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-workflowt2c7g/series-workflowt2c7g-build-action-4205176839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 00:39:30 +0000 UTC FinishedAt: 2026-07-24 01:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*25a830ab-959d-47fd-9776-e28846f8e1cc,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-workflowt2c7g/series-workflowt2c7g-convert-artifact-28278697/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": "6c3c9076-d020-444d-8239-97eb33fd9a73", "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-workflowt2c7g/series-workflowt2c7g-build-action-4205176839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 01:15:54 +0000 UTC FinishedAt: 2026-07-24 01:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 01:15:54 +0000 UTC FinishedAt: 2026-07-24 01:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 01:15:54 +0000 UTC FinishedAt: 2026-07-24 01:16:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 01:15:54 +0000 UTC FinishedAt: 2026-07-24 01:16:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowt2c7g/series-workflowt2c7g-convert-artifact-549739068/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 01:16:04 +0000 UTC FinishedAt: 2026-07-24 01:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 01:16:04 +0000 UTC FinishedAt: 2026-07-24 01:17:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c3c9076-d020-444d-8239-97eb33fd9a73,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-workflowt2c7g/series-workflowt2c7g-build-action-4205176839/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-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 01:18:02 +0000 UTC FinishedAt: 2026-07-24 01:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 01:18:02 +0000 UTC FinishedAt: 2026-07-24 01:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 01:18:02 +0000 UTC FinishedAt: 2026-07-24 01:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 01:18:02 +0000 UTC FinishedAt: 2026-07-24 01:58:55 +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:*25a830ab-959d-47fd-9776-e28846f8e1cc,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-workflowt2c7g/series-workflowt2c7g-convert-artifact-549739068/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": "e9837a95-7ca3-4d4e-abbd-e0e035fe1499", "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-workflowt2c7g/series-workflowt2c7g-build-action-4038599832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 01:18:02 +0000 UTC FinishedAt: 2026-07-24 01:58:45 +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:*25a830ab-959d-47fd-9776-e28846f8e1cc,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-workflowt2c7g/series-workflowt2c7g-convert-artifact-549739068/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": "e9837a95-7ca3-4d4e-abbd-e0e035fe1499", "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-workflowt2c7g/series-workflowt2c7g-build-action-4038599832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 01:58:55 +0000 UTC FinishedAt: 2026-07-24 01:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 01:58:55 +0000 UTC FinishedAt: 2026-07-24 01:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 01:58:55 +0000 UTC FinishedAt: 2026-07-24 02:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 01:58:55 +0000 UTC FinishedAt: 2026-07-24 02:00:50 +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:*e9837a95-7ca3-4d4e-abbd-e0e035fe1499,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-workflowt2c7g/series-workflowt2c7g-build-action-4038599832/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-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 02:00:53 +0000 UTC FinishedAt: 2026-07-24 05:04:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 02:00:53 +0000 UTC FinishedAt: 2026-07-24 05:04:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"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:*6c3c9076-d020-444d-8239-97eb33fd9a73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e9837a95-7ca3-4d4e-abbd-e0e035fe1499,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-workflowt2c7g/series-workflowt2c7g-build-action-4205176839/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-workflowt2c7g/series-workflowt2c7g-build-action-4038599832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 02:00:53 +0000 UTC FinishedAt: 2026-07-24 02:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 02:00:53 +0000 UTC FinishedAt: 2026-07-24 02:00:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2c7g/series-workflowt2c7g-convert-artifact-733890565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 02:00:53 +0000 UTC FinishedAt: 2026-07-24 02:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 02:00:53 +0000 UTC FinishedAt: 2026-07-24 02:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 02:00:53 +0000 UTC FinishedAt: 2026-07-24 02:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 02:01:03 +0000 UTC FinishedAt: 2026-07-24 05:04:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2c7g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_map_extent","hfsplus_iomap_begin","hfsplus_write_iomap_begin","hfsplus_write_iomap_end","hfsplus_iomap_cont_expand","hfsplus_writeback_range","hfsplus_file_write_dio_end_io","hfsplus_fallback_buffered_write","hfsplus_dio_write_iter","hfsplus_file_write_iter","hfsplus_file_read_iter","hfsplus_file_llseek","hfsplus_file_fsync","hfsplus_block_allocate","hfsplus_block_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce76d9d4f5f36501013bd94bb65dd067f04b2913","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"5b4b64fc-6bc8-4d76-aa13-9b46a8e9b0e4","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 02:01:03 +0000 UTC FinishedAt: 2026-07-24 05:04:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c3c9076-d020-444d-8239-97eb33fd9a73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e9837a95-7ca3-4d4e-abbd-e0e035fe1499,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2c7g/series-workflowt2c7g-build-action-4205176839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2c7g/series-workflowt2c7g-build-action-4038599832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2c7g/series-workflowt2c7g-convert-artifact-733890565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}