Name: series-workflowbqf4g Phase: Succeeded StartedAt: 2026-07-16 20:13:56 +0000 UTC FinishedAt: 2026-07-16 21:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[0] Phase: Succeeded StartedAt: 2026-07-16 20:13:56 +0000 UTC FinishedAt: 2026-07-16 20:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 20:13:56 +0000 UTC FinishedAt: 2026-07-16 20:32:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "e6aa6f56-8c07-45cd-b1f0-7496a7e04c37" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__writeback_single_inode", "writeback_single_inode", "ext4_sync_inode_metadata", "ext2_sync_inode_metadata", "fat_sync_inode_metadata", "minix_sync_inode_metadata", "udf_sync_inode_metadata", "bfs_sync_inode_metadata", "simple_fsync_noflush" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "1bc13af8-2d91-4fbd-b43e-fbe72f29ca41" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBzeW5jX2lub2RlX21ldGFkYXRhYCBjYWxsYmFjayBpbiBgc3VwZXJfb3BlcmF0aW9uc2AgYW5kIG1vZGlmaWVzIHRoZSBWRlMgd3JpdGViYWNrIGxvZ2ljIHRvIGhhbmRsZSBhIG5ldyBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcuIEl0IGltcGxlbWVudHMgdGhpcyBjYWxsYmFjayBmb3Igc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMpIGFuZCByZWZhY3RvcnMgdGhlaXIgbWV0YWRhdGEgc3luY2hyb25pemF0aW9uIGxvZ2ljLCByZXBsYWNpbmcgYG1tYl9mc3luY2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFZGUyB3cml0ZWJhY2sgYW5kIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaGFuZGxpbmcsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Y2I1M2E4ZDU5NjNmZDFlNjViY2U5ZWEyZjVhNjNhZGM4MzMyOWJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMjA6MzI6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmE3ZmFhOTFkZWVkNWFjIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtNDQsNyAmIzQzOzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgJiM0MzsxNTEsNiBAQCBleHRlcm4gYm9vbFx0YWZmc19ub2ZpbGVuYW1ldHJ1bmNhdGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBleHRlcm4gaW50XHRhZmZzX2NoZWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGxlbixcbiBcdFx0XHRcdGJvb2wgbm90cnVuY2F0ZSk7XG4gZXh0ZXJuIGludFx0YWZmc19jb3B5X25hbWUodW5zaWduZWQgY2hhciAqYnN0ciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBiaXRtYXAuIGMgKi9cbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FtaWdhZmZzLmMgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbmluZGV4IGJlZDRmYzgwNWU4ZTY2Li42Y2MwZmM5YTRjYmY5MiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hbWlnYWZmcy5jXG5AQCAtNTcsNyAmIzQzOzU3LDcgQEAgYWZmc19pbnNlcnRfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiBcdFx0QUZGU19UQUlMKHNiLCBkaXJfYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBjcHVfdG9fYmUzMihpbm8pO1xuIFxuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oZGlyX2JoLCBpbm8pO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgJiM0MzsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VoYXNoX2NoYWluID0gaW5vO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8pIC0gaGFzaF9pbm8pO1xuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVx1MDAzZXBhcmVudCA9IDA7XG4gXHRcdFx0cmV0dmFsID0gMDtcbiBcdFx0XHRicmVhaztcbkBAIC0xODAsNyAmIzQzOzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcbiBcbiBcdFx0bWVtY3B5KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZW5hbWUsIEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbmFtZSwgMzIpO1xuIFx0XHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuQEAgLTE4OCw3ICYjNDM7MTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdFx0XHRfX2JlMzIgaW5vMiA9IEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbGlua19jaGFpbjtcbiBcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gaW5vMjtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0LyogRml4IHRoZSBsaW5rIGNvdW50LCBpZiBiaCBpcyBhIG5vcm1hbCBoZWFkZXIgYmxvY2sgd2l0aG91dCBsaW5rcyAqL1xuIFx0XHRcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlc3R5cGUpKSB7XG5AQCAtMzA2LDcgJiM0MzszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcbmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4yM2UwODhhN2VkNGZiMyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuY1xuQEAgLTE0MCwxNCAmIzQzOzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXG4gXHRBRkZTX1RBSUwoc2IsIG5ld19iaCktXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXHUwMDNlaV9pbm8pO1xuIFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XG4gXG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCYjMzQ7YWxsb2NfZXh0XCYjMzQ7LCBcJiMzNDtwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcJiMzNDssIHRtcCk7XG4gXHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VleHRlbnNpb24gPSBjcHVfdG9fYmUzMihibG9ja25yKTtcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0QUZGU19JKGlub2RlKS1cdTAwM2VpX2V4dGNudCYjNDM7JiM0Mzs7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRtZW1zZXQoQUZGU19EQVRBKGJoKSAmIzQzOyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHNpemUgJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG4gXHR9IGVsc2UgaWYgKGJpZHgpIHtcbkBAIC02MDMsNyAmIzQzOzYwMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4gXHRcdGJoLVx1MDAzZWJfc3RhdGUgXHUwMDI2PSB+KDFVTCBcdTAwM2NcdTAwM2MgQkhfTmV3KTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCAmIzQzOzYxMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0fVxuIFx0XHRzaXplICYjNDM7PSBic2l6ZTtcbkBAIC03MzMsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMihcbiBcdFx0XHRtYXgoYm9mZiAmIzQzOyB0bXAsIGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cdTAwM2VzaXplKSkpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICYjNDM7PSB0bXA7XG4gXHRcdGZyb20gJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG5AQCAtNzY2LDEzICYjNDM7NzY1LDEyIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXHUwMDNlYl9ibG9ja25yIC0gdG1wX25leHQpO1xuLVx0XHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gYnNpemU7XG4gXHRcdGZyb20gJiM0Mzs9IGJzaXplO1xuIFx0XHRiaWR4JiM0MzsmIzQzOztcbkBAIC04MDEsMTQgJiM0Mzs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUpIFx1MDAzYyB0bXApXG4gXHRcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gdG1wO1xuIFx0XHRmcm9tICYjNDM7PSB0bXA7XG4gXHRcdGJpZHgmIzQzOyYjNDM7O1xuQEAgLTk0NSw3ICYjNDM7OTQyLDcgQEAgYWZmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVx1MDAzZWV4dGVuc2lvbiA9IDA7XG4gXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCk7XG4gXHRhZmZzX2JyZWxzZShleHRfYmgpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xuaW5kZXggNWRkMWIwMTZiY2IwMGEuLmQ0YTNmMzgxYzRiY2ZmIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2lub2RlLmNcbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjYsMTEgJiM0MzsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0YWZmc190cnVuY2F0ZShpbm9kZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtbWJfc3luYyhcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdH1cbiBcbi1cdG1tYl9pbnZhbGlkYXRlKFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVx1MDAzZWlfbGM7XG5AQCAtMzA1LDcgJiM0MzszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFxuIFx0aW5vZGUtXHUwMDNlaV91aWQgICAgID0gY3VycmVudF9mc3VpZCgpO1xuQEAgLTM5MywxNyAmIzQzOzM5MCwxNyBAQCBhZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzM1xuIFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gY2hhaW47XG4gXHRcdEFGRlNfVEFJTChzYiwgaW5vZGVfYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XG4gXHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZzZGF0YSA9ICh2b2lkICopKGxvbmcpYmgtXHUwMDNlYl9ibG9ja25yO1xuIFxuIFx0YWZmc19sb2NrX2RpcihkaXIpO1xuIFx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRhZmZzX3VubG9ja19saW5rKGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi41N2Q4ZDc1NWFhZGEwNSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jXG5AQCAtMzczLDcgJiM0MzszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSAmIzQzOyAxO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcbkBAIC00NDMsOCAmIzQzOzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuQEAgLTQ5Nyw4ICYjNDM7NDk2LDggQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcbiBcdGFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTtcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXHUwMDI2QUZGU19JKG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvc3VwZXIuYyBiL2ZzL2FmZnMvc3VwZXIuY1xuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL3N1cGVyLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdGktXHUwMDNlaV9sYyA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfZXh0X2JoID0gTlVMTDtcbiBcdGktXHUwMDNlaV9wYV9jbnQgPSAwO1xuLVx0bW1iX2luaXQoXHUwMDI2aS1cdTAwM2VpX21ldGFkYXRhX2JocywgXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbiBcbiBcdHJldHVybiBcdTAwMjZpLVx1MDAzZXZmc19pbm9kZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXG5pbmRleCA1YjQwYWIwOWE3OTZkZS4uOWIzN2VjNGJkODlhOGMgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuY1xuQEAgLTY4LDE3ICYjNDM7NjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuY1xuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9pbm9kZS5jXG5AQCAtMTM2LDcgJiM0MzsxMzYsNiBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4gXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRpbnQgZXJyID0gMDtcbiBcbiBcdGRwcmludGYoXCYjMzQ7aW5vPSUwOHhcXG5cJiMzNDssIGlubyk7XG4gXG5AQCAtMTY1LDEzICYjNDM7MTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0ZGktXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgJiM0MzsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1xuJiM0MztcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuJiM0MztcdGlmIChJU19FUlIoZGkpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xuJiM0MztcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShiaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBiZnNfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGJmc19wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gYmZzX3N0YXRmcyxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCA5YWY1ZjA2MWExZjg1YS4uYmU4YjU3YTYzNWNkODIgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmNcbkBAIC02MjgsNzkgJiM0Mzs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4gfVxuIEVYUE9SVF9TWU1CT0wobW1iX3N5bmMpO1xuIFxuLS8qKlxuLSAqIG1tYl9mc3luY19ub2ZsdXNoIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoXG4tICogXHRcdCAgICAgICBtZXRhZGF0YSBidWZmZXJzIGxpc3Rcbi0gKlxuLSAqIEBmaWxlOlx0ZmlsZSB0byBzeW5jaHJvbml6ZVxuLSAqIEBtbWI6XHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxuLSAqIEBzdGFydDpcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xuLSAqIEBlbmQ6XHRlbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpXG4tICogQGRhdGFzeW5jOlx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxuLSAqXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcbi0gKiBzdHJ1Y3R1cmUuXG4tICovXG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IGVycjtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0ZXJyID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAobW1iKVxuLVx0XHRyZXQgPSBtbWJfc3luYyhtbWIpO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVxuLW91dDpcbi1cdC8qIGNoZWNrIGFuZCBhZHZhbmNlIGFnYWluIHRvIGNhdGNoIGVycm9ycyBhZnRlciBzeW5jaW5nIG91dCBidWZmZXJzICovXG4tXHRlcnIgPSBmaWxlX2NoZWNrX2FuZF9hZHZhbmNlX3diX2VycihmaWxlKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmNfbm9mbHVzaCk7XG4tXG4tLyoqXG4tICogbW1iX2ZzeW5jIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoIG1ldGFkYXRhXG4tICogXHQgICAgICAgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xuLSAqIGNhbGxlZCBhdCB0aGUgZW5kLlxuLSAqL1xuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MKG1tYl9mc3luYyk7XG4tXG4gLypcbiAgKiBDYWxsZWQgd2hlbiB3ZSYjMzk7dmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJiMzOTssIGFuZCBpdCBpcyBrbm93biB0aGF0XG4gICogYGJibG9jayYjMzk7IHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XG5AQCAtMTEyMywxMiAmIzQzOzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XG4gXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdC8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHNldCB0aGlzIGluIGJvdGggcGxhY2VzPyAqL1xuIFx0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZylcbiBcdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9mb2xpby1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbi1cdGlmIChiaC1cdTAwM2ViX21tYilcbi1cdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9tbWItXHUwMDNlbWFwcGluZywgLUVJTyk7XG4mIzQzO1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1tYiA9IFJFQURfT05DRShiaC1cdTAwM2ViX21tYik7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcbmluZGV4IDI3OGQ0YmU4ZWNiZTc3Li5lMTdiYmM3NTk4YzE0MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZGlyLmNcbkBAIC03MzQsNiAmIzQzOzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2V4dDIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9leHQyLmhcbkBAIC03MzUsNiAmIzQzOzczNSw3IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGV4dDJfY291bnRfZnJlZSAoc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVuc2lnbmVkKTtcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7XG4gZXh0ZXJuIGludCBleHQyX3dyaXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuJiM0MztleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICYjNDM7NzczLDYgQEAgZXh0ZXJuIHZvaWQgZXh0Ml9zeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcyxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xuIFxuIC8qIGZpbGUuYyAqL1xuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICBpbnQgZGF0YXN5bmMpO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucztcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jXG5pbmRleCA4ZGNhOWVjNGNhY2Q5YS4uYjkwMjBkZjdkODllMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9maWxlLmNcbkBAIC00NywyMSAmIzQzOzQ3LDYgQEAgc3RhdGljIGludCBleHQyX3JlbGVhc2VfZmlsZSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0aW50IHJldDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmMoZmlsZSwgXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tXHRpZiAocmV0ID09IC1FSU8pXG4tXHRcdC8qIFdlIGRvbiYjMzk7dCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCYjMzQ7ZGV0ZWN0ZWQgSU8gZXJyb3Igd2hlbiB3cml0aW5nIG1ldGFkYXRhIGJ1ZmZlcnNcJiMzNDspO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbkBAIC0yMTMsNyAmIzQzOzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcbiBcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuY1xuaW5kZXggMjk4MDg2MjljY2U1NmYuLjk5YWNkNzlhNGFmMjcyIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2lub2RlLmNcbkBAIC0zOSw4ICYjNDM7MzksNiBAQFxuICNpbmNsdWRlIFwmIzM0O2FjbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGF0dHIuaFwmIzM0O1xuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04Nyw3ICYjNDM7ODUsNyBAQCB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRcdC8qIHNldCBkdGltZSAqL1xuIFx0XHRFWFQyX0koaW5vZGUpLVx1MDAzZWlfZHRpbWVcdD0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbi1cdFx0X19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4mIzQzO1x0XHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4gXHRcdC8qIHRydW5jYXRlIHRvIDAgKi9cbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0aWYgKGlub2RlLVx1MDAzZWlfYmxvY2tzKVxuQEAgLTEyNTgsMTIgJiM0MzsxMjU2LDkgQEAgc3RhdGljIGludCBleHQyX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0aWYgKGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKVxuIFx0XHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cdH0gZWxzZSB7XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE0NjksNyAmIzQzOzE0NjQsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiYjNDM7aW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0c3RydWN0IGV4dDJfaW5vZGVfaW5mbyAqZWkgPSBFWFQyX0koaW5vZGUpO1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG5AQCAtMTU2MCwyMiAmIzQzOzE1NTUsMzMgQEAgc3RhdGljIGludCBfX2V4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXHR9IGVsc2UgZm9yIChuID0gMDsgbiBcdTAwM2MgRVhUMl9OX0JMT0NLUzsgbiYjNDM7JiM0MzspXG4gXHRcdHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrW25dID0gZWktXHUwMDNlaV9kYXRhW25dO1xuIFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuLVx0aWYgKGRvX3N5bmMpIHtcbi1cdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4tXHRcdFx0cHJpbnRrIChcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdHNiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGVpLVx1MDAzZWlfc3RhdGUgXHUwMDI2PSB+RVhUMl9TVEFURV9ORVc7XG4gXHRicmVsc2UgKGJoKTtcbiYjNDM7XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0MztpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbi1cdHJldHVybiBfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1x0c3RydWN0IGV4dDJfaW5vZGUgKnJhd19pbm9kZSA9IGV4dDJfZ2V0X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZiaCk7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChJU19FUlIocmF3X2lub2RlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdGVyciA9IG1tYl9zeW5jKFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdHByaW50ayhcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9zdXBlci5jXG5AQCAtMzYyLDYgJiM0MzszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQyX3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGV4dDJfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGV4dDJfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gZXh0Ml9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuY1xuaW5kZXggZTU1ZDE2YWJmNDIyZjQuLmJlNjNmODk0MDJhMzgxIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3hhdHRyLmNcbkBAIC03NzcsNiAmIzQzOzc3Nyw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbiBcdC8qIFVwZGF0ZSB0aGUgaW5vZGUuICovXG4gXHRFWFQyX0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wgPSBuZXdfYmggPyBuZXdfYmgtXHUwMDNlYl9ibG9ja25yIDogMDtcbiBcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKTtcbiYjNDM7XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdGlmIChJU19TWU5DKGlub2RlKSkge1xuIFx0XHRlcnJvciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHQvKiBJbiBjYXNlIHN5bmMgZmFpbGVkIGR1ZSB0byBFTk9TUEMgdGhlIGlub2RlIHdhcyBhY3R1YWxseVxuQEAgLTc4OSw4ICYjNDM7NzkwLDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4gXG4gXHRlcnJvciA9IDA7XG4gXHRpZiAob2xkX2JoIFx1MDAyNlx1MDAyNiBvbGRfYmggIT0gbmV3X2JoKSB7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLjBmMDYxNTVhMzVhNjk0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTE1MSw3ICYjNDM7MTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZSBpX2RhdGFfc2VtO1xuIFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbiBcdHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7XG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICppX21ldGFkYXRhX2JocztcbiBcbiBcdC8qXG4gXHQgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2ZcbkBAIC0yMTI2LDYgJiM0MzsyMTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2lub2RlX29ycGhhbl90cmFja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdCFsaXN0X2VtcHR5KFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9vcnBoYW4pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmV4dDRfaV9tZXRhZGF0YV9iaHMoXG4mIzQzO1x0XHRcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaV9tZXRhZGF0YV9iaHMgaXMgc2V0IGluIGV4dDRfaW5vZGVfYXR0YWNoX21tYigpIHVzaW5nIGNtcHhjaGcoKS5cbiYjNDM7XHQgKiBXZSB1c2UgUkVBRF9PTkNFIHdoZW4gYWNjZXNzaW5nIGlfbWV0YWRhdGFfYmhzIHRvIG1ha2Ugc3VyZSB3ZSBnZXRcbiYjNDM7XHQgKiBjb25zaXN0ZW50IHZpZXcgZm9yIGFsbCBhY2Nlc3Nlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ29kZXMgZm9yIG9wZXJhdGluZyBzeXN0ZW1zXG4gICovXG5AQCAtMzE1NSw2ICYjNDM7MzE2Niw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFx0X19leHQ0X2lnZXQoKHNiKSwgKGlubyksIChmbGFncyksIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbiBleHRlcm4gaW50ICBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XG4mIzQzO2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjNiMmY4YWMyMGJmODViIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICYjNDM7MzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSXQmIzM5O3MgZGlmZmljdWx0IHRvIGhhbmRsZSBmYWlsdXJlIHdoZW4gbWFya2luZyBidWZmZXIgZGlydHkgd2l0aG91dFxuJiM0MztcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWIgPSBrbWFsbG9jX29iaigqbW1iLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XG4mIzQzO1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuJiM0MztcdC8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovXG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocywgTlVMTCwgbW1iKSlcbiYjNDM7XHRcdGtmcmVlKG1tYik7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0IGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbkBAIC0zODksMTEgJiM0Mzs0MDQsMTMgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdGlmIChpbm9kZSkge1xuJiM0MztcdFx0XHRpZiAoIWV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKVxuJiM0MztcdFx0XHRcdGV4dDRfaW5vZGVfYXR0YWNoX21tYihpbm9kZSk7XG4mIzQzO1x0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICYjNDM7NjgsNiBAQCBzdGF0aWMgaW50IGV4dDRfc3luY19wYXJlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogdGhyb3VnaCBleHQ0X2V2aWN0X2lub2RlKCkpIGFuZCBzbyB3ZSBhcmUgc2FmZSB0byBmbHVzaFxuIFx0XHQgKiBtZXRhZGF0YSBibG9ja3MgYW5kIHRoZSBpbm9kZS5cbiBcdFx0ICovXG4tXHRcdHJldCA9IG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGJyZWFrO1xuIFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbkBAIC04MywyMiAmIzQzOzgwLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mc3luY19ub2pvdXJuYWwoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiBcdFx0XHRcdGludCBkYXRhc3luYywgYm9vbCAqbmVlZHNfYmFycmllcilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX2lub2RlO1xuLVx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbi1cdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxuLVx0XHQubnJfdG9fd3JpdGUgPSAwLFxuLVx0fTtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICYjNDM7MTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRpZiAoc2JfcmRvbmx5KGlub2RlLVx1MDAzZWlfc2IpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRyZXQgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSB7XG4gXHRcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZuZWVkc19iYXJyaWVyKTtcbkBAIC0xNjQsMTAgJiM0MzsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlciYjMzk7cyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cbiBcdCAqICBNZXRhZGF0YSBpcyBpbiB0aGUgam91cm5hbCwgd2Ugd2FpdCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIHRvXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uMGMyMjBiNTM1NTkwZjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxuIFx0XHRleHQ0X2V2aWN0X2VhX2lub2RlKGlub2RlKTtcbiBcdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZXJlJiMzOTtzIGRpcnR5IHBhZ2Ugd2lsbCBsZWFkIHRvIGRhdGEgbG9zcywgdXNlclxuIFx0XHQgKiBjb3VsZCBzZWUgc3RhbGUgZGF0YS5cbkBAIC0xOTUsOSAmIzQzOzE5Nyw5IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXCYjMzQ7ZGF0YSB3aWxsIGJlIGxvc3RcJiMzNDspO1xuIFxuIFx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuLVx0XHQvKiBBdm9pZCBtYmFsbG9jIHNwZWNpYWwgaW5vZGUgd2hpY2ggaGFzIG5vIHByb3BlciBpb3BzICovXG4tXHRcdGlmICghRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWwpXG4tXHRcdFx0bW1iX3N5bmMoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbiYjNDM7XHRcdGlmIChtbWIpXG4mIzQzO1x0XHRcdG1tYl9zeW5jKG1tYik7XG4gXHRcdGdvdG8gbm9fZGVsZXRlO1xuIFx0fVxuIFxuQEAgLTM0NTIsNiAmIzQzOzM0NTQsNyBAQCBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWw7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4gXG4gXHRpZiAoam91cm5hbCkge1xuIFx0XHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcbkBAIC0zNDYyLDggJiM0MzszNDY1LDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbiBcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xuLVx0aWYgKG1tYl9oYXNfYnVmZmVycyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcbiYjNDM7XHRpZiAobW1iIFx1MDAyNlx1MDAyNiBtbWJfaGFzX2J1ZmZlcnMobW1iKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQztcbiB9XG5AQCAtNTgzOCwyNCAmIzQzOzU4NDIsMzggQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsLFxuIFx0XHRcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9zeW5jX3RpZCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4mIzQzO1x0XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuLVx0XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbiYjNDM7aW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWwpKVxuJiM0MztcdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4mIzQzO1xuJiM0MztcdGVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsIFx1MDAyNmlsb2MpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdG1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRpZiAobW1iKSB7XG4mIzQzO1x0XHRlcnIgPSBtbWJfc3luYyhtbWIpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdC8qXG4tXHRcdCAqIHN5bmMoMikgd2lsbCBmbHVzaCB0aGUgd2hvbGUgYnVmZmVyIGNhY2hlLiBObyBuZWVkIHRvIGRvXG4tXHRcdCAqIGl0IGhlcmUgc2VwYXJhdGVseSBmb3IgZWFjaCBpbm9kZS5cbi1cdFx0ICovXG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFx1MDAyNlx1MDAyNiAhd2JjLVx1MDAzZWZvcl9zeW5jKVxuLVx0XHRcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShpbG9jLmJoKSkge1xuLVx0XHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4tXHRcdFx0XHRcdCAgICAgICBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGlub2RlXCYjMzQ7KTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4tXHRcdGJyZWxzZShpbG9jLmJoKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoaWxvYy5iaCkpIHtcbiYjNDM7XHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgaW5vZGVcJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShpbG9jLmJoKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLmFlMzNmNWJjYjEzMzE0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xNDMwLDcgJiM0MzsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0SU5JVF9XT1JLKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0bW1iX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xuJiM0MztcdGVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzID0gTlVMTDtcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiBcdGxvY2tkZXBfc2V0X3N1YmNsYXNzKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTtcbiAjZW5kaWZcbkBAIC0xNDUxLDYgJiM0MzsxNDUxLDcgQEAgc3RhdGljIGludCBleHQ0X2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGZzY3J5cHRfZnJlZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0a2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuQEAgLTE1MjksOSAmIzQzOzE1MzAsMTEgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gXG4gdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuJiM0MztcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7XG4mIzQzO1xuIFx0ZXh0NF9mY19kZWwoaW5vZGUpO1xuLVx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbClcbi1cdFx0bW1iX2ludmFsaWRhdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdG1tYl9pbnZhbGlkYXRlKG1tYik7XG4gXHRjbGVhcl9pbm9kZShpbm9kZSk7XG4gXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuIFx0LypcbkBAIC0xNjA1LDkgJiM0MzsxNjA4LDEzIEBAIHN0YXRpYyBpbnQgZXh0NF9uZnNfY29tbWl0X21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xuIFx0XHQuc3luY19tb2RlID0gV0JfU1lOQ19BTExcbiBcdH07XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSylcbiYjNDM7XHRcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1FVT1RBXG5AQCAtMTY2NCw2ICYjNDM7MTY3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZVx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC5kZXN0cm95X2lub2RlXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQ0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmRpcnR5X2lub2RlXHQ9IGV4dDRfZGlydHlfaW5vZGUsXG4gXHQuZHJvcF9pbm9kZVx0PSBleHQ0X2Ryb3BfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmNcbmluZGV4IGM2Y2NhNWQwMGZmZDdlLi45MTZmNWM0Y2RjZjM5MCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2Rpci5jXG5AQCAtMTA1MywxMSAmIzQzOzEwNTMsNyBAQCBzdGF0aWMgaW50IF9fZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBsb2ZmX3QgcG9zLCBpbnQgbnJfc2xvdHMpXG4gXHRcdFx0bnJfc2xvdHMtLTtcbiBcdFx0fVxuIFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNk1TRE9TX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0XHRicmVsc2UoYmgpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBwb3MgaXMgKm5leHQqIGRlJiMzOTtzIHBvc2l0aW9uLCBzbyB0aGlzIGRvZXMgYC0gc2l6ZW9mKGRlKSYjMzk7ICovXG4gXHRcdHBvcyAmIzQzOz0gKChvcmlnX3Nsb3RzIC0gbnJfc2xvdHMpICogc2l6ZW9mKCpkZSkpIC0gc2l6ZW9mKCpkZSk7XG5AQCAtMTA4OCwxMSAmIzQzOzEwODQsNyBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pXG4gXHRcdG5yX3Nsb3RzLS07XG4gXHR9XG4gXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNk1TRE9TX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRicmVsc2UoYmgpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiBcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xuIFxuIFx0aWYgKG5yX3Nsb3RzKSB7XG5AQCAtMTEwOSwxMiAmIzQzOzExMDEsMTIgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0fVxuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuIFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuJiM0MztcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZmF0X3JlbW92ZV9lbnRyaWVzKTtcbiBcbkBAIC0xMTQ0LDIxICYjNDM7MTEzNiwxMSBAQCBzdGF0aWMgaW50IGZhdF96ZXJvZWRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwgc2VjdG9yX3QgYmxrbnIsIGludCBucl91c2VkLFxuIFx0XHRuJiM0MzsmIzQzOztcbiBcdFx0YmxrbnImIzQzOyYjNDM7O1xuIFx0XHRpZiAobiA9PSBucl9iaHMpIHtcbi1cdFx0XHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0fVxuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRcdFx0YnJlbHNlKGJoc1tpXSk7XG4gXHRcdFx0biA9IDA7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChJU19ESVJTWU5DKGRpcikpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJvcjtcbi1cdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oXG5AQCAtNDIxLDcgJiM0Mzs0MjEsNiBAQCBleHRlcm4gdm9pZCBmYXRfZGV0YWNoKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0c3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGxvZmZfdCBpX3Bvcyk7XG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgIHZvaWQgKCpzZXR1cCkoc3RydWN0IHN1cGVyX2Jsb2NrICopKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMzdlNzA0OWI0YzhjNDQuLjFjODM1Y2E1ZjIxYTUxIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuY1xuQEAgLTE5MCw4ICYjNDM7MTkwLDcgQEAgaW50IGZhdF9maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZmF0X2lub2RlO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsIFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMyLDE1ICYjNDM7MzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4gXHR9XG4gXHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2F0dHJzIHw9IEFUVFJfQVJDSDtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGlub2RlLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRpZiAod2FpdCkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4mIzQzO1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfc3RhcnQgPSBpX3N0YXJ0O1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0O1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBXcml0ZSBhIG5ldyBFT0YsIGFuZCBnZXQgdGhlIHJlbWFpbmluZyBjbHVzdGVyIGNoYWluIGZvciBmcmVlaW5nLiAqL1xuIFx0aWYgKHNraXApIHtcbmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uZTNiYjdiNDcxM2YyYWMgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2lub2RlLmNcbkBAIC02MjMsNyAmIzQzOzYyMywzNCBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9idWlsZF9pbm9kZSk7XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRsb2ZmX3QgaV9wb3M7XG4mIzQzO1x0c2VjdG9yX3QgYmxvY2tucjtcbiYjNDM7XHRpbnQgb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xuJiM0MztcdGlmICghaV9wb3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgXHUwMDI2YmxvY2tuciwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRiaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrX25vbmF0b21pYyhpbm9kZS1cdTAwM2VpX3NiLCBibG9ja25yKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJ1ZmZlciBwcmVzZW50PyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yIHN5bmNfZGlydHlfYnVmZmVyKClcbiYjNDM7XHQgKiBmb3IgcHJvcGVyIHN5bmNocm9uaXphdGlvbiB3aXRoIG9uZ29pbmcgSU8uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGJoIFx1MDAyNlx1MDAyNiBidWZmZXJfdXB0b2RhdGUoYmgpKVxuJiM0MztcdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO1x0cmV0dXJuIG1tYl9zeW5jKFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7fVxuIFxuIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC02NDAsNyAmIzQzOzY2Nyw3IEBAIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQgKiBhbnkgY29ycnVwdGlvbiBvbiB0aGUgbmV4dCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXJcbiBcdFx0ICogY2hhaW4gZm9yIHRoZSBmaWxlLlxuIFx0XHQgKi9cbi1cdFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhdF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9XQVJOSU5HLCBcJiMzNDtGYWlsZWQgdG8gXCYjMzQ7XG4gXHRcdFx0XHRcdFwmIzM0O3VwZGF0ZSBvbiBkaXNrIGlub2RlIGZvciB1bnVzZWQgXCYjMzQ7XG5AQCAtODU0LDcgJiM0Mzs4ODEsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XG5AQCAtODYzLDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XG4gXHRsb2ZmX3QgaV9wb3M7XG4gXHRzZWN0b3JfdCBibG9ja25yO1xuLVx0aW50IGVyciwgb2Zmc2V0O1xuJiM0MztcdGludCBvZmZzZXQ7XG4gXG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4gXHRcdHJldHVybiAwO1xuQEAgLTkwNywxMSAmIzQzOzkzNCw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZzYmktXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGVyciA9IDA7XG4tXHRpZiAod2FpdClcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuQEAgLTkyNSwyMyAmIzQzOzk1MCwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNk1TRE9TX1NCKHNiKS1cdTAwM2VzX2xvY2spO1xuIFx0fSBlbHNlXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbiYjNDM7XHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XG4tfVxuLVxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcbi1cbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZmF0X2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gZmF0X2ZyZWVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZmF0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZmF0X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBmYXRfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IGZhdF9zdGF0ZnMsXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmNcbmluZGV4IDMwMjdlZjUzYWYyMTRjLi5iZTE4ZjZiNTgxOWJhNyAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xNDYsMTYgJiM0MzsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHR9IGVsc2Uge1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2xvZ3N0YXJ0ID0gbmV3X2RjbHVzO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxuIFx0XHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cbiBcdFx0ICovXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fSBlbHNlXG4tXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0fVxuIFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXHUwMDNlaV9ibG9ja3MgXHUwMDNlXHUwMDNlIChzYmktXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XG4gXHRcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjg2OGVmMDkxMDQ4ZTQwIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjUyLDEyICYjNDM7MjUyLDExIEBAIHN0YXRpYyBpbnQgbXNkb3NfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKioqKiBDcmVhdGUgYSBmaWxlICovXG5AQCAtNDczLDIxICYjNDM7NDcyLDIwIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyBcdTAwMjY9IH5BVFRSX0hJRERFTjtcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuIFx0XHRcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbiBcdFx0XHRcdGlmIChlcnIpIHtcbiBcdFx0XHRcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgPSBvbGRfYXR0cnM7XG4gXHRcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdFx0fVxuLVx0XHRcdH0gZWxzZVxuLVx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xuIFx0XHRcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdFx0XHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcbi1cdFx0XHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKG9sZF9kaXIpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4mIzQzO1x0XHRcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFx0fVxuQEAgLTUxOCwyNiAmIzQzOzUxNiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdGVsc2VcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4tXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3JfaW5vZGU7XG4tXHR9IGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuLVxuIFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcbiBcdFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXHUwMDNlaV9sb2dzdGFydCk7XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkb3Rkb3RfYmgsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuLVx0XHR9XG4gXHRcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XG4gXHRcdGlmICghbmV3X2lub2RlKVxuIFx0XHRcdGluY19ubGluayhuZXdfZGlyKTtcbiBcdH1cbiYjNDM7XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XG4mIzQzO1x0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuJiM0MztcdH1cbiYjNDM7XG4gXG4gXHRlcnIgPSBmYXRfcmVtb3ZlX2VudHJpZXMob2xkX2RpciwgXHUwMDI2b2xkX3NpbmZvKTtcdC8qIGFuZCByZWxlYXNlcyBiaCAqL1xuIFx0b2xkX3NpbmZvLmJoID0gTlVMTDtcbkBAIC01NDUsMTAgJiM0Mzs1MzgsOSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbiBcdGlub2RlX2luY19pdmVyc2lvbihvbGRfZGlyKTtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIFx1MDAyNnRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2RpciwgMSk7XG4gXG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGRyb3BfbmxpbmsobmV3X2lub2RlKTtcbkBAIC01NzEsMTQgJiM0Mzs1NjMsMTUgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNk1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4gXHRcdGNvcnJ1cHQgfD0gc3luY19kaXJ0eV9idWZmZXIoZG90ZG90X2JoKTtcbiBcdH1cbi1lcnJvcl9pbm9kZTpcbiBcdGZhdF9kZXRhY2gob2xkX2lub2RlKTtcbiBcdGZhdF9hdHRhY2gob2xkX2lub2RlLCBvbGRfc2luZm8uaV9wb3MpO1xuIFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgPSBvbGRfYXR0cnM7XG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpO1xuLVx0XHRpZiAoY29ycnVwdClcbi1cdFx0XHRjb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7XG4mIzQzO1x0XHRpZiAoY29ycnVwdCkge1xuJiM0MztcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG5ld19pbm9kZSk7XG4mIzQzO1x0XHRcdGNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5pbmRleCBlOTA5NDQ3ODczZTM2NC4uMzA4MTU4ODk1YjFkOGEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5AQCAtNjc4LDEwICYjNDM7Njc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxuIFxuIFx0LyogdXBkYXRlIHRpbWVzdGFtcCAqL1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBjbGVhbnVwOlxuIFx0a2ZyZWUoc2xvdHMpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC05MDQsOSAmIzQzOzkwMyw5IEBAIHN0YXRpYyBpbnQgdmZhdF9nZXRfZG90ZG90X2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLFxuIFxuIHN0YXRpYyBpbnQgdmZhdF9zeW5jX2lwb3Moc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuLVx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0cmV0dXJuIGZhdF9zeW5jX2lub2RlKGlub2RlKTtcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdGlmIChJU19ESVJTWU5DKGRpcikpXG4mIzQzO1x0XHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTIxLDE0ICYjNDM7OTIwLDE0IEBAIHN0YXRpYyBpbnQgdmZhdF91cGRhdGVfZG90ZG90X2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0MztzdGF0aWMgaW50IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdHJldHVybiBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuQEAgLTk5Niw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4tXHR2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuJiM0MztcdGVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCBcdTAwMjZ0cyk7XG4gXG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGRyb3BfbmxpbmsobmV3X2lub2RlKTtcbkBAIC0xMDI0LDggJiM0MzsxMDIzLDEwIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0ZmF0X2F0dGFjaChvbGRfaW5vZGUsIG9sZF9zaW5mby5pX3Bvcyk7XG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpO1xuLVx0XHRpZiAoY29ycnVwdClcbi1cdFx0XHRjb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7XG4mIzQzO1x0XHRpZiAoY29ycnVwdCkge1xuJiM0MztcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG5ld19pbm9kZSk7XG4mIzQzO1x0XHRcdGNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuQEAgLTExMjMsMTAgJiM0MzsxMTI0LDEzIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWVfZXhjaGFuZ2Uoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5XG4gXHRcdFx0dmZhdF9tb3ZlX25saW5rKG5ld19kaXIsIG9sZF9kaXIpO1xuIFx0fVxuIFxuLVx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFx1MDAyNnRzKTtcbiYjNDM7XHRlcnIgPSB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuIFx0LyogaWYgZGlyZWN0b3JpZXMgYXJlIG5vdCB0aGUgc2FtZSwgdXBkYXRlIG5ld19kaXIgYXMgd2VsbCAqL1xuLVx0aWYgKG9sZF9kaXIgIT0gbmV3X2Rpcilcbi1cdFx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG5ld19kaXIsIFx1MDAyNnRzKTtcbiYjNDM7XHRpZiAob2xkX2RpciAhPSBuZXdfZGlyKSB7XG4mIzQzO1x0XHRpbnQgZXJyMiA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCBcdTAwMjZ0cyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0ZXJyID0gZXJyMjtcbiYjNDM7XHR9XG4gXG4gb3V0OlxuIFx0YnJlbHNlKG9sZF9kb3Rkb3RfYmgpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmNcbmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDRcbi0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mcy13cml0ZWJhY2suY1xuQEAgLTE4NTEsNiAmIzQzOzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0ID0gZXJyO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERvIHdlIG5lZWQgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8gcG9zc2libHkgc3VibWl0dGVkXG4mIzQzO1x0ICogYnkgcHJldmlvdXMgV0JfU1lOQ19OT05FIHdyaXRlYmFjaz9cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgIXdiYy1cdTAwM2Vmb3Jfc3luYyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0XHRpbm9kZV9zdGF0ZV9jbGVhcihpbm9kZSwgSV9NRVRBREFUQV9XUklURUJBQ0spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19vcC1cdTAwM2VzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCB3YmMpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAwKVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1x0fVxuIFx0d2JjLVx1MDAzZXVucGlubmVkX25ldGZzX3diID0gZmFsc2U7XG4gXHR0cmFjZV93cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCB3YmMsIG5yX3RvX3dyaXRlKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTg5MiwxNCAmIzQzOzE5MDgsMTcgQEAgc3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQvKlxuIFx0ICogSWYgdGhlIGlub2RlIGlzIGFscmVhZHkgZnVsbHkgY2xlYW4sIHRoZW4gdGhlcmUmIzM5O3Mgbm90aGluZyB0byBkby5cbiBcdCAqXG4tXHQgKiBGb3IgZGF0YS1pbnRlZ3JpdHkgc3luY3Mgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IHBhZ2VzIGFyZVxuLVx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcbi1cdCAqIHRoZXJlIGFyZSBhbnkgc3VjaCBwYWdlcywgd2UmIzM5O2xsIG5lZWQgdG8gd2FpdCBmb3IgdGhlbS5cbiYjNDM7XHQgKiBGb3IgZGF0YS1pbnRlZ3JpdHkgc3luY3Mgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IGZvbGlvcyBvclxuJiM0MztcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxuJiM0MztcdCAqIHdyaXRlYmFjay4gSWYgdGhlcmUsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXG4gXHQgKi9cbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwgfHxcbi1cdCAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVx1MDAzZWlfbWFwcGluZywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spKSlcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSkge1xuJiM0MztcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0aWYgKCFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTtcbiBcdHdiY19hdHRhY2hfYW5kX3VubG9ja19pbm9kZSh3YmMsIGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xuaW5kZXggNWEwZDI3NjM3OWQxM2IuLjI3ZDdkYzE2ZmNiMGEwIDEwMDY0NFxuLS0tIGEvZnMvbGliZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbGliZnMuY1xuQEAgLTE1NTksOSAmIzQzOzE1NTksMTIgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuJiM0MztcdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2XG4mIzQzO1x0XHRcdChJX0RJUlRZX0FMTCB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKGRhdGFzeW5jIFx1MDAyNlx1MDAyNiAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfREFUQVNZTkMpKVxuJiM0MztcdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNlxuJiM0MztcdFx0XHQoSV9ESVJUWV9EQVRBU1lOQyB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuY1xuaW5kZXggMzYxZDI2ZDg3ZDJlMmQuLjJjYTE2Zjg0OWQ1YWMwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2Rpci5jXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbiYjNDM7XHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xMCwxMyAmIzQzOzEwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7bWluaXguaFwmIzM0O1xuIFxuLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxuLVx0XHRcdFx1MDAyNm1pbml4X2koZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLX1cbi1cbiAvKlxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cbkBAIC0yNiw3ICYjNDM7MTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLmRhZjgzZTRmZjI1YzgxIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgJiM0MzsyNCw4IEBAXG4gXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gbWluaXhfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gbWluaXhfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBtaW5peF9wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gbWluaXhfc3RhdGZzLFxuQEAgLTYzMCw3ICYjNDM7NjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4mIzQzO3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlO1xuQEAgLTYzOSw3ICYjNDM7NjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyAmIzQzOzY1NCwxNSBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0ZWxzZSBmb3IgKGkgPSAwOyBpIFx1MDAzYyA5OyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuJiM0MztzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcbiBcdHN0cnVjdCBtaW5peDJfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjY2LDcgJiM0Mzs2NzEsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFxuIFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRpZiAoIXJhd19pbm9kZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICYjNDM7Njg1LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuJiM0MztcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRlbHNlXG4tXHRcdGJoID0gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbi1cdGlmICghYmgpXG4mIzQzO1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiYjNDM7XHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbiYjNDM7XHRlcnIgPSBtbWJfc3luYyhcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiYjNDM7XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuJiM0MztcdFx0cHJpbnRrKFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiBcdH1cbi1cdGJyZWxzZSAoYmgpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9kaXIuYyBiL2ZzL3VkZi9kaXIuY1xuaW5kZXggZWJjOWY2YTM3OWZlM2EuLjQyNWUzYzE2MjkzNTA0IDEwMDY0NFxuLS0tIGEvZnMvdWRmL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvZGlyLmNcbkBAIC0xNTcsNiAmIzQzOzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4gXHQuaXRlcmF0ZV9zaGFyZWRcdFx0PSB1ZGZfcmVhZGRpcixcbiBcdC51bmxvY2tlZF9pb2N0bFx0XHQ9IHVkZl9pb2N0bCxcbi1cdC5mc3luY1x0XHRcdD0gdWRmX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHRcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jXG5pbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvZmlsZS5jXG5AQCAtMTk4LDEzICYjNDM7MTk4LDYgQEAgc3RhdGljIGludCB1ZGZfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbi17XG4tXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXG4tXHRcdFx0XHUwMDI2VURGX0koZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLX1cbi1cbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC51bmxvY2tlZF9pb2N0bFx0XHQ9IHVkZl9pb2N0bCxcbkBAIC0yMTIsNyAmIzQzOzIwNSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5tbWFwXHRcdFx0PSB1ZGZfZmlsZV9tbWFwLFxuIFx0LndyaXRlX2l0ZXJcdFx0PSB1ZGZfZmlsZV93cml0ZV9pdGVyLFxuIFx0LnJlbGVhc2VcdFx0PSB1ZGZfcmVsZWFzZV9maWxlLFxuLVx0LmZzeW5jXHRcdFx0PSB1ZGZfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0XHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQubGxzZWVrXHRcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuQEAgLTI1Myw2ICYjNDM7MjQ2LDggQEAgc3RhdGljIGludCB1ZGZfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFxuIFx0c2V0YXR0cl9jb3B5KFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBhdHRyKTtcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdGlmIChJU19TWU5DKGlub2RlKSlcbiYjNDM7XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcbmluZGV4IDY3YmNmODM3NThjOGZiLi42OGM2YzJiYThlZDFhMiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTUxLDggJiM0Mzs1MSw2IEBAXG4gc3RydWN0IHVkZl9tYXBfcnE7XG4gXG4gc3RhdGljIHVtb2RlX3QgdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoc3RydWN0IGZpbGVFbnRyeSAqKTtcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7XG4tc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpO1xuIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApO1xuIHN0YXRpYyBpbnQgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLFxuQEAgLTE0Miw3ICYjNDM7MTQwLDcgQEAgdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdFx0d2FudF9kZWxldGUgPSAxO1xuIFx0XHRcdHVkZl9zZXRzaXplKGlub2RlLCAwKTtcbi1cdFx0XHR1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7XG4mIzQzO1x0XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTtcbiBcdFx0fVxuIFx0XHRpZiAoaWluZm8tXHUwMDNlaV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlub2RlLVx1MDAzZWlfc2l6ZSAhPSBpaW5mby1cdTAwM2VpX2xlbkV4dGVudHMpIHtcbkBAIC05MzYsMTAgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKVxuIFx0aWluZm8tXHUwMDNlaV9uZXh0X2FsbG9jX2dvYWwgPSBuZXdibG9ja251bSAmIzQzOyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0ID0gMDtcbiBvdXRfZnJlZTpcbiBcdGJyZWxzZShwcmV2X2Vwb3MuYmgpO1xuQEAgLTEzMjYsMTAgJiM0MzsxMzIxLDcgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0fVxuIHVwZGF0ZV90aW1lOlxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTcwNSwxNCAmIzQzOzE2OTcsMjggQEAgdm9pZCB1ZGZfdXBkYXRlX2V4dHJhX3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSlcbiBcdFx0aWluZm8tXHUwMDNlaV9leHRyYVBlcm1zIHw9IEZFX1BFUk1fT19ERUxFVEU7XG4gfVxuIFxuLWludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4tfVxuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gXG4tc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCAxKTtcbiYjNDM7XHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZVREZfSShpbm9kZSktXHUwMDNlaV9sb2NhdGlvbiwgMCkpO1xuJiM0MztcdGlmICghYmgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4mIzQzO1x0XHR1ZGZfd2Fybihpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUpXG5AQCAtMTcyMyw3ICYjNDM7MTcyOSw3IEBAIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lXG4gXHRcdGlpbmZvLVx1MDAzZWlfY3J0aW1lID0gdGltZTtcbiB9XG4gXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuJiM0MztpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0c3RydWN0IGZpbGVFbnRyeSAqZmU7XG5AQCAtMTczMiw3ICYjNDM7MTczOCw2IEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiBcdHVpbnQzMl90IHVkZnBlcm1zO1xuIFx0dWludDE2X3QgaWNiZmxhZ3M7XG4gXHR1aW50MTZfdCBjcmNsZW47XG4tXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiBcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XG5AQCAtMTkzNywxNyAmIzQzOzE5NDIsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFxuIFx0Lyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdFx0dWRmX3dhcm4oaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7SU8gZXJyb3Igc3luY2luZyB1ZGYgaW5vZGUgWyUwOGxseF1cXG5cJiMzNDssXG4tXHRcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuY1xuaW5kZXggN2I4NWY1YTJiNzlmYzQuLmU3ZTlmMmEwZDI0ZTgwIDEwMDY0NFxuLS0tIGEvZnMvdWRmL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9zdXBlci5jXG5AQCAtMjExLDYgJiM0MzsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSB1ZGZfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLFxuIFx0LndyaXRlX2lub2RlXHQ9IHVkZl93cml0ZV9pbm9kZSxcbiYjNDM7XHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IHVkZl9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gdWRmX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IHVkZl9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oXG5pbmRleCA2ZDk1MWUwNWMwMDQ2YS4uODZkYzJkNmEyZWYxYjggMTAwNjQ0XG4tLS0gYS9mcy91ZGYvdWRmZGVjbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvdWRmZGVjbC5oXG5AQCAtMTM3LDcgJiM0MzsxMzcsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZGZfZGlyX2VudHJ5X2xlbihzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqY2ZpKVxuIFxuIC8qIGZpbGUuYyAqL1xuIGV4dGVybiBsb25nIHVkZl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosXG5AQCAtMTU4LDYgJiM0MzsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcbiBleHRlcm4gaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QpO1xuIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG4gZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiYjNDM7aW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4gZXh0ZXJuIGludCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYyxcbiBcdFx0ICAgICAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQsIGludDhfdCAqZXR5cGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggOGIyM2JjOWEyNDRjYjMuLmZkMmM3MTE1YzA1NDI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC0yMTAsMTAgJiM0MzsyMTAsNiBAQCB2b2lkIGJoX2VuZF9hc3luY193cml0ZShzdHJ1Y3QgYmlvICpiaW8pO1xuIFxuIC8qIFRoaW5ncyB0byBkbyB3aXRoIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdCAqL1xuIHZvaWQgbW1iX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKTtcbi1pbnQgbW1iX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0XHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcbiB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jayxcbiBcdFx0XHRzZWN0b3JfdCBsZW4pO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9iZGV2X2JoX2FsaWFzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uNzI5ZTNjYjg5ZTM4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTc0MCw3ICYjNDM7NzQwLDggQEAgZW51bSBpbm9kZV9zdGF0ZV9mbGFnc19lbnVtIHtcbiBcdElfQ1JFQVRJTkdcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE1KSxcbiBcdElfRE9OVENBQ0hFXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRJX1NZTkNfUVVFVUVEXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNyksXG4tXHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOClcbiYjNDM7XHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOCksXG4mIzQzO1x0SV9NRVRBREFUQV9XUklURUJBQ0tcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOSksXG4gfTtcbiBcbiAjZGVmaW5lIElfRElSVFlfSU5PREUgKElfRElSVFlfU1lOQyB8IElfRElSVFlfREFUQVNZTkMpXG5AQCAtMjIxMyw2ICYjNDM7MjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIElfRElSVFlfU1lOQyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG5AQCAtODYsNiAmIzQzOzg2LDggQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKmZyZWVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKmRpcnR5X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZ3MpO1xuIFx0aW50ICgqd3JpdGVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiYjNDM7XHRpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBcdGludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcdHZvaWQgKCpwdXRfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBzeW5jX2lub2RlX21ldGFkYXRhYCBjYWxsYmFjayBpbiBgc3VwZXJfb3BlcmF0aW9uc2AgYW5kIG1vZGlmaWVzIHRoZSBWRlMgd3JpdGViYWNrIGxvZ2ljIHRvIGhhbmRsZSBhIG5ldyBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcuIEl0IGltcGxlbWVudHMgdGhpcyBjYWxsYmFjayBmb3Igc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMpIGFuZCByZWZhY3RvcnMgdGhlaXIgbWV0YWRhdGEgc3luY2hyb25pemF0aW9uIGxvZ2ljLCByZXBsYWNpbmcgYG1tYl9mc3luY2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFZGUyB3cml0ZWJhY2sgYW5kIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaGFuZGxpbmcsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljYjUzYThkNTk2M2ZkMWU2NWJjZTllYTJmNWE2M2FkYzgzMzI5YmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAxNiAyMDozMjowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmgKaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmE3ZmFhOTFkZWVkNWFjIDEwMDY0NAotLS0gYS9mcy9hZmZzL2FmZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2FmZnMuaApAQCAtNDQsNyAmIzQzOzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7CiAJc3RydWN0IG11dGV4IGlfbGlua19sb2NrOwkJLyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqLwogCXN0cnVjdCBtdXRleCBpX2V4dF9sb2NrOwkJLyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqLwogI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrCi0Jc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzOwogCXUzMgkgaV9ibGtjbnQ7CQkJLyogYmxvY2sgY291bnQgKi8KIAl1MzIJIGlfZXh0Y250OwkJCS8qIGV4dGVuZGVkIGJsb2NrIGNvdW50ICovCiAJdTMyCSppX2xjOwkJCQkvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovCkBAIC0xNTIsNyAmIzQzOzE1MSw2IEBAIGV4dGVybiBib29sCWFmZnNfbm9maWxlbmFtZXRydW5jYXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gaW50CWFmZnNfY2hlY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuLAogCQkJCWJvb2wgbm90cnVuY2F0ZSk7CiBleHRlcm4gaW50CWFmZnNfY29weV9uYW1lKHVuc2lnbmVkIGNoYXIgKmJzdHIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogYml0bWFwLiBjICovCiAKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYW1pZ2FmZnMuYyBiL2ZzL2FmZnMvYW1pZ2FmZnMuYwppbmRleCBiZWQ0ZmM4MDVlOGU2Ni4uNmNjMGZjOWE0Y2JmOTIgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2FtaWdhZmZzLmMKQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAJCUFGRlNfVEFJTChzYiwgZGlyX2JoKS0mZ3Q7aGFzaF9jaGFpbiA9IGNwdV90b19iZTMyKGlubyk7CiAKIAlhZmZzX2FkanVzdF9jaGVja3N1bShkaXJfYmgsIGlubyk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCwgJmFtcDtBRkZTX0koZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgpOwogCWFmZnNfYnJlbHNlKGRpcl9iaCk7CiAKIAlpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTsKQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgYWZmc19yZW1vdmVfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZW1fYmgpCiAJCQllbHNlCiAJCQkJQUZGU19UQUlMKHNiLCBiaCktJmd0O2hhc2hfY2hhaW4gPSBpbm87CiAJCQlhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vKSAtIGhhc2hfaW5vKTsKLQkJCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCUFGRlNfVEFJTChzYiwgcmVtX2JoKS0mZ3Q7cGFyZW50ID0gMDsKIAkJCXJldHZhbCA9IDA7CiAJCQlicmVhazsKQEAgLTE4MCw3ICYjNDM7MTgwLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCQlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQltbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTsKIAogCQltZW1jcHkoQUZGU19UQUlMKHNiLCBiaCktJmd0O25hbWUsIEFGRlNfVEFJTChzYiwgbGlua19iaCktJmd0O25hbWUsIDMyKTsKIAkJcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTsKQEAgLTE4OCw3ICYjNDM7MTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCQlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCiAJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCQlpcHV0KGRpcik7CkBAIC0yMDMsNyAmIzQzOzIwMyw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCQkJX19iZTMyIGlubzIgPSBBRkZTX1RBSUwoc2IsIGxpbmtfYmgpLSZndDtsaW5rX2NoYWluOwogCQkJQUZGU19UQUlMKHNiLCBiaCktJmd0O2xpbmtfY2hhaW4gPSBpbm8yOwogCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubzIpIC0gbGlua19pbm8pOwotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQlyZXR2YWwgPSAwOwogCQkJLyogRml4IHRoZSBsaW5rIGNvdW50LCBpZiBiaCBpcyBhIG5vcm1hbCBoZWFkZXIgYmxvY2sgd2l0aG91dCBsaW5rcyAqLwogCQkJc3dpdGNoIChiZTMyX3RvX2NwdShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7c3R5cGUpKSB7CkBAIC0zMDYsNyAmIzQzOzMwNiw3IEBAIGFmZnNfcmVtb3ZlX2hlYWRlcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGRvbmVfdW5sb2NrOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAogCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCmRpZmYgLS1naXQgYS9mcy9hZmZzL2ZpbGUuYyBiL2ZzL2FmZnMvZmlsZS5jCmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4yM2UwODhhN2VkNGZiMyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9maWxlLmMKQEAgLTE0MCwxNCAmIzQzOzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpCiAJQUZGU19UQUlMKHNiLCBuZXdfYmgpLSZndDtwYXJlbnQgPSBjcHVfdG9fYmUzMihpbm9kZS0mZ3Q7aV9pbm8pOwogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBuZXdfYmgpOwogCi0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCk7CiAKIAl0bXAgPSBiZTMyX3RvX2NwdShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7ZXh0ZW5zaW9uKTsKIAlpZiAodG1wKQogCQlhZmZzX3dhcm5pbmcoc2IsICYjMzQ7YWxsb2NfZXh0JiMzNDssICYjMzQ7cHJldmlvdXMgZXh0ZW5zaW9uIHNldCAoJXgpJiMzNDssIHRtcCk7CiAJQUZGU19UQUlMKHNiLCBiaCktJmd0O2V4dGVuc2lvbiA9IGNwdV90b19iZTMyKGJsb2NrbnIpOwogCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAKIAlBRkZTX0koaW5vZGUpLSZndDtpX2V4dGNudCYjNDM7JiM0Mzs7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCQltZW1zZXQoQUZGU19EQVRBKGJoKSAmIzQzOyBib2ZmLCAwLCB0bXApOwogCQliZTMyX2FkZF9jcHUoJmFtcDtBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUsIHRtcCk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCXNpemUgJiM0Mzs9IHRtcDsKIAkJYmlkeCYjNDM7JiM0Mzs7CiAJfSBlbHNlIGlmIChiaWR4KSB7CkBAIC02MDMsNyAmIzQzOzYwMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCQlBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUgPSBjcHVfdG9fYmUzMih0bXApOwogCQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwogCQliaC0mZ3Q7Yl9zdGF0ZSAmYW1wOz0gfigxVUwgJmx0OyZsdDsgQkhfTmV3KTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJaWYgKHByZXZfYmgpIHsKIAkJCXUzMiB0bXBfbmV4dCA9IGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0KTsKIApAQCAtNjEzLDggJiM0Mzs2MTMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSkKIAkJCQkJICAgICBiaWR4LCB0bXBfbmV4dCk7CiAJCQlBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS0mZ3Q7bmV4dCA9IGNwdV90b19iZTMyKGJoLSZndDtiX2Jsb2NrbnIpOwogCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtJmd0O2JfYmxvY2tuciAtIHRtcF9uZXh0KTsKLQkJCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLAotCQkJCQkgICAgICAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCQltYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTsKIAkJCWFmZnNfYnJlbHNlKHByZXZfYmgpOwogCQl9CiAJCXNpemUgJiM0Mzs9IGJzaXplOwpAQCAtNzMzLDcgJiM0Mzs3MzIsNyBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCUFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSA9IGNwdV90b19iZTMyKAogCQkJbWF4KGJvZmYgJiM0MzsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUpKSk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCXdyaXR0ZW4gJiM0Mzs9IHRtcDsKIAkJZnJvbSAmIzQzOz0gdG1wOwogCQliaWR4JiM0MzsmIzQzOzsKQEAgLTc2NiwxMyAmIzQzOzc2NSwxMiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQkJCQkgICAgIGJpZHgsIHRtcF9uZXh0KTsKIAkJCQlBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS0mZ3Q7bmV4dCA9IGNwdV90b19iZTMyKGJoLSZndDtiX2Jsb2NrbnIpOwogCQkJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLSZndDtiX2Jsb2NrbnIgLSB0bXBfbmV4dCk7Ci0JCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsCi0JCQkJCSZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCQltYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTsKIAkJCX0KIAkJfQogCQlhZmZzX2JyZWxzZShwcmV2X2JoKTsKIAkJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJd3JpdHRlbiAmIzQzOz0gYnNpemU7CiAJCWZyb20gJiM0Mzs9IGJzaXplOwogCQliaWR4JiM0MzsmIzQzOzsKQEAgLTgwMSwxNCAmIzQzOzc5OSwxMyBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQkJCQkgICAgIGJpZHgsIHRtcF9uZXh0KTsKIAkJCQlBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS0mZ3Q7bmV4dCA9IGNwdV90b19iZTMyKGJoLSZndDtiX2Jsb2NrbnIpOwogCQkJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLSZndDtiX2Jsb2NrbnIgLSB0bXBfbmV4dCk7Ci0JCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsCi0JCQkJCQkmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCQkJbWFya19idWZmZXJfZGlydHkocHJldl9iaCk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQoYmgpLSZndDtzaXplKSAmbHQ7IHRtcCkKIAkJCUFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7CiAJCWFmZnNfYnJlbHNlKHByZXZfYmgpOwogCQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl3cml0dGVuICYjNDM7PSB0bXA7CiAJCWZyb20gJiM0Mzs9IHRtcDsKIAkJYmlkeCYjNDM7JiM0Mzs7CkBAIC05NDUsNyAmIzQzOzk0Miw3IEBAIGFmZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIAl9CiAJQUZGU19UQUlMKHNiLCBleHRfYmgpLSZndDtleHRlbnNpb24gPSAwOwogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBleHRfYmgpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgpOwogCWFmZnNfYnJlbHNlKGV4dF9iaCk7CiAKIAlpZiAoaW5vZGUtJmd0O2lfc2l6ZSkgewpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9pbm9kZS5jIGIvZnMvYWZmcy9pbm9kZS5jCmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDQKLS0tIGEvZnMvYWZmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvaW5vZGUuYwpAQCAtMjA2LDcgJiM0MzsyMDYsNyBAQCBhZmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQl9CiAJfQogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWFmZnNfYnJlbHNlKGJoKTsKIAlhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpOwogCXJldHVybiAwOwpAQCAtMjY2LDExICYjNDM7MjY2LDggQEAgYWZmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWlmICghaW5vZGUtJmd0O2lfbmxpbmspIHsKIAkJaW5vZGUtJmd0O2lfc2l6ZSA9IDA7CiAJCWFmZnNfdHJ1bmNhdGUoaW5vZGUpOwotCX0gZWxzZSB7Ci0JCW1tYl9zeW5jKCZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCX0KIAotCW1tYl9pbnZhbGlkYXRlKCZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCWNsZWFyX2lub2RlKGlub2RlKTsKIAlhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpOwogCWNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLSZndDtpX2xjOwpAQCAtMzA1LDcgJiM0MzszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcikKIAliaCA9IGFmZnNfZ2V0emVyb2JsayhzYiwgYmxvY2spOwogCWlmICghYmgpCiAJCWdvdG8gZXJyX2JoOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlhZmZzX2JyZWxzZShiaCk7CiAKIAlpbm9kZS0mZ3Q7aV91aWQgICAgID0gY3VycmVudF9mc3VpZCgpOwpAQCAtMzkzLDE3ICYjNDM7MzkwLDE3IEBAIGFmZnNfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHMzCiAJCUFGRlNfVEFJTChzYiwgYmgpLSZndDtsaW5rX2NoYWluID0gY2hhaW47CiAJCUFGRlNfVEFJTChzYiwgaW5vZGVfYmgpLSZndDtsaW5rX2NoYWluID0gY3B1X3RvX2JlMzIoYmxvY2spOwogCQlhZmZzX2FkanVzdF9jaGVja3N1bShpbm9kZV9iaCwgYmxvY2sgLSBiZTMyX3RvX2NwdShjaGFpbikpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgpOwogCQlzZXRfbmxpbmsoaW5vZGUsIDIpOwogCQlpaG9sZChpbm9kZSk7CiAJfQogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWRlbnRyeS0mZ3Q7ZF9mc2RhdGEgPSAodm9pZCAqKShsb25nKWJoLSZndDtiX2Jsb2NrbnI7CiAKIAlhZmZzX2xvY2tfZGlyKGRpcik7CiAJcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc191bmxvY2tfZGlyKGRpcik7CiAJYWZmc191bmxvY2tfbGluayhpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuYwppbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTM3Myw3ICYjNDM7MzczLDcgQEAgYWZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAl9CiAJKnAgPSAwOwogCWlub2RlLSZndDtpX3NpemUgPSBpICYjNDM7IDE7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWFmZnNfYnJlbHNlKGJoKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIApAQCAtNDQzLDggJiM0Mzs0NDMsNyBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJLyogVE9ETzogbW92ZSBpdCBiYWNrIHRvIG9sZF9kaXIsIGlmIGVycm9yPyAqLwogCiBkb25lOgotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwKLQkJCSZhbXA7QUZGU19JKHJldHZhbCA/IG9sZF9kaXIgOiBuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc19icmVsc2UoYmgpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC00OTcsOCAmIzQzOzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChvbGRfZGlyLCBiaF9uZXcpOwogCWFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTsKIGRvbmU6Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgJmFtcDtBRkZTX0kobmV3X2RpciktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCAmYW1wO0FGRlNfSShvbGRfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcpOwogCWFmZnNfYnJlbHNlKGJoX29sZCk7CiAJYWZmc19icmVsc2UoYmhfbmV3KTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jCmluZGV4IGIyMzIyNTFhYTdiYmQwLi4wYWQ1MTI3ZTlmYjhlZSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvc3VwZXIuYwpAQCAtMTA4LDcgJiM0MzsxMDgsNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJaS0mZ3Q7aV9sYyA9IE5VTEw7CiAJaS0mZ3Q7aV9leHRfYmggPSBOVUxMOwogCWktJmd0O2lfcGFfY250ID0gMDsKLQltbWJfaW5pdCgmYW1wO2ktJmd0O2lfbWV0YWRhdGFfYmhzLCAmYW1wO2ktJmd0O3Zmc19pbm9kZS5pX2RhdGEpOwogCiAJcmV0dXJuICZhbXA7aS0mZ3Q7dmZzX2lub2RlOwogfQpkaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jCmluZGV4IDViNDBhYjA5YTc5NmRlLi45YjM3ZWM0YmQ4OWE4YyAxMDA2NDQKLS0tIGEvZnMvYmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuYwpAQCAtNjgsMTcgJiM0Mzs2OCwxMCBAQCBzdGF0aWMgaW50IGJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQotewotCXJldHVybiBtbWJfZnN5bmMoZmlsZSwKLQkJCSZhbXA7QkZTX0koZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7Ci19Ci0KIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLml0ZXJhdGVfc2hhcmVkCT0gYmZzX3JlYWRkaXIsCi0JLmZzeW5jCQk9IGJmc19mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jCmluZGV4IGU0MWVmZGQzNWRiOWVmLi5jYWNjN2VmZjljMzNjZSAxMDA2NDQKLS0tIGEvZnMvYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmZzL2lub2RlLmMKQEAgLTEzNiw3ICYjNDM7MTM2LDYgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJdW5zaWduZWQgbG9uZyBpX3NibG9jazsKIAlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCWludCBlcnIgPSAwOwogCiAJZHByaW50ZigmIzM0O2lubz0lMDh4XG4mIzM0OywgaW5vKTsKIApAQCAtMTY1LDEzICYjNDM7MTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCWRpLSZndDtpX2VvZmZzZXQgPSBjcHVfdG9fbGUzMihpX3NibG9jayAqIEJGU19CU0laRSAmIzQzOyBpbm9kZS0mZ3Q7aV9zaXplIC0gMSk7CiAKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMKSB7Ci0JCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCi0JCQllcnIgPSAtRUlPOwotCX0KIAlicmVsc2UoYmgpOwogCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CXN0cnVjdCBiZnNfaW5vZGUgKmRpOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwomIzQzOwlkaSA9IGZpbmRfaW5vZGUoaW5vZGUtJmd0O2lfc2IsICh1MTYpaW5vZGUtJmd0O2lubywgJmFtcDtiaCk7CiYjNDM7CWlmIChJU19FUlIoZGkpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZGkpOwomIzQzOwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZXJyID0gbW1iX3N5bmMoJmFtcDtCRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzAyLDYgJiM0MzszMTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmZzX3NvcHMgPSB7CiAJLmFsbG9jX2lub2RlCT0gYmZzX2FsbG9jX2lub2RlLAogCS5mcmVlX2lub2RlCT0gYmZzX2ZyZWVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gYmZzX3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IGJmc19zeW5jX2lub2RlX21ldGFkYXRhLAogCS5ldmljdF9pbm9kZQk9IGJmc19ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gYmZzX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IGJmc19zdGF0ZnMsCmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDlhZjVmMDYxYTFmODVhLi5iZThiNTdhNjM1Y2Q4MiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTYyOCw3OSAmIzQzOzYyOCw2IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYikKIH0KIEVYUE9SVF9TWU1CT0wobW1iX3N5bmMpOwogCi0vKioKLSAqIG1tYl9mc3luY19ub2ZsdXNoIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoCi0gKiAJCSAgICAgICBtZXRhZGF0YSBidWZmZXJzIGxpc3QKLSAqCi0gKiBAZmlsZToJZmlsZSB0byBzeW5jaHJvbml6ZQotICogQG1tYjoJbGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2gKLSAqIEBzdGFydDoJc3RhcnQgb2Zmc2V0IGluIGJ5dGVzCi0gKiBAZW5kOgllbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpCi0gKiBAZGF0YXN5bmM6CW9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWUKLSAqCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaAotICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iCi0gKiBzdHJ1Y3R1cmUuCi0gKi8KLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsCi0JCSAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwotCWludCBlcnI7Ci0JaW50IHJldCA9IDA7Ci0KLQllcnIgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAobW1iKQotCQlyZXQgPSBtbWJfc3luYyhtbWIpOwotCWlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgJmFtcDsgSV9ESVJUWV9BTEwpKQotCQlnb3RvIG91dDsKLQlpZiAoZGF0YXN5bmMgJmFtcDsmYW1wOyAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgJmFtcDsgSV9ESVJUWV9EQVRBU1lOQykpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBlcnI7Ci0KLW91dDoKLQkvKiBjaGVjayBhbmQgYWR2YW5jZSBhZ2FpbiB0byBjYXRjaCBlcnJvcnMgYWZ0ZXIgc3luY2luZyBvdXQgYnVmZmVycyAqLwotCWVyciA9IGZpbGVfY2hlY2tfYW5kX2FkdmFuY2Vfd2JfZXJyKGZpbGUpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZXJyOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKG1tYl9mc3luY19ub2ZsdXNoKTsKLQotLyoqCi0gKiBtbWJfZnN5bmMgLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGggbWV0YWRhdGEKLSAqIAkgICAgICAgYnVmZmVycyBsaXN0Ci0gKgotICogQGZpbGU6CWZpbGUgdG8gc3luY2hyb25pemUKLSAqIEBtbWI6CWxpc3Qgb2YgbWV0YWRhdGEgYmhzIHRvIGZsdXNoCi0gKiBAc3RhcnQ6CXN0YXJ0IG9mZnNldCBpbiBieXRlcwotICogQGVuZDoJZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKQotICogQGRhdGFzeW5jOglvbmx5IHN5bmNocm9uaXplIGVzc2VudGlhbCBtZXRhZGF0YSBpZiB0cnVlCi0gKgotICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2gKLSAqIHRyYWNrIGFsbCBub24taW5vZGUgbWV0YWRhdGEgaW4gdGhlIGJ1ZmZlcnMgbGlzdCBoYW5naW5nIG9mZiB0aGUgQG1tYgotICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpcwotICogY2FsbGVkIGF0IHRoZSBlbmQuCi0gKi8KLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLAotCSAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwotCWludCByZXQ7Ci0KLQlyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBtbWIsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKG1tYl9mc3luYyk7Ci0KIC8qCiAgKiBDYWxsZWQgd2hlbiB3ZSYjMzk7dmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJiMzOTssIGFuZCBpdCBpcyBrbm93biB0aGF0CiAgKiBgYmJsb2NrJiMzOTsgd2FzIGZvciBhIGJ1ZmZlcl9ib3VuZGFyeSgpIGJ1ZmZlci4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgYmxvY2sgYXQKQEAgLTExMjMsMTIgJiM0MzsxMDUwLDE4IEBAIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfZGlydHkpOwogCiB2b2lkIG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwogCXNldF9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpOwogCS8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHNldCB0aGlzIGluIGJvdGggcGxhY2VzPyAqLwogCWlmIChiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7IGJoLSZndDtiX2ZvbGlvLSZndDttYXBwaW5nKQogCQltYXBwaW5nX3NldF9lcnJvcihiaC0mZ3Q7Yl9mb2xpby0mZ3Q7bWFwcGluZywgLUVJTyk7Ci0JaWYgKGJoLSZndDtiX21tYikKLQkJbWFwcGluZ19zZXRfZXJyb3IoYmgtJmd0O2JfbW1iLSZndDttYXBwaW5nLCAtRUlPKTsKJiM0MzsJLyogUHJvdGVjdCB1cyBmcm9tIG1tYiAmYW1wOyBpbm9kZSBnZXR0aW5nIGZyZWVkIHdoaWxlIHdlIHdvcmsgb24gaXQgKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltbWIgPSBSRUFEX09OQ0UoYmgtJmd0O2JfbW1iKTsKJiM0MzsJaWYgKG1tYikKJiM0MzsJCW1hcHBpbmdfc2V0X2Vycm9yKG1tYi0mZ3Q7bWFwcGluZywgLUVJTyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcik7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZGlyLmMgYi9mcy9leHQyL2Rpci5jCmluZGV4IDI3OGQ0YmU4ZWNiZTc3Li5lMTdiYmM3NTk4YzE0MyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2Rpci5jCkBAIC03MzQsNiAmIzQzOzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDJfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JLmZzeW5jCQk9IGV4dDJfZnN5bmMsCiYjNDM7CS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiAJLnNldGxlYXNlCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oCmluZGV4IDc5ZjdiMzk1MjU4YzJhLi41NjQyNDUxYmYxOTE3MyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9leHQyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9leHQyLmgKQEAgLTczNSw2ICYjNDM7NzM1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQpOwogLyogaW5vZGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiYjNDM7ZXh0ZXJuIGludCBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogdm9pZCBleHQyX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKTsKIGV4dGVybiBpbnQgZXh0Ml9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKQEAgLTc3Miw4ICYjNDM7NzczLDYgQEAgZXh0ZXJuIHZvaWQgZXh0Ml9zeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcywKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGlyX29wZXJhdGlvbnM7CiAKIC8qIGZpbGUuYyAqLwotZXh0ZXJuIGludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgIGludCBkYXRhc3luYyk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9uczsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9maWxlLmMgYi9mcy9leHQyL2ZpbGUuYwppbmRleCA4ZGNhOWVjNGNhY2Q5YS4uYjkwMjBkZjdkODllMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZmlsZS5jCkBAIC00NywyMSAmIzQzOzQ3LDYgQEAgc3RhdGljIGludCBleHQyX3JlbGVhc2VfZmlsZSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7Ci0KLQlyZXQgPSBtbWJfZnN5bmMoZmlsZSwgJmFtcDtFWFQyX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLQlpZiAocmV0ID09IC1FSU8pCi0JCS8qIFdlIGRvbiYjMzk7dCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi8KLQkJZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkgICAmIzM0O2RldGVjdGVkIElPIGVycm9yIHdoZW4gd3JpdGluZyBtZXRhZGF0YSBidWZmZXJzJiMzNDspOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwpAQCAtMjEzLDcgJiM0MzsxOTgsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zID0gewogCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAogCS5vcGVuCQk9IGV4dDJfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gZXh0Ml9yZWxlYXNlX2ZpbGUsCi0JLmZzeW5jCQk9IGV4dDJfZnN5bmMsCiYjNDM7CS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiAJLmdldF91bm1hcHBlZF9hcmVhID0gdGhwX2dldF91bm1hcHBlZF9hcmVhLAogCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggMjk4MDg2MjljY2U1NmYuLjk5YWNkNzlhNGFmMjcyIDEwMDY0NAotLS0gYS9mcy9leHQyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9pbm9kZS5jCkBAIC0zOSw4ICYjNDM7MzksNiBAQAogI2luY2x1ZGUgJiMzNDthY2wuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwogCi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYyk7Ci0KIC8qCiAgKiBUZXN0IHdoZXRoZXIgYW4gaW5vZGUgaXMgYSBmYXN0IHN5bWxpbmsuCiAgKi8KQEAgLTg3LDcgJiM0Mzs4NSw3IEBAIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAkJLyogc2V0IGR0aW1lICovCiAJCUVYVDJfSShpbm9kZSktJmd0O2lfZHRpbWUJPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQlfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTsKJiM0MzsJCXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTsKIAkJLyogdHJ1bmNhdGUgdG8gMCAqLwogCQlpbm9kZS0mZ3Q7aV9zaXplID0gMDsKIAkJaWYgKGlub2RlLSZndDtpX2Jsb2NrcykKQEAgLTEyNTgsMTIgJiM0MzsxMjU2LDkgQEAgc3RhdGljIGludCBleHQyX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpCiAJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKIAogCWlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTsKLQlpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHsKLQkJbW1iX3N5bmMoJmFtcDtFWFQyX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpCiAJCXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwotCX0gZWxzZSB7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTQ2OSw3ICYjNDM7MTQ2NCw3IEBAIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKJiM0MztpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwpAQCAtMTU2MCwyMiAmIzQzOzE1NTUsMzMgQEAgc3RhdGljIGludCBfX2V4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpCiAJfSBlbHNlIGZvciAobiA9IDA7IG4gJmx0OyBFWFQyX05fQkxPQ0tTOyBuJiM0MzsmIzQzOykKIAkJcmF3X2lub2RlLSZndDtpX2Jsb2NrW25dID0gZWktJmd0O2lfZGF0YVtuXTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JaWYgKGRvX3N5bmMpIHsKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkgewotCQkJcHJpbnRrICgmIzM0O0lPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXG4mIzM0OywKLQkJCQlzYi0mZ3Q7c19pZCwgKHVuc2lnbmVkIGxvbmcpIGlubyk7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQogCWVpLSZndDtpX3N0YXRlICZhbXA7PSB+RVhUMl9TVEFURV9ORVc7CiAJYnJlbHNlIChiaCk7CiYjNDM7CXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CiAKLWludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO2ludCBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7Ci0JcmV0dXJuIF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgd2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGlub2RlLSZndDtpX2lubywKJiM0MzsJCQkJCQkgICAgICAmYW1wO2JoKTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmIChJU19FUlIocmF3X2lub2RlKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO0VYVDJfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiYjNDM7CQlwcmludGsoJiMzNDtJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxuJiMzNDssCiYjNDM7CQkgICAgICAgaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCAzOTk5ZjhmM2IxNTZlMy4uYTQwZjUzMDg3MmE0MDcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTM2Miw2ICYjNDM7MzYyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDJfc29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSBleHQyX2FsbG9jX2lub2RlLAogCS5mcmVlX2lub2RlCT0gZXh0Ml9mcmVlX2luX2NvcmVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gZXh0Ml93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEsCiAJLmV2aWN0X2lub2RlCT0gZXh0Ml9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gZXh0Ml9wdXRfc3VwZXIsCiAJLnN5bmNfZnMJPSBleHQyX3N5bmNfZnMsCmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyLmMgYi9mcy9leHQyL3hhdHRyLmMKaW5kZXggZTU1ZDE2YWJmNDIyZjQuLmJlNjNmODk0MDJhMzgxIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi94YXR0ci5jCkBAIC03NzcsNiAmIzQzOzc3Nyw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCwKIAkvKiBVcGRhdGUgdGhlIGlub2RlLiAqLwogCUVYVDJfSShpbm9kZSktJmd0O2lfZmlsZV9hY2wgPSBuZXdfYmggPyBuZXdfYmgtJmd0O2JfYmxvY2tuciA6IDA7CiAJaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlpZiAoSVNfU1lOQyhpbm9kZSkpIHsKIAkJZXJyb3IgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAkJLyogSW4gY2FzZSBzeW5jIGZhaWxlZCBkdWUgdG8gRU5PU1BDIHRoZSBpbm9kZSB3YXMgYWN0dWFsbHkKQEAgLTc4OSw4ICYjNDM7NzkwLDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAogCQkJfQogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JfSBlbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiAKIAllcnJvciA9IDA7CiAJaWYgKG9sZF9iaCAmYW1wOyZhbXA7IG9sZF9iaCAhPSBuZXdfYmgpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLjBmMDYxNTVhMzVhNjk0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTE1MSw3ICYjNDM7MTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCXN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogCXN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7Ci0Jc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzOwomIzQzOwlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzOwogCiAJLyoKIAkgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2YKQEAgLTIxMjYsNiAmIzQzOzIxMjYsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfb3JwaGFuX3RyYWNrZWQoc3RydWN0IGlub2RlICppbm9kZSkKIAkJIWxpc3RfZW1wdHkoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX29ycGhhbik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocygKJiM0MzsJCQkJCQkJc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIGlfbWV0YWRhdGFfYmhzIGlzIHNldCBpbiBleHQ0X2lub2RlX2F0dGFjaF9tbWIoKSB1c2luZyBjbXB4Y2hnKCkuCiYjNDM7CSAqIFdlIHVzZSBSRUFEX09OQ0Ugd2hlbiBhY2Nlc3NpbmcgaV9tZXRhZGF0YV9iaHMgdG8gbWFrZSBzdXJlIHdlIGdldAomIzQzOwkgKiBjb25zaXN0ZW50IHZpZXcgZm9yIGFsbCBhY2Nlc3Nlcy4KJiM0MzsJICovCiYjNDM7CXJldHVybiBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDb2RlcyBmb3Igb3BlcmF0aW5nIHN5c3RlbXMKICAqLwpAQCAtMzE1NSw2ICYjNDM7MzE2Niw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLAogCV9fZXh0NF9pZ2V0KChzYiksIChpbm8pLCAoZmxhZ3MpLCBfX2Z1bmNfXywgX19MSU5FX18pCiAKIGV4dGVybiBpbnQgIGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKJiM0MztleHRlcm4gaW50ICBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKiwKIAkJCSBzdHJ1Y3QgaWF0dHIgKik7CiBleHRlcm4gdTMyICBleHQ0X2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuYwppbmRleCA5YThjMjI1ZjI3NTMwOS4uM2IyZjhhYzIwYmY4NWIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0X2piZDIuYwpAQCAtMzUwLDYgJiM0MzszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEl0JiMzOTtzIGRpZmZpY3VsdCB0byBoYW5kbGUgZmFpbHVyZSB3aGVuIG1hcmtpbmcgYnVmZmVyIGRpcnR5IHdpdGhvdXQKJiM0MzsJICogbGVhdmluZyBmaWxlc3lzdGVtIGNvcnJ1cHRlZAomIzQzOwkgKi8KJiM0MzsJbW1iID0ga21hbGxvY19vYmooKm1tYiwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwomIzQzOwltbWJfaW5pdChtbWIsICZhbXA7aW5vZGUtJmd0O2lfZGF0YSk7CiYjNDM7CS8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovCiYjNDM7CWlmIChjbXB4Y2hnKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpCiYjNDM7CQlrZnJlZShtbWIpOwomIzQzO30KJiM0MzsKIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKIAkJCQkgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKQEAgLTM4OSwxMSAmIzQzOzQwNCwxMyBAQCBpbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCiAJCQkJCSBlcnIpOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKGlub2RlKQotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLAotCQkJCQkgICAgICAmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQkJZWxzZQomIzQzOwkJaWYgKGlub2RlKSB7CiYjNDM7CQkJaWYgKCFleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKSkKJiM0MzsJCQkJZXh0NF9pbm9kZV9hdHRhY2hfbW1iKGlub2RlKTsKJiM0MzsJCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsIGV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiYjNDM7CQl9CiAJCWlmIChpbm9kZSAmYW1wOyZhbXA7IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7CiAJCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mc3luYy5jIGIvZnMvZXh0NC9mc3luYy5jCmluZGV4IDkyNDcyNmRjYzg1ZmY1Li4yOTk5YzJjYzhmY2ZhMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mc3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZnN5bmMuYwpAQCAtNjgsOSAmIzQzOzY4LDYgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCSAqIHRocm91Z2ggZXh0NF9ldmljdF9pbm9kZSgpKSBhbmQgc28gd2UgYXJlIHNhZmUgdG8gZmx1c2gKIAkJICogbWV0YWRhdGEgYmxvY2tzIGFuZCB0aGUgaW5vZGUuCiAJCSAqLwotCQlyZXQgPSBtbWJfc3luYygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwogCQlyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwpAQCAtODMsMjIgJiM0Mzs4MCwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZnN5bmNfbm9qb3VybmFsKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiAJCQkJaW50IGRhdGFzeW5jLCBib29sICpuZWVkc19iYXJyaWVyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX2lub2RlOwotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKLQkJLm5yX3RvX3dyaXRlID0gMCwKLQl9OwogCWludCByZXQ7CiAKLQlyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCAmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKJiM0MzsJcmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQotCS8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovCi0JcmV0ID0gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgJmFtcDt3YmMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlyZXQgPSBleHQ0X3N5bmNfcGFyZW50KGlub2RlKTsKIAogCWlmICh0ZXN0X29wdChpbm9kZS0mZ3Q7aV9zYiwgQkFSUklFUikpCkBAIC0xNTYsNiAmIzQzOzE0MiwxMCBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQogCWlmIChzYl9yZG9ubHkoaW5vZGUtJmd0O2lfc2IpKQogCQlnb3RvIG91dDsKIAomIzQzOwlyZXQgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsKSB7CiAJCXJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLAogCQkJCQkgICAmYW1wO25lZWRzX2JhcnJpZXIpOwpAQCAtMTY0LDEwICYjNDM7MTU0LDYgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQogCS8qCiAJICogIFRoZSBjYWxsZXImIzM5O3MgZmlsZW1hcF9mZGF0YXdyaXRlKCkvd2FpdCB3aWxsIHN5bmMgdGhlIGRhdGEuCiAJICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uMGMyMjBiNTM1NTkwZjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE4Niw2ICYjNDM7MTg2LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJaWYgKEVYVDRfSShpbm9kZSktJmd0O2lfZmxhZ3MgJmFtcDsgRVhUNF9FQV9JTk9ERV9GTCkKIAkJZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7CiAJaWYgKGlub2RlLSZndDtpX25saW5rKSB7CiYjNDM7CQlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjsKJiM0MzsKIAkJLyoKIAkJICogSWYgdGhlcmUmIzM5O3MgZGlydHkgcGFnZSB3aWxsIGxlYWQgdG8gZGF0YSBsb3NzLCB1c2VyCiAJCSAqIGNvdWxkIHNlZSBzdGFsZSBkYXRhLgpAQCAtMTk1LDkgJiM0MzsxOTcsOSBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJCWV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgJiMzNDtkYXRhIHdpbGwgYmUgbG9zdCYjMzQ7KTsKIAogCQl0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbCgmYW1wO2lub2RlLSZndDtpX2RhdGEpOwotCQkvKiBBdm9pZCBtYmFsbG9jIHNwZWNpYWwgaW5vZGUgd2hpY2ggaGFzIG5vIHByb3BlciBpb3BzICovCi0JCWlmICghRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3Nfam91cm5hbCkKLQkJCW1tYl9zeW5jKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7CiYjNDM7CQlpZiAobW1iKQomIzQzOwkJCW1tYl9zeW5jKG1tYik7CiAJCWdvdG8gbm9fZGVsZXRlOwogCX0KIApAQCAtMzQ1Miw2ICYjNDM7MzQ1NCw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KQogc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWw7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwogCiAJaWYgKGpvdXJuYWwpIHsKIAkJaWYgKGpiZDJfdHJhbnNhY3Rpb25fY29tbWl0dGVkKGpvdXJuYWwsCkBAIC0zNDYyLDggJiM0MzszNDY1LDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKJiM0MzsJbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7CiAJLyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovCi0JaWYgKG1tYl9oYXNfYnVmZmVycygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKSkKJiM0MzsJaWYgKG1tYiAmYW1wOyZhbXA7IG1tYl9oYXNfYnVmZmVycyhtbWIpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DOwogfQpAQCAtNTgzOCwyNCAmIzQzOzU4NDIsMzggQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCWVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwsCiAJCQkJCQlFWFQ0X0koaW5vZGUpLSZndDtpX3N5bmNfdGlkKTsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CQlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KIAotCQllcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCAmYW1wO2lsb2MpOwomIzQzO2ludCBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwpKQomIzQzOwkJcmV0dXJuIC1FRlNDT1JSVVBURUQ7CiYjNDM7CiYjNDM7CWVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsICZhbXA7aWxvYyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwltbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwlpZiAobW1iKSB7CiYjNDM7CQllcnIgPSBtbWJfc3luYyhtbWIpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJLyoKLQkJICogc3luYygyKSB3aWxsIGZsdXNoIHRoZSB3aG9sZSBidWZmZXIgY2FjaGUuIE5vIG5lZWQgdG8gZG8KLQkJICogaXQgaGVyZSBzZXBhcmF0ZWx5IGZvciBlYWNoIGlub2RlLgotCQkgKi8KLQkJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMpCi0JCQlzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoaWxvYy5iaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7Ci0JCQlleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLSZndDtiX2Jsb2NrbnIsIEVJTywKLQkJCQkJICAgICAgICYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZSYjMzQ7KTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQkJYnJlbHNlKGlsb2MuYmgpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CXN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7CiYjNDM7CQlleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLSZndDtiX2Jsb2NrbnIsIEVJTywKJiM0MzsJCQkJICAgICAgICYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU87CiAJfQomIzQzO291dDoKJiM0MzsJYnJlbHNlKGlsb2MuYmgpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uYWUzM2Y1YmNiMTMzMTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTE0MzAsNyAmIzQzOzE0MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJSU5JVF9XT1JLKCZhbXA7ZWktJmd0O2lfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfZmNfbG9jayk7Ci0JbW1iX2luaXQoJmFtcDtlaS0mZ3Q7aV9tZXRhZGF0YV9iaHMsICZhbXA7ZWktJmd0O3Zmc19pbm9kZS5pX2RhdGEpOwomIzQzOwllaS0mZ3Q7aV9tZXRhZGF0YV9iaHMgPSBOVUxMOwogI2lmZGVmIENPTkZJR19MT0NLREVQCiAJbG9ja2RlcF9zZXRfc3ViY2xhc3MoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSwgSV9EQVRBX1NFTV9OT1JNQUwpOwogI2VuZGlmCkBAIC0xNDUxLDYgJiM0MzsxNDUxLDcgQEAgc3RhdGljIGludCBleHQ0X2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJZnNjcnlwdF9mcmVlX2lub2RlKGlub2RlKTsKJiM0MzsJa2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpOwogCWlmICghbGlzdF9lbXB0eSgmYW1wOyhFWFQ0X0koaW5vZGUpLSZndDtpX2ZjX2xpc3QpKSkgewogCQlwcl93YXJuKCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdCYjMzQ7LAogCQkJX19mdW5jX18sIGlub2RlLSZndDtpX2lubyk7CkBAIC0xNTI5LDkgJiM0MzsxNTMwLDExIEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogCiB2b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKJiM0MzsJc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTsKJiM0MzsKIAlleHQ0X2ZjX2RlbChpbm9kZSk7Ci0JaWYgKCFFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsKQotCQltbWJfaW52YWxpZGF0ZSgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJaWYgKG1tYikKJiM0MzsJCW1tYl9pbnZhbGlkYXRlKG1tYik7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiAJLyoKQEAgLTE2MDUsOSAmIzQzOzE2MDgsMTMgQEAgc3RhdGljIGludCBleHQ0X25mc19jb21taXRfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSkKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewogCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwKIAl9OwomIzQzOwlpbnQgcmV0OwogCiAJdHJhY2VfZXh0NF9uZnNfY29tbWl0X21ldGFkYXRhKGlub2RlKTsKLQlyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgJmFtcDt3YmMpOwomIzQzOwlyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCAmYW1wO3diYyk7CiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX01FVEFEQVRBX1dSSVRFQkFDSykKJiM0MzsJCXJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgJmFtcDt3YmMpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX1FVT1RBCkBAIC0xNjY0LDYgJiM0MzsxNjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHsKIAkuZnJlZV9pbm9kZQk9IGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gZXh0NF9kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IGV4dDRfd3JpdGVfaW5vZGUsCiYjNDM7CS5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLAogCS5kaXJ0eV9pbm9kZQk9IGV4dDRfZGlydHlfaW5vZGUsCiAJLmRyb3BfaW5vZGUJPSBleHQ0X2Ryb3BfaW5vZGUsCiAJLmV2aWN0X2lub2RlCT0gZXh0NF9ldmljdF9pbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuYwppbmRleCBjNmNjYTVkMDBmZmQ3ZS4uOTE2ZjVjNGNkY2YzOTAgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZGlyLmMKQEAgLTEwNTMsMTEgJiM0MzsxMDUzLDcgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKQogCQkJbnJfc2xvdHMtLTsKIAkJfQogCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7TVNET1NfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCWJyZWxzZShiaCk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKIAogCQkvKiBwb3MgaXMgKm5leHQqIGRlJiMzOTtzIHBvc2l0aW9uLCBzbyB0aGlzIGRvZXMgYC0gc2l6ZW9mKGRlKSYjMzk7ICovCiAJCXBvcyAmIzQzOz0gKChvcmlnX3Nsb3RzIC0gbnJfc2xvdHMpICogc2l6ZW9mKCpkZSkpIC0gc2l6ZW9mKCpkZSk7CkBAIC0xMDg4LDExICYjNDM7MTA4NCw3IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbykKIAkJbnJfc2xvdHMtLTsKIAl9CiAJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO01TRE9TX0koZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCWVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAlicmVsc2UoYmgpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiAJaW5vZGVfaW5jX2l2ZXJzaW9uKGRpcik7CiAKIAlpZiAobnJfc2xvdHMpIHsKQEAgLTExMDksMTIgJiM0MzsxMTAxLDEyIEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbykKIAl9CiAKIAlmYXRfdHJ1bmNhdGVfdGltZShkaXIsIE5VTEwsIEZBVF9VUERBVEVfQVRJTUUgfCBGQVRfVVBEQVRFX0NNVElNRSk7CiYjNDM7CWVyciA9IDA7CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQkodm9pZClmYXRfc3luY19pbm9kZShkaXIpOwotCWVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShkaXIpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfcmVtb3ZlX2VudHJpZXMpOwogCkBAIC0xMTQ0LDIxICYjNDM7MTEzNiwxMSBAQCBzdGF0aWMgaW50IGZhdF96ZXJvZWRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwgc2VjdG9yX3QgYmxrbnIsIGludCBucl91c2VkLAogCQluJiM0MzsmIzQzOzsKIAkJYmxrbnImIzQzOyYjNDM7OwogCQlpZiAobiA9PSBucl9iaHMpIHsKLQkJCWlmIChJU19ESVJTWU5DKGRpcikpIHsKLQkJCQllcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlnb3RvIGVycm9yOwotCQkJfQogCQkJZm9yIChpID0gMDsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KQogCQkJCWJyZWxzZShiaHNbaV0pOwogCQkJbiA9IDA7CiAJCX0KIAl9Ci0JaWYgKElTX0RJUlNZTkMoZGlyKSkgewotCQllcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0JfQogCWZvciAoaSA9IDA7IGkgJmx0OyBuOyBpJiM0MzsmIzQzOykKIAkJYnJlbHNlKGJoc1tpXSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaAppbmRleCA5OWVkOTIyOGE2NzdiZS4uZGNiNWJhNzU3MDczZWQgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0LmgKQEAgLTQyMSw3ICYjNDM7NDIxLDYgQEAgZXh0ZXJuIHZvaWQgZmF0X2RldGFjaChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7CiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCXN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBsb2ZmX3QgaV9wb3MpOwotZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgZmF0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkJICB2b2lkICgqc2V0dXApKHN0cnVjdCBzdXBlcl9ibG9jayAqKSk7CiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDM3ZTcwNDliNGM4YzQ0Li4xYzgzNWNhNWYyMWE1MSAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmlsZS5jCkBAIC0xOTAsOCAmIzQzOzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJc3RydWN0IGlub2RlICpmYXRfaW5vZGUgPSBNU0RPU19TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O2ZhdF9pbm9kZTsKIAlpbnQgZXJyOwogCi0JZXJyID0gbW1iX2ZzeW5jX25vZmx1c2goZmlscCwgJmFtcDtNU0RPU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQkJc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwomIzQzOwllcnIgPSBzaW1wbGVfZnN5bmNfbm9mbHVzaChmaWxwLCBzdGFydCwgZW5kLCBkYXRhc3luYyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzMyLDE1ICYjNDM7MzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApCiAJfQogCU1TRE9TX0koaW5vZGUpLSZndDtpX2F0dHJzIHw9IEFUVFJfQVJDSDsKIAlmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlpZiAod2FpdCkgewotCQllcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAkJaWYgKGVycikgewogCQkJTVNET1NfSShpbm9kZSktJmd0O2lfc3RhcnQgPSBpX3N0YXJ0OwogCQkJTVNET1NfSShpbm9kZSktJmd0O2lfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0OwogCQkJcmV0dXJuIGVycjsKIAkJfQotCX0gZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQogCiAJLyogV3JpdGUgYSBuZXcgRU9GLCBhbmQgZ2V0IHRoZSByZW1haW5pbmcgY2x1c3RlciBjaGFpbiBmb3IgZnJlZWluZy4gKi8KIAlpZiAoc2tpcCkgewpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCAzYWE1MjQ4MWFkNWNmMy4uZTNiYjdiNDcxM2YyYWMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC02MjMsNyAmIzQzOzYyMywzNCBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpOwogCi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KTsKJiM0MztzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlsb2ZmX3QgaV9wb3M7CiYjNDM7CXNlY3Rvcl90IGJsb2NrbnI7CiYjNDM7CWludCBvZmZzZXQ7CiYjNDM7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaV9wb3MgPSBmYXRfaV9wb3NfcmVhZChzYmksIGlub2RlKTsKJiM0MzsJaWYgKCFpX3BvcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmYXRfZ2V0X2Jsa25yX29mZnNldChzYmksIGlfcG9zLCAmYW1wO2Jsb2NrbnIsICZhbXA7b2Zmc2V0KTsKJiM0MzsJYmggPSBzYl9maW5kX2dldF9ibG9ja19ub25hdG9taWMoaW5vZGUtJmd0O2lfc2IsIGJsb2NrbnIpOwomIzQzOwkvKgomIzQzOwkgKiBCdWZmZXIgcHJlc2VudD8gV2UgbGVhdmUgYnVmZmVyX2RpcnR5IGNoZWNrIGZvciBzeW5jX2RpcnR5X2J1ZmZlcigpCiYjNDM7CSAqIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy4KJiM0MzsJICovCiYjNDM7CWlmIChiaCAmYW1wOyZhbXA7IGJ1ZmZlcl91cHRvZGF0ZShiaCkpCiYjNDM7CQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBtbWJfc3luYygmYW1wO01TRE9TX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7fQogCiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTY0MCw3ICYjNDM7NjY3LDcgQEAgc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCSAqIGFueSBjb3JydXB0aW9uIG9uIHRoZSBuZXh0IGFjY2VzcyB0byB0aGUgY2x1c3RlcgogCQkgKiBjaGFpbiBmb3IgdGhlIGZpbGUuCiAJCSAqLwotCQllcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOwogCQlpZiAoZXJyKSB7CiAJCQlmYXRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX1dBUk5JTkcsICYjMzQ7RmFpbGVkIHRvICYjMzQ7CiAJCQkJCSYjMzQ7dXBkYXRlIG9uIGRpc2sgaW5vZGUgZm9yIHVudXNlZCAmIzM0OwpAQCAtODU0LDcgJiM0Mzs4ODEsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQomIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTsKQEAgLTg2Myw3ICYjNDM7ODkwLDcgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAlzdHJ1Y3QgdGltZXNwZWM2NCBtdGltZTsKIAlsb2ZmX3QgaV9wb3M7CiAJc2VjdG9yX3QgYmxvY2tucjsKLQlpbnQgZXJyLCBvZmZzZXQ7CiYjNDM7CWludCBvZmZzZXQ7CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IE1TRE9TX1JPT1RfSU5PKQogCQlyZXR1cm4gMDsKQEAgLTkwNywxMSAmIzQzOzkzNCw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7c2JpLSZndDtpbm9kZV9oYXNoX2xvY2spOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQllcnIgPSAwOwotCWlmICh3YWl0KQotCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJYnJlbHNlKGJoKTsKLQlyZXR1cm4gZXJyOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpAQCAtOTI1LDIzICYjNDM7OTUwLDE3IEBAIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQllcnIgPSBmYXRfY2x1c3RlcnNfZmx1c2goc2IpOwogCQltdXRleF91bmxvY2soJmFtcDtNU0RPU19TQihzYiktJmd0O3NfbG9jayk7CiAJfSBlbHNlCi0JCWVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiYjNDM7CQllcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChmYXRfc3luY19pbm9kZSk7Ci0KIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0gewogCS5hbGxvY19pbm9kZQk9IGZhdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IGZhdF9mcmVlX2lub2RlLAogCS53cml0ZV9pbm9kZQk9IGZhdF93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBmYXRfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGZhdF9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBmYXRfc3RhdGZzLApkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NAotLS0gYS9mcy9mYXQvbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmMKQEAgLTE0NiwxNiAmIzQzOzE0NiwxNyBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcikKIAl9IGVsc2UgewogCQlNU0RPU19JKGlub2RlKS0mZ3Q7aV9zdGFydCA9IG5ld19kY2x1czsKIAkJTVNET1NfSShpbm9kZSktJmd0O2lfbG9nc3RhcnQgPSBuZXdfZGNsdXM7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJLyoKIAkJICogU2luY2UgZ2VuZXJpY193cml0ZV9zeW5jKCkgc3luY2hyb25pemVzIHJlZ3VsYXIgZmlsZXMgbGF0ZXIsCiAJCSAqIHdlIHN5bmMgaGVyZSBvbmx5IGRpcmVjdG9yaWVzLgogCQkgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBJU19ESVJTWU5DKGlub2RlKSkgewotCQkJcmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwomIzQzOwkJCXJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UKLQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQomIzQzOwogCX0KIAlpZiAobmV3X2ZjbHVzICE9IChpbm9kZS0mZ3Q7aV9ibG9ja3MgJmd0OyZndDsgKHNiaS0mZ3Q7Y2x1c3Rlcl9iaXRzIC0gOSkpKSB7CiAJCWZhdF9mc19lcnJvcl9yYXRlbGltaXQoCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDBmZDI5NzFhZDRiMTMxLi44NjhlZjA5MTA0OGU0MCAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTI1MiwxMiAmIzQzOzI1MiwxMSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAkJcmV0dXJuIGVycjsKIAogCWZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCSh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqKioqIENyZWF0ZSBhIGZpbGUgKi8KQEAgLTQ3MywyMSAmIzQzOzQ3MiwyMCBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLAogCQkJCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyB8PSBBVFRSX0hJRERFTjsKIAkJCWVsc2UKIAkJCQlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgJmFtcDs9IH5BVFRSX0hJRERFTjsKJiM0MzsJCQltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAJCQlpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkgewotCQkJCWVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7CiYjNDM7CQkJCWVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTsKIAkJCQlpZiAoZXJyKSB7CiAJCQkJCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyA9IG9sZF9hdHRyczsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJfSBlbHNlCi0JCQkJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwomIzQzOwkJCX0KIAogCQkJaW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpOwogCQkJZmF0X3RydW5jYXRlX3RpbWUob2xkX2RpciwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiAJCQlpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkKLQkJCQkodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTsKLQkJCWVsc2UKLQkJCQltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwomIzQzOwkJCQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC01MTgsMjYgJiM0Mzs1MTYsMjEgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSwKIAkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzIHw9IEFUVFJfSElEREVOOwogCWVsc2UKIAkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzICZhbXA7PSB+QVRUUl9ISURERU47Ci0JaWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHsKLQkJZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3JfaW5vZGU7Ci0JfSBlbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKLQogCWlmICh1cGRhdGVfZG90ZG90KSB7CiAJCWZhdF9zZXRfc3RhcnQoZG90ZG90X2RlLCBNU0RPU19JKG5ld19kaXIpLSZndDtpX2xvZ3N0YXJ0KTsKIAkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGRvdGRvdF9iaCwKIAkJCQkgICAgICAmYW1wO01TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCQlpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkgewotCQkJZXJyID0gc3luY19kaXJ0eV9idWZmZXIoZG90ZG90X2JoKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBlcnJvcl9kb3Rkb3Q7Ci0JCX0KIAkJZHJvcF9ubGluayhvbGRfZGlyKTsKIAkJaWYgKCFuZXdfaW5vZGUpCiAJCQlpbmNfbmxpbmsobmV3X2Rpcik7CiAJfQomIzQzOwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiYjNDM7CWlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyb3JfZG90ZG90OwomIzQzOwl9CiYjNDM7CiAKIAllcnIgPSBmYXRfcmVtb3ZlX2VudHJpZXMob2xkX2RpciwgJmFtcDtvbGRfc2luZm8pOwkvKiBhbmQgcmVsZWFzZXMgYmggKi8KIAlvbGRfc2luZm8uYmggPSBOVUxMOwpAQCAtNTQ1LDEwICYjNDM7NTM4LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSwKIAkJZ290byBlcnJvcl9kb3Rkb3Q7CiAJaW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpOwogCWZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsICZhbXA7dHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTsKIAlpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTsKIAogCWlmIChuZXdfaW5vZGUpIHsKIAkJZHJvcF9ubGluayhuZXdfaW5vZGUpOwpAQCAtNTcxLDE0ICYjNDM7NTYzLDE1IEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsCiAJCQkJICAgICAgJmFtcDtNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAkJY29ycnVwdCB8PSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpOwogCX0KLWVycm9yX2lub2RlOgogCWZhdF9kZXRhY2gob2xkX2lub2RlKTsKIAlmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTsKIAlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgPSBvbGRfYXR0cnM7CiAJaWYgKG5ld19pbm9kZSkgewogCQlmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTsKLQkJaWYgKGNvcnJ1cHQpCi0JCQljb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7CiYjNDM7CQlpZiAoY29ycnVwdCkgewomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTsKJiM0MzsJCQljb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQkvKgogCQkgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBlOTA5NDQ3ODczZTM2NC4uMzA4MTU4ODk1YjFkOGEgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtNjc4LDEwICYjNDM7Njc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLAogCiAJLyogdXBkYXRlIHRpbWVzdGFtcCAqLwogCWZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCSh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiBjbGVhbnVwOgogCWtmcmVlKHNsb3RzKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTA0LDkgJiM0Mzs5MDMsOSBAQCBzdGF0aWMgaW50IHZmYXRfZ2V0X2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKIAogc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQlyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoSVNfRElSU1lOQyhkaXIpKQomIzQzOwkJcmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC05MjEsMTQgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCB2ZmF0X3VwZGF0ZV9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQomIzQzO3N0YXRpYyBpbnQgdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJaW5vZGVfaW5jX2l2ZXJzaW9uKGRpcik7CiAJZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJaWYgKElTX0RJUlNZTkMoZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKJiM0MzsJCXJldHVybiBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKQEAgLTk5Niw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJb2xkX3NpbmZvLmJoID0gTlVMTDsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yX2RvdGRvdDsKLQl2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgJmFtcDt0cyk7CiYjNDM7CWVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCAmYW1wO3RzKTsKIAogCWlmIChuZXdfaW5vZGUpIHsKIAkJZHJvcF9ubGluayhuZXdfaW5vZGUpOwpAQCAtMTAyNCw4ICYjNDM7MTAyMywxMCBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTsKIAlpZiAobmV3X2lub2RlKSB7CiAJCWZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpOwotCQlpZiAoY29ycnVwdCkKLQkJCWNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTsKJiM0MzsJCWlmIChjb3JydXB0KSB7CiYjNDM7CQkJbWFya19pbm9kZV9kaXJ0eShuZXdfaW5vZGUpOwomIzQzOwkJCWNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpOwomIzQzOwkJfQogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXQKQEAgLTExMjMsMTAgJiM0MzsxMTI0LDEzIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWVfZXhjaGFuZ2Uoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5CiAJCQl2ZmF0X21vdmVfbmxpbmsobmV3X2Rpciwgb2xkX2Rpcik7CiAJfQogCi0JdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsICZhbXA7dHMpOwomIzQzOwllcnIgPSB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgJmFtcDt0cyk7CiAJLyogaWYgZGlyZWN0b3JpZXMgYXJlIG5vdCB0aGUgc2FtZSwgdXBkYXRlIG5ld19kaXIgYXMgd2VsbCAqLwotCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCi0JCXZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCAmYW1wO3RzKTsKJiM0MzsJaWYgKG9sZF9kaXIgIT0gbmV3X2RpcikgewomIzQzOwkJaW50IGVycjIgPSB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEobmV3X2RpciwgJmFtcDt0cyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQllcnIgPSBlcnIyOwomIzQzOwl9CiAKIG91dDoKIAlicmVsc2Uob2xkX2RvdGRvdF9iaCk7CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTE4NTEsNiAmIzQzOzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQlpZiAocmV0ID09IDApCiAJCQlyZXQgPSBlcnI7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZAomIzQzOwkgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrPwomIzQzOwkgKi8KJiM0MzsJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMgJmFtcDsmYW1wOwomIzQzOwkgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX01FVEFEQVRBX1dSSVRFQkFDSykgewomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwkJaW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQllcnIgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19vcC0mZ3Q7c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgd2JjKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KIAl3YmMtJmd0O3VucGlubmVkX25ldGZzX3diID0gZmFsc2U7CiAJdHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7CiAJcmV0dXJuIHJldDsKQEAgLTE4OTIsMTQgJiM0MzsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCS8qCiAJICogSWYgdGhlIGlub2RlIGlzIGFscmVhZHkgZnVsbHkgY2xlYW4sIHRoZW4gdGhlcmUmIzM5O3Mgbm90aGluZyB0byBkby4KIAkgKgotCSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgcGFnZXMgYXJlCi0JICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWYKLQkgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uCiYjNDM7CSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yCiYjNDM7CSAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORQomIzQzOwkgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLgogCSAqLwotCWlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSAmYW1wOyZhbXA7Ci0JICAgICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCB8fAotCSAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLSZndDtpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSAmYW1wOyBJX0RJUlRZX0FMTCkpIHsKJiM0MzsJCWlmICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCWlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtJmd0O2lfbWFwcGluZywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfTUVUQURBVEFfV1JJVEVCQUNLKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQogCWlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTsKIAl3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDVhMGQyNzYzNzlkMTNiLi4yN2Q3ZGMxNmZjYjBhMCAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9saWJmcy5jCkBAIC0xNTU5LDkgJiM0MzsxNTU5LDEyIEBAIGludCBzaW1wbGVfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSkKJiM0MzsJaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOwomIzQzOwkJCShJX0RJUlRZX0FMTCB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpCiAJCWdvdG8gb3V0OwotCWlmIChkYXRhc3luYyAmYW1wOyZhbXA7ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DKSkKJiM0MzsJaWYgKGRhdGFzeW5jICZhbXA7JmFtcDsKJiM0MzsJICAgICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOwomIzQzOwkJCShJX0RJUlRZX0RBVEFTWU5DIHwgSV9TWU5DIHwgSV9NRVRBREFUQV9XUklURUJBQ0spKSkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmMKaW5kZXggMzYxZDI2ZDg3ZDJlMmQuLjJjYTE2Zjg0OWQ1YWMwIDEwMDY0NAotLS0gYS9mcy9taW5peC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9kaXIuYwpAQCAtMjMsNyAmIzQzOzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkuaXRlcmF0ZV9zaGFyZWQJPSBtaW5peF9yZWFkZGlyLAotCS5mc3luYwkJPSBtaW5peF9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9taW5peC9maWxlLmMgYi9mcy9taW5peC9maWxlLmMKaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NAotLS0gYS9mcy9taW5peC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZmlsZS5jCkBAIC0xMCwxMyAmIzQzOzEwLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwogI2luY2x1ZGUgJiMzNDttaW5peC5oJiMzNDsKIAotaW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKLXsKLQlyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsCi0JCQkmYW1wO21pbml4X2koZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7Ci19Ci0KIC8qCiAgKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yCiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS4KQEAgLTI2LDcgJiM0MzsxOSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAogCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCi0JLmZzeW5jCQk9IG1pbml4X2ZzeW5jLAomIzQzOwkuZnN5bmMJCT0gc2ltcGxlX2ZzeW5jLAogCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBjMzBjYzU5MDY5OGQ2Zi4uZGFmODNlNGZmMjVjODEgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtMjQsNiAmIzQzOzI0LDggQEAKIAogc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiYjNDM7c3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKTsKIAogdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLApAQCAtMTI4LDYgJiM0MzsxMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSBtaW5peF9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IG1pbml4X2ZyZWVfaW5fY29yZV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBtaW5peF93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhLAogCS5ldmljdF9pbm9kZQk9IG1pbml4X2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBtaW5peF9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBtaW5peF9zdGF0ZnMsCkBAIC02MzAsNyAmIzQzOzYzMyw3IEBAIHN0cnVjdCBpbm9kZSAqbWluaXhfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKIC8qCiAgKiBUaGUgbWluaXggVjEgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiYjNDM7c3RhdGljIGludCBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7CiAJc3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlOwpAQCAtNjM5LDcgJiM0Mzs2NDIsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCiAJcmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwogCWlmICghcmF3X2lub2RlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXJldHVybiAtRUlPOwogCXJhd19pbm9kZS0mZ3Q7aV9tb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKIAlyYXdfaW5vZGUtJmd0O2lfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpOwogCXJhd19pbm9kZS0mZ3Q7aV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7CkBAIC02NTEsMTMgJiM0Mzs2NTQsMTUgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAllbHNlIGZvciAoaSA9IDA7IGkgJmx0OyA5OyBpJiM0MzsmIzQzOykKIAkJcmF3X2lub2RlLSZndDtpX3pvbmVbaV0gPSBtaW5peF9pbm9kZS0mZ3Q7dS5pMV9kYXRhW2ldOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlyZXR1cm4gYmg7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoKICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS4KICAqLwotc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKJiM0MztzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDsKIAlzdHJ1Y3QgbWluaXgyX2lub2RlICogcmF3X2lub2RlOwpAQCAtNjY2LDcgJiM0Mzs2NzEsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCiAJcmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwogCWlmICghcmF3X2lub2RlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXJldHVybiAtRUlPOwogCXJhd19pbm9kZS0mZ3Q7aV9tb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKIAlyYXdfaW5vZGUtJmd0O2lfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpOwogCXJhd19pbm9kZS0mZ3Q7aV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7CkBAIC02ODAsMjkgJiM0Mzs2ODUsNDIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAllbHNlIGZvciAoaSA9IDA7IGkgJmx0OyAxMDsgaSYjNDM7JiM0MzspCiAJCXJhd19pbm9kZS0mZ3Q7aV96b25lW2ldID0gbWluaXhfaW5vZGUtJmd0O3UuaTJfZGF0YVtpXTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JcmV0dXJuIGJoOwomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpCiYjNDM7CQlyZXR1cm4gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTsKJiM0MzsJcmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CXZvaWQgKnJhd19pbm9kZTsKIAogCWlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkKLQkJYmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpOwomIzQzOwkJcmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwogCWVsc2UKLQkJYmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpOwotCWlmICghYmgpCiYjNDM7CQlyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGlub2RlLSZndDtpX2lubywgJmFtcDtiaCk7CiYjNDM7CWlmICghcmF3X2lub2RlKQogCQlyZXR1cm4gLUVJTzsKLQlpZiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgJmFtcDsmYW1wOyBidWZmZXJfZGlydHkoYmgpKSB7Ci0JCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKLQkJCXByaW50aygmIzM0O0lPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cbiYjMzQ7LAotCQkJCWlub2RlLSZndDtpX3NiLSZndDtzX2lkLCBpbm9kZS0mZ3Q7aV9pbm8pOwotCQkJZXJyID0gLUVJTzsKLQkJfQomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO21pbml4X2koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewomIzQzOwkJcHJpbnRrKCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxuJiMzNDssCiYjNDM7CQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsIGlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwogCX0KLQlicmVsc2UgKGJoKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jCmluZGV4IGViYzlmNmEzNzlmZTNhLi40MjVlM2MxNjI5MzUwNCAxMDA2NDQKLS0tIGEvZnMvdWRmL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9kaXIuYwpAQCAtMTU3LDYgJiM0MzsxNTcsNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9kaXJfb3BlcmF0aW9ucyA9IHsKIAkucmVhZAkJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkuaXRlcmF0ZV9zaGFyZWQJCT0gdWRmX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCQk9IHVkZl9pb2N0bCwKLQkuZnN5bmMJCQk9IHVkZl9mc3luYywKJiM0MzsJLmZzeW5jCQkJPSBzaW1wbGVfZnN5bmMsCiAJLnNldGxlYXNlCQk9IGdlbmVyaWNfc2V0bGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggZjdmMTQyMmRlMzBmYTQuLjU3ZDExNjA2YTJhNzc2IDEwMDY0NAotLS0gYS9mcy91ZGYvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9maWxlLmMKQEAgLTE5OCwxMyAmIzQzOzE5OCw2IEBAIHN0YXRpYyBpbnQgdWRmX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQotewotCXJldHVybiBtbWJfZnN5bmMoZmlsZSwKLQkJCSZhbXA7VURGX0koZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7Ci19Ci0KIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZF9pdGVyCQk9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsCiAJLnVubG9ja2VkX2lvY3RsCQk9IHVkZl9pb2N0bCwKQEAgLTIxMiw3ICYjNDM7MjA1LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0gewogCS5tbWFwCQkJPSB1ZGZfZmlsZV9tbWFwLAogCS53cml0ZV9pdGVyCQk9IHVkZl9maWxlX3dyaXRlX2l0ZXIsCiAJLnJlbGVhc2UJCT0gdWRmX3JlbGVhc2VfZmlsZSwKLQkuZnN5bmMJCQk9IHVkZl9mc3luYywKJiM0MzsJLmZzeW5jCQkJPSBzaW1wbGVfZnN5bmMsCiAJLnNwbGljZV9yZWFkCQk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQkJPSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLAogCS5sbHNlZWsJCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCkBAIC0yNTMsNiAmIzQzOzI0Niw4IEBAIHN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAogCXNldGF0dHJfY29weSgmYW1wO25vcF9tbnRfaWRtYXAsIGlub2RlLCBhdHRyKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJaWYgKElTX1NZTkMoaW5vZGUpKQomIzQzOwkJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLjY4YzZjMmJhOGVkMWEyIDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuYwpAQCAtNTEsOCAmIzQzOzUxLDYgQEAKIHN0cnVjdCB1ZGZfbWFwX3JxOwogCiBzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICopOwotc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0YXRpYyBpbnQgdWRmX2FsbG9jX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKTsKIHN0YXRpYyBpbnQgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLApAQCAtMTQyLDcgJiM0MzsxNDAsNyBAQCB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlpZiAoIWlub2RlLSZndDtpX25saW5rKSB7CiAJCQl3YW50X2RlbGV0ZSA9IDE7CiAJCQl1ZGZfc2V0c2l6ZShpbm9kZSwgMCk7Ci0JCQl1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7CiYjNDM7CQkJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpOwogCQl9CiAJCWlmIChpaW5mby0mZ3Q7aV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiAmYW1wOyZhbXA7CiAJCSAgICBpbm9kZS0mZ3Q7aV9zaXplICE9IGlpbmZvLSZndDtpX2xlbkV4dGVudHMpIHsKQEAgLTkzNiwxMCAmIzQzOzkzNCw3IEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApCiAJaWluZm8tJmd0O2lfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gJiM0MzsgMTsKIAlpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7CiAKLQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0JCXVkZl9zeW5jX2lub2RlKGlub2RlKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXQgPSAwOwogb3V0X2ZyZWU6CiAJYnJlbHNlKHByZXZfZXBvcy5iaCk7CkBAIC0xMzI2LDEwICYjNDM7MTMyMSw3IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSkKIAl9CiB1cGRhdGVfdGltZToKIAlpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7Ci0JaWYgKElTX1NZTkMoaW5vZGUpKQotCQl1ZGZfc3luY19pbm9kZShpbm9kZSk7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTcwNSwxNCAmIzQzOzE2OTcsMjggQEAgdm9pZCB1ZGZfdXBkYXRlX2V4dHJhX3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSkKIAkJaWluZm8tJmd0O2lfZXh0cmFQZXJtcyB8PSBGRV9QRVJNX09fREVMRVRFOwogfQogCi1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKLQlyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgd2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOwotfQomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlpbnQgZXJyID0gMDsKIAotc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCAxKTsKJiM0MzsJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsCiYjNDM7CQkJdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtJmd0O2lfc2IsCiYjNDM7CQkJCQkgICZhbXA7VURGX0koaW5vZGUpLSZndDtpX2xvY2F0aW9uLCAwKSk7CiYjNDM7CWlmICghYmgpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewomIzQzOwkJdWRmX3dhcm4oaW5vZGUtJmd0O2lfc2IsICYjMzQ7SU8gZXJyb3Igc3luY2luZyB1ZGYgaW5vZGUgWyUwOGxseF1cbiYjMzQ7LAomIzQzOwkJCSBpbm9kZS0mZ3Q7aV9pbm8pOwomIzQzOwkJZXJyID0gLUVJTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWVyciA9IG1tYl9zeW5jKCZhbXA7VURGX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7b3V0OgomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZSkKQEAgLTE3MjMsNyAmIzQzOzE3MjksNyBAQCBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZQogCQlpaW5mby0mZ3Q7aV9jcnRpbWUgPSB0aW1lOwogfQogCi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpCiYjNDM7aW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZUVudHJ5ICpmZTsKQEAgLTE3MzIsNyAmIzQzOzE3MzgsNiBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpCiAJdWludDMyX3QgdWRmcGVybXM7CiAJdWludDE2X3QgaWNiZmxhZ3M7CiAJdWludDE2X3QgY3JjbGVuOwotCWludCBlcnIgPSAwOwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLSZndDtpX3NiKTsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTsKQEAgLTE5MzcsMTcgJiM0MzsxOTQyLDEwIEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKIAogCS8qIHdyaXRlIHRoZSBkYXRhIGJsb2NrcyAqLwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlpZiAoZG9fc3luYykgewotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7Ci0JCQl1ZGZfd2Fybihpbm9kZS0mZ3Q7aV9zYiwgJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxuJiMzNDssCi0JCQkJIGlub2RlLSZndDtpX2lubyk7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQogCWJyZWxzZShiaCk7CiYjNDM7CXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwogCi0JcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubywKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmMKaW5kZXggN2I4NWY1YTJiNzlmYzQuLmU3ZTlmMmEwZDI0ZTgwIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMjExLDYgJiM0MzsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSB1ZGZfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLAogCS53cml0ZV9pbm9kZQk9IHVkZl93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSB1ZGZfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IHVkZl9wdXRfc3VwZXIsCiAJLnN5bmNfZnMJPSB1ZGZfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oCmluZGV4IDZkOTUxZTA1YzAwNDZhLi44NmRjMmQ2YTJlZjFiOCAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZmRlY2wuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvdWRmZGVjbC5oCkBAIC0xMzcsNyAmIzQzOzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpCiAKIC8qIGZpbGUuYyAqLwogZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7CiAKIC8qIGlub2RlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLApAQCAtMTU4LDYgJiM0MzsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jaywKIGV4dGVybiBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICosIGxvZmZfdCk7CiBleHRlcm4gdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKJiM0MztpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGV4dGVybiBpbnQgaW5vZGVfYm1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKIAkJICAgICAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqcG9zLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsCiAJCSAgICAgIHVpbnQzMl90ICplbGVuLCBzZWN0b3JfdCAqb2Zmc2V0LCBpbnQ4X3QgKmV0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCA4YjIzYmM5YTI0NGNiMy4uZmQyYzcxMTVjMDU0MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTIxMCwxMCAmIzQzOzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7CiAKIC8qIFRoaW5ncyB0byBkbyB3aXRoIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdCAqLwogdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpOwotaW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYiwKLQkJICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTsKLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLAotCSAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7CiB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywKIAkJCXNlY3Rvcl90IGxlbik7CiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5fYmRldl9iaF9hbGlhcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUwY2U3MzFhMmI3OGYxLi43MjllM2NiODllMzg0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNzQwLDcgJiM0Mzs3NDAsOCBAQCBlbnVtIGlub2RlX3N0YXRlX2ZsYWdzX2VudW0gewogCUlfQ1JFQVRJTkcJCT0gKDFVICZsdDsmbHQ7IDE1KSwKIAlJX0RPTlRDQUNIRQkJPSAoMVUgJmx0OyZsdDsgMTYpLAogCUlfU1lOQ19RVUVVRUQJCT0gKDFVICZsdDsmbHQ7IDE3KSwKLQlJX1BJTk5JTkdfTkVURlNfV0IJPSAoMVUgJmx0OyZsdDsgMTgpCiYjNDM7CUlfUElOTklOR19ORVRGU19XQgk9ICgxVSAmbHQ7Jmx0OyAxOCksCiYjNDM7CUlfTUVUQURBVEFfV1JJVEVCQUNLCT0gKDFVICZsdDsmbHQ7IDE5KSwKIH07CiAKICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQykKQEAgLTIyMTMsNiAmIzQzOzIyMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHlfc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9TWU5DKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzcGluX2xvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKJiM0MzsJaW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7fQomIzQzOwogLyoKICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaApAQCAtODYsNiAmIzQzOzg2LDggQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgewogCXZvaWQgKCpmcmVlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAl2b2lkICgqZGlydHlfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncyk7CiAJaW50ICgqd3JpdGVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKJiM0MzsJaW50ICgqc3luY19pbm9kZV9tZXRhZGF0YSkoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogCWludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCXZvaWQgKCpldmljdF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7CiAJdm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDk3CgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogNjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZXRhZGF0YSBTeW5jIFBhdGNoKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpbm9kZSBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24uIEl0JiMzOTtzIGFkZGluZyBgc3luY19pbm9kZV9tZXRhZGF0YWAgdG8gdGhlIGBzdXBlcl9vcGVyYXRpb25zYCBzdHJ1Y3QgYW5kIHRoZW4gdXBkYXRpbmcgYSB3aG9sZSBidW5jaCBvZiBmaWxlc3lzdGVtcyDigJMgYWZmcywgYmZzLCBleHQyLCBleHQ0LCBmYXQsIG1pbml4LCBhbmQgdWRmIOKAkyB0byB1c2UgdGhpcyBuZXcgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgb2xkZXIgYG1tYl9mc3luY2AgYW5kIGBtbWJfZnN5bmNfbm9mbHVzaGAgbWV0aG9kcy4gVGhpcyBhbHNvIHRvdWNoZXMgYGZzL2ZzLXdyaXRlYmFjay5jYCwgc3BlY2lmaWNhbGx5IHRvIGRlYWwgd2l0aCBgSV9NRVRBREFUQV9XUklURUJBQ0tgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgY29yZSBWRlMgd3JpdGViYWNrIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgc28gYFdvcnRoRnV6emluZz10cnVlYCBpcyBhIG5vLWJyYWluZXIuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzeW5jX2lub2RlX21ldGFkYXRhYCwgc28gdGhhdCYjMzk7cyBvYnZpb3VzbHkgYSBrZXkgdGFyZ2V0LiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFuZCBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCB3aXRoaW4gYGZzL2ZzLXdyaXRlYmFjay5jYC4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB1cGRhdGluZyB0aG9zZSBmaWxlc3lzdGVtc+KAmSByZXNwZWN0aXZlIGltcGxlbWVudGF0aW9uczogYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgLgoKUGx1cywgd2UgaGF2ZSB0aGVzZSBvdGhlciB3cml0ZSBmdW5jdGlvbnMgaW1wYWN0ZWQ6IGBleHQ0X3dyaXRlX2lub2RlYCwgYGV4dDJfd3JpdGVfaW5vZGVgLCBgZmF0X3dyaXRlX2lub2RlYCwgYG1pbml4X3dyaXRlX2lub2RlYCwgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBgYmZzX3dyaXRlX2lub2RlYC4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IHRoZSBldmljdGlvbiBjaGFuZ2VzIHRvbywgYGV4dDRfZXZpY3RfaW5vZGVgLCBgZXh0Ml9ldmljdF9pbm9kZWAsIGBmYXRfZXZpY3RfaW5vZGVgLCBgbWluaXhfZXZpY3RfaW5vZGVgLCBgdWRmX2V2aWN0X2lub2RlYCwgYW5kIGBiZnNfZXZpY3RfaW5vZGVgLiBPaCwgYW5kIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGAgaW4gYGZzL2xpYmZzLmNgIGFsc28uCgpTbywgdG8gcmVjYXAgdGhlIGZ1bmN0aW9ucywgSSBzaG91bGQgZm9jdXMgb24gYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBpbiBgZnMvZnMtd3JpdGViYWNrLmNgLCB0aGVuIGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgIGluIGBmcy9leHQ0L2lub2RlLmNgLCBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCBpbiBgZnMvZXh0Mi9pbm9kZS5jYCwgYW5kIHRoZW4gYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCBpbiBgZnMvZmF0L2lub2RlLmNgLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IHRoZSBrZXJuZWwgY29uZmlncyB3ZSBoYXZlIGFyZSB2YWxpZCwgc28gdGhlIG1vZHVsZXMgd2lsbCBhY3R1YWxseSBiZSBwcmVzZW50LiBMb29rcyBsaWtlIHdlIGhhdmUgYENPTkZJR19FWFQ0X0ZTYCwgYENPTkZJR19FWFQyX0ZTYCwgYENPTkZJR19GQVRfRlNgLCBgQ09ORklHX01JTklYX0ZTYCwgYENPTkZJR19VREZfRlNgLCBgQ09ORklHX0JGU19GU2AsIGFuZCBgQ09ORklHX0FGRlNfRlNgLiBBbHJpZ2h0LCBhbmQgdGhvc2UgYWxpZ24gd2l0aCB0aGUgZmlsZXN5c3RlbXMgd2XigJlyZSBkZWFsaW5nIHdpdGguIEFsdGhvdWdoLCB3YWl0Li4uIGBGQVRfRlNgIGlzIHVzdWFsbHkgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIC0gbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBmcy9mYXQvS2NvbmZpZ2AgZmlsZSB0byBiZSBzdXJlLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIHZlcmlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoRVhUNF9GU3xFWFQyX0ZTfEZBVF9GU3xNU0RPU19GU3xWRkFUX0ZTfE1JTklYX0ZTfFVERl9GU3xCRlNfRlN8QUZGU19GUykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZmZzL0tjb25maWc6Mjpjb25maWcgQUZGU19GU1xuZnMvYWZmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWlnYSBGRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Jmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9iZnMvS2NvbmZpZzoyOmNvbmZpZyBCRlNfRlNcbmZzL2Jmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0Mi9LY29uZmlnOjI6Y29uZmlnIEVYVDJfRlNcbmZzL2V4dDIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvZXh0Mi9LY29uZmlnLTIwLVxuZnMvZXh0Mi9LY29uZmlnOjIxOmNvbmZpZyBFWFQyX0ZTX1hBVFRSXG5mcy9leHQyL0tjb25maWctMjItXHRib29sIFwmIzM0O0V4dDIgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0yOS1cbmZzL2V4dDIvS2NvbmZpZzozMDpjb25maWcgRVhUMl9GU19QT1NJWF9BQ0xcbmZzL2V4dDIvS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7RXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0zOS1cbmZzL2V4dDIvS2NvbmZpZzo0MDpjb25maWcgRVhUMl9GU19TRUNVUklUWVxuZnMvZXh0Mi9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtFeHQyIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4tLVxuZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2ZhdC9LY29uZmlnOjI6Y29uZmlnIEZBVF9GU1xuZnMvZmF0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZnMvZmF0L0tjb25maWctMzctXG5mcy9mYXQvS2NvbmZpZzozODpjb25maWcgTVNET1NfRlNcbmZzL2ZhdC9LY29uZmlnLTM5LVx0dHJpc3RhdGUgXCYjMzQ7TVNET1MgZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2ZhdC9LY29uZmlnLTYyLVxuZnMvZmF0L0tjb25maWc6NjM6Y29uZmlnIFZGQVRfRlNcbmZzL2ZhdC9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7VkZBVCAoV2luZG93cy05NSkgZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL21pbml4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL21pbml4L0tjb25maWc6Mjpjb25maWcgTUlOSVhfRlNcbmZzL21pbml4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pbml4IGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9taW5peC9LY29uZmlnLTIwLVxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxuZnMvbWluaXgvS2NvbmZpZy0yMi1cdGRlZl9ib29sIE1JTklYX0ZTXG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yNC1cbmZzL21pbml4L0tjb25maWc6MjU6Y29uZmlnIE1JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cdGRlZl9ib29sIE1JTklYX0ZTXG4tLVxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3VkZi9LY29uZmlnOjI6Y29uZmlnIFVERl9GU1xuZnMvdWRmL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VERiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4OTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZpbGVzeXN0ZW0gU3luY2hyb25pemF0aW9uIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBmaWxlc3lzdGVtcyB0byBjb25zaWRlcjogYEVYVDRfRlNgLCBgRVhUMl9GU2AsIGBNU0RPU19GU2AsIGBWRkFUX0ZTYCwgYE1JTklYX0ZTYCwgYFVERl9GU2AsIGBCRlNfRlNgLCBgQUZGU19GU2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZWlyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXM6IGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYC4gQSBxdWljayBnbGFuY2UgYXQgdGhlIGZ1bmN0aW9uIG5hbWVzLCBhbmQgbXkga25vd2xlZGdlIHRlbGxzIG1lIHRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byB3cml0aW5nIGRhdGEgb3V0IHRvIHRoZSBkaXNrIGluIGEgY29udHJvbGxlZCB3YXksIG1ha2luZyB0aGVtIGNydWNpYWwgZm9yIGRhdGEgaW50ZWdyaXR5LgoKTm93LCBsZXQgbWUgY2hlY2sgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEkgc2VlIHRoYXQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhcmUgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gcXVpY2tseSB3aGV0aGVyIHRoZXkgYXJlIHN0YXRpYyBvciBnbG9iYWwuIEFoLCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgc3RhdGljLiBBbmQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgYWxzbyBzdGF0aWMuIE5vdywgdGhlIGBleHQ0YCwgYGV4dDJgLCBgdWRmYCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYCBzeW5jIGZ1bmN0aW9ucyBhcmUgZ2xvYmFsLiBMb29rcyBsaWtlIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAgYXJlIGFsc28gc3RhdGljLCBpbmRpY2F0aW5nIHRoZXkgYXJlIGxpa2VseSBpbnRlcm5hbCB0byB0aGVpciByZXNwZWN0aXZlIGZpbGVzeXN0ZW1zIGFuZCBub3QgcGFydCBvZiBhIGNvbW1vbiBzeW5jaHJvbml6YXRpb24gaW50ZXJmYWNlLgoKSSBzaG91bGQgZXhhbWluZSBgZnMvZnMtd3JpdGViYWNrLmNgIGZ1cnRoZXIsIGluIHBhcnRpY3VsYXIgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgd3JpdGViYWNrIHByb2Nlc3Mgd29ya3MuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz0xNzc1PXN0YXRpYyBpbnRcbmZzL2ZzLXdyaXRlYmFjay5jOjE3NzY6X193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuZnMvZnMtd3JpdGViYWNrLmMtMTc3Ny17XG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTc4NC1cbmZzL2ZzLXdyaXRlYmFjay5jOjE3ODU6XHR0cmFjZV93cml0ZWJhY2tfc2luZ2xlX2lub2RlX3N0YXJ0KGlub2RlLCB3YmMsIG5yX3RvX3dyaXRlKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTE3ODYtXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTg3MC1cdHdiYy1cdTAwM2V1bnBpbm5lZF9uZXRmc193YiA9IGZhbHNlO1xuZnMvZnMtd3JpdGViYWNrLmM6MTg3MTpcdHRyYWNlX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYywgbnJfdG9fd3JpdGUpO1xuZnMvZnMtd3JpdGViYWNrLmMtMTg3Mi1cdHJldHVybiByZXQ7XG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTg4My0gKi9cbmZzL2ZzLXdyaXRlYmFjay5jOjE4ODQ6c3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9mcy13cml0ZWJhY2suYy0xODg1LVx0XHRcdFx0ICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9mcy13cml0ZWJhY2suYy0xOTI0LVxuZnMvZnMtd3JpdGViYWNrLmM6MTkyNTpcdHJldCA9IF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTE5MjYtXG4tLVxuZnMvZnMtd3JpdGViYWNrLmM9MTk5OT1zdGF0aWMgbG9uZyB3cml0ZWJhY2tfc2JfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMjA5Ny1cdFx0ICovXG5mcy9mcy13cml0ZWJhY2suYzoyMDk4Olx0XHRfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG5mcy9mcy13cml0ZWJhY2suYy0yMDk5LVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTI2OTM9dm9pZCBfX21hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTI3NDctXHQvKlxuZnMvZnMtd3JpdGViYWNrLmM6Mjc0ODpcdCAqIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSgpIGZvciB0aGVcbmZzL2ZzLXdyaXRlYmFjay5jLTI3NDktXHQgKiBmb2xsb3dpbmcgbG9ja2xlc3MgaV9zdGF0ZSB0ZXN0LiAgU2VlIHRoZXJlIGZvciBkZXRhaWxzLlxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTMwNjY9aW50IHdyaXRlX2lub2RlX25vdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc3luYylcbi0tXG5mcy9mcy13cml0ZWJhY2suYy0zMDc4LVx0bWlnaHRfc2xlZXAoKTtcbmZzL2ZzLXdyaXRlYmFjay5jOjMwNzk6XHRyZXR1cm4gd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTMwODAtfVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTMwOTI9aW50IHN5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMzA5OC1cbmZzL2ZzLXdyaXRlYmFjay5jOjMwOTk6XHRyZXR1cm4gd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTMxMDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTA2CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDEyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTWV0YWRhdGEgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBwb2ludGVyLCBgc3luY19pbm9kZV9tZXRhZGF0YWAsIGludG8gdGhlIGBzdXBlcl9vcGVyYXRpb25zYCBzdHJ1Y3QuICBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHVzZWQgdG8gcHJvdmlkZSBhIG1vcmUgc3BlY2lmaWMgd2F5IHRvIGZsdXNoIG1ldGFkYXRhIGZvciBhbiBpbm9kZSwgcG90ZW50aWFsbHkgYXMgcGFydCBvZiB3cml0ZWJhY2suICBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcgaXMgYWxzbyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgYSByZWZpbmVkIGNvbnRyb2wgZmxvdyBmb3Igd2hlbiBhbmQgaG93IG1ldGFkYXRhIGlzIHdyaXR0ZW4gYmFjay4gIFRoZSBjb3JlIG9mIHRoZSBsb2dpYyBzZWVtcyB0byByZXNpZGUgaW4gYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYC4KCkkmIzM5O20gZ29pbmcgdG8gYWRkIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGZvciB0aGUgdmFyaW91cyBmaWxlc3lzdGVtcyB0byBteSBsaXN0IG9mIHN5bWJvbHMgdG8gd2F0Y2g6ICBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGAuCgpXYWl0LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaW5jbHVkZSB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhbmQgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFyZSBpbmRlZWQgc3RhdGljLCBidXQgdGhvc2UgYXJlIGZpbmUgdG8gYmUgaW4gYEZvY3VzU3ltYm9sc2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlIG90aGVyIGZ1bmN0aW9ucy4gT2theSwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCBhcmUgYWxzbyBzdGF0aWMuIExldCBtZSBjb25maXJtIHRoZSBnbG9iYWxzLiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgIGFyZSBnbG9iYWwuCgpOb3csIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgSSYjMzk7bSBjb3ZlcmluZyB0aGUgcmlnaHQgZmlsZXN5c3RlbXM6IGBFWFQ0X0ZTYCwgYEVYVDJfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBNSU5JWF9GU2AsIGBVREZfRlNgLCBgQkZTX0ZTYCwgYW5kIGBBRkZTX0ZTYC4KCkkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZ1bmN0aW9ucyB0byBzZWUgaWYgSSYjMzk7bSBtaXNzaW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gbWV0YWRhdGEgbWFuaXB1bGF0aW9uIGluIHRoZXNlIGZpbGVzeXN0ZW1zLiAgTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb250ZXh0LCBhbmQgY3Jvc3MgcmVmZXJlbmNpbmcgcmVsYXRlZCBmdW5jdGlvbnMuLi4gbm90aGluZyBlbHNlIGp1bXBzIG91dCBhdCBtZSBhcyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWwgY2hhbmdlLgoKU28gdGhlIG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGUgYWRkZWQgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGltcGxlbWVudGF0aW9ucyB0aGVtc2VsdmVzLCBhcyB3ZWxsIGFzIHRoZSBjb3JlIHdyaXRlYmFjayBmdW5jdGlvbnMuICBJJiMzOTttIGFkZGluZyB0aGVzZSB0byBgRm9jdXNTeW1ib2xzYC4KCkZpbmFsIGxpc3Q6CiogICBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYAoqICAgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgCiogICBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAKKiAgIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAKKiAgIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYHNpbXBsZV9mc3luY19ub2ZsdXNoYAoKQ29uZmlnczoKKiAgIGBFWFQ0X0ZTYAoqICAgYEVYVDJfRlNgCiogICBgTVNET1NfRlNgCiogICBgVkZBVF9GU2AKKiAgIGBNSU5JWF9GU2AKKiAgIGBVREZfRlNgCiogICBgQkZTX0ZTYAoqICAgYEFGRlNfRlNgCgpUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBWRlMgd3JpdGViYWNrIGFuZCB0aGUgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZy4gIFRoaXMgaXMgYSBiaWcgY2hhbmdlLCBzbyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgpBbHJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O01TRE9TX0ZTJiMzNDssCiAgICAmIzM0O1ZGQVRfRlMmIzM0OywKICAgICYjMzQ7TUlOSVhfRlMmIzM0OywKICAgICYjMzQ7VURGX0ZTJiMzNDssCiAgICAmIzM0O0JGU19GUyYjMzQ7LAogICAgJiMzNDtBRkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X193cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2V4dDJfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtmYXRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDttaW5peF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2Jmc19zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3NpbXBsZV9mc3luY19ub2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O01TRE9TX0ZTJiMzNDssCiAgICAmIzM0O1ZGQVRfRlMmIzM0OywKICAgICYjMzQ7TUlOSVhfRlMmIzM0OywKICAgICYjMzQ7VURGX0ZTJiMzNDssCiAgICAmIzM0O0JGU19GUyYjMzQ7LAogICAgJiMzNDtBRkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X193cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2V4dDJfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtmYXRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDttaW5peF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2Jmc19zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3NpbXBsZV9mc3luY19ub2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjMyOjAyLjg1MTM5NDMyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzE4NDk0NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwibWluaXhfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MDIuODUxNDAwMzY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAzMTA2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Y2I1M2E4ZDU5NjNmZDFlNjViY2U5ZWEyZjVhNjNhZGM4MzMyOWJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDIwOjMyOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcXG5pbmRleCA0NGEzZjY5ZDI3NWY5Ni4uYTdmYWE5MWRlZWQ1YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxcbkBAIC00NCw3ICs0NCw2IEBAIHN0cnVjdCBhZmZzX2lub2RlX2luZm8ge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XFx0XFx0LyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9leHRfbG9jaztcXHRcXHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXFxuICNkZWZpbmUgaV9oYXNoX2xvY2sgaV9leHRfbG9ja1xcbi1cXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XFxuIFxcdHUzMlxcdCBpX2Jsa2NudDtcXHRcXHRcXHQvKiBibG9jayBjb3VudCAqL1xcbiBcXHR1MzJcXHQgaV9leHRjbnQ7XFx0XFx0XFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cXG4gXFx0dTMyXFx0KmlfbGM7XFx0XFx0XFx0XFx0LyogbGluZWFyIGNhY2hlIG9mIGV4dGVuZGVkIGJsb2NrcyAqL1xcbkBAIC0xNTIsNyArMTUxLDYgQEAgZXh0ZXJuIGJvb2xcXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBleHRlcm4gaW50XFx0YWZmc19jaGVja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdGJvb2wgbm90cnVuY2F0ZSk7XFxuIGV4dGVybiBpbnRcXHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIC8qIGJpdG1hcC4gYyAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jXFxuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbisrKyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIFxcdFxcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGNwdV90b19iZTMyKGlubyk7XFxuIFxcbiBcXHRhZmZzX2FkanVzdF9jaGVja3N1bShkaXJfYmgsIGlubyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFxcdTAwMjZBRkZTX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xcbiBcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGlubztcXG4gXFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVxcdTAwM2VwYXJlbnQgPSAwO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0XFx0Z290byBkb25lO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcXG4gXFxuIFxcdFxcdG1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbmFtZSwgMzIpO1xcbiBcXHRcXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xcbkBAIC0xODgsNyArMTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0aXB1dChkaXIpO1xcbkBAIC0yMDMsNyArMjAzLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbGlua19jaGFpbjtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xcbiBcXHRcXHRcXHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHQvKiBGaXggdGhlIGxpbmsgY291bnQsIGlmIGJoIGlzIGEgbm9ybWFsIGhlYWRlciBibG9jayB3aXRob3V0IGxpbmtzICovXFxuIFxcdFxcdFxcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZXN0eXBlKSkge1xcbkBAIC0zMDYsNyArMzA2LDcgQEAgYWZmc19yZW1vdmVfaGVhZGVyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0Z290byBkb25lX3VubG9jaztcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcXG5pbmRleCAxNDRiMTc0ODJkMTJkYS4uMjNlMDg4YTdlZDRmYjMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcXG4rKysgYi9mcy9hZmZzL2ZpbGUuY1xcbkBAIC0xNDAsMTQgKzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXFxuIFxcdEFGRlNfVEFJTChzYiwgbmV3X2JoKS1cXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XFxuIFxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xcbiBcXG4gXFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWV4dGVuc2lvbik7XFxuIFxcdGlmICh0bXApXFxuIFxcdFxcdGFmZnNfd2FybmluZyhzYiwgXFxcImFsbG9jX2V4dFxcXCIsIFxcXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcXFwiLCB0bXApO1xcbiBcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlZXh0ZW5zaW9uID0gY3B1X3RvX2JlMzIoYmxvY2tucik7XFxuIFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2V4dGNudCsrO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG5AQCAtNTgxLDcgKzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRcXHRtZW1zZXQoQUZGU19EQVRBKGJoKSArIGJvZmYsIDAsIHRtcCk7XFxuIFxcdFxcdGJlMzJfYWRkX2NwdShcXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplLCB0bXApO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0c2l6ZSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG4gXFx0fSBlbHNlIGlmIChiaWR4KSB7XFxuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIodG1wKTtcXG4gXFx0XFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4gXFx0XFx0YmgtXFx1MDAzZWJfc3RhdGUgXFx1MDAyNj0gfigxVUwgXFx1MDAzY1xcdTAwM2MgQkhfTmV3KTtcXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdFxcdGlmIChwcmV2X2JoKSB7XFxuIFxcdFxcdFxcdHUzMiB0bXBfbmV4dCA9IGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0KTtcXG4gXFxuQEAgLTYxMyw4ICs2MTMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c2l6ZSArPSBic2l6ZTtcXG5AQCAtNzMzLDcgKzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIoXFxuIFxcdFxcdFxcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXFx1MDAzZXNpemUpKSk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IHRtcDtcXG4gXFx0XFx0ZnJvbSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG5AQCAtNzY2LDEzICs3NjUsMTIgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcXG4gXFx0XFx0XFx0XFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXFx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cXHUwMDNlYl9ibG9ja25yKTtcXG4gXFx0XFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXFx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcXG4tXFx0XFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IGJzaXplO1xcbiBcXHRcXHRmcm9tICs9IGJzaXplO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTgwMSwxNCArNzk5LDEzIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSkgXFx1MDAzYyB0bXApXFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XFxuIFxcdFxcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0d3JpdHRlbiArPSB0bXA7XFxuIFxcdFxcdGZyb20gKz0gdG1wO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVxcdTAwM2VleHRlbnNpb24gPSAwO1xcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoZXh0X2JoKTtcXG4gXFx0YWZmc19icmVsc2UoZXh0X2JoKTtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcXG4tLS0gYS9mcy9hZmZzL2lub2RlLmNcXG4rKysgYi9mcy9hZmZzL2lub2RlLmNcXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjY2LDExICsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmICghaW5vZGUtXFx1MDAzZWlfbmxpbmspIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtbWJfc3luYyhcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHR9XFxuIFxcbi1cXHRtbWJfaW52YWxpZGF0ZShcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuIFxcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XFxuIFxcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2xjO1xcbkBAIC0zMDUsNyArMzAyLDcgQEAgYWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpXFxuIFxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuIFxcdGlmICghYmgpXFxuIFxcdFxcdGdvdG8gZXJyX2JoO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXG4gXFx0aW5vZGUtXFx1MDAzZWlfdWlkICAgICA9IGN1cnJlbnRfZnN1aWQoKTtcXG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjaGFpbjtcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBpbm9kZV9iaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XFxuIFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgpO1xcbiBcXHRcXHRzZXRfbmxpbmsoaW5vZGUsIDIpO1xcbiBcXHRcXHRpaG9sZChpbm9kZSk7XFxuIFxcdH1cXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSAodm9pZCAqKShsb25nKWJoLVxcdTAwM2ViX2Jsb2NrbnI7XFxuIFxcbiBcXHRhZmZzX2xvY2tfZGlyKGRpcik7XFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9uYW1laS5jXFxuKysrIGIvZnMvYWZmcy9uYW1laS5jXFxuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHR9XFxuIFxcdCpwID0gMDtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGkgKyAxO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFxuQEAgLTQ0Myw4ICs0NDMsNyBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cXG4gXFxuIGRvbmU6XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcXG4tXFx0XFx0XFx0XFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShiaCk7XFxuIFxcdHJldHVybiByZXR2YWw7XFxuIH1cXG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcXG4gXFx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xcbiBkb25lOlxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcXHUwMDI2QUZGU19JKG5ld19kaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFxcdTAwMjZBRkZTX0kob2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfbmV3KTtcXG4gXFx0YWZmc19icmVsc2UoYmhfb2xkKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfbmV3KTtcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXFxuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xcbkBAIC0xMDgsNyArMTA4LDYgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqYWZmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRpLVxcdTAwM2VpX2xjID0gTlVMTDtcXG4gXFx0aS1cXHUwMDNlaV9leHRfYmggPSBOVUxMO1xcbiBcXHRpLVxcdTAwM2VpX3BhX2NudCA9IDA7XFxuLVxcdG1tYl9pbml0KFxcdTAwMjZpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIFxcdTAwMjZpLVxcdTAwM2V2ZnNfaW5vZGU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXFxuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9kaXIuY1xcbisrKyBiL2ZzL2Jmcy9kaXIuY1xcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2QkZTX0koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkXFx0XFx0PSBnZW5lcmljX3JlYWRfZGlyLFxcbiBcXHQuaXRlcmF0ZV9zaGFyZWRcXHQ9IGJmc19yZWFkZGlyLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IGJmc19mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXFxuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9pbm9kZS5jXFxuKysrIGIvZnMvYmZzL2lub2RlLmNcXG5AQCAtMTM2LDcgKzEzNiw2IEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbiBcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRkcHJpbnRmKFxcXCJpbm89JTA4eFxcXFxuXFxcIiwgaW5vKTtcXG4gXFxuQEAgLTE2NSwxMyArMTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRkaS1cXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgKyBpbm9kZS1cXHUwMDNlaV9zaXplIC0gMSk7XFxuIFxcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0fVxcbiBcXHRicmVsc2UoYmgpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFxuK1xcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cXHUwMDNlaW5vLCBcXHUwMDI2YmgpO1xcbitcXHRpZiAoSVNfRVJSKGRpKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xcbitcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRlcnIgPSBtbWJfc3luYyhcXHUwMDI2QkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK291dDpcXG4rXFx0YnJlbHNlKGJoKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcXG4gXFx0LmFsbG9jX2lub2RlXFx0PSBiZnNfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBiZnNfZnJlZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBiZnNfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gYmZzX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSBiZnNfcHV0X3N1cGVyLFxcbiBcXHQuc3RhdGZzXFx0XFx0PSBiZnNfc3RhdGZzLFxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXFxuaW5kZXggOWFmNWYwNjFhMWY4NWEuLmJlOGI1N2E2MzVjZDgyIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtNjI4LDc5ICs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtbWJfc3luYyk7XFxuIFxcbi0vKipcXG4tICogbW1iX2ZzeW5jX25vZmx1c2ggLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGhcXG4tICogXFx0XFx0ICAgICAgIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdFxcbi0gKlxcbi0gKiBAZmlsZTpcXHRmaWxlIHRvIHN5bmNocm9uaXplXFxuLSAqIEBtbWI6XFx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcXG4tICogQHN0YXJ0OlxcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xcbi0gKiBAZW5kOlxcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcXG4tICogQGRhdGFzeW5jOlxcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcXG4tICpcXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXFxuLSAqIHN0cnVjdHVyZS5cXG4tICovXFxuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXFxuLVxcdFxcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFxuLVxcdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRpZiAobW1iKVxcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhtbWIpO1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKGRhdGFzeW5jIFxcdTAwMjZcXHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRElSVFlfREFUQVNZTkMpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbi1cXHRpZiAocmV0ID09IDApXFxuLVxcdFxcdHJldCA9IGVycjtcXG4tXFxuLW91dDpcXG4tXFx0LyogY2hlY2sgYW5kIGFkdmFuY2UgYWdhaW4gdG8gY2F0Y2ggZXJyb3JzIGFmdGVyIHN5bmNpbmcgb3V0IGJ1ZmZlcnMgKi9cXG4tXFx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XFxuLVxcdGlmIChyZXQgPT0gMClcXG4tXFx0XFx0cmV0ID0gZXJyO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xcbi1cXG4tLyoqXFxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxcbi0gKiBcXHQgICAgICAgYnVmZmVycyBsaXN0XFxuLSAqXFxuLSAqIEBmaWxlOlxcdGZpbGUgdG8gc3luY2hyb25pemVcXG4tICogQG1tYjpcXHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxcbi0gKiBAc3RhcnQ6XFx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXFxuLSAqIEBlbmQ6XFx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxcbi0gKiBAZGF0YXN5bmM6XFx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxcbi0gKlxcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cXG4tICovXFxuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxcbi1cXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0cmV0ID0gYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jKTtcXG4tXFxuIC8qXFxuICAqIENhbGxlZCB3aGVuIHdlJ3ZlIHJlY2VudGx5IHdyaXR0ZW4gYmxvY2sgYGJibG9jaycsIGFuZCBpdCBpcyBrbm93biB0aGF0XFxuICAqIGBiYmxvY2snIHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XFxuIFxcbiB2b2lkIG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuK1xcbiBcXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0LyogRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IHRoaXMgaW4gYm90aCBwbGFjZXM/ICovXFxuIFxcdGlmIChiaC1cXHUwMDNlYl9mb2xpbyBcXHUwMDI2XFx1MDAyNiBiaC1cXHUwMDNlYl9mb2xpby1cXHUwMDNlbWFwcGluZylcXG4gXFx0XFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXFx1MDAzZWJfZm9saW8tXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbi1cXHRpZiAoYmgtXFx1MDAzZWJfbW1iKVxcbi1cXHRcXHRtYXBwaW5nX3NldF9lcnJvcihiaC1cXHUwMDNlYl9tbWItXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbitcXHQvKiBQcm90ZWN0IHVzIGZyb20gbW1iIFxcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bW1iID0gUkVBRF9PTkNFKGJoLVxcdTAwM2ViX21tYik7XFxuK1xcdGlmIChtbWIpXFxuK1xcdFxcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cXHUwMDNlbWFwcGluZywgLUVJTyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9kaXIuY1xcbisrKyBiL2ZzL2V4dDIvZGlyLmNcXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gXFx0LmNvbXBhdF9pb2N0bFxcdD0gZXh0Ml9jb21wYXRfaW9jdGwsXFxuICNlbmRpZlxcbi1cXHQuZnN5bmNcXHRcXHQ9IGV4dDJfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9leHQyLmhcXG4rKysgYi9mcy9leHQyL2V4dDIuaFxcbkBAIC03MzUsNiArNzM1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQpO1xcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xcbiBleHRlcm4gaW50IGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuK2V4dGVybiBpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGV4dDJfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pO1xcbiBleHRlcm4gaW50IGV4dDJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XFxuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xcbiBcXG4gLyogZmlsZS5jICovXFxuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi1cXHRcXHQgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9maWxlLmMgYi9mcy9leHQyL2ZpbGUuY1xcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xcbisrKyBiL2ZzL2V4dDIvZmlsZS5jXFxuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAocmV0ID09IC1FSU8pXFxuLVxcdFxcdC8qIFdlIGRvbid0IHJlYWxseSBrbm93IHdoZXJlIHRoZSBJTyBlcnJvciBoYXBwZW5lZC4uLiAqL1xcbi1cXHRcXHRleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXyxcXG4tXFx0XFx0XFx0ICAgXFxcImRldGVjdGVkIElPIGVycm9yIHdoZW4gd3JpdGluZyBtZXRhZGF0YSBidWZmZXJzXFxcIik7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbkBAIC0yMTMsNyArMTk4LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4gXFx0Lm9wZW5cXHRcXHQ9IGV4dDJfZmlsZV9vcGVuLFxcbiBcXHQucmVsZWFzZVxcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXFxuLVxcdC5mc3luY1xcdFxcdD0gZXh0Ml9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiBcXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmNcXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uOTlhY2Q3OWE0YWYyNzIgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXFxuKysrIGIvZnMvZXh0Mi9pbm9kZS5jXFxuQEAgLTM5LDggKzM5LDYgQEBcXG4gI2luY2x1ZGUgXFxcImFjbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGF0dHIuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcXG4tXFxuIC8qXFxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cXG4gICovXFxuQEAgLTg3LDcgKzg1LDcgQEAgdm9pZCBleHQyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHRcXHQvKiBzZXQgZHRpbWUgKi9cXG4gXFx0XFx0RVhUMl9JKGlub2RlKS1cXHUwMDNlaV9kdGltZVxcdD0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xcbiBcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4tXFx0XFx0X19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuK1xcdFxcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcXG4gXFx0XFx0LyogdHJ1bmNhdGUgdG8gMCAqL1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9zaXplID0gMDtcXG4gXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX2Jsb2NrcylcXG5AQCAtMTI1OCwxMiArMTI1Niw5IEBAIHN0YXRpYyBpbnQgZXh0Ml9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxcbiBcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xcbi1cXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcXG4tXFx0XFx0bW1iX3N5bmMoXFx1MDAyNkVYVDJfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdGlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSlcXG4gXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1cXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNDY5LDcgKzE0NjQsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG5AQCAtMTU2MCwyMiArMTU1NSwzMyBAQCBzdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcXG4gXFx0fSBlbHNlIGZvciAobiA9IDA7IG4gXFx1MDAzYyBFWFQyX05fQkxPQ0tTOyBuKyspXFxuIFxcdFxcdHJhd19pbm9kZS1cXHUwMDNlaV9ibG9ja1tuXSA9IGVpLVxcdTAwM2VpX2RhdGFbbl07XFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0aWYgKGRvX3N5bmMpIHtcXG4tXFx0XFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbi1cXHRcXHRpZiAoYnVmZmVyX3JlcShiaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG4tXFx0XFx0XFx0cHJpbnRrIChcXFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2lkLCAodW5zaWduZWQgbG9uZykgaW5vKTtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuIFxcdGVpLVxcdTAwM2VpX3N0YXRlIFxcdTAwMjY9IH5FWFQyX1NUQVRFX05FVztcXG4gXFx0YnJlbHNlIChiaCk7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4raW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbi1cXHRyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdHN0cnVjdCBleHQyX2lub2RlICpyYXdfaW5vZGUgPSBleHQyX2dldF9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YmgpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGlmIChJU19FUlIocmF3X2lub2RlKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuK1xcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XFxuK1xcdFxcdHByaW50ayhcXFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIGludCBleHQyX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcXG5pbmRleCAzOTk5ZjhmM2IxNTZlMy4uYTQwZjUzMDg3MmE0MDcgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9zdXBlci5jXFxuKysrIGIvZnMvZXh0Mi9zdXBlci5jXFxuQEAgLTM2Miw2ICszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xcbiBcXHQuYWxsb2NfaW5vZGVcXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBleHQyX3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSBleHQyX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSBleHQyX3B1dF9zdXBlcixcXG4gXFx0LnN5bmNfZnNcXHQ9IGV4dDJfc3luY19mcyxcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jXFxuaW5kZXggZTU1ZDE2YWJmNDIyZjQuLmJlNjNmODk0MDJhMzgxIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDIveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDIveGF0dHIuY1xcbkBAIC03NzcsNiArNzc3LDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbiBcXHQvKiBVcGRhdGUgdGhlIGlub2RlLiAqL1xcbiBcXHRFWFQyX0koaW5vZGUpLVxcdTAwM2VpX2ZpbGVfYWNsID0gbmV3X2JoID8gbmV3X2JoLVxcdTAwM2ViX2Jsb2NrbnIgOiAwO1xcbiBcXHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRpZiAoSVNfU1lOQyhpbm9kZSkpIHtcXG4gXFx0XFx0ZXJyb3IgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0XFx0LyogSW4gY2FzZSBzeW5jIGZhaWxlZCBkdWUgdG8gRU5PU1BDIHRoZSBpbm9kZSB3YXMgYWN0dWFsbHlcXG5AQCAtNzg5LDggKzc5MCw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXHR9XFxuIFxcbiBcXHRlcnJvciA9IDA7XFxuIFxcdGlmIChvbGRfYmggXFx1MDAyNlxcdTAwMjYgb2xkX2JoICE9IG5ld19iaCkge1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLjBmMDYxNTVhMzVhNjk0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTE1MSw3ICsxMTUxLDcgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcXG4gXFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcXG4gXFx0c3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZTtcXG4tXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xcbitcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRmlsZSBjcmVhdGlvbiB0aW1lLiBJdHMgZnVuY3Rpb24gaXMgc2FtZSBhcyB0aGF0IG9mXFxuQEAgLTIxMjYsNiArMjEyNiwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHQhbGlzdF9lbXB0eShcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9vcnBoYW4pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocyhcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBpX21ldGFkYXRhX2JocyBpcyBzZXQgaW4gZXh0NF9pbm9kZV9hdHRhY2hfbW1iKCkgdXNpbmcgY21weGNoZygpLlxcbitcXHQgKiBXZSB1c2UgUkVBRF9PTkNFIHdoZW4gYWNjZXNzaW5nIGlfbWV0YWRhdGFfYmhzIHRvIG1ha2Ugc3VyZSB3ZSBnZXRcXG4rXFx0ICogY29uc2lzdGVudCB2aWV3IGZvciBhbGwgYWNjZXNzZXMuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rfVxcbitcXG4gLypcXG4gICogQ29kZXMgZm9yIG9wZXJhdGluZyBzeXN0ZW1zXFxuICAqL1xcbkBAIC0zMTU1LDYgKzMxNjYsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcXG4gXFx0X19leHQ0X2lnZXQoKHNiKSwgKGlubyksIChmbGFncyksIF9fZnVuY19fLCBfX0xJTkVfXylcXG4gXFxuIGV4dGVybiBpbnQgIGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcXG4rZXh0ZXJuIGludCAgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcXG4gXFx0XFx0XFx0IHN0cnVjdCBpYXR0ciAqKTtcXG4gZXh0ZXJuIHUzMiAgZXh0NF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xcbmluZGV4IDlhOGMyMjVmMjc1MzA5Li4zYjJmOGFjMjBiZjg1YiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jXFxuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xcbkBAIC0zNTAsNiArMzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEl0J3MgZGlmZmljdWx0IHRvIGhhbmRsZSBmYWlsdXJlIHdoZW4gbWFya2luZyBidWZmZXIgZGlydHkgd2l0aG91dFxcbitcXHQgKiBsZWF2aW5nIGZpbGVzeXN0ZW0gY29ycnVwdGVkXFxuK1xcdCAqL1xcbitcXHRtbWIgPSBrbWFsbG9jX29iaigqbW1iLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XFxuK1xcdG1tYl9pbml0KG1tYiwgXFx1MDAyNmlub2RlLVxcdTAwM2VpX2RhdGEpO1xcbitcXHQvKiBTb21lb25lIHN3YXBwZWQgYW5vdGhlciBtbWIgYmVmb3JlIHVzPyAqL1xcbitcXHRpZiAoY21weGNoZyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpXFxuK1xcdFxcdGtmcmVlKG1tYik7XFxuK31cXG4rXFxuIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4gXFx0XFx0XFx0XFx0IGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbkBAIC0zODksMTEgKzQwNCwxMyBAQCBpbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXFxuIFxcdFxcdFxcdFxcdFxcdCBlcnIpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChpbm9kZSlcXG4tXFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdGlmIChpbm9kZSkge1xcbitcXHRcXHRcXHRpZiAoIWV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKVxcbitcXHRcXHRcXHRcXHRleHQ0X2lub2RlX2F0dGFjaF9tbWIoaW5vZGUpO1xcbitcXHRcXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIGV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmNcXG5pbmRleCA5MjQ3MjZkY2M4NWZmNS4uMjk5OWMyY2M4ZmNmYTAgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXFxuKysrIGIvZnMvZXh0NC9mc3luYy5jXFxuQEAgLTY4LDkgKzY4LDYgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdCAqIHRocm91Z2ggZXh0NF9ldmljdF9pbm9kZSgpKSBhbmQgc28gd2UgYXJlIHNhZmUgdG8gZmx1c2hcXG4gXFx0XFx0ICogbWV0YWRhdGEgYmxvY2tzIGFuZCB0aGUgaW5vZGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC04MywyMiArODAsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZzeW5jX25vam91cm5hbChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbiBcXHRcXHRcXHRcXHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfaW5vZGU7XFxuLVxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XFxuLVxcdFxcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcXG4tXFx0XFx0Lm5yX3RvX3dyaXRlID0gMCxcXG4tXFx0fTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbitcXHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXFxuLVxcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0cmV0ID0gZXh0NF9zeW5jX3BhcmVudChpbm9kZSk7XFxuIFxcbiBcXHRpZiAodGVzdF9vcHQoaW5vZGUtXFx1MDAzZWlfc2IsIEJBUlJJRVIpKVxcbkBAIC0xNTYsNiArMTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdGlmIChzYl9yZG9ubHkoaW5vZGUtXFx1MDAzZWlfc2IpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKSB7XFxuIFxcdFxcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmVlZHNfYmFycmllcik7XFxuQEAgLTE2NCwxMCArMTU0LDYgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cXG4gXFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjBjMjIwYjUzNTU5MGY0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xODYsNiArMTg2LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTClcXG4gXFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9ubGluaykge1xcbitcXHRcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZXJlJ3MgZGlydHkgcGFnZSB3aWxsIGxlYWQgdG8gZGF0YSBsb3NzLCB1c2VyXFxuIFxcdFxcdCAqIGNvdWxkIHNlZSBzdGFsZSBkYXRhLlxcbkBAIC0xOTUsOSArMTk3LDkgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXFxcImRhdGEgd2lsbCBiZSBsb3N0XFxcIik7XFxuIFxcbiBcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSk7XFxuLVxcdFxcdC8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi9cXG4tXFx0XFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKVxcbi1cXHRcXHRcXHRtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcXG4rXFx0XFx0aWYgKG1tYilcXG4rXFx0XFx0XFx0bW1iX3N5bmMobW1iKTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTM0NTIsNiArMzQ1NCw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbDtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuIFxcbiBcXHRpZiAoam91cm5hbCkge1xcbiBcXHRcXHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcXG5AQCAtMzQ2Miw4ICszNDY1LDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0bW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7XFxuIFxcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xcbi1cXHRpZiAobW1iX2hhc19idWZmZXJzKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocykpXFxuK1xcdGlmIChtbWIgXFx1MDAyNlxcdTAwMjYgbW1iX2hhc19idWZmZXJzKG1tYikpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRElSVFlfREFUQVNZTkM7XFxuIH1cXG5AQCAtNTgzOCwyNCArNTg0MiwzOCBAQCBpbnQgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4gXFx0XFx0ZXJyID0gZXh0NF9mY19jb21taXQoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9zeW5jX3RpZCk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4rXFx0XFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbiBcXG4tXFx0XFx0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbitpbnQgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2pvdXJuYWwpKVxcbitcXHRcXHRyZXR1cm4gLUVGU0NPUlJVUFRFRDtcXG4rXFxuK1xcdGVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0aWYgKG1tYikge1xcbitcXHRcXHRlcnIgPSBtbWJfc3luYyhtbWIpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBzeW5jKDIpIHdpbGwgZmx1c2ggdGhlIHdob2xlIGJ1ZmZlciBjYWNoZS4gTm8gbmVlZCB0byBkb1xcbi1cXHRcXHQgKiBpdCBoZXJlIHNlcGFyYXRlbHkgZm9yIGVhY2ggaW5vZGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXFx1MDAyNlxcdTAwMjYgIXdiYy1cXHUwMDNlZm9yX3N5bmMpXFxuLVxcdFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xcbi1cXHRcXHRpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7XFxuLVxcdFxcdFxcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcXFwiKTtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0fVxcbi1cXHRcXHRicmVsc2UoaWxvYy5iaCk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XFxuK1xcdFxcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4gXFx0fVxcbitvdXQ6XFxuK1xcdGJyZWxzZShpbG9jLmJoKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLmFlMzNmNWJjYjEzMzE0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xcbkBAIC0xNDMwLDcgKzE0MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2ZWktXFx1MDAzZWlfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZWktXFx1MDAzZWlfZmNfbG9jayk7XFxuLVxcdG1tYl9pbml0KFxcdTAwMjZlaS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlLmlfZGF0YSk7XFxuK1xcdGVpLVxcdTAwM2VpX21ldGFkYXRhX2JocyA9IE5VTEw7XFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiBcXHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTtcXG4gI2VuZGlmXFxuQEAgLTE0NTEsNiArMTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0ZnNjcnlwdF9mcmVlX2lub2RlKGlub2RlKTtcXG4rXFx0a2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNihFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZjX2xpc3QpKSkge1xcbiBcXHRcXHRwcl93YXJuKFxcXCIlczogaW5vZGUgJWxsdSBzdGlsbCBpbiBmYyBsaXN0XFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuQEAgLTE1MjksOSArMTUzMCwxMSBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4gXFxuIHZvaWQgZXh0NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuK1xcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7XFxuK1xcbiBcXHRleHQ0X2ZjX2RlbChpbm9kZSk7XFxuLVxcdGlmICghRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbClcXG4tXFx0XFx0bW1iX2ludmFsaWRhdGUoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0aWYgKG1tYilcXG4rXFx0XFx0bW1iX2ludmFsaWRhdGUobW1iKTtcXG4gXFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbiBcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbiBcXHQvKlxcbkBAIC0xNjA1LDkgKzE2MDgsMTMgQEAgc3RhdGljIGludCBleHQ0X25mc19jb21taXRfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcXG4gXFx0XFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXFxuIFxcdH07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHR0cmFjZV9leHQ0X25mc19jb21taXRfbWV0YWRhdGEoaW5vZGUpO1xcbi1cXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spXFxuK1xcdFxcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfUVVPVEFcXG5AQCAtMTY2NCw2ICsxNjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHtcXG4gXFx0LmZyZWVfaW5vZGVcXHQ9IGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQuZGVzdHJveV9pbm9kZVxcdD0gZXh0NF9kZXN0cm95X2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IGV4dDRfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxcbiBcXHQuZGlydHlfaW5vZGVcXHQ9IGV4dDRfZGlydHlfaW5vZGUsXFxuIFxcdC5kcm9wX2lub2RlXFx0PSBleHQ0X2Ryb3BfaW5vZGUsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gZXh0NF9ldmljdF9pbm9kZSxcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2Rpci5jIGIvZnMvZmF0L2Rpci5jXFxuaW5kZXggYzZjY2E1ZDAwZmZkN2UuLjkxNmY1YzRjZGNmMzkwIDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xcbisrKyBiL2ZzL2ZhdC9kaXIuY1xcbkBAIC0xMDUzLDExICsxMDUzLDcgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKVxcbiBcXHRcXHRcXHRucl9zbG90cy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNk1TRE9TX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LyogcG9zIGlzICpuZXh0KiBkZSdzIHBvc2l0aW9uLCBzbyB0aGlzIGRvZXMgYC0gc2l6ZW9mKGRlKScgKi9cXG4gXFx0XFx0cG9zICs9ICgob3JpZ19zbG90cyAtIG5yX3Nsb3RzKSAqIHNpemVvZigqZGUpKSAtIHNpemVvZigqZGUpO1xcbkBAIC0xMDg4LDExICsxMDg0LDcgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxcbiBcXHRcXHRucl9zbG90cy0tO1xcbiBcXHR9XFxuIFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNk1TRE9TX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdGJyZWxzZShiaCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuIFxcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xcbiBcXG4gXFx0aWYgKG5yX3Nsb3RzKSB7XFxuQEAgLTExMDksMTIgKzExMDEsMTIgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxcbiBcXHR9XFxuIFxcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIE5VTEwsIEZBVF9VUERBVEVfQVRJTUUgfCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdGVyciA9IDA7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuK1xcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9yZW1vdmVfZW50cmllcyk7XFxuIFxcbkBAIC0xMTQ0LDIxICsxMTM2LDExIEBAIHN0YXRpYyBpbnQgZmF0X3plcm9lZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBzZWN0b3JfdCBibGtuciwgaW50IG5yX3VzZWQsXFxuIFxcdFxcdG4rKztcXG4gXFx0XFx0YmxrbnIrKztcXG4gXFx0XFx0aWYgKG4gPT0gbnJfYmhzKSB7XFxuLVxcdFxcdFxcdGlmIChJU19ESVJTWU5DKGRpcikpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKylcXG4gXFx0XFx0XFx0XFx0YnJlbHNlKGJoc1tpXSk7XFxuIFxcdFxcdFxcdG4gPSAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xcbi1cXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0fVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbjsgaSsrKVxcbiBcXHRcXHRicmVsc2UoYmhzW2ldKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZmF0LmhcXG4rKysgYi9mcy9mYXQvZmF0LmhcXG5AQCAtNDIxLDcgKzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTtcXG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpO1xcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZpbGUuYyBiL2ZzL2ZhdC9maWxlLmNcXG5pbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xcbisrKyBiL2ZzL2ZhdC9maWxlLmNcXG5AQCAtMTkwLDggKzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VmYXRfaW5vZGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxwLCBcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzLFxcbi1cXHRcXHRcXHRcXHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XFxuK1xcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTMzMiwxNSArMzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuIFxcdH1cXG4gXFx0TVNET1NfSShpbm9kZSktXFx1MDAzZWlfYXR0cnMgfD0gQVRUUl9BUkNIO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFx0aWYgKHdhaXQpIHtcXG4tXFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9zdGFydCA9IGlfc3RhcnQ7XFxuIFxcdFxcdFxcdE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX2xvZ3N0YXJ0ID0gaV9sb2dzdGFydDtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovXFxuIFxcdGlmIChza2lwKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmNcXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uZTNiYjdiNDcxM2YyYWMgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2lub2RlLmNcXG4rKysgYi9mcy9mYXQvaW5vZGUuY1xcbkBAIC02MjMsNyArNjIzLDM0IEBAIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpO1xcbiBcXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XFxuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcbitzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdGxvZmZfdCBpX3BvcztcXG4rXFx0c2VjdG9yX3QgYmxvY2tucjtcXG4rXFx0aW50IG9mZnNldDtcXG4rXFxuK1xcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xcbitcXHRpZiAoIWlfcG9zKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZhdF9nZXRfYmxrbnJfb2Zmc2V0KHNiaSwgaV9wb3MsIFxcdTAwMjZibG9ja25yLCBcXHUwMDI2b2Zmc2V0KTtcXG4rXFx0YmggPSBzYl9maW5kX2dldF9ibG9ja19ub25hdG9taWMoaW5vZGUtXFx1MDAzZWlfc2IsIGJsb2NrbnIpO1xcbitcXHQvKlxcbitcXHQgKiBCdWZmZXIgcHJlc2VudD8gV2UgbGVhdmUgYnVmZmVyX2RpcnR5IGNoZWNrIGZvciBzeW5jX2RpcnR5X2J1ZmZlcigpXFxuK1xcdCAqIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cXG4rXFx0ICovXFxuK1xcdGlmIChiaCBcXHUwMDI2XFx1MDAyNiBidWZmZXJfdXB0b2RhdGUoYmgpKVxcbitcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBtbWJfc3luYyhcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rfVxcbiBcXG4gc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG5AQCAtNjQwLDcgKzY2Nyw3IEBAIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHQgKiBhbnkgY29ycnVwdGlvbiBvbiB0aGUgbmV4dCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXJcXG4gXFx0XFx0ICogY2hhaW4gZm9yIHRoZSBmaWxlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcXG4rXFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGZhdF9tc2coaW5vZGUtXFx1MDAzZWlfc2IsIEtFUk5fV0FSTklORywgXFxcIkZhaWxlZCB0byBcXFwiXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJ1cGRhdGUgb24gZGlzayBpbm9kZSBmb3IgdW51c2VkIFxcXCJcXG5AQCAtODU0LDcgKzg4MSw3IEBAIHN0YXRpYyBpbnQgZmF0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxcbitzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbiBcXHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xcbkBAIC04NjMsNyArODkwLDcgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XFxuIFxcdGxvZmZfdCBpX3BvcztcXG4gXFx0c2VjdG9yX3QgYmxvY2tucjtcXG4tXFx0aW50IGVyciwgb2Zmc2V0O1xcbitcXHRpbnQgb2Zmc2V0O1xcbiBcXG4gXFx0aWYgKGlub2RlLVxcdTAwM2VpX2lubyA9PSBNU0RPU19ST09UX0lOTylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTkwNywxMSArOTM0LDkgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2c2JpLVxcdTAwM2Vpbm9kZV9oYXNoX2xvY2spO1xcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGVyciA9IDA7XFxuLVxcdGlmICh3YWl0KVxcbi1cXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdGJyZWxzZShiaCk7XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBmYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuQEAgLTkyNSwyMyArOTUwLDE3IEBAIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRcXHRlcnIgPSBmYXRfY2x1c3RlcnNfZmx1c2goc2IpO1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNk1TRE9TX1NCKHNiKS1cXHUwMDNlc19sb2NrKTtcXG4gXFx0fSBlbHNlXFxuLVxcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XFxuK1xcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XFxuLX1cXG4tXFxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcXG4tXFxuIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gZmF0X2FsbG9jX2lub2RlLFxcbiBcXHQuZnJlZV9pbm9kZVxcdD0gZmF0X2ZyZWVfaW5vZGUsXFxuIFxcdC53cml0ZV9pbm9kZVxcdD0gZmF0X3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhLFxcbiBcXHQuZXZpY3RfaW5vZGVcXHQ9IGZhdF9ldmljdF9pbm9kZSxcXG4gXFx0LnB1dF9zdXBlclxcdD0gZmF0X3B1dF9zdXBlcixcXG4gXFx0LnN0YXRmc1xcdFxcdD0gZmF0X3N0YXRmcyxcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmNcXG5pbmRleCAzMDI3ZWY1M2FmMjE0Yy4uYmUxOGY2YjU4MTliYTcgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L21pc2MuY1xcbisrKyBiL2ZzL2ZhdC9taXNjLmNcXG5AQCAtMTQ2LDE2ICsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xcbiBcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9sb2dzdGFydCA9IG5ld19kY2x1cztcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxcbiBcXHRcXHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XFxuLVxcdFxcdFxcdHJldCA9IGZhdF9zeW5jX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0XFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH0gZWxzZVxcbi1cXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0fVxcbiBcXHRpZiAobmV3X2ZjbHVzICE9IChpbm9kZS1cXHUwMDNlaV9ibG9ja3MgXFx1MDAzZVxcdTAwM2UgKHNiaS1cXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XFxuIFxcdFxcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uODY4ZWYwOTEwNDhlNDAgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcXG4rKysgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xcbkBAIC0yNTIsMTIgKzI1MiwxMSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbiBcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4rXFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIC8qKioqKiBDcmVhdGUgYSBmaWxlICovXFxuQEAgLTQ3MywyMSArNDcyLDIwIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXFxuIFxcdFxcdFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgXFx1MDAyNj0gfkFUVFJfSElEREVOO1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XFxuIFxcdFxcdFxcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKSB7XFxuLVxcdFxcdFxcdFxcdGVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgPSBvbGRfYXR0cnM7XFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH0gZWxzZVxcbi1cXHRcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XFxuK1xcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdGlub2RlX2luY19pdmVyc2lvbihvbGRfZGlyKTtcXG4gXFx0XFx0XFx0ZmF0X3RydW5jYXRlX3RpbWUob2xkX2RpciwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xcbiBcXHRcXHRcXHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcXG4tXFx0XFx0XFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC01MTgsMjYgKzUxNiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxcbiBcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgfD0gQVRUUl9ISURERU47XFxuIFxcdGVsc2VcXG4gXFx0XFx0TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX2F0dHJzIFxcdTAwMjY9IH5BVFRSX0hJRERFTjtcXG4tXFx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcXG4tXFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJvcl9pbm9kZTtcXG4tXFx0fSBlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4tXFxuIFxcdGlmICh1cGRhdGVfZG90ZG90KSB7XFxuIFxcdFxcdGZhdF9zZXRfc3RhcnQoZG90ZG90X2RlLCBNU0RPU19JKG5ld19kaXIpLVxcdTAwM2VpX2xvZ3N0YXJ0KTtcXG4gXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGRvdGRvdF9iaCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNk1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xcbi1cXHRcXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4tXFx0XFx0fVxcbiBcXHRcXHRkcm9wX25saW5rKG9sZF9kaXIpO1xcbiBcXHRcXHRpZiAoIW5ld19pbm9kZSlcXG4gXFx0XFx0XFx0aW5jX25saW5rKG5ld19kaXIpO1xcbiBcXHR9XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4rXFx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcXG4rXFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfaW5vZGUsIDEpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4rXFx0fVxcbitcXG4gXFxuIFxcdGVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCBcXHUwMDI2b2xkX3NpbmZvKTtcXHQvKiBhbmQgcmVsZWFzZXMgYmggKi9cXG4gXFx0b2xkX3NpbmZvLmJoID0gTlVMTDtcXG5AQCAtNTQ1LDEwICs1MzgsOSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxcbiBcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4gXFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcXHUwMDI2dHMsIEZBVF9VUERBVEVfQ01USU1FKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKG9sZF9kaXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XFxuK1xcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2RpciwgMSk7XFxuIFxcbiBcXHRpZiAobmV3X2lub2RlKSB7XFxuIFxcdFxcdGRyb3BfbmxpbmsobmV3X2lub2RlKTtcXG5AQCAtNTcxLDE0ICs1NjMsMTUgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNk1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRcXHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XFxuIFxcdH1cXG4tZXJyb3JfaW5vZGU6XFxuIFxcdGZhdF9kZXRhY2gob2xkX2lub2RlKTtcXG4gXFx0ZmF0X2F0dGFjaChvbGRfaW5vZGUsIG9sZF9zaW5mby5pX3Bvcyk7XFxuIFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyA9IG9sZF9hdHRycztcXG4gXFx0aWYgKG5ld19pbm9kZSkge1xcbiBcXHRcXHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcXG4tXFx0XFx0aWYgKGNvcnJ1cHQpXFxuLVxcdFxcdFxcdGNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTtcXG4rXFx0XFx0aWYgKGNvcnJ1cHQpIHtcXG4rXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShuZXdfaW5vZGUpO1xcbitcXHRcXHRcXHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjMwODE1ODg5NWIxZDhhIDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmNcXG4rKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuQEAgLTY3OCwxMCArNjc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxcbiBcXG4gXFx0LyogdXBkYXRlIHRpbWVzdGFtcCAqL1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuK1xcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcXG4gY2xlYW51cDpcXG4gXFx0a2ZyZWUoc2xvdHMpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC05MDQsOSArOTAzLDkgQEAgc3RhdGljIGludCB2ZmF0X2dldF9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsXFxuIFxcbiBzdGF0aWMgaW50IHZmYXRfc3luY19pcG9zKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuLVxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdHJldHVybiBmYXRfc3luY19pbm9kZShpbm9kZSk7XFxuIFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbitcXHRcXHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC05MjEsMTQgKzkyMCwxNCBAQCBzdGF0aWMgaW50IHZmYXRfdXBkYXRlX2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbitzdGF0aWMgaW50IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuIFxcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuK1xcdFxcdHJldHVybiBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5AQCAtOTk2LDcgKzk5NSw3IEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRvbGRfc2luZm8uYmggPSBOVUxMO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4tXFx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFxcdTAwMjZ0cyk7XFxuK1xcdGVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCBcXHUwMDI2dHMpO1xcbiBcXG4gXFx0aWYgKG5ld19pbm9kZSkge1xcbiBcXHRcXHRkcm9wX25saW5rKG5ld19pbm9kZSk7XFxuQEAgLTEwMjQsOCArMTAyMywxMCBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0ZmF0X2F0dGFjaChvbGRfaW5vZGUsIG9sZF9zaW5mby5pX3Bvcyk7XFxuIFxcdGlmIChuZXdfaW5vZGUpIHtcXG4gXFx0XFx0ZmF0X2F0dGFjaChuZXdfaW5vZGUsIG5ld19pX3Bvcyk7XFxuLVxcdFxcdGlmIChjb3JydXB0KVxcbi1cXHRcXHRcXHRjb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7XFxuK1xcdFxcdGlmIChjb3JydXB0KSB7XFxuK1xcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTtcXG4rXFx0XFx0XFx0Y29ycnVwdCB8PSBzeW5jX2lub2RlX21ldGFkYXRhKG5ld19pbm9kZSwgMSk7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxcbkBAIC0xMTIzLDEwICsxMTI0LDEzIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWVfZXhjaGFuZ2Uoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5XFxuIFxcdFxcdFxcdHZmYXRfbW92ZV9ubGluayhuZXdfZGlyLCBvbGRfZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFxcdTAwMjZ0cyk7XFxuK1xcdGVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCBcXHUwMDI2dHMpO1xcbiBcXHQvKiBpZiBkaXJlY3RvcmllcyBhcmUgbm90IHRoZSBzYW1lLCB1cGRhdGUgbmV3X2RpciBhcyB3ZWxsICovXFxuLVxcdGlmIChvbGRfZGlyICE9IG5ld19kaXIpXFxuLVxcdFxcdHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCBcXHUwMDI2dHMpO1xcbitcXHRpZiAob2xkX2RpciAhPSBuZXdfZGlyKSB7XFxuK1xcdFxcdGludCBlcnIyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG5ld19kaXIsIFxcdTAwMjZ0cyk7XFxuK1xcdFxcdGlmICghZXJyKVxcbitcXHRcXHRcXHRlcnIgPSBlcnIyO1xcbitcXHR9XFxuIFxcbiBvdXQ6XFxuIFxcdGJyZWxzZShvbGRfZG90ZG90X2JoKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xcbmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDRcXG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXFxuQEAgLTE4NTEsNiArMTg1MSwyMiBAQCBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0XFx0cmV0ID0gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxcbitcXHQgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrP1xcbitcXHQgKi9cXG4rXFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFxcdTAwMjZcXHUwMDI2ICF3YmMtXFx1MDAzZWZvcl9zeW5jIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdFxcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4rXFx0XFx0ZXJyID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIHdiYyk7XFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuIFxcdHdiYy1cXHUwMDNldW5waW5uZWRfbmV0ZnNfd2IgPSBmYWxzZTtcXG4gXFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE4OTIsMTQgKzE5MDgsMTcgQEAgc3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkby5cXG4gXFx0ICpcXG4tXFx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcXG4tXFx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcXG4tXFx0ICogdGhlcmUgYXJlIGFueSBzdWNoIHBhZ2VzLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuK1xcdCAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yXFxuK1xcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxcbitcXHQgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuIFxcdCAqL1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHdiYy1cXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XFxuLVxcdCAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSkge1xcbitcXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRpZiAoIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX1NZTkMpO1xcbiBcXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi4yN2Q3ZGMxNmZjYjBhMCAxMDA2NDRcXG4tLS0gYS9mcy9saWJmcy5jXFxuKysrIGIvZnMvbGliZnMuY1xcbkBAIC0xNTU5LDkgKzE1NTksMTIgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjZcXG4rXFx0XFx0XFx0KElfRElSVFlfQUxMIHwgSV9TWU5DIHwgSV9NRVRBREFUQV9XUklURUJBQ0spKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdGlmIChkYXRhc3luYyBcXHUwMDI2XFx1MDAyNiAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcXG4rXFx0aWYgKGRhdGFzeW5jIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXFx1MDAyNlxcbitcXHRcXHRcXHQoSV9ESVJUWV9EQVRBU1lOQyB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmNcXG5pbmRleCAzNjFkMjZkODdkMmUyZC4uMmNhMTZmODQ5ZDVhYzAgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvZGlyLmNcXG4rKysgYi9mcy9taW5peC9kaXIuY1xcbkBAIC0yMyw3ICsyMyw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIFxcdC5yZWFkXFx0XFx0PSBnZW5lcmljX3JlYWRfZGlyLFxcbiBcXHQuaXRlcmF0ZV9zaGFyZWRcXHQ9IG1pbml4X3JlYWRkaXIsXFxuLVxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiB9O1xcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXFxuaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xMCwxMyArMTAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIm1pbml4LmhcXFwiXFxuIFxcbi1pbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxcbi17XFxuLVxcdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcXG4tXFx0XFx0XFx0XFx1MDAyNm1pbml4X2koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gLypcXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cXG5AQCAtMjYsNyArMTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnJlYWRfaXRlclxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4gXFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbiBcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IG1pbml4X2ZzeW5jLFxcbitcXHQuZnN5bmNcXHRcXHQ9IHNpbXBsZV9mc3luYyxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmNcXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uZGFmODNlNGZmMjVjODEgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xcbisrKyBiL2ZzL21pbml4L2lub2RlLmNcXG5AQCAtMjQsNiArMjQsOCBAQFxcbiBcXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuK3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4gc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKTtcXG4gXFxuIHZvaWQgX19taW5peF9lcnJvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jdGlvbixcXG5AQCAtMTI4LDYgKzEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtaW5peF9zb3BzID0ge1xcbiBcXHQuYWxsb2NfaW5vZGVcXHQ9IG1pbml4X2FsbG9jX2lub2RlLFxcbiBcXHQuZnJlZV9pbm9kZVxcdD0gbWluaXhfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IG1pbml4X3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gbWluaXhfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IG1pbml4X3B1dF9zdXBlcixcXG4gXFx0LnN0YXRmc1xcdFxcdD0gbWluaXhfc3RhdGZzLFxcbkBAIC02MzAsNyArNjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbiAvKlxcbiAgKiBUaGUgbWluaXggVjEgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbitzdGF0aWMgaW50IFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcXG4gXFx0c3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlO1xcbkBAIC02MzksNyArNjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFxuIFxcdHJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbiBcXHRpZiAoIXJhd19pbm9kZSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfbW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XFxuQEAgLTY1MSwxMyArNjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdGVsc2UgZm9yIChpID0gMDsgaSBcXHUwMDNjIDk7IGkrKylcXG4gXFx0XFx0cmF3X2lub2RlLVxcdTAwM2VpX3pvbmVbaV0gPSBtaW5peF9pbm9kZS1cXHUwMDNldS5pMV9kYXRhW2ldO1xcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdHJldHVybiBiaDtcXG4rXFx0YnJlbHNlKGJoKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbiAgKiBUaGUgbWluaXggVjIgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbitzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcXG4gXFx0c3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTtcXG5AQCAtNjY2LDcgKzY3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcbiBcXHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4gXFx0aWYgKCFyYXdfaW5vZGUpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0cmF3X2lub2RlLVxcdTAwM2VpX21vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xcbkBAIC02ODAsMjkgKzY4NSw0MiBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHRlbHNlIGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDsgaSsrKVxcbiBcXHRcXHRyYXdfaW5vZGUtXFx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVxcdTAwM2V1LmkyX2RhdGFbaV07XFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0cmV0dXJuIGJoO1xcbitcXHRicmVsc2UoYmgpO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3tcXG4rXFx0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxcbitcXHRcXHRyZXR1cm4gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcXG4rXFx0cmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbitcXHR2b2lkICpyYXdfaW5vZGU7XFxuIFxcbiBcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuLVxcdFxcdGJoID0gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sIFxcdTAwMjZiaCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0YmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xcbi1cXHRpZiAoIWJoKVxcbitcXHRcXHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4rXFx0aWYgKCFyYXdfaW5vZGUpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXFx1MDAyNlxcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbi1cXHRcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlPO1xcbi1cXHRcXHR9XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZtaW5peF9pKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHR9XFxuLVxcdGJyZWxzZSAoYmgpO1xcbitvdXQ6XFxuK1xcdGJyZWxzZShiaCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9kaXIuYyBiL2ZzL3VkZi9kaXIuY1xcbmluZGV4IGViYzlmNmEzNzlmZTNhLi40MjVlM2MxNjI5MzUwNCAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvZGlyLmNcXG4rKysgYi9mcy91ZGYvZGlyLmNcXG5AQCAtMTU3LDYgKzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0ge1xcbiBcXHQucmVhZFxcdFxcdFxcdD0gZ2VuZXJpY19yZWFkX2RpcixcXG4gXFx0Lml0ZXJhdGVfc2hhcmVkXFx0XFx0PSB1ZGZfcmVhZGRpcixcXG4gXFx0LnVubG9ja2VkX2lvY3RsXFx0XFx0PSB1ZGZfaW9jdGwsXFxuLVxcdC5mc3luY1xcdFxcdFxcdD0gdWRmX2ZzeW5jLFxcbitcXHQuZnN5bmNcXHRcXHRcXHQ9IHNpbXBsZV9mc3luYyxcXG4gXFx0LnNldGxlYXNlXFx0XFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuY1xcbmluZGV4IGY3ZjE0MjJkZTMwZmE0Li41N2QxMTYwNmEyYTc3NiAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvZmlsZS5jXFxuKysrIGIvZnMvdWRmL2ZpbGUuY1xcbkBAIC0xOTgsMTMgKzE5OCw2IEBAIHN0YXRpYyBpbnQgdWRmX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcXG4te1xcbi1cXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXFxuLVxcdFxcdFxcdFxcdTAwMjZVREZfSShmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi19XFxuLVxcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuIFxcdC51bmxvY2tlZF9pb2N0bFxcdFxcdD0gdWRmX2lvY3RsLFxcbkBAIC0yMTIsNyArMjA1LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xcbiBcXHQubW1hcFxcdFxcdFxcdD0gdWRmX2ZpbGVfbW1hcCxcXG4gXFx0LndyaXRlX2l0ZXJcXHRcXHQ9IHVkZl9maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5yZWxlYXNlXFx0XFx0PSB1ZGZfcmVsZWFzZV9maWxlLFxcbi1cXHQuZnN5bmNcXHRcXHRcXHQ9IHVkZl9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5zcGxpY2VfcmVhZFxcdFxcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcXG4gXFx0LnNwbGljZV93cml0ZVxcdFxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gXFx0Lmxsc2Vla1xcdFxcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5AQCAtMjUzLDYgKzI0Niw4IEBAIHN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFxuIFxcdHNldGF0dHJfY29weShcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcXG5pbmRleCA2N2JjZjgzNzU4YzhmYi4uNjhjNmMyYmE4ZWQxYTIgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL2lub2RlLmNcXG4rKysgYi9mcy91ZGYvaW5vZGUuY1xcbkBAIC01MSw4ICs1MSw2IEBAXFxuIHN0cnVjdCB1ZGZfbWFwX3JxO1xcbiBcXG4gc3RhdGljIHVtb2RlX3QgdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoc3RydWN0IGZpbGVFbnRyeSAqKTtcXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpO1xcbiBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKTtcXG4gc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sXFxuQEAgLTE0Miw3ICsxNDAsNyBAQCB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRpZiAoIWlub2RlLVxcdTAwM2VpX25saW5rKSB7XFxuIFxcdFxcdFxcdHdhbnRfZGVsZXRlID0gMTtcXG4gXFx0XFx0XFx0dWRmX3NldHNpemUoaW5vZGUsIDApO1xcbi1cXHRcXHRcXHR1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7XFxuK1xcdFxcdFxcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoaWluZm8tXFx1MDAzZWlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGlub2RlLVxcdTAwM2VpX3NpemUgIT0gaWluZm8tXFx1MDAzZWlfbGVuRXh0ZW50cykge1xcbkBAIC05MzYsMTAgKzkzNCw3IEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApXFxuIFxcdGlpbmZvLVxcdTAwM2VpX25leHRfYWxsb2NfZ29hbCA9IG5ld2Jsb2NrbnVtICsgMTtcXG4gXFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xcbiBcXG4tXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbi1cXHRcXHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRyZXQgPSAwO1xcbiBvdXRfZnJlZTpcXG4gXFx0YnJlbHNlKHByZXZfZXBvcy5iaCk7XFxuQEAgLTEzMjYsMTAgKzEzMjEsNyBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXFxuIFxcdH1cXG4gdXBkYXRlX3RpbWU6XFxuIFxcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcXG4tXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbi1cXHRcXHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xNzA1LDE0ICsxNjk3LDI4IEBAIHZvaWQgdWRmX3VwZGF0ZV9leHRyYV9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90IG1vZGUpXFxuIFxcdFxcdGlpbmZvLVxcdTAwM2VpX2V4dHJhUGVybXMgfD0gRkVfUEVSTV9PX0RFTEVURTtcXG4gfVxcbiBcXG4taW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4raW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuLVxcdHJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XFxuLX1cXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpO1xcbitcXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0dWRmX2dldF9sYl9wYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNlVERl9JKGlub2RlKS1cXHUwMDNlaV9sb2NhdGlvbiwgMCkpO1xcbitcXHRpZiAoIWJoKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4rXFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4rXFx0XFx0dWRmX3dhcm4oaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGlub2RlLVxcdTAwM2VpX2lubyk7XFxuK1xcdFxcdGVyciA9IC1FSU87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZVREZfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rb3V0OlxcbitcXHRicmVsc2UoYmgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZSlcXG5AQCAtMTcyMyw3ICsxNzI5LDcgQEAgc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWVcXG4gXFx0XFx0aWluZm8tXFx1MDAzZWlfY3J0aW1lID0gdGltZTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbitpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmlsZUVudHJ5ICpmZTtcXG5AQCAtMTczMiw3ICsxNzM4LDYgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbiBcXHR1aW50MzJfdCB1ZGZwZXJtcztcXG4gXFx0dWludDE2X3QgaWNiZmxhZ3M7XFxuIFxcdHVpbnQxNl90IGNyY2xlbjtcXG4tXFx0aW50IGVyciA9IDA7XFxuIFxcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbiBcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbkBAIC0xOTM3LDE3ICsxOTQyLDEwIEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcXG4gXFxuIFxcdC8qIHdyaXRlIHRoZSBkYXRhIGJsb2NrcyAqL1xcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGlmIChkb19zeW5jKSB7XFxuLVxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4tXFx0XFx0XFx0dWRmX3dhcm4oaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdFxcdFxcdGVyciA9IC1FSU87XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXHRicmVsc2UoYmgpO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmNcXG5pbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL3N1cGVyLmNcXG4rKysgYi9mcy91ZGYvc3VwZXIuY1xcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVkZl9zYl9vcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gdWRmX2FsbG9jX2lub2RlLFxcbiBcXHQuZnJlZV9pbm9kZVxcdD0gdWRmX2ZyZWVfaW5fY29yZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSB1ZGZfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gdWRmX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSB1ZGZfcHV0X3N1cGVyLFxcbiBcXHQuc3luY19mc1xcdD0gdWRmX3N5bmNfZnMsXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oXFxuaW5kZXggNmQ5NTFlMDVjMDA0NmEuLjg2ZGMyZDZhMmVmMWI4IDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi91ZGZkZWNsLmhcXG4rKysgYi9mcy91ZGYvdWRmZGVjbC5oXFxuQEAgLTEzNyw3ICsxMzcsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZGZfZGlyX2VudHJ5X2xlbihzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqY2ZpKVxcbiBcXG4gLyogZmlsZS5jICovXFxuIGV4dGVybiBsb25nIHVkZl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7XFxuIFxcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLFxcbkBAIC0xNTgsNiArMTU3LDcgQEAgZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX2JyZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVkZl9wYmxrX3QgYmxvY2ssXFxuIGV4dGVybiBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICosIGxvZmZfdCk7XFxuIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuIGV4dGVybiBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuK2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBleHRlcm4gaW50IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywgc3RydWN0IGtlcm5lbF9sYl9hZGRyICplbG9jLFxcbiBcXHRcXHQgICAgICB1aW50MzJfdCAqZWxlbiwgc2VjdG9yX3QgKm9mZnNldCwgaW50OF90ICpldHlwZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbmluZGV4IDhiMjNiYzlhMjQ0Y2IzLi5mZDJjNzExNWMwNTQyNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG5AQCAtMjEwLDEwICsyMTAsNiBAQCB2b2lkIGJoX2VuZF9hc3luY193cml0ZShzdHJ1Y3QgYmlvICpiaW8pO1xcbiBcXG4gLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovXFxuIHZvaWQgbW1iX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKTtcXG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcXG4tXFx0XFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcXG4taW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXFxuLVxcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XFxuIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxcbiBcXHRcXHRcXHRzZWN0b3JfdCBsZW4pO1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5fYmRldl9iaF9hbGlhcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uNzI5ZTNjYjg5ZTM4NGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuQEAgLTc0MCw3ICs3NDAsOCBAQCBlbnVtIGlub2RlX3N0YXRlX2ZsYWdzX2VudW0ge1xcbiBcXHRJX0NSRUFUSU5HXFx0XFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTUpLFxcbiBcXHRJX0RPTlRDQUNIRVxcdFxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE2KSxcXG4gXFx0SV9TWU5DX1FVRVVFRFxcdFxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE3KSxcXG4tXFx0SV9QSU5OSU5HX05FVEZTX1dCXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTgpXFxuK1xcdElfUElOTklOR19ORVRGU19XQlxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE4KSxcXG4rXFx0SV9NRVRBREFUQV9XUklURUJBQ0tcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAxOSksXFxuIH07XFxuIFxcbiAjZGVmaW5lIElfRElSVFlfSU5PREUgKElfRElSVFlfU1lOQyB8IElfRElSVFlfREFUQVNZTkMpXFxuQEAgLTIyMTMsNiArMjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdF9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9TWU5DKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbit9XFxuK1xcbiAvKlxcbiAgKiByZXR1cm5zIHRoZSByZWZjb3VudCBvbiB0aGUgaW5vZGUuIGl0IGNhbiBjaGFuZ2UgYXJiaXRyYXJpbHkuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG5pbmRleCBlZjc5NDFlOWRjNzlhYy4uMTcwNTYxZThmMmUyYzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuQEAgLTg2LDYgKzg2LDggQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMge1xcbiBcXHR2b2lkICgqZnJlZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIFxcdHZvaWQgKCpkaXJ0eV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKTtcXG4gXFx0aW50ICgqd3JpdGVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4rXFx0aW50ICgqc3luY19pbm9kZV9tZXRhZGF0YSkoc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBcXHRpbnQgKCpkcm9wX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFx0dm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFx0dm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjMyOjAzLjU5MjQzMDExMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1Nzc0NDE2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIixcbiAgICBcIk1JTklYX0ZTXCIsXG4gICAgXCJVREZfRlNcIixcbiAgICBcIkJGU19GU1wiLFxuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwid3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwiZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImZhdF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJ1ZGZfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcInNpbXBsZV9mc3luY19ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgc3luY19pbm9kZV9tZXRhZGF0YWAgY2FsbGJhY2sgaW4gYHN1cGVyX29wZXJhdGlvbnNgIGFuZCBtb2RpZmllcyB0aGUgVkZTIHdyaXRlYmFjayBsb2dpYyB0byBoYW5kbGUgYSBuZXcgYElfTUVUQURBVEFfV1JJVEVCQUNLYCBmbGFnLiBJdCBpbXBsZW1lbnRzIHRoaXMgY2FsbGJhY2sgZm9yIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzKSBhbmQgcmVmYWN0b3JzIHRoZWlyIG1ldGFkYXRhIHN5bmNocm9uaXphdGlvbiBsb2dpYywgcmVwbGFjaW5nIGBtbWJfZnN5bmNgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBWRlMgd3JpdGViYWNrIGFuZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGhhbmRsaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljYjUzYThkNTk2M2ZkMWU2NWJjZTllYTJmNWE2M2FkYzgzMzI5YmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDozMjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcbmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5hN2ZhYTkxZGVlZDVhYyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxuQEAgLTQ0LDcgKzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgKzE1MSw2IEBAIGV4dGVybiBib29sXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBpbnRcdGFmZnNfY2hlY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuLFxuIFx0XHRcdFx0Ym9vbCBub3RydW5jYXRlKTtcbiBleHRlcm4gaW50XHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqYWZmc19nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qIGJpdG1hcC4gYyAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYW1pZ2FmZnMuYyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jXG4rKysgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cdTAwM2VoYXNoX2NoYWluID0gY3B1X3RvX2JlMzIoaW5vKTtcbiBcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGRpcl9iaCwgaW5vKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFx1MDAyNkFGRlNfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgKzEwMCw3IEBAIGFmZnNfcmVtb3ZlX2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVtX2JoKVxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBpbm87XG4gXHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgcmVtX2JoKS1cdTAwM2VwYXJlbnQgPSAwO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGxpbmtfYmgpO1xuIFxuIFx0XHRtZW1jcHkoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VuYW1lLCAzMik7XG4gXHRcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XG5AQCAtMTg4LDcgKzE4OCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgKzIwMyw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VsaW5rX2NoYWluO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8yKSAtIGxpbmtfaW5vKTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0XHRyZXR2YWwgPSAwO1xuIFx0XHRcdC8qIEZpeCB0aGUgbGluayBjb3VudCwgaWYgYmggaXMgYSBub3JtYWwgaGVhZGVyIGJsb2NrIHdpdGhvdXQgbGlua3MgKi9cbiBcdFx0XHRzd2l0Y2ggKGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZXN0eXBlKSkge1xuQEAgLTMwNiw3ICszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuY1xuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjIzZTA4OGE3ZWQ0ZmIzIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcbisrKyBiL2ZzL2FmZnMvZmlsZS5jXG5AQCAtMTQwLDE0ICsxNDAsMTQgQEAgYWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxuIFx0QUZGU19UQUlMKHNiLCBuZXdfYmgpLVx1MDAzZXBhcmVudCA9IGNwdV90b19iZTMyKGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBuZXdfYmgpO1xuIFxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCJhbGxvY19leHRcIiwgXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcIiwgdG1wKTtcbiBcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWV4dGVuc2lvbiA9IGNwdV90b19iZTMyKGJsb2NrbnIpO1xuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJsb2NrbnIgLSB0bXApO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdEFGRlNfSShpbm9kZSktXHUwMDNlaV9leHRjbnQrKztcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuQEAgLTU4MSw3ICs1ODEsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0bWVtc2V0KEFGRlNfREFUQShiaCkgKyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0c2l6ZSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbiBcdH0gZWxzZSBpZiAoYmlkeCkge1xuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuIFx0XHRiaC1cdTAwM2ViX3N0YXRlIFx1MDAyNj0gfigxVUwgXHUwMDNjXHUwMDNjIEJIX05ldyk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCArNjEzLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4gXHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkocHJldl9iaCk7XG4gXHRcdFx0YWZmc19icmVsc2UocHJldl9iaCk7XG4gXHRcdH1cbiBcdFx0c2l6ZSArPSBic2l6ZTtcbkBAIC03MzMsNyArNzMyLDcgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKFxuIFx0XHRcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkpKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IHRtcDtcbiBcdFx0ZnJvbSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbkBAIC03NjYsMTMgKzc2NSwxMiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0XHRcdFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XG4gXHRcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxuLVx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IGJzaXplO1xuIFx0XHRmcm9tICs9IGJzaXplO1xuIFx0XHRiaWR4Kys7XG5AQCAtODAxLDE0ICs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIGlmIChiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkgXHUwMDNjIHRtcClcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHdyaXR0ZW4gKz0gdG1wO1xuIFx0XHRmcm9tICs9IHRtcDtcbiBcdFx0YmlkeCsrO1xuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXHRBRkZTX1RBSUwoc2IsIGV4dF9iaCktXHUwMDNlZXh0ZW5zaW9uID0gMDtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBleHRfYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgpO1xuIFx0YWZmc19icmVsc2UoZXh0X2JoKTtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmNcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvaW5vZGUuY1xuKysrIGIvZnMvYWZmcy9pbm9kZS5jXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdHJldHVybiAwO1xuQEAgLTI2NiwxMSArMjY2LDggQEAgYWZmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4gXHR9XG4gXG4tXHRtbWJfaW52YWxpZGF0ZShcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRjYWNoZV9wYWdlID0gKHVuc2lnbmVkIGxvbmcpQUZGU19JKGlub2RlKS1cdTAwM2VpX2xjO1xuQEAgLTMwNSw3ICszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXG4gXHRpbm9kZS1cdTAwM2VpX3VpZCAgICAgPSBjdXJyZW50X2ZzdWlkKCk7XG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcbiBcdFx0QUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbGlua19jaGFpbiA9IGNoYWluO1xuIFx0XHRBRkZTX1RBSUwoc2IsIGlub2RlX2JoKS1cdTAwM2VsaW5rX2NoYWluID0gY3B1X3RvX2JlMzIoYmxvY2spO1xuIFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShpbm9kZV9iaCwgYmxvY2sgLSBiZTMyX3RvX2NwdShjaGFpbikpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gKHZvaWQgKikobG9uZyliaC1cdTAwM2ViX2Jsb2NrbnI7XG4gXG4gXHRhZmZzX2xvY2tfZGlyKGRpcik7XG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSArIDE7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXG5AQCAtNDQzLDggKzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG9sZF9kaXIsIGJoX25ldyk7XG4gXHRhZmZzX3VubG9ja19kaXIob2xkX2Rpcik7XG4gZG9uZTpcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShuZXdfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCBcdTAwMjZBRkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoX25ldyk7XG4gXHRhZmZzX2JyZWxzZShiaF9vbGQpO1xuIFx0YWZmc19icmVsc2UoYmhfbmV3KTtcbiBcdHJldHVybiByZXR2YWw7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXG5pbmRleCBiMjMyMjUxYWE3YmJkMC4uMGFkNTEyN2U5ZmI4ZWUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL3N1cGVyLmNcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpLVx1MDAzZWlfbGMgPSBOVUxMO1xuIFx0aS1cdTAwM2VpX2V4dF9iaCA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfcGFfY250ID0gMDtcbi1cdG1tYl9pbml0KFx1MDAyNmktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmktXHUwMDNldmZzX2lub2RlLmlfZGF0YSk7XG4gXG4gXHRyZXR1cm4gXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGU7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgYi9mcy9iZnMvZGlyLmNcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXG5pbmRleCBlNDFlZmRkMzVkYjllZi4uY2FjYzdlZmY5YzMzY2UgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvaW5vZGUuY1xuKysrIGIvZnMvYmZzL2lub2RlLmNcbkBAIC0xMzYsNyArMTM2LDYgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xuIFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0aW50IGVyciA9IDA7XG4gXG4gXHRkcHJpbnRmKFwiaW5vPSUwOHhcXG5cIiwgaW5vKTtcbiBcbkBAIC0xNjUsMTMgKzE2NCwzMSBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdGRpLVx1MDAzZWlfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcbitcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuK1x0aWYgKElTX0VSUihkaSkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbitcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGJmc19zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGJmc19ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gYmZzX3B1dF9zdXBlcixcbiBcdC5zdGF0ZnNcdFx0PSBiZnNfc3RhdGZzLFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDlhZjVmMDYxYTFmODVhLi5iZThiNTdhNjM1Y2Q4MiAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4rKysgYi9mcy9idWZmZXIuY1xuQEAgLTYyOCw3OSArNjI4LDYgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG1tYl9zeW5jKTtcbiBcbi0vKipcbi0gKiBtbWJfZnN5bmNfbm9mbHVzaCAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aFxuLSAqIFx0XHQgICAgICAgbWV0YWRhdGEgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLlxuLSAqL1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCBlcnI7XG4tXHRpbnQgcmV0ID0gMDtcbi1cbi1cdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKG1tYilcbi1cdFx0cmV0ID0gbW1iX3N5bmMobW1iKTtcbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cbi1vdXQ6XG4tXHQvKiBjaGVjayBhbmQgYWR2YW5jZSBhZ2FpbiB0byBjYXRjaCBlcnJvcnMgYWZ0ZXIgc3luY2luZyBvdXQgYnVmZmVycyAqL1xuLVx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xuLVxuLS8qKlxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxuLSAqIFx0ICAgICAgIGJ1ZmZlcnMgbGlzdFxuLSAqXG4tICogQGZpbGU6XHRmaWxlIHRvIHN5bmNocm9uaXplXG4tICogQG1tYjpcdGxpc3Qgb2YgbWV0YWRhdGEgYmhzIHRvIGZsdXNoXG4tICogQHN0YXJ0Olx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXG4tICogQGVuZDpcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcbi0gKiBAZGF0YXN5bmM6XHRvbmx5IHN5bmNocm9uaXplIGVzc2VudGlhbCBtZXRhZGF0YSBpZiB0cnVlXG4tICpcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxuLSAqIHRyYWNrIGFsbCBub24taW5vZGUgbWV0YWRhdGEgaW4gdGhlIGJ1ZmZlcnMgbGlzdCBoYW5naW5nIG9mZiB0aGUgQG1tYlxuLSAqIHN0cnVjdHVyZS4gVGhpcyBhbHNvIG1ha2VzIHN1cmUgdGhhdCBhIGRldmljZSBjYWNoZSBmbHVzaCBvcGVyYXRpb24gaXNcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cbi0gKi9cbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBtbWIsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmMpO1xuLVxuIC8qXG4gICogQ2FsbGVkIHdoZW4gd2UndmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJywgYW5kIGl0IGlzIGtub3duIHRoYXRcbiAgKiBgYmJsb2NrJyB3YXMgZm9yIGEgYnVmZmVyX2JvdW5kYXJ5KCkgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBibG9jayBhdFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbitcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xuK1xuIFx0c2V0X2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHQvKiBGSVhNRTogZG8gd2UgbmVlZCB0byBzZXQgdGhpcyBpbiBib3RoIHBsYWNlcz8gKi9cbiBcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBiaC1cdTAwM2ViX2ZvbGlvLVx1MDAzZW1hcHBpbmcpXG4gXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZywgLUVJTyk7XG4tXHRpZiAoYmgtXHUwMDNlYl9tbWIpXG4tXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfbW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtbWIgPSBSRUFEX09OQ0UoYmgtXHUwMDNlYl9tbWIpO1xuK1x0aWYgKG1tYilcbitcdFx0bWFwcGluZ19zZXRfZXJyb3IobW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZGlyLmMgYi9mcy9leHQyL2Rpci5jXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2Rpci5jXG4rKysgYi9mcy9leHQyL2Rpci5jXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4rXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcbmluZGV4IDc5ZjdiMzk1MjU4YzJhLi41NjQyNDUxYmYxOTE3MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZXh0Mi5oXG4rKysgYi9mcy9leHQyL2V4dDIuaFxuQEAgLTczNSw2ICs3MzUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBleHQyX2NvdW50X2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCk7XG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xuIGV4dGVybiBpbnQgZXh0Ml93cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcbitleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGlyX29wZXJhdGlvbnM7XG4gXG4gLyogZmlsZS5jICovXG4tZXh0ZXJuIGludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgIGludCBkYXRhc3luYyk7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZmlsZS5jIGIvZnMvZXh0Mi9maWxlLmNcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZmlsZS5jXG4rKysgYi9mcy9leHQyL2ZpbGUuY1xuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdGludCByZXQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKHJldCA9PSAtRUlPKVxuLVx0XHQvKiBXZSBkb24ndCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCJkZXRlY3RlZCBJTyBlcnJvciB3aGVuIHdyaXRpbmcgbWV0YWRhdGEgYnVmZmVyc1wiKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5AQCAtMjEzLDcgKzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhID0gdGhwX2dldF91bm1hcHBlZF9hcmVhLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uOTlhY2Q3OWE0YWYyNzIgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2lub2RlLmNcbisrKyBiL2ZzL2V4dDIvaW5vZGUuY1xuQEAgLTM5LDggKzM5LDYgQEBcbiAjaW5jbHVkZSBcImFjbC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04Nyw3ICs4NSw3IEBAIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdFx0Lyogc2V0IGR0aW1lICovXG4gXHRcdEVYVDJfSShpbm9kZSktXHUwMDNlaV9kdGltZVx0PSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XG4gXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0XHRfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuIFx0XHQvKiB0cnVuY2F0ZSB0byAwICovXG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGlmIChpbm9kZS1cdTAwM2VpX2Jsb2NrcylcbkBAIC0xMjU4LDEyICsxMjU2LDkgQEAgc3RhdGljIGludCBleHQyX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdGlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSlcbiBcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbi1cdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNDY5LDcgKzE0NjQsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbkBAIC0xNTYwLDIyICsxNTU1LDMzIEBAIHN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFx0fSBlbHNlIGZvciAobiA9IDA7IG4gXHUwMDNjIEVYVDJfTl9CTE9DS1M7IG4rKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfYmxvY2tbbl0gPSBlaS1cdTAwM2VpX2RhdGFbbl07XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsgKFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cIixcbi1cdFx0XHRcdHNiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGVpLVx1MDAzZWlfc3RhdGUgXHUwMDI2PSB+RVhUMl9TVEFURV9ORVc7XG4gXHRicmVsc2UgKGJoKTtcbitcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4raW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4rXHRzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2YmgpO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoSVNfRVJSKHJhd19pbm9kZSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdHByaW50ayhcIklPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXFxuXCIsXG4rXHRcdCAgICAgICBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLVx1MDAzZWlfaW5vKTtcbitcdFx0ZXJyID0gLUVJTztcbitcdH1cbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gaW50IGV4dDJfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jXG5pbmRleCAzOTk5ZjhmM2IxNTZlMy4uYTQwZjUzMDg3MmE0MDcgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL3N1cGVyLmNcbisrKyBiL2ZzL2V4dDIvc3VwZXIuY1xuQEAgLTM2Miw2ICszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQyX3dyaXRlX2lub2RlLFxuK1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0Ml9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gZXh0Ml9wdXRfc3VwZXIsXG4gXHQuc3luY19mc1x0PSBleHQyX3N5bmNfZnMsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jXG5pbmRleCBlNTVkMTZhYmY0MjJmNC4uYmU2M2Y4OTQwMmEzODEgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL3hhdHRyLmNcbisrKyBiL2ZzL2V4dDIveGF0dHIuY1xuQEAgLTc3Nyw2ICs3NzcsNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4gXHQvKiBVcGRhdGUgdGhlIGlub2RlLiAqL1xuIFx0RVhUMl9JKGlub2RlKS1cdTAwM2VpX2ZpbGVfYWNsID0gbmV3X2JoID8gbmV3X2JoLVx1MDAzZWJfYmxvY2tuciA6IDA7XG4gXHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdGlmIChJU19TWU5DKGlub2RlKSkge1xuIFx0XHRlcnJvciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHQvKiBJbiBjYXNlIHN5bmMgZmFpbGVkIGR1ZSB0byBFTk9TUEMgdGhlIGlub2RlIHdhcyBhY3R1YWxseVxuQEAgLTc4OSw4ICs3OTAsNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4gXHRcdFx0fVxuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0fSBlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuIFxuIFx0ZXJyb3IgPSAwO1xuIFx0aWYgKG9sZF9iaCBcdTAwMjZcdTAwMjYgb2xkX2JoICE9IG5ld19iaCkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi4wZjA2MTU1YTM1YTY5NCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTExNTEsNyArMTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZSBpX2RhdGFfc2VtO1xuIFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbiBcdHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7XG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzO1xuIFxuIFx0LypcbiBcdCAqIEZpbGUgY3JlYXRpb24gdGltZS4gSXRzIGZ1bmN0aW9uIGlzIHNhbWUgYXMgdGhhdCBvZlxuQEAgLTIxMjYsNiArMjEyNiwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQhbGlzdF9lbXB0eShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfb3JwaGFuKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmV4dDRfaV9tZXRhZGF0YV9iaHMoXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdC8qXG4rXHQgKiBpX21ldGFkYXRhX2JocyBpcyBzZXQgaW4gZXh0NF9pbm9kZV9hdHRhY2hfbW1iKCkgdXNpbmcgY21weGNoZygpLlxuK1x0ICogV2UgdXNlIFJFQURfT05DRSB3aGVuIGFjY2Vzc2luZyBpX21ldGFkYXRhX2JocyB0byBtYWtlIHN1cmUgd2UgZ2V0XG4rXHQgKiBjb25zaXN0ZW50IHZpZXcgZm9yIGFsbCBhY2Nlc3Nlcy5cbitcdCAqL1xuK1x0cmV0dXJuIFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbit9XG4rXG4gLypcbiAgKiBDb2RlcyBmb3Igb3BlcmF0aW5nIHN5c3RlbXNcbiAgKi9cbkBAIC0zMTU1LDYgKzMxNjYsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdF9fZXh0NF9pZ2V0KChzYiksIChpbm8pLCAoZmxhZ3MpLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4gZXh0ZXJuIGludCAgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuK2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjNiMmY4YWMyMGJmODViIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcbitcdC8qXG4rXHQgKiBJdCdzIGRpZmZpY3VsdCB0byBoYW5kbGUgZmFpbHVyZSB3aGVuIG1hcmtpbmcgYnVmZmVyIGRpcnR5IHdpdGhvdXRcbitcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbitcdCAqL1xuK1x0bW1iID0ga21hbGxvY19vYmooKm1tYiwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xuK1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuK1x0LyogU29tZW9uZSBzd2FwcGVkIGFub3RoZXIgbW1iIGJlZm9yZSB1cz8gKi9cbitcdGlmIChjbXB4Y2hnKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpXG4rXHRcdGtmcmVlKG1tYik7XG4rfVxuK1xuIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdFx0XHRcdCBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG5AQCAtMzg5LDExICs0MDQsMTMgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbitcdFx0aWYgKGlub2RlKSB7XG4rXHRcdFx0aWYgKCFleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKSlcbitcdFx0XHRcdGV4dDRfaW5vZGVfYXR0YWNoX21tYihpbm9kZSk7XG4rXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKSk7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuK1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4rKysgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICs2OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX3BhcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQgKiB0aHJvdWdoIGV4dDRfZXZpY3RfaW5vZGUoKSkgYW5kIHNvIHdlIGFyZSBzYWZlIHRvIGZsdXNoXG4gXHRcdCAqIG1ldGFkYXRhIGJsb2NrcyBhbmQgdGhlIGlub2RlLlxuIFx0XHQgKi9cbi1cdFx0cmV0ID0gbW1iX3N5bmMoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0YnJlYWs7XG4gXHRcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTgzLDIyICs4MCwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZnN5bmNfbm9qb3VybmFsKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRcdFx0XHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9pbm9kZTtcbi1cdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4tXHRcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcbi1cdFx0Lm5yX3RvX3dyaXRlID0gMCxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gbW1iX2ZzeW5jX25vZmx1c2goZmlsZSwgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbitcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICsxNDIsMTAgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdGlmIChzYl9yZG9ubHkoaW5vZGUtXHUwMDNlaV9zYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0cmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCkge1xuIFx0XHRyZXQgPSBleHQ0X2ZzeW5jX25vam91cm5hbChmaWxlLCBzdGFydCwgZW5kLCBkYXRhc3luYyxcbiBcdFx0XHRcdFx0ICAgXHUwMDI2bmVlZHNfYmFycmllcik7XG5AQCAtMTY0LDEwICsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpL3dhaXQgd2lsbCBzeW5jIHRoZSBkYXRhLlxuIFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi4wYzIyMGI1MzU1OTBmNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTg2LDYgKzE4Niw4IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTClcbiBcdFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9ubGluaykge1xuK1x0XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcbiBcdFx0LypcbiBcdFx0ICogSWYgdGhlcmUncyBkaXJ0eSBwYWdlIHdpbGwgbGVhZCB0byBkYXRhIGxvc3MsIHVzZXJcbiBcdFx0ICogY291bGQgc2VlIHN0YWxlIGRhdGEuXG5AQCAtMTk1LDkgKzE5Nyw5IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXCJkYXRhIHdpbGwgYmUgbG9zdFwiKTtcbiBcbiBcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi1cdFx0LyogQXZvaWQgbWJhbGxvYyBzcGVjaWFsIGlub2RlIHdoaWNoIGhhcyBubyBwcm9wZXIgaW9wcyAqL1xuLVx0XHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRcdG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbitcdFx0aWYgKG1tYilcbitcdFx0XHRtbWJfc3luYyhtbWIpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zNDUyLDYgKzM0NTQsNyBAQCBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWw7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiBcbiBcdGlmIChqb3VybmFsKSB7XG4gXHRcdGlmIChqYmQyX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChqb3VybmFsLFxuQEAgLTM0NjIsOCArMzQ2NSw5IEBAIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4rXHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbiBcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xuLVx0aWYgKG1tYl9oYXNfYnVmZmVycyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcbitcdGlmIChtbWIgXHUwMDI2XHUwMDI2IG1tYl9oYXNfYnVmZmVycyhtbWIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DO1xuIH1cbkBAIC01ODM4LDI0ICs1ODQyLDM4IEBAIGludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRlcnIgPSBleHQ0X2ZjX2NvbW1pdChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCxcbiBcdFx0XHRcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfc3luY190aWQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuK1x0XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdH1cbitcdHJldHVybiBlcnI7XG4rfVxuIFxuLVx0XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbitpbnQgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK3tcbitcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbitcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGluIG5vam91cm5hbCBtb2RlICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSlcbitcdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4rXG4rXHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRtbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRpZiAobW1iKSB7XG4rXHRcdGVyciA9IG1tYl9zeW5jKG1tYik7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0Lypcbi1cdFx0ICogc3luYygyKSB3aWxsIGZsdXNoIHRoZSB3aG9sZSBidWZmZXIgY2FjaGUuIE5vIG5lZWQgdG8gZG9cbi1cdFx0ICogaXQgaGVyZSBzZXBhcmF0ZWx5IGZvciBlYWNoIGlub2RlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXHUwMDI2XHUwMDI2ICF3YmMtXHUwMDNlZm9yX3N5bmMpXG4tXHRcdFx0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGlsb2MuYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7XG4tXHRcdFx0ZXh0NF9lcnJvcl9pbm9kZV9ibG9jayhpbm9kZSwgaWxvYy5iaC1cdTAwM2ViX2Jsb2NrbnIsIEVJTyxcbi1cdFx0XHRcdFx0ICAgICAgIFwiSU8gZXJyb3Igc3luY2luZyBpbm9kZVwiKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4tXHRcdGJyZWxzZShpbG9jLmJoKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbitcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihpbG9jLmJoKSkge1xuK1x0XHRleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuK1x0XHRcdFx0ICAgICAgIFwiSU8gZXJyb3Igc3luY2luZyBpbm9kZVwiKTtcbitcdFx0ZXJyID0gLUVJTztcbiBcdH1cbitvdXQ6XG4rXHRicmVsc2UoaWxvYy5iaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li5hZTMzZjViY2IxMzMxNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTQzMCw3ICsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0SU5JVF9XT1JLKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0bW1iX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xuK1x0ZWktXHUwMDNlaV9tZXRhZGF0YV9iaHMgPSBOVUxMO1xuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSwgSV9EQVRBX1NFTV9OT1JNQUwpO1xuICNlbmRpZlxuQEAgLTE0NTEsNiArMTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRmc2NyeXB0X2ZyZWVfaW5vZGUoaW5vZGUpO1xuK1x0a2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCIlczogaW5vZGUgJWxsdSBzdGlsbCBpbiBmYyBsaXN0XCIsXG4gXHRcdFx0X19mdW5jX18sIGlub2RlLVx1MDAzZWlfaW5vKTtcbkBAIC0xNTI5LDkgKzE1MzAsMTEgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gXG4gdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuK1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbitcbiBcdGV4dDRfZmNfZGVsKGlub2RlKTtcbi1cdGlmICghRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWwpXG4tXHRcdG1tYl9pbnZhbGlkYXRlKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0aWYgKG1tYilcbitcdFx0bW1iX2ludmFsaWRhdGUobW1iKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4gXHQvKlxuQEAgLTE2MDUsOSArMTYwOCwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbiBcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXG4gXHR9O1xuK1x0aW50IHJldDtcbiBcbiBcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbitcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spXG4rXHRcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfUVVPVEFcbkBAIC0xNjY0LDYgKzE2NzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0NF9zb3BzID0ge1xuIFx0LmZyZWVfaW5vZGVcdD0gZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQuZGVzdHJveV9pbm9kZVx0PSBleHQ0X2Rlc3Ryb3lfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZXh0NF93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmRpcnR5X2lub2RlXHQ9IGV4dDRfZGlydHlfaW5vZGUsXG4gXHQuZHJvcF9pbm9kZVx0PSBleHQ0X2Ryb3BfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmNcbmluZGV4IGM2Y2NhNWQwMGZmZDdlLi45MTZmNWM0Y2RjZjM5MCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xuKysrIGIvZnMvZmF0L2Rpci5jXG5AQCAtMTA1MywxMSArMTA1Myw3IEBAIHN0YXRpYyBpbnQgX19mYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIGxvZmZfdCBwb3MsIGludCBucl9zbG90cylcbiBcdFx0XHRucl9zbG90cy0tO1xuIFx0XHR9XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdGJyZWxzZShiaCk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qIHBvcyBpcyAqbmV4dCogZGUncyBwb3NpdGlvbiwgc28gdGhpcyBkb2VzIGAtIHNpemVvZihkZSknICovXG4gXHRcdHBvcyArPSAoKG9yaWdfc2xvdHMgLSBucl9zbG90cykgKiBzaXplb2YoKmRlKSkgLSBzaXplb2YoKmRlKTtcbkBAIC0xMDg4LDExICsxMDg0LDcgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0XHRucl9zbG90cy0tO1xuIFx0fVxuIFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZNU0RPU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcbiBcbiBcdGlmIChucl9zbG90cykge1xuQEAgLTExMDksMTIgKzExMDEsMTIgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0fVxuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0ZXJyID0gMDtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfcmVtb3ZlX2VudHJpZXMpO1xuIFxuQEAgLTExNDQsMjEgKzExMzYsMTEgQEAgc3RhdGljIGludCBmYXRfemVyb2VkX2NsdXN0ZXIoc3RydWN0IGlub2RlICpkaXIsIHNlY3Rvcl90IGJsa25yLCBpbnQgbnJfdXNlZCxcbiBcdFx0bisrO1xuIFx0XHRibGtucisrO1xuIFx0XHRpZiAobiA9PSBucl9iaHMpIHtcbi1cdFx0XHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0fVxuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkrKylcbiBcdFx0XHRcdGJyZWxzZShiaHNbaV0pO1xuIFx0XHRcdG4gPSAwO1xuIFx0XHR9XG4gXHR9XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdGVyciA9IGZhdF9zeW5jX2JocyhiaHMsIG4pO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpKyspXG4gXHRcdGJyZWxzZShiaHNbaV0pO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxuaW5kZXggOTllZDkyMjhhNjc3YmUuLmRjYjViYTc1NzA3M2VkIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdC5oXG4rKysgYi9mcy9mYXQvZmF0LmhcbkBAIC00MjEsNyArNDIxLDYgQEAgZXh0ZXJuIHZvaWQgZmF0X2RldGFjaChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3QgaV9wb3MpO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBsb2ZmX3QgaV9wb3MpO1xuLWV4dGVybiBpbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIGludCBmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0ICB2b2lkICgqc2V0dXApKHN0cnVjdCBzdXBlcl9ibG9jayAqKSk7XG4gZXh0ZXJuIGludCBmYXRfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZpbGUuYyBiL2ZzL2ZhdC9maWxlLmNcbmluZGV4IDM3ZTcwNDliNGM4YzQ0Li4xYzgzNWNhNWYyMWE1MSAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9maWxlLmNcbisrKyBiL2ZzL2ZhdC9maWxlLmNcbkBAIC0xOTAsOCArMTkwLDcgQEAgaW50IGZhdF9maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZmF0X2lub2RlO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsIFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuK1x0ZXJyID0gc2ltcGxlX2ZzeW5jX25vZmx1c2goZmlscCwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0zMzIsMTUgKzMzMSwxNSBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKVxuIFx0fVxuIFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0FSQ0g7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRpZiAod2FpdCkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9zdGFydCA9IGlfc3RhcnQ7XG4gXHRcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9sb2dzdGFydCA9IGlfbG9nc3RhcnQ7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0fSBlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuIFxuIFx0LyogV3JpdGUgYSBuZXcgRU9GLCBhbmQgZ2V0IHRoZSByZW1haW5pbmcgY2x1c3RlciBjaGFpbiBmb3IgZnJlZWluZy4gKi9cbiBcdGlmIChza2lwKSB7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuY1xuaW5kZXggM2FhNTI0ODFhZDVjZjMuLmUzYmI3YjQ3MTNmMmFjIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2lub2RlLmNcbisrKyBiL2ZzL2ZhdC9pbm9kZS5jXG5AQCAtNjIzLDcgKzYyMywzNCBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9idWlsZF9pbm9kZSk7XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XG4rc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbitzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0bG9mZl90IGlfcG9zO1xuK1x0c2VjdG9yX3QgYmxvY2tucjtcbitcdGludCBvZmZzZXQ7XG4rXG4rXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4rXHRcdHJldHVybiAwO1xuK1x0aV9wb3MgPSBmYXRfaV9wb3NfcmVhZChzYmksIGlub2RlKTtcbitcdGlmICghaV9wb3MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgXHUwMDI2YmxvY2tuciwgXHUwMDI2b2Zmc2V0KTtcbitcdGJoID0gc2JfZmluZF9nZXRfYmxvY2tfbm9uYXRvbWljKGlub2RlLVx1MDAzZWlfc2IsIGJsb2NrbnIpO1xuK1x0LypcbitcdCAqIEJ1ZmZlciBwcmVzZW50PyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yIHN5bmNfZGlydHlfYnVmZmVyKClcbitcdCAqIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cbitcdCAqL1xuK1x0aWYgKGJoIFx1MDAyNlx1MDAyNiBidWZmZXJfdXB0b2RhdGUoYmgpKVxuK1x0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIG1tYl9zeW5jKFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbit9XG4gXG4gc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTY0MCw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogYW55IGNvcnJ1cHRpb24gb24gdGhlIG5leHQgYWNjZXNzIHRvIHRoZSBjbHVzdGVyXG4gXHRcdCAqIGNoYWluIGZvciB0aGUgZmlsZS5cbiBcdFx0ICovXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhdF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9XQVJOSU5HLCBcIkZhaWxlZCB0byBcIlxuIFx0XHRcdFx0XHRcInVwZGF0ZSBvbiBkaXNrIGlub2RlIGZvciB1bnVzZWQgXCJcbkBAIC04NTQsNyArODgxLDcgQEAgc3RhdGljIGludCBmYXRfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XG5AQCAtODYzLDcgKzg5MCw3IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBtdGltZTtcbiBcdGxvZmZfdCBpX3BvcztcbiBcdHNlY3Rvcl90IGJsb2NrbnI7XG4tXHRpbnQgZXJyLCBvZmZzZXQ7XG4rXHRpbnQgb2Zmc2V0O1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfaW5vID09IE1TRE9TX1JPT1RfSU5PKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC05MDcsMTEgKzkzNCw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZzYmktXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGVyciA9IDA7XG4tXHRpZiAod2FpdClcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBlcnI7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbkBAIC05MjUsMjMgKzk1MCwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNk1TRE9TX1NCKHNiKS1cdTAwM2VzX2xvY2spO1xuIFx0fSBlbHNlXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbitcdFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGZhdF9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0cmV0dXJuIF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCAxKTtcbi19XG4tXG4tRVhQT1JUX1NZTUJPTF9HUEwoZmF0X3N5bmNfaW5vZGUpO1xuLVxuIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYXRfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBmYXRfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBmYXRfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBmYXRfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGZhdF9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gZmF0X3B1dF9zdXBlcixcbiBcdC5zdGF0ZnNcdFx0PSBmYXRfc3RhdGZzLFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXG5pbmRleCAzMDI3ZWY1M2FmMjE0Yy4uYmUxOGY2YjU4MTliYTcgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbWlzYy5jXG4rKysgYi9mcy9mYXQvbWlzYy5jXG5AQCAtMTQ2LDE2ICsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHR9IGVsc2Uge1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2xvZ3N0YXJ0ID0gbmV3X2RjbHVzO1xuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdFx0LypcbiBcdFx0ICogU2luY2UgZ2VuZXJpY193cml0ZV9zeW5jKCkgc3luY2hyb25pemVzIHJlZ3VsYXIgZmlsZXMgbGF0ZXIsXG4gXHRcdCAqIHdlIHN5bmMgaGVyZSBvbmx5IGRpcmVjdG9yaWVzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgSVNfRElSU1lOQyhpbm9kZSkpIHtcbi1cdFx0XHRyZXQgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4rXHRcdFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH0gZWxzZVxuLVx0XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0XHR9XG4rXG4gXHR9XG4gXHRpZiAobmV3X2ZjbHVzICE9IChpbm9kZS1cdTAwM2VpX2Jsb2NrcyBcdTAwM2VcdTAwM2UgKHNiaS1cdTAwM2VjbHVzdGVyX2JpdHMgLSA5KSkpIHtcbiBcdFx0ZmF0X2ZzX2Vycm9yX3JhdGVsaW1pdChcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uODY4ZWYwOTEwNDhlNDAgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcbkBAIC0yNTIsMTIgKzI1MiwxMSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKioqKiogQ3JlYXRlIGEgZmlsZSAqL1xuQEAgLTQ3MywyMSArNDcyLDIwIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyBcdTAwMjY9IH5BVFRSX0hJRERFTjtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XG4gXHRcdFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpIHtcbi1cdFx0XHRcdGVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7XG4rXHRcdFx0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdFx0XHR9XG4gXG4gXHRcdFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xuIFx0XHRcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xuIFx0XHRcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHRcdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbitcdFx0XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2RpciwgMSk7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC01MTgsMjYgKzUxNiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdGVsc2VcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4tXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3JfaW5vZGU7XG4tXHR9IGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuLVxuIFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcbiBcdFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXHUwMDNlaV9sb2dzdGFydCk7XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkb3Rkb3RfYmgsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuLVx0XHR9XG4gXHRcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XG4gXHRcdGlmICghbmV3X2lub2RlKVxuIFx0XHRcdGluY19ubGluayhuZXdfZGlyKTtcbiBcdH1cbitcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbitcdH1cbitcbiBcbiBcdGVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCBcdTAwMjZvbGRfc2luZm8pO1x0LyogYW5kIHJlbGVhc2VzIGJoICovXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuQEAgLTU0NSwxMCArNTM4LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbitcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcbiBcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xuQEAgLTU3MSwxNCArNTYzLDE1IEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0XHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4gXHR9XG4tZXJyb3JfaW5vZGU6XG4gXHRmYXRfZGV0YWNoKG9sZF9pbm9kZSk7XG4gXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcbiBcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbi1cdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuK1x0XHRpZiAoY29ycnVwdCkge1xuK1x0XHRcdG1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTtcbitcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5pbmRleCBlOTA5NDQ3ODczZTM2NC4uMzA4MTU4ODk1YjFkOGEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXG4rKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5AQCAtNjc4LDEwICs2NzgsOSBAQCBzdGF0aWMgaW50IHZmYXRfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcW5hbWUsXG4gXG4gXHQvKiB1cGRhdGUgdGltZXN0YW1wICovXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBjbGVhbnVwOlxuIFx0a2ZyZWUoc2xvdHMpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC05MDQsOSArOTAzLDkgQEAgc3RhdGljIGludCB2ZmF0X2dldF9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsXG4gXG4gc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHRyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuK1x0XHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTIxLDE0ICs5MjAsMTQgQEAgc3RhdGljIGludCB2ZmF0X3VwZGF0ZV9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4rc3RhdGljIGludCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0cmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbkBAIC05OTYsNyArOTk1LDcgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4tXHR2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuK1x0ZXJyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFx1MDAyNnRzKTtcbiBcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xuQEAgLTEwMjQsOCArMTAyMywxMCBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGZhdF9hdHRhY2gob2xkX2lub2RlLCBvbGRfc2luZm8uaV9wb3MpO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbi1cdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuK1x0XHRpZiAoY29ycnVwdCkge1xuK1x0XHRcdG1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTtcbitcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuQEAgLTExMjMsMTAgKzExMjQsMTMgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZV9leGNoYW5nZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnlcbiBcdFx0XHR2ZmF0X21vdmVfbmxpbmsobmV3X2Rpciwgb2xkX2Rpcik7XG4gXHR9XG4gXG4tXHR2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuK1x0ZXJyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFx1MDAyNnRzKTtcbiBcdC8qIGlmIGRpcmVjdG9yaWVzIGFyZSBub3QgdGhlIHNhbWUsIHVwZGF0ZSBuZXdfZGlyIGFzIHdlbGwgKi9cbi1cdGlmIChvbGRfZGlyICE9IG5ld19kaXIpXG4tXHRcdHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCBcdTAwMjZ0cyk7XG4rXHRpZiAob2xkX2RpciAhPSBuZXdfZGlyKSB7XG4rXHRcdGludCBlcnIyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG5ld19kaXIsIFx1MDAyNnRzKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0ZXJyID0gZXJyMjtcbitcdH1cbiBcbiBvdXQ6XG4gXHRicmVsc2Uob2xkX2RvdGRvdF9iaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xuaW5kZXggZmRiODc2NmQyNzVhMTcuLjlkOTYzNTc3MzFhM2Q0IDEwMDY0NFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5AQCAtMTg1MSw2ICsxODUxLDIyIEBAIF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldCA9IGVycjtcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxuK1x0ICogYnkgcHJldmlvdXMgV0JfU1lOQ19OT05FIHdyaXRlYmFjaz9cbitcdCAqL1xuK1x0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXHUwMDI2XHUwMDI2ICF3YmMtXHUwMDNlZm9yX3N5bmMgXHUwMDI2XHUwMDI2XG4rXHQgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcbitcdFx0aW50IGVycjtcbitcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19vcC1cdTAwM2VzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCB3YmMpO1xuK1x0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuIFx0d2JjLVx1MDAzZXVucGlubmVkX25ldGZzX3diID0gZmFsc2U7XG4gXHR0cmFjZV93cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCB3YmMsIG5yX3RvX3dyaXRlKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTg5MiwxNCArMTkwOCwxNyBAQCBzdGF0aWMgaW50IHdyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdC8qXG4gXHQgKiBJZiB0aGUgaW5vZGUgaXMgYWxyZWFkeSBmdWxseSBjbGVhbiwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uXG4gXHQgKlxuLVx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcbi1cdCAqIHN0aWxsIHVuZGVyIHdyaXRlYmFjaywgZS5nLiBkdWUgdG8gcHJpb3IgV0JfU1lOQ19OT05FIHdyaXRlYmFjay4gIElmXG4tXHQgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJ2xsIG5lZWQgdG8gd2FpdCBmb3IgdGhlbS5cbitcdCAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yXG4rXHQgKiBtZXRhZGF0YSBhcmUgc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkVcbitcdCAqIHdyaXRlYmFjay4gSWYgdGhlcmUsIHdlJ2xsIG5lZWQgdG8gd2FpdCBmb3IgdGhlbS5cbiBcdCAqL1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAod2JjLVx1MDAzZXN5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCB8fFxuLVx0ICAgICAhbWFwcGluZ190YWdnZWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSykpKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkpIHtcbitcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdGlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSykpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4gXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfU1lOQyk7XG4gXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmNcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi4yN2Q3ZGMxNmZjYjBhMCAxMDA2NDRcbi0tLSBhL2ZzL2xpYmZzLmNcbisrKyBiL2ZzL2xpYmZzLmNcbkBAIC0xNTU5LDkgKzE1NTksMTIgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuK1x0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjZcbitcdFx0XHQoSV9ESVJUWV9BTEwgfCBJX1NZTkMgfCBJX01FVEFEQVRBX1dSSVRFQkFDSykpKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcbitcdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjZcbitcdCAgICAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2XG4rXHRcdFx0KElfRElSVFlfREFUQVNZTkMgfCBJX1NZTkMgfCBJX01FVEFEQVRBX1dSSVRFQkFDSykpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmNcbmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2Rpci5jXG4rKysgYi9mcy9taW5peC9kaXIuY1xuQEAgLTIzLDcgKzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbitcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXG5pbmRleCA4NmU1OTQzY2QyZmY3NC4uMDJhYWJiZGI1ZGVhYTAgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9maWxlLmNcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xuQEAgLTEwLDEzICsxMCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwibWluaXguaFwiXG4gXG4taW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbi17XG4tXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXG4tXHRcdFx0XHUwMDI2bWluaXhfaShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTI2LDcgKzE5LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5mc3luY1x0XHQ9IG1pbml4X2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLmRhZjgzZTRmZjI1YzgxIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgKzI0LDggQEBcbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbitzdGF0aWMgaW50IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICsxMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBtaW5peF9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IG1pbml4X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBtaW5peF93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBtaW5peF9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gbWluaXhfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IG1pbml4X3N0YXRmcyxcbkBAIC02MzAsNyArNjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4rc3RhdGljIGludCBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7XG4gXHRzdHJ1Y3QgbWluaXhfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjM5LDcgKzY0Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXG4gXHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGlmICghcmF3X2lub2RlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyArNjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDk7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuK3N0YXRpYyBpbnQgVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTtcbkBAIC02NjYsNyArNjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICs2ODUsNDIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdGVsc2UgZm9yIChpID0gMDsgaSBcdTAwM2MgMTA7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK3tcbitcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4rXHRyZXR1cm4gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuK1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGVsc2Vcbi1cdFx0YmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuLVx0aWYgKCFiaClcbitcdFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4rXHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCJJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCIsXG4tXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4rXHRlcnIgPSBtbWJfc3luYyhcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdHByaW50ayhcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXG5cIixcbitcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbitcdFx0ZXJyID0gLUVJTztcbiBcdH1cbi1cdGJyZWxzZSAoYmgpO1xuK291dDpcbitcdGJyZWxzZShiaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmNcbmluZGV4IGViYzlmNmEzNzlmZTNhLi40MjVlM2MxNjI5MzUwNCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9kaXIuY1xuKysrIGIvZnMvdWRmL2Rpci5jXG5AQCAtMTU3LDYgKzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4gXHQuaXRlcmF0ZV9zaGFyZWRcdFx0PSB1ZGZfcmVhZGRpcixcbiBcdC51bmxvY2tlZF9pb2N0bFx0XHQ9IHVkZl9pb2N0bCxcbi1cdC5mc3luY1x0XHRcdD0gdWRmX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdFx0PSBnZW5lcmljX3NldGxlYXNlLFxuIH07XG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmNcbmluZGV4IGY3ZjE0MjJkZTMwZmE0Li41N2QxMTYwNmEyYTc3NiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9maWxlLmNcbisrKyBiL2ZzL3VkZi9maWxlLmNcbkBAIC0xOTgsMTMgKzE5OCw2IEBAIHN0YXRpYyBpbnQgdWRmX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxuLVx0XHRcdFx1MDAyNlVERl9JKGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbi19XG4tXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQudW5sb2NrZWRfaW9jdGxcdFx0PSB1ZGZfaW9jdGwsXG5AQCAtMjEyLDcgKzIwNSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5tbWFwXHRcdFx0PSB1ZGZfZmlsZV9tbWFwLFxuIFx0LndyaXRlX2l0ZXJcdFx0PSB1ZGZfZmlsZV93cml0ZV9pdGVyLFxuIFx0LnJlbGVhc2VcdFx0PSB1ZGZfcmVsZWFzZV9maWxlLFxuLVx0LmZzeW5jXHRcdFx0PSB1ZGZfZnN5bmMsXG4rXHQuZnN5bmNcdFx0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5zcGxpY2VfcmVhZFx0XHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHRcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5sbHNlZWtcdFx0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5AQCAtMjUzLDYgKzI0Niw4IEBAIHN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcbiBcdHNldGF0dHJfY29weShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgYXR0cik7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdGlmIChJU19TWU5DKGlub2RlKSlcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLjY4YzZjMmJhOGVkMWEyIDEwMDY0NFxuLS0tIGEvZnMvdWRmL2lub2RlLmNcbisrKyBiL2ZzL3VkZi9pbm9kZS5jXG5AQCAtNTEsOCArNTEsNiBAQFxuIHN0cnVjdCB1ZGZfbWFwX3JxO1xuIFxuIHN0YXRpYyB1bW9kZV90IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKHN0cnVjdCBmaWxlRW50cnkgKik7XG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuLXN0YXRpYyBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gc3RhdGljIGludCB1ZGZfYWxsb2NfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBzaXplKTtcbiBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKTtcbiBzdGF0aWMgaW50IHVkZl9pbnNlcnRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbixcbkBAIC0xNDIsNyArMTQwLDcgQEAgdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdFx0d2FudF9kZWxldGUgPSAxO1xuIFx0XHRcdHVkZl9zZXRzaXplKGlub2RlLCAwKTtcbi1cdFx0XHR1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7XG4rXHRcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpO1xuIFx0XHR9XG4gXHRcdGlmIChpaW5mby1cdTAwM2VpX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaW5vZGUtXHUwMDNlaV9zaXplICE9IGlpbmZvLVx1MDAzZWlfbGVuRXh0ZW50cykge1xuQEAgLTkzNiwxMCArOTM0LDcgQEAgc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcClcbiBcdGlpbmZvLVx1MDAzZWlfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gKyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRyZXQgPSAwO1xuIG91dF9mcmVlOlxuIFx0YnJlbHNlKHByZXZfZXBvcy5iaCk7XG5AQCAtMTMyNiwxMCArMTMyMSw3IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcbiBcdH1cbiB1cGRhdGVfdGltZTpcbiBcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcbi1cdGlmIChJU19TWU5DKGlub2RlKSlcbi1cdFx0dWRmX3N5bmNfaW5vZGUoaW5vZGUpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTcwNSwxNCArMTY5NywyOCBAQCB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKVxuIFx0XHRpaW5mby1cdTAwM2VpX2V4dHJhUGVybXMgfD0gRkVfUEVSTV9PX0RFTEVURTtcbiB9XG4gXG4taW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbitpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuLVx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xuLX1cbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4rXHRpbnQgZXJyID0gMDtcbiBcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpO1xuK1x0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYixcbitcdFx0XHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHQgIFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX2xvY2F0aW9uLCAwKSk7XG4rXHRpZiAoIWJoKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdHVkZl93YXJuKGlub2RlLVx1MDAzZWlfc2IsIFwiSU8gZXJyb3Igc3luY2luZyB1ZGYgaW5vZGUgWyUwOGxseF1cXG5cIixcbitcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGVyciA9IG1tYl9zeW5jKFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rb3V0OlxuK1x0YnJlbHNlKGJoKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lKVxuQEAgLTE3MjMsNyArMTcyOSw3IEBAIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lXG4gXHRcdGlpbmZvLVx1MDAzZWlfY3J0aW1lID0gdGltZTtcbiB9XG4gXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuK2ludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZUVudHJ5ICpmZTtcbkBAIC0xNzMyLDcgKzE3MzgsNiBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXHR1aW50MzJfdCB1ZGZwZXJtcztcbiBcdHVpbnQxNl90IGljYmZsYWdzO1xuIFx0dWludDE2X3QgY3JjbGVuO1xuLVx0aW50IGVyciA9IDA7XG4gXHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4gXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xuQEAgLTE5MzcsMTcgKzE5NDIsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFxuIFx0Lyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdFx0dWRmX3dhcm4oaW5vZGUtXHUwMDNlaV9zYiwgXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwiLFxuLVx0XHRcdFx0IGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4tXHR9XG4gXHRicmVsc2UoYmgpO1xuK1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jXG5pbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvc3VwZXIuY1xuKysrIGIvZnMvdWRmL3N1cGVyLmNcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVkZl9zYl9vcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gdWRmX2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gdWRmX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSB1ZGZfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IHVkZl9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gdWRmX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IHVkZl9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oXG5pbmRleCA2ZDk1MWUwNWMwMDQ2YS4uODZkYzJkNmEyZWYxYjggMTAwNjQ0XG4tLS0gYS9mcy91ZGYvdWRmZGVjbC5oXG4rKysgYi9mcy91ZGYvdWRmZGVjbC5oXG5AQCAtMTM3LDcgKzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpXG4gXG4gLyogZmlsZS5jICovXG4gZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuIFxuIC8qIGlub2RlLmMgKi9cbiBleHRlcm4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKixcbkBAIC0xNTgsNiArMTU3LDcgQEAgZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX2JyZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVkZl9wYmxrX3QgYmxvY2ssXG4gZXh0ZXJuIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTtcbiBleHRlcm4gdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIGV4dGVybiBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4raW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4gZXh0ZXJuIGludCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYyxcbiBcdFx0ICAgICAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQsIGludDhfdCAqZXR5cGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggOGIyM2JjOWEyNDRjYjMuLmZkMmM3MTE1YzA1NDI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC0yMTAsMTAgKzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4gLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpO1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XG4taW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xuIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHRcdHNlY3Rvcl90IGxlbik7XG4gc3RhdGljIGlubGluZSB2b2lkIGNsZWFuX2JkZXZfYmhfYWxpYXMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi43MjllM2NiODllMzg0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtNzQwLDcgKzc0MCw4IEBAIGVudW0gaW5vZGVfc3RhdGVfZmxhZ3NfZW51bSB7XG4gXHRJX0NSRUFUSU5HXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNSksXG4gXHRJX0RPTlRDQUNIRVx0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTYpLFxuIFx0SV9TWU5DX1FVRVVFRFx0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTcpLFxuLVx0SV9QSU5OSU5HX05FVEZTX1dCXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTgpXG4rXHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOCksXG4rXHRJX01FVEFEQVRBX1dSSVRFQkFDS1x0PSAoMVUgXHUwMDNjXHUwMDNjIDE5KSxcbiB9O1xuIFxuICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQylcbkBAIC0yMjEzLDYgKzIyMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHlfc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0X19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuK1x0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuK31cbitcbiAvKlxuICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG5AQCAtODYsNiArODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XG4gXHR2b2lkICgqZnJlZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZGlydHlfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncyk7XG4gXHRpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuK1x0aW50ICgqc3luY19pbm9kZV9tZXRhZGF0YSkoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBcdGludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcdHZvaWQgKCpwdXRfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MDMuNTkyNDMxNzMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1NjM0MTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTWV0YWRhdGEgU3luYyBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGlub2RlIG1ldGFkYXRhIHN5bmNocm9uaXphdGlvbi4gSXQncyBhZGRpbmcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIHRvIHRoZSBgc3VwZXJfb3BlcmF0aW9uc2Agc3RydWN0IGFuZCB0aGVuIHVwZGF0aW5nIGEgd2hvbGUgYnVuY2ggb2YgZmlsZXN5c3RlbXMg4oCTIGFmZnMsIGJmcywgZXh0MiwgZXh0NCwgZmF0LCBtaW5peCwgYW5kIHVkZiDigJMgdG8gdXNlIHRoaXMgbmV3IGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIG9sZGVyIGBtbWJfZnN5bmNgIGFuZCBgbW1iX2ZzeW5jX25vZmx1c2hgIG1ldGhvZHMuIFRoaXMgYWxzbyB0b3VjaGVzIGBmcy9mcy13cml0ZWJhY2suY2AsIHNwZWNpZmljYWxseSB0byBkZWFsIHdpdGggYElfTUVUQURBVEFfV1JJVEVCQUNLYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIHNvIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgYSBuby1icmFpbmVyLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHN5bmNfaW5vZGVfbWV0YWRhdGFgLCBzbyB0aGF0J3Mgb2J2aW91c2x5IGEga2V5IHRhcmdldC4gSXQgYWxzbyBtb2RpZmllcyBib3RoIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhbmQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgd2l0aGluIGBmcy9mcy13cml0ZWJhY2suY2AuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCdzIHVwZGF0aW5nIHRob3NlIGZpbGVzeXN0ZW1z4oCZIHJlc3BlY3RpdmUgaW1wbGVtZW50YXRpb25zOiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAuXG5cblBsdXMsIHdlIGhhdmUgdGhlc2Ugb3RoZXIgd3JpdGUgZnVuY3Rpb25zIGltcGFjdGVkOiBgZXh0NF93cml0ZV9pbm9kZWAsIGBleHQyX3dyaXRlX2lub2RlYCwgYGZhdF93cml0ZV9pbm9kZWAsIGBtaW5peF93cml0ZV9pbm9kZWAsIGB1ZGZfd3JpdGVfaW5vZGVgLCBhbmQgYGJmc193cml0ZV9pbm9kZWAuXG5cbkxldCdzIG5vdCBmb3JnZXQgYWJvdXQgdGhlIGV2aWN0aW9uIGNoYW5nZXMgdG9vLCBgZXh0NF9ldmljdF9pbm9kZWAsIGBleHQyX2V2aWN0X2lub2RlYCwgYGZhdF9ldmljdF9pbm9kZWAsIGBtaW5peF9ldmljdF9pbm9kZWAsIGB1ZGZfZXZpY3RfaW5vZGVgLCBhbmQgYGJmc19ldmljdF9pbm9kZWAuIE9oLCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYCBpbiBgZnMvbGliZnMuY2AgYWxzby5cblxuU28sIHRvIHJlY2FwIHRoZSBmdW5jdGlvbnMsIEkgc2hvdWxkIGZvY3VzIG9uIGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFuZCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCwgdGhlbiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAgaW4gYGZzL2V4dDIvaW5vZGUuY2AsIGFuZCB0aGVuIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAgaW4gYGZzL2ZhdC9pbm9kZS5jYC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCBjb25maWdzIHdlIGhhdmUgYXJlIHZhbGlkLCBzbyB0aGUgbW9kdWxlcyB3aWxsIGFjdHVhbGx5IGJlIHByZXNlbnQuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTUlOSVhfRlNgLCBgQ09ORklHX1VERl9GU2AsIGBDT05GSUdfQkZTX0ZTYCwgYW5kIGBDT05GSUdfQUZGU19GU2AuIEFscmlnaHQsIGFuZCB0aG9zZSBhbGlnbiB3aXRoIHRoZSBmaWxlc3lzdGVtcyB3ZeKAmXJlIGRlYWxpbmcgd2l0aC4gQWx0aG91Z2gsIHdhaXQuLi4gYEZBVF9GU2AgaXMgdXN1YWxseSBgTVNET1NfRlNgIGFuZCBgVkZBVF9GU2AgLSBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGZzL2ZhdC9LY29uZmlnYCBmaWxlIHRvIGJlIHN1cmUuIEFscmlnaHQsIHRoYXQncyB2ZXJpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OTcsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDozMjoxMy4yNDg3NzU3MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTcyMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAoRVhUNF9GU3xFWFQyX0ZTfEZBVF9GU3xNU0RPU19GU3xWRkFUX0ZTfE1JTklYX0ZTfFVERl9GU3xCRlNfRlN8QUZGU19GUylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2FmZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2FmZnMvS2NvbmZpZzoyOmNvbmZpZyBBRkZTX0ZTXFxuZnMvYWZmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFtaWdhIEZGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvYmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9iZnMvS2NvbmZpZzoyOmNvbmZpZyBCRlNfRlNcXG5mcy9iZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDIvS2NvbmZpZzoyOmNvbmZpZyBFWFQyX0ZTXFxuZnMvZXh0Mi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0yMC1cXG5mcy9leHQyL0tjb25maWc6MjE6Y29uZmlnIEVYVDJfRlNfWEFUVFJcXG5mcy9leHQyL0tjb25maWctMjItXFx0Ym9vbCBcXFwiRXh0MiBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnLTI5LVxcbmZzL2V4dDIvS2NvbmZpZzozMDpjb25maWcgRVhUMl9GU19QT1NJWF9BQ0xcXG5mcy9leHQyL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiRXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0zOS1cXG5mcy9leHQyL0tjb25maWc6NDA6Y29uZmlnIEVYVDJfRlNfU0VDVVJJVFlcXG5mcy9leHQyL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiRXh0MiBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbi0tXFxuZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mYXQvS2NvbmZpZzoyOmNvbmZpZyBGQVRfRlNcXG5mcy9mYXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5mcy9mYXQvS2NvbmZpZy0zNy1cXG5mcy9mYXQvS2NvbmZpZzozODpjb25maWcgTVNET1NfRlNcXG5mcy9mYXQvS2NvbmZpZy0zOS1cXHR0cmlzdGF0ZSBcXFwiTVNET1MgZnMgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2ZhdC9LY29uZmlnLTYyLVxcbmZzL2ZhdC9LY29uZmlnOjYzOmNvbmZpZyBWRkFUX0ZTXFxuZnMvZmF0L0tjb25maWctNjQtXFx0dHJpc3RhdGUgXFxcIlZGQVQgKFdpbmRvd3MtOTUpIGZzIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbWluaXgvS2NvbmZpZzoyOmNvbmZpZyBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWluaXggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjAtXFxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxcbmZzL21pbml4L0tjb25maWctMjItXFx0ZGVmX2Jvb2wgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjQtXFxuZnMvbWluaXgvS2NvbmZpZzoyNTpjb25maWcgTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEXFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcbi0tXFxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy91ZGYvS2NvbmZpZzoyOmNvbmZpZyBVREZfRlNcXG5mcy91ZGYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVREYgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MTMuMzkxOTU4ODc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1NjExNDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmlsZXN5c3RlbSBTeW5jaHJvbml6YXRpb24gT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSd2ZSBnb3QgYSBsaXN0IG9mIGZpbGVzeXN0ZW1zIHRvIGNvbnNpZGVyOiBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgTUlOSVhfRlNgLCBgVURGX0ZTYCwgYEJGU19GU2AsIGBBRkZTX0ZTYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlaXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGltcGxlbWVudGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlczogYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZnVuY3Rpb24gbmFtZXMsIGFuZCBteSBrbm93bGVkZ2UgdGVsbHMgbWUgdGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHdyaXRpbmcgZGF0YSBvdXQgdG8gdGhlIGRpc2sgaW4gYSBjb250cm9sbGVkIHdheSwgbWFraW5nIHRoZW0gY3J1Y2lhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBJIHNlZSB0aGF0IGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFuZCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYXJlIGluIGBmcy9mcy13cml0ZWJhY2suY2AuIExldCdzIGNvbmZpcm0gcXVpY2tseSB3aGV0aGVyIHRoZXkgYXJlIHN0YXRpYyBvciBnbG9iYWwuIEFoLCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgc3RhdGljLiBBbmQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgYWxzbyBzdGF0aWMuIE5vdywgdGhlIGBleHQ0YCwgYGV4dDJgLCBgdWRmYCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYCBzeW5jIGZ1bmN0aW9ucyBhcmUgZ2xvYmFsLiBMb29rcyBsaWtlIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAgYXJlIGFsc28gc3RhdGljLCBpbmRpY2F0aW5nIHRoZXkgYXJlIGxpa2VseSBpbnRlcm5hbCB0byB0aGVpciByZXNwZWN0aXZlIGZpbGVzeXN0ZW1zIGFuZCBub3QgcGFydCBvZiBhIGNvbW1vbiBzeW5jaHJvbml6YXRpb24gaW50ZXJmYWNlLlxuXG5JIHNob3VsZCBleGFtaW5lIGBmcy9mcy13cml0ZWJhY2suY2AgZnVydGhlciwgaW4gcGFydGljdWxhciBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSB3cml0ZWJhY2sgcHJvY2VzcyB3b3Jrcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MTkuNTQ4MDc1MTQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDkxNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnMtd3JpdGViYWNrLmM9MTc3NT1zdGF0aWMgaW50XFxuZnMvZnMtd3JpdGViYWNrLmM6MTc3NjpfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuZnMvZnMtd3JpdGViYWNrLmMtMTc3Ny17XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy0xNzg0LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjE3ODU6XFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZV9zdGFydChpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTc4Ni1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTE4NzAtXFx0d2JjLVxcdTAwM2V1bnBpbm5lZF9uZXRmc193YiA9IGZhbHNlO1xcbmZzL2ZzLXdyaXRlYmFjay5jOjE4NzE6XFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTg3Mi1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMTg4My0gKi9cXG5mcy9mcy13cml0ZWJhY2suYzoxODg0OnN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2ZzLXdyaXRlYmFjay5jLTE4ODUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTE5MjQtXFxuZnMvZnMtd3JpdGViYWNrLmM6MTkyNTpcXHRyZXQgPSBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYyk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTkyNi1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTE5OTk9c3RhdGljIGxvbmcgd3JpdGViYWNrX3NiX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjA5Ny1cXHRcXHQgKi9cXG5mcy9mcy13cml0ZWJhY2suYzoyMDk4OlxcdFxcdF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMjA5OS1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTI2OTM9dm9pZCBfX21hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjc0Ny1cXHQvKlxcbmZzL2ZzLXdyaXRlYmFjay5jOjI3NDg6XFx0ICogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKCkgZm9yIHRoZVxcbmZzL2ZzLXdyaXRlYmFjay5jLTI3NDktXFx0ICogZm9sbG93aW5nIGxvY2tsZXNzIGlfc3RhdGUgdGVzdC4gIFNlZSB0aGVyZSBmb3IgZGV0YWlscy5cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTMwNjY9aW50IHdyaXRlX2lub2RlX25vdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc3luYylcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTMwNzgtXFx0bWlnaHRfc2xlZXAoKTtcXG5mcy9mcy13cml0ZWJhY2suYzozMDc5OlxcdHJldHVybiB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCBcXHUwMDI2d2JjKTtcXG5mcy9mcy13cml0ZWJhY2suYy0zMDgwLX1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTMwOTI9aW50IHN5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy0zMDk4LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjMwOTk6XFx0cmV0dXJuIHdyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbmZzL2ZzLXdyaXRlYmFjay5jLTMxMDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDozMjoxOS42MDY1NzI0MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ4MjI4NTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBNZXRhZGF0YSBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gcG9pbnRlciwgYHN5bmNfaW5vZGVfbWV0YWRhdGFgLCBpbnRvIHRoZSBgc3VwZXJfb3BlcmF0aW9uc2Agc3RydWN0LiAgSXQgbG9va3MgbGlrZSBpdCdzIGdvaW5nIHRvIGJlIHVzZWQgdG8gcHJvdmlkZSBhIG1vcmUgc3BlY2lmaWMgd2F5IHRvIGZsdXNoIG1ldGFkYXRhIGZvciBhbiBpbm9kZSwgcG90ZW50aWFsbHkgYXMgcGFydCBvZiB3cml0ZWJhY2suICBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcgaXMgYWxzbyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgYSByZWZpbmVkIGNvbnRyb2wgZmxvdyBmb3Igd2hlbiBhbmQgaG93IG1ldGFkYXRhIGlzIHdyaXR0ZW4gYmFjay4gIFRoZSBjb3JlIG9mIHRoZSBsb2dpYyBzZWVtcyB0byByZXNpZGUgaW4gYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYC5cblxuSSdtIGdvaW5nIHRvIGFkZCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBzeW5jX2lub2RlX21ldGFkYXRhYCBmb3IgdGhlIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gbXkgbGlzdCBvZiBzeW1ib2xzIHRvIHdhdGNoOiAgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLlxuXG5XYWl0LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaW5jbHVkZSB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhbmQgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFyZSBpbmRlZWQgc3RhdGljLCBidXQgdGhvc2UgYXJlIGZpbmUgdG8gYmUgaW4gYEZvY3VzU3ltYm9sc2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlIG90aGVyIGZ1bmN0aW9ucy4gT2theSwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCBhcmUgYWxzbyBzdGF0aWMuIExldCBtZSBjb25maXJtIHRoZSBnbG9iYWxzLiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgIGFyZSBnbG9iYWwuXG5cbk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIGVuc3VyZSBJJ20gY292ZXJpbmcgdGhlIHJpZ2h0IGZpbGVzeXN0ZW1zOiBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgTUlOSVhfRlNgLCBgVURGX0ZTYCwgYEJGU19GU2AsIGFuZCBgQUZGU19GU2AuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZ1bmN0aW9ucyB0byBzZWUgaWYgSSdtIG1pc3NpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBtZXRhZGF0YSBtYW5pcHVsYXRpb24gaW4gdGhlc2UgZmlsZXN5c3RlbXMuICBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29udGV4dCwgYW5kIGNyb3NzIHJlZmVyZW5jaW5nIHJlbGF0ZWQgZnVuY3Rpb25zLi4uIG5vdGhpbmcgZWxzZSBqdW1wcyBvdXQgYXQgbWUgYXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsIGNoYW5nZS5cblxuU28gdGhlIG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGUgYWRkZWQgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGltcGxlbWVudGF0aW9ucyB0aGVtc2VsdmVzLCBhcyB3ZWxsIGFzIHRoZSBjb3JlIHdyaXRlYmFjayBmdW5jdGlvbnMuICBJJ20gYWRkaW5nIHRoZXNlIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5GaW5hbCBsaXN0OlxuKiAgIGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgXG4qICAgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgXG4qICAgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWBcbiogICBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYFxuKiAgIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWBcbiogICBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWBcbiogICBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgXG4qICAgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYFxuKiAgIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGBcblxuQ29uZmlnczpcbiogICBgRVhUNF9GU2BcbiogICBgRVhUMl9GU2BcbiogICBgTVNET1NfRlNgXG4qICAgYFZGQVRfRlNgXG4qICAgYE1JTklYX0ZTYFxuKiAgIGBVREZfRlNgXG4qICAgYEJGU19GU2BcbiogICBgQUZGU19GU2BcblxuVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaGFuZGxpbmcuICBUaGlzIGlzIGEgYmlnIGNoYW5nZSwgc28gaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTA2LCJPdXRwdXRUb2tlbnMiOjI4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MzQuMDg4ODYwMDY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTAwMjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIixcbiAgICBcIk1JTklYX0ZTXCIsXG4gICAgXCJVREZfRlNcIixcbiAgICBcIkJGU19GU1wiLFxuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwid3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwiZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImZhdF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJ1ZGZfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcInNpbXBsZV9mc3luY19ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgc3luY19pbm9kZV9tZXRhZGF0YWAgY2FsbGJhY2sgaW4gYHN1cGVyX29wZXJhdGlvbnNgIGFuZCBtb2RpZmllcyB0aGUgVkZTIHdyaXRlYmFjayBsb2dpYyB0byBoYW5kbGUgYSBuZXcgYElfTUVUQURBVEFfV1JJVEVCQUNLYCBmbGFnLiBJdCBpbXBsZW1lbnRzIHRoaXMgY2FsbGJhY2sgZm9yIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzKSBhbmQgcmVmYWN0b3JzIHRoZWlyIG1ldGFkYXRhIHN5bmNocm9uaXphdGlvbiBsb2dpYywgcmVwbGFjaW5nIGBtbWJfZnN5bmNgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBWRlMgd3JpdGViYWNrIGFuZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGhhbmRsaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwibWluaXhfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 20:13:56 +0000 UTC FinishedAt: 2026-07-16 20:32:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT2_FS", "MSDOS_FS", "VFAT_FS", "MINIX_FS", "UDF_FS", "BFS_FS", "AFFS_FS" ], "series_id": "e6aa6f56-8c07-45cd-b1f0-7496a7e04c37" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__writeback_single_inode", "writeback_single_inode", "ext4_sync_inode_metadata", "ext2_sync_inode_metadata", "fat_sync_inode_metadata", "minix_sync_inode_metadata", "udf_sync_inode_metadata", "bfs_sync_inode_metadata", "simple_fsync_noflush" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "1bc13af8-2d91-4fbd-b43e-fbe72f29ca41" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBzeW5jX2lub2RlX21ldGFkYXRhYCBjYWxsYmFjayBpbiBgc3VwZXJfb3BlcmF0aW9uc2AgYW5kIG1vZGlmaWVzIHRoZSBWRlMgd3JpdGViYWNrIGxvZ2ljIHRvIGhhbmRsZSBhIG5ldyBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcuIEl0IGltcGxlbWVudHMgdGhpcyBjYWxsYmFjayBmb3Igc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMpIGFuZCByZWZhY3RvcnMgdGhlaXIgbWV0YWRhdGEgc3luY2hyb25pemF0aW9uIGxvZ2ljLCByZXBsYWNpbmcgYG1tYl9mc3luY2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFZGUyB3cml0ZWJhY2sgYW5kIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaGFuZGxpbmcsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5Y2I1M2E4ZDU5NjNmZDFlNjViY2U5ZWEyZjVhNjNhZGM4MzMyOWJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMjA6MzI6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaFxuaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmE3ZmFhOTFkZWVkNWFjIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvYWZmcy5oXG5AQCAtNDQsNyAmIzQzOzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgJiM0MzsxNTEsNiBAQCBleHRlcm4gYm9vbFx0YWZmc19ub2ZpbGVuYW1ldHJ1bmNhdGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBleHRlcm4gaW50XHRhZmZzX2NoZWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGxlbixcbiBcdFx0XHRcdGJvb2wgbm90cnVuY2F0ZSk7XG4gZXh0ZXJuIGludFx0YWZmc19jb3B5X25hbWUodW5zaWduZWQgY2hhciAqYnN0ciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBiaXRtYXAuIGMgKi9cbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2FtaWdhZmZzLmMgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbmluZGV4IGJlZDRmYzgwNWU4ZTY2Li42Y2MwZmM5YTRjYmY5MiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9hbWlnYWZmcy5jXG5AQCAtNTcsNyAmIzQzOzU3LDcgQEAgYWZmc19pbnNlcnRfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiBcdFx0QUZGU19UQUlMKHNiLCBkaXJfYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBjcHVfdG9fYmUzMihpbm8pO1xuIFxuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oZGlyX2JoLCBpbm8pO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgJiM0MzsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VoYXNoX2NoYWluID0gaW5vO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8pIC0gaGFzaF9pbm8pO1xuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVx1MDAzZXBhcmVudCA9IDA7XG4gXHRcdFx0cmV0dmFsID0gMDtcbiBcdFx0XHRicmVhaztcbkBAIC0xODAsNyAmIzQzOzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcbiBcbiBcdFx0bWVtY3B5KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZW5hbWUsIEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbmFtZSwgMzIpO1xuIFx0XHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuQEAgLTE4OCw3ICYjNDM7MTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBhZmZzX3JlbW92ZV9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdFx0XHRfX2JlMzIgaW5vMiA9IEFGRlNfVEFJTChzYiwgbGlua19iaCktXHUwMDNlbGlua19jaGFpbjtcbiBcdFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gaW5vMjtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0LyogRml4IHRoZSBsaW5rIGNvdW50LCBpZiBiaCBpcyBhIG5vcm1hbCBoZWFkZXIgYmxvY2sgd2l0aG91dCBsaW5rcyAqL1xuIFx0XHRcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlc3R5cGUpKSB7XG5AQCAtMzA2LDcgJiM0MzszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcbmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4yM2UwODhhN2VkNGZiMyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2ZpbGUuY1xuQEAgLTE0MCwxNCAmIzQzOzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXG4gXHRBRkZTX1RBSUwoc2IsIG5ld19iaCktXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXHUwMDNlaV9pbm8pO1xuIFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XG4gXG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCYjMzQ7YWxsb2NfZXh0XCYjMzQ7LCBcJiMzNDtwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcJiMzNDssIHRtcCk7XG4gXHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VleHRlbnNpb24gPSBjcHVfdG9fYmUzMihibG9ja25yKTtcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0QUZGU19JKGlub2RlKS1cdTAwM2VpX2V4dGNudCYjNDM7JiM0Mzs7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRtZW1zZXQoQUZGU19EQVRBKGJoKSAmIzQzOyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHNpemUgJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG4gXHR9IGVsc2UgaWYgKGJpZHgpIHtcbkBAIC02MDMsNyAmIzQzOzYwMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4gXHRcdGJoLVx1MDAzZWJfc3RhdGUgXHUwMDI2PSB+KDFVTCBcdTAwM2NcdTAwM2MgQkhfTmV3KTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCAmIzQzOzYxMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxuIFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0fVxuIFx0XHRzaXplICYjNDM7PSBic2l6ZTtcbkBAIC03MzMsNyAmIzQzOzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMihcbiBcdFx0XHRtYXgoYm9mZiAmIzQzOyB0bXAsIGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cdTAwM2VzaXplKSkpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICYjNDM7PSB0bXA7XG4gXHRcdGZyb20gJiM0Mzs9IHRtcDtcbiBcdFx0YmlkeCYjNDM7JiM0Mzs7XG5AQCAtNzY2LDEzICYjNDM7NzY1LDEyIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRcdFx0XHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcbiBcdFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXHUwMDNlYl9ibG9ja25yIC0gdG1wX25leHQpO1xuLVx0XHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXG4tXHRcdFx0XHRcdFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gYnNpemU7XG4gXHRcdGZyb20gJiM0Mzs9IGJzaXplO1xuIFx0XHRiaWR4JiM0MzsmIzQzOztcbkBAIC04MDEsMTQgJiM0Mzs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUpIFx1MDAzYyB0bXApXG4gXHRcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0d3JpdHRlbiAmIzQzOz0gdG1wO1xuIFx0XHRmcm9tICYjNDM7PSB0bXA7XG4gXHRcdGJpZHgmIzQzOyYjNDM7O1xuQEAgLTk0NSw3ICYjNDM7OTQyLDcgQEAgYWZmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVx1MDAzZWV4dGVuc2lvbiA9IDA7XG4gXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCk7XG4gXHRhZmZzX2JyZWxzZShleHRfYmgpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xuaW5kZXggNWRkMWIwMTZiY2IwMGEuLmQ0YTNmMzgxYzRiY2ZmIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2lub2RlLmNcbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yNjYsMTEgJiM0MzsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspIHtcbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0YWZmc190cnVuY2F0ZShpbm9kZSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtbWJfc3luYyhcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdH1cbiBcbi1cdG1tYl9pbnZhbGlkYXRlKFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVx1MDAzZWlfbGM7XG5AQCAtMzA1LDcgJiM0MzszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFxuIFx0aW5vZGUtXHUwMDNlaV91aWQgICAgID0gY3VycmVudF9mc3VpZCgpO1xuQEAgLTM5MywxNyAmIzQzOzM5MCwxNyBAQCBhZmZzX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzM1xuIFx0XHRBRkZTX1RBSUwoc2IsIGJoKS1cdTAwM2VsaW5rX2NoYWluID0gY2hhaW47XG4gXHRcdEFGRlNfVEFJTChzYiwgaW5vZGVfYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XG4gXHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGRlbnRyeS1cdTAwM2VkX2ZzZGF0YSA9ICh2b2lkICopKGxvbmcpYmgtXHUwMDNlYl9ibG9ja25yO1xuIFxuIFx0YWZmc19sb2NrX2RpcihkaXIpO1xuIFx0cmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXHRhZmZzX3VubG9ja19saW5rKGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcbmluZGV4IGMzYzY1MzJkYTRiMGRhLi41N2Q4ZDc1NWFhZGEwNSAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9uYW1laS5jXG5AQCAtMzczLDcgJiM0MzszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSAmIzQzOyAxO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcbkBAIC00NDMsOCAmIzQzOzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfYnJlbHNlKGJoKTtcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuQEAgLTQ5Nyw4ICYjNDM7NDk2LDggQEAgYWZmc194cmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcbiBcdGFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTtcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgXHUwMDI2QUZGU19JKG5ld19kaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFx1MDAyNkFGRlNfSShvbGRfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbiYjNDM7XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcpO1xuIFx0YWZmc19icmVsc2UoYmhfb2xkKTtcbiBcdGFmZnNfYnJlbHNlKGJoX25ldyk7XG4gXHRyZXR1cm4gcmV0dmFsO1xuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvc3VwZXIuYyBiL2ZzL2FmZnMvc3VwZXIuY1xuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL3N1cGVyLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdGktXHUwMDNlaV9sYyA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfZXh0X2JoID0gTlVMTDtcbiBcdGktXHUwMDNlaV9wYV9jbnQgPSAwO1xuLVx0bW1iX2luaXQoXHUwMDI2aS1cdTAwM2VpX21ldGFkYXRhX2JocywgXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGUuaV9kYXRhKTtcbiBcbiBcdHJldHVybiBcdTAwMjZpLVx1MDAzZXZmc19pbm9kZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXG5pbmRleCA1YjQwYWIwOWE3OTZkZS4uOWIzN2VjNGJkODlhOGMgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuY1xuQEAgLTY4LDE3ICYjNDM7NjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuY1xuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9pbm9kZS5jXG5AQCAtMTM2LDcgJiM0MzsxMzYsNiBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdHVuc2lnbmVkIGxvbmcgaV9zYmxvY2s7XG4gXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4tXHRpbnQgZXJyID0gMDtcbiBcbiBcdGRwcmludGYoXCYjMzQ7aW5vPSUwOHhcXG5cJiMzNDssIGlubyk7XG4gXG5AQCAtMTY1LDEzICYjNDM7MTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0ZGktXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgJiM0MzsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1xuJiM0MztcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuJiM0MztcdGlmIChJU19FUlIoZGkpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xuJiM0MztcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShiaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zMDIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBiZnNfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBiZnNfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGJmc19wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gYmZzX3N0YXRmcyxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXG5pbmRleCA5YWY1ZjA2MWExZjg1YS4uYmU4YjU3YTYzNWNkODIgMTAwNjQ0XG4tLS0gYS9mcy9idWZmZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmNcbkBAIC02MjgsNzkgJiM0Mzs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXG4gfVxuIEVYUE9SVF9TWU1CT0wobW1iX3N5bmMpO1xuIFxuLS8qKlxuLSAqIG1tYl9mc3luY19ub2ZsdXNoIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoXG4tICogXHRcdCAgICAgICBtZXRhZGF0YSBidWZmZXJzIGxpc3Rcbi0gKlxuLSAqIEBmaWxlOlx0ZmlsZSB0byBzeW5jaHJvbml6ZVxuLSAqIEBtbWI6XHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxuLSAqIEBzdGFydDpcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xuLSAqIEBlbmQ6XHRlbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpXG4tICogQGRhdGFzeW5jOlx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxuLSAqXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcbi0gKiBzdHJ1Y3R1cmUuXG4tICovXG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IGVycjtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0ZXJyID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAobW1iKVxuLVx0XHRyZXQgPSBtbWJfc3luYyhtbWIpO1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVxuLW91dDpcbi1cdC8qIGNoZWNrIGFuZCBhZHZhbmNlIGFnYWluIHRvIGNhdGNoIGVycm9ycyBhZnRlciBzeW5jaW5nIG91dCBidWZmZXJzICovXG4tXHRlcnIgPSBmaWxlX2NoZWNrX2FuZF9hZHZhbmNlX3diX2VycihmaWxlKTtcbi1cdGlmIChyZXQgPT0gMClcbi1cdFx0cmV0ID0gZXJyO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmNfbm9mbHVzaCk7XG4tXG4tLyoqXG4tICogbW1iX2ZzeW5jIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoIG1ldGFkYXRhXG4tICogXHQgICAgICAgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xuLSAqIGNhbGxlZCBhdCB0aGUgZW5kLlxuLSAqL1xuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MKG1tYl9mc3luYyk7XG4tXG4gLypcbiAgKiBDYWxsZWQgd2hlbiB3ZSYjMzk7dmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJiMzOTssIGFuZCBpdCBpcyBrbm93biB0aGF0XG4gICogYGJibG9jayYjMzk7IHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XG5AQCAtMTEyMywxMiAmIzQzOzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XG4gXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcbiBcdC8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHNldCB0aGlzIGluIGJvdGggcGxhY2VzPyAqL1xuIFx0aWYgKGJoLVx1MDAzZWJfZm9saW8gXHUwMDI2XHUwMDI2IGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZylcbiBcdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9mb2xpby1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbi1cdGlmIChiaC1cdTAwM2ViX21tYilcbi1cdFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXHUwMDNlYl9tbWItXHUwMDNlbWFwcGluZywgLUVJTyk7XG4mIzQzO1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1tYiA9IFJFQURfT05DRShiaC1cdTAwM2ViX21tYik7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cdTAwM2VtYXBwaW5nLCAtRUlPKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcbmluZGV4IDI3OGQ0YmU4ZWNiZTc3Li5lMTdiYmM3NTk4YzE0MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZGlyLmNcbkBAIC03MzQsNiAmIzQzOzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2V4dDIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9leHQyLmhcbkBAIC03MzUsNiAmIzQzOzczNSw3IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGV4dDJfY291bnRfZnJlZSAoc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVuc2lnbmVkKTtcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7XG4gZXh0ZXJuIGludCBleHQyX3dyaXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuJiM0MztleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICYjNDM7NzczLDYgQEAgZXh0ZXJuIHZvaWQgZXh0Ml9zeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcyxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xuIFxuIC8qIGZpbGUuYyAqL1xuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICBpbnQgZGF0YXN5bmMpO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucztcbiBcbmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jXG5pbmRleCA4ZGNhOWVjNGNhY2Q5YS4uYjkwMjBkZjdkODllMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9maWxlLmNcbkBAIC00NywyMSAmIzQzOzQ3LDYgQEAgc3RhdGljIGludCBleHQyX3JlbGVhc2VfZmlsZSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0aW50IHJldDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmMoZmlsZSwgXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tXHRpZiAocmV0ID09IC1FSU8pXG4tXHRcdC8qIFdlIGRvbiYjMzk7dCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCYjMzQ7ZGV0ZWN0ZWQgSU8gZXJyb3Igd2hlbiB3cml0aW5nIG1ldGFkYXRhIGJ1ZmZlcnNcJiMzNDspO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgZXh0Ml9kaW9fcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbkBAIC0yMTMsNyAmIzQzOzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcbiBcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW5vZGUuYyBiL2ZzL2V4dDIvaW5vZGUuY1xuaW5kZXggMjk4MDg2MjljY2U1NmYuLjk5YWNkNzlhNGFmMjcyIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2lub2RlLmNcbkBAIC0zOSw4ICYjNDM7MzksNiBAQFxuICNpbmNsdWRlIFwmIzM0O2FjbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGF0dHIuaFwmIzM0O1xuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04Nyw3ICYjNDM7ODUsNyBAQCB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRcdC8qIHNldCBkdGltZSAqL1xuIFx0XHRFWFQyX0koaW5vZGUpLVx1MDAzZWlfZHRpbWVcdD0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbi1cdFx0X19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4mIzQzO1x0XHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4gXHRcdC8qIHRydW5jYXRlIHRvIDAgKi9cbiBcdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gMDtcbiBcdFx0aWYgKGlub2RlLVx1MDAzZWlfYmxvY2tzKVxuQEAgLTEyNTgsMTIgJiM0MzsxMjU2LDkgQEAgc3RhdGljIGludCBleHQyX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0aWYgKGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKVxuIFx0XHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbi1cdH0gZWxzZSB7XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE0NjksNyAmIzQzOzE0NjQsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiYjNDM7aW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0c3RydWN0IGV4dDJfaW5vZGVfaW5mbyAqZWkgPSBFWFQyX0koaW5vZGUpO1xuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG5AQCAtMTU2MCwyMiAmIzQzOzE1NTUsMzMgQEAgc3RhdGljIGludCBfX2V4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXHR9IGVsc2UgZm9yIChuID0gMDsgbiBcdTAwM2MgRVhUMl9OX0JMT0NLUzsgbiYjNDM7JiM0MzspXG4gXHRcdHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrW25dID0gZWktXHUwMDNlaV9kYXRhW25dO1xuIFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuLVx0aWYgKGRvX3N5bmMpIHtcbi1cdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShiaCkgXHUwMDI2XHUwMDI2ICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7XG4tXHRcdFx0cHJpbnRrIChcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdHNiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGVpLVx1MDAzZWlfc3RhdGUgXHUwMDI2PSB+RVhUMl9TVEFURV9ORVc7XG4gXHRicmVsc2UgKGJoKTtcbiYjNDM7XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0MztpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbi1cdHJldHVybiBfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1x0c3RydWN0IGV4dDJfaW5vZGUgKnJhd19pbm9kZSA9IGV4dDJfZ2V0X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZiaCk7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChJU19FUlIocmF3X2lub2RlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdGVyciA9IG1tYl9zeW5jKFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4mIzQzO1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcbiYjNDM7XHRcdHByaW50ayhcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcbmluZGV4IDM5OTlmOGYzYjE1NmUzLi5hNDBmNTMwODcyYTQwNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9zdXBlci5jXG5AQCAtMzYyLDYgJiM0MzszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQyX3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGV4dDJfZXZpY3RfaW5vZGUsXG4gXHQucHV0X3N1cGVyXHQ9IGV4dDJfcHV0X3N1cGVyLFxuIFx0LnN5bmNfZnNcdD0gZXh0Ml9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuY1xuaW5kZXggZTU1ZDE2YWJmNDIyZjQuLmJlNjNmODk0MDJhMzgxIDEwMDY0NFxuLS0tIGEvZnMvZXh0Mi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3hhdHRyLmNcbkBAIC03NzcsNiAmIzQzOzc3Nyw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbiBcdC8qIFVwZGF0ZSB0aGUgaW5vZGUuICovXG4gXHRFWFQyX0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wgPSBuZXdfYmggPyBuZXdfYmgtXHUwMDNlYl9ibG9ja25yIDogMDtcbiBcdGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKTtcbiYjNDM7XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdGlmIChJU19TWU5DKGlub2RlKSkge1xuIFx0XHRlcnJvciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHQvKiBJbiBjYXNlIHN5bmMgZmFpbGVkIGR1ZSB0byBFTk9TUEMgdGhlIGlub2RlIHdhcyBhY3R1YWxseVxuQEAgLTc4OSw4ICYjNDM7NzkwLDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuIFx0XHRcdH1cbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4gXG4gXHRlcnJvciA9IDA7XG4gXHRpZiAob2xkX2JoIFx1MDAyNlx1MDAyNiBvbGRfYmggIT0gbmV3X2JoKSB7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLjBmMDYxNTVhMzVhNjk0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTE1MSw3ICYjNDM7MTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZSBpX2RhdGFfc2VtO1xuIFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbiBcdHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7XG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICppX21ldGFkYXRhX2JocztcbiBcbiBcdC8qXG4gXHQgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2ZcbkBAIC0yMTI2LDYgJiM0MzsyMTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2lub2RlX29ycGhhbl90cmFja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdCFsaXN0X2VtcHR5KFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9vcnBoYW4pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmV4dDRfaV9tZXRhZGF0YV9iaHMoXG4mIzQzO1x0XHRcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogaV9tZXRhZGF0YV9iaHMgaXMgc2V0IGluIGV4dDRfaW5vZGVfYXR0YWNoX21tYigpIHVzaW5nIGNtcHhjaGcoKS5cbiYjNDM7XHQgKiBXZSB1c2UgUkVBRF9PTkNFIHdoZW4gYWNjZXNzaW5nIGlfbWV0YWRhdGFfYmhzIHRvIG1ha2Ugc3VyZSB3ZSBnZXRcbiYjNDM7XHQgKiBjb25zaXN0ZW50IHZpZXcgZm9yIGFsbCBhY2Nlc3Nlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ29kZXMgZm9yIG9wZXJhdGluZyBzeXN0ZW1zXG4gICovXG5AQCAtMzE1NSw2ICYjNDM7MzE2Niw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFx0X19leHQ0X2lnZXQoKHNiKSwgKGlubyksIChmbGFncyksIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbiBleHRlcm4gaW50ICBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XG4mIzQzO2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjNiMmY4YWMyMGJmODViIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICYjNDM7MzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSXQmIzM5O3MgZGlmZmljdWx0IHRvIGhhbmRsZSBmYWlsdXJlIHdoZW4gbWFya2luZyBidWZmZXIgZGlydHkgd2l0aG91dFxuJiM0MztcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWIgPSBrbWFsbG9jX29iaigqbW1iLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XG4mIzQzO1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuJiM0MztcdC8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovXG4mIzQzO1x0aWYgKGNtcHhjaGcoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2JocywgTlVMTCwgbW1iKSlcbiYjNDM7XHRcdGtmcmVlKG1tYik7XG4mIzQzO31cbiYjNDM7XG4gaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0IGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbkBAIC0zODksMTEgJiM0Mzs0MDQsMTMgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdGlmIChpbm9kZSkge1xuJiM0MztcdFx0XHRpZiAoIWV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKVxuJiM0MztcdFx0XHRcdGV4dDRfaW5vZGVfYXR0YWNoX21tYihpbm9kZSk7XG4mIzQzO1x0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICYjNDM7NjgsNiBAQCBzdGF0aWMgaW50IGV4dDRfc3luY19wYXJlbnQoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogdGhyb3VnaCBleHQ0X2V2aWN0X2lub2RlKCkpIGFuZCBzbyB3ZSBhcmUgc2FmZSB0byBmbHVzaFxuIFx0XHQgKiBtZXRhZGF0YSBibG9ja3MgYW5kIHRoZSBpbm9kZS5cbiBcdFx0ICovXG4tXHRcdHJldCA9IG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGJyZWFrO1xuIFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbkBAIC04MywyMiAmIzQzOzgwLDExIEBAIHN0YXRpYyBpbnQgZXh0NF9mc3luY19ub2pvdXJuYWwoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiBcdFx0XHRcdGludCBkYXRhc3luYywgYm9vbCAqbmVlZHNfYmFycmllcilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX2lub2RlO1xuLVx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbi1cdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLFxuLVx0XHQubnJfdG9fd3JpdGUgPSAwLFxuLVx0fTtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICYjNDM7MTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4gXHRpZiAoc2JfcmRvbmx5KGlub2RlLVx1MDAzZWlfc2IpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRyZXQgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSB7XG4gXHRcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZuZWVkc19iYXJyaWVyKTtcbkBAIC0xNjQsMTAgJiM0MzsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlciYjMzk7cyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cbiBcdCAqICBNZXRhZGF0YSBpcyBpbiB0aGUgam91cm5hbCwgd2Ugd2FpdCBmb3IgcHJvcGVyIHRyYW5zYWN0aW9uIHRvXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uMGMyMjBiNTM1NTkwZjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxuIFx0XHRleHQ0X2V2aWN0X2VhX2lub2RlKGlub2RlKTtcbiBcdGlmIChpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZXJlJiMzOTtzIGRpcnR5IHBhZ2Ugd2lsbCBsZWFkIHRvIGRhdGEgbG9zcywgdXNlclxuIFx0XHQgKiBjb3VsZCBzZWUgc3RhbGUgZGF0YS5cbkBAIC0xOTUsOSAmIzQzOzE5Nyw5IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXCYjMzQ7ZGF0YSB3aWxsIGJlIGxvc3RcJiMzNDspO1xuIFxuIFx0XHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuLVx0XHQvKiBBdm9pZCBtYmFsbG9jIHNwZWNpYWwgaW5vZGUgd2hpY2ggaGFzIG5vIHByb3BlciBpb3BzICovXG4tXHRcdGlmICghRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWwpXG4tXHRcdFx0bW1iX3N5bmMoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0XHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbiYjNDM7XHRcdGlmIChtbWIpXG4mIzQzO1x0XHRcdG1tYl9zeW5jKG1tYik7XG4gXHRcdGdvdG8gbm9fZGVsZXRlO1xuIFx0fVxuIFxuQEAgLTM0NTIsNiAmIzQzOzM0NTQsNyBAQCBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWw7XG4mIzQzO1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XG4gXG4gXHRpZiAoam91cm5hbCkge1xuIFx0XHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcbkBAIC0zNDYyLDggJiM0MzszNDY1LDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbiBcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xuLVx0aWYgKG1tYl9oYXNfYnVmZmVycyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcbiYjNDM7XHRpZiAobW1iIFx1MDAyNlx1MDAyNiBtbWJfaGFzX2J1ZmZlcnMobW1iKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQztcbiB9XG5AQCAtNTgzOCwyNCAmIzQzOzU4NDIsMzggQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdGVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsLFxuIFx0XHRcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9zeW5jX3RpZCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4mIzQzO1x0XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuLVx0XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbiYjNDM7aW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiYjNDM7XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWwpKVxuJiM0MztcdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4mIzQzO1xuJiM0MztcdGVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsIFx1MDAyNmlsb2MpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdG1tYiA9IFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7XHRpZiAobW1iKSB7XG4mIzQzO1x0XHRlcnIgPSBtbWJfc3luYyhtbWIpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdC8qXG4tXHRcdCAqIHN5bmMoMikgd2lsbCBmbHVzaCB0aGUgd2hvbGUgYnVmZmVyIGNhY2hlLiBObyBuZWVkIHRvIGRvXG4tXHRcdCAqIGl0IGhlcmUgc2VwYXJhdGVseSBmb3IgZWFjaCBpbm9kZS5cbi1cdFx0ICovXG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFx1MDAyNlx1MDAyNiAhd2JjLVx1MDAzZWZvcl9zeW5jKVxuLVx0XHRcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuLVx0XHRpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShpbG9jLmJoKSkge1xuLVx0XHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4tXHRcdFx0XHRcdCAgICAgICBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIGlub2RlXCYjMzQ7KTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4tXHRcdGJyZWxzZShpbG9jLmJoKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoaWxvYy5iaCkpIHtcbiYjNDM7XHRcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXHUwMDNlYl9ibG9ja25yLCBFSU8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgaW5vZGVcJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiBcdH1cbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShpbG9jLmJoKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLmFlMzNmNWJjYjEzMzE0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xNDMwLDcgJiM0MzsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0SU5JVF9XT1JLKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0bW1iX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xuJiM0MztcdGVpLVx1MDAzZWlfbWV0YWRhdGFfYmhzID0gTlVMTDtcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiBcdGxvY2tkZXBfc2V0X3N1YmNsYXNzKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTtcbiAjZW5kaWZcbkBAIC0xNDUxLDYgJiM0MzsxNDUxLDcgQEAgc3RhdGljIGludCBleHQ0X2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdGZzY3J5cHRfZnJlZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0a2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdFwmIzM0OyxcbiBcdFx0XHRfX2Z1bmNfXywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuQEAgLTE1MjksOSAmIzQzOzE1MzAsMTEgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gXG4gdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuJiM0MztcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7XG4mIzQzO1xuIFx0ZXh0NF9mY19kZWwoaW5vZGUpO1xuLVx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbClcbi1cdFx0bW1iX2ludmFsaWRhdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKG1tYilcbiYjNDM7XHRcdG1tYl9pbnZhbGlkYXRlKG1tYik7XG4gXHRjbGVhcl9pbm9kZShpbm9kZSk7XG4gXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuIFx0LypcbkBAIC0xNjA1LDkgJiM0MzsxNjA4LDEzIEBAIHN0YXRpYyBpbnQgZXh0NF9uZnNfY29tbWl0X21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0ge1xuIFx0XHQuc3luY19tb2RlID0gV0JfU1lOQ19BTExcbiBcdH07XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSylcbiYjNDM7XHRcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1FVT1RBXG5AQCAtMTY2NCw2ICYjNDM7MTY3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4gXHQuZnJlZV9pbm9kZVx0PSBleHQ0X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC5kZXN0cm95X2lub2RlXHQ9IGV4dDRfZGVzdHJveV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQ0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmRpcnR5X2lub2RlXHQ9IGV4dDRfZGlydHlfaW5vZGUsXG4gXHQuZHJvcF9pbm9kZVx0PSBleHQ0X2Ryb3BfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmNcbmluZGV4IGM2Y2NhNWQwMGZmZDdlLi45MTZmNWM0Y2RjZjM5MCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2Rpci5jXG5AQCAtMTA1MywxMSAmIzQzOzEwNTMsNyBAQCBzdGF0aWMgaW50IF9fZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBsb2ZmX3QgcG9zLCBpbnQgbnJfc2xvdHMpXG4gXHRcdFx0bnJfc2xvdHMtLTtcbiBcdFx0fVxuIFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNk1TRE9TX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0XHRicmVsc2UoYmgpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBwb3MgaXMgKm5leHQqIGRlJiMzOTtzIHBvc2l0aW9uLCBzbyB0aGlzIGRvZXMgYC0gc2l6ZW9mKGRlKSYjMzk7ICovXG4gXHRcdHBvcyAmIzQzOz0gKChvcmlnX3Nsb3RzIC0gbnJfc2xvdHMpICogc2l6ZW9mKCpkZSkpIC0gc2l6ZW9mKCpkZSk7XG5AQCAtMTA4OCwxMSAmIzQzOzEwODQsNyBAQCBpbnQgZmF0X3JlbW92ZV9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyAqc2luZm8pXG4gXHRcdG5yX3Nsb3RzLS07XG4gXHR9XG4gXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNk1TRE9TX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRicmVsc2UoYmgpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiBcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xuIFxuIFx0aWYgKG5yX3Nsb3RzKSB7XG5AQCAtMTEwOSwxMiAmIzQzOzExMDEsMTIgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0fVxuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuIFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xuJiM0MztcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZmF0X3JlbW92ZV9lbnRyaWVzKTtcbiBcbkBAIC0xMTQ0LDIxICYjNDM7MTEzNiwxMSBAQCBzdGF0aWMgaW50IGZhdF96ZXJvZWRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwgc2VjdG9yX3QgYmxrbnIsIGludCBucl91c2VkLFxuIFx0XHRuJiM0MzsmIzQzOztcbiBcdFx0YmxrbnImIzQzOyYjNDM7O1xuIFx0XHRpZiAobiA9PSBucl9iaHMpIHtcbi1cdFx0XHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0fVxuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRcdFx0YnJlbHNlKGJoc1tpXSk7XG4gXHRcdFx0biA9IDA7XG4gXHRcdH1cbiBcdH1cbi1cdGlmIChJU19ESVJTWU5DKGRpcikpIHtcbi1cdFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJvcjtcbi1cdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KVxuIFx0XHRicmVsc2UoYmhzW2ldKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0LmggYi9mcy9mYXQvZmF0LmhcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9mYXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZhdC5oXG5AQCAtNDIxLDcgJiM0Mzs0MjEsNiBAQCBleHRlcm4gdm9pZCBmYXRfZGV0YWNoKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdFx0c3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGUsIGxvZmZfdCBpX3Bvcyk7XG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYyxcbiBcdFx0XHQgIHZvaWQgKCpzZXR1cCkoc3RydWN0IHN1cGVyX2Jsb2NrICopKTtcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcbmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuY1xuaW5kZXggMzdlNzA0OWI0YzhjNDQuLjFjODM1Y2E1ZjIxYTUxIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2ZpbGUuY1xuQEAgLTE5MCw4ICYjNDM7MTkwLDcgQEAgaW50IGZhdF9maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZmF0X2lub2RlO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsIFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuJiM0MztcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMzMyLDE1ICYjNDM7MzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXG4gXHR9XG4gXHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2F0dHJzIHw9IEFUVFJfQVJDSDtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGlub2RlLCBOVUxMLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRpZiAod2FpdCkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4mIzQzO1x0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfc3RhcnQgPSBpX3N0YXJ0O1xuIFx0XHRcdE1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0O1xuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBXcml0ZSBhIG5ldyBFT0YsIGFuZCBnZXQgdGhlIHJlbWFpbmluZyBjbHVzdGVyIGNoYWluIGZvciBmcmVlaW5nLiAqL1xuIFx0aWYgKHNraXApIHtcbmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uZTNiYjdiNDcxM2YyYWMgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L2lub2RlLmNcbkBAIC02MjMsNyAmIzQzOzYyMywzNCBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9idWlsZF9pbm9kZSk7XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiYjNDM7XHRsb2ZmX3QgaV9wb3M7XG4mIzQzO1x0c2VjdG9yX3QgYmxvY2tucjtcbiYjNDM7XHRpbnQgb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xuJiM0MztcdGlmICghaV9wb3MpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgXHUwMDI2YmxvY2tuciwgXHUwMDI2b2Zmc2V0KTtcbiYjNDM7XHRiaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrX25vbmF0b21pYyhpbm9kZS1cdTAwM2VpX3NiLCBibG9ja25yKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJ1ZmZlciBwcmVzZW50PyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yIHN5bmNfZGlydHlfYnVmZmVyKClcbiYjNDM7XHQgKiBmb3IgcHJvcGVyIHN5bmNocm9uaXphdGlvbiB3aXRoIG9uZ29pbmcgSU8uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGJoIFx1MDAyNlx1MDAyNiBidWZmZXJfdXB0b2RhdGUoYmgpKVxuJiM0MztcdFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO1x0cmV0dXJuIG1tYl9zeW5jKFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7fVxuIFxuIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC02NDAsNyAmIzQzOzY2Nyw3IEBAIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQgKiBhbnkgY29ycnVwdGlvbiBvbiB0aGUgbmV4dCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXJcbiBcdFx0ICogY2hhaW4gZm9yIHRoZSBmaWxlLlxuIFx0XHQgKi9cbi1cdFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhdF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9XQVJOSU5HLCBcJiMzNDtGYWlsZWQgdG8gXCYjMzQ7XG4gXHRcdFx0XHRcdFwmIzM0O3VwZGF0ZSBvbiBkaXNrIGlub2RlIGZvciB1bnVzZWQgXCYjMzQ7XG5AQCAtODU0LDcgJiM0Mzs4ODEsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4mIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XG5AQCAtODYzLDcgJiM0Mzs4OTAsNyBAQCBzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuIFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XG4gXHRsb2ZmX3QgaV9wb3M7XG4gXHRzZWN0b3JfdCBibG9ja25yO1xuLVx0aW50IGVyciwgb2Zmc2V0O1xuJiM0MztcdGludCBvZmZzZXQ7XG4gXG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4gXHRcdHJldHVybiAwO1xuQEAgLTkwNywxMSAmIzQzOzkzNCw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZzYmktXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGVyciA9IDA7XG4tXHRpZiAod2FpdClcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBlcnI7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuQEAgLTkyNSwyMyAmIzQzOzk1MCwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNk1TRE9TX1NCKHNiKS1cdTAwM2VzX2xvY2spO1xuIFx0fSBlbHNlXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbiYjNDM7XHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XG4tfVxuLVxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcbi1cbiBzdGF0aWMgaW50IGZhdF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gZmF0X2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gZmF0X2ZyZWVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZmF0X3dyaXRlX2lub2RlLFxuJiM0MztcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZmF0X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBmYXRfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IGZhdF9zdGF0ZnMsXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmNcbmluZGV4IDMwMjdlZjUzYWYyMTRjLi5iZTE4ZjZiNTgxOWJhNyAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9taXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmNcbkBAIC0xNDYsMTYgJiM0MzsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHR9IGVsc2Uge1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2xvZ3N0YXJ0ID0gbmV3X2RjbHVzO1xuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdC8qXG4gXHRcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxuIFx0XHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cbiBcdFx0ICovXG4gXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0XHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fSBlbHNlXG4tXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0fVxuIFx0aWYgKG5ld19mY2x1cyAhPSAoaW5vZGUtXHUwMDNlaV9ibG9ja3MgXHUwMDNlXHUwMDNlIChzYmktXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XG4gXHRcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuaW5kZXggMGZkMjk3MWFkNGIxMzEuLjg2OGVmMDkxMDQ4ZTQwIDEwMDY0NFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5AQCAtMjUyLDEyICYjNDM7MjUyLDExIEBAIHN0YXRpYyBpbnQgbXNkb3NfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKioqKiBDcmVhdGUgYSBmaWxlICovXG5AQCAtNDczLDIxICYjNDM7NDcyLDIwIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyBcdTAwMjY9IH5BVFRSX0hJRERFTjtcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuIFx0XHRcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbiBcdFx0XHRcdGlmIChlcnIpIHtcbiBcdFx0XHRcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgPSBvbGRfYXR0cnM7XG4gXHRcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdFx0fVxuLVx0XHRcdH0gZWxzZVxuLVx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xuIFx0XHRcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdFx0XHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcbi1cdFx0XHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKG9sZF9kaXIpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XG4mIzQzO1x0XHRcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFx0fVxuQEAgLTUxOCwyNiAmIzQzOzUxNiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdGVsc2VcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4tXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3JfaW5vZGU7XG4tXHR9IGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuLVxuIFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcbiBcdFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXHUwMDNlaV9sb2dzdGFydCk7XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkb3Rkb3RfYmgsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuLVx0XHR9XG4gXHRcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XG4gXHRcdGlmICghbmV3X2lub2RlKVxuIFx0XHRcdGluY19ubGluayhuZXdfZGlyKTtcbiBcdH1cbiYjNDM7XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XG4mIzQzO1x0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuJiM0MztcdH1cbiYjNDM7XG4gXG4gXHRlcnIgPSBmYXRfcmVtb3ZlX2VudHJpZXMob2xkX2RpciwgXHUwMDI2b2xkX3NpbmZvKTtcdC8qIGFuZCByZWxlYXNlcyBiaCAqL1xuIFx0b2xkX3NpbmZvLmJoID0gTlVMTDtcbkBAIC01NDUsMTAgJiM0Mzs1MzgsOSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbiBcdGlub2RlX2luY19pdmVyc2lvbihvbGRfZGlyKTtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIFx1MDAyNnRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4mIzQzO1x0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2RpciwgMSk7XG4gXG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGRyb3BfbmxpbmsobmV3X2lub2RlKTtcbkBAIC01NzEsMTQgJiM0Mzs1NjMsMTUgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0XHRcdCAgICAgIFx1MDAyNk1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4gXHRcdGNvcnJ1cHQgfD0gc3luY19kaXJ0eV9idWZmZXIoZG90ZG90X2JoKTtcbiBcdH1cbi1lcnJvcl9pbm9kZTpcbiBcdGZhdF9kZXRhY2gob2xkX2lub2RlKTtcbiBcdGZhdF9hdHRhY2gob2xkX2lub2RlLCBvbGRfc2luZm8uaV9wb3MpO1xuIFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgPSBvbGRfYXR0cnM7XG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpO1xuLVx0XHRpZiAoY29ycnVwdClcbi1cdFx0XHRjb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7XG4mIzQzO1x0XHRpZiAoY29ycnVwdCkge1xuJiM0MztcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG5ld19pbm9kZSk7XG4mIzQzO1x0XHRcdGNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5pbmRleCBlOTA5NDQ3ODczZTM2NC4uMzA4MTU4ODk1YjFkOGEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5AQCAtNjc4LDEwICYjNDM7Njc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxuIFxuIFx0LyogdXBkYXRlIHRpbWVzdGFtcCAqL1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBjbGVhbnVwOlxuIFx0a2ZyZWUoc2xvdHMpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC05MDQsOSAmIzQzOzkwMyw5IEBAIHN0YXRpYyBpbnQgdmZhdF9nZXRfZG90ZG90X2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLFxuIFxuIHN0YXRpYyBpbnQgdmZhdF9zeW5jX2lwb3Moc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuLVx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0cmV0dXJuIGZhdF9zeW5jX2lub2RlKGlub2RlKTtcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdGlmIChJU19ESVJTWU5DKGRpcikpXG4mIzQzO1x0XHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTIxLDE0ICYjNDM7OTIwLDE0IEBAIHN0YXRpYyBpbnQgdmZhdF91cGRhdGVfZG90ZG90X2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0MztzdGF0aWMgaW50IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuIHtcbiBcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiYjNDM7XHRcdHJldHVybiBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuQEAgLTk5Niw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4tXHR2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuJiM0MztcdGVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCBcdTAwMjZ0cyk7XG4gXG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGRyb3BfbmxpbmsobmV3X2lub2RlKTtcbkBAIC0xMDI0LDggJiM0MzsxMDIzLDEwIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0ZmF0X2F0dGFjaChvbGRfaW5vZGUsIG9sZF9zaW5mby5pX3Bvcyk7XG4gXHRpZiAobmV3X2lub2RlKSB7XG4gXHRcdGZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpO1xuLVx0XHRpZiAoY29ycnVwdClcbi1cdFx0XHRjb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7XG4mIzQzO1x0XHRpZiAoY29ycnVwdCkge1xuJiM0MztcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG5ld19pbm9kZSk7XG4mIzQzO1x0XHRcdGNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuQEAgLTExMjMsMTAgJiM0MzsxMTI0LDEzIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWVfZXhjaGFuZ2Uoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5XG4gXHRcdFx0dmZhdF9tb3ZlX25saW5rKG5ld19kaXIsIG9sZF9kaXIpO1xuIFx0fVxuIFxuLVx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFx1MDAyNnRzKTtcbiYjNDM7XHRlcnIgPSB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuIFx0LyogaWYgZGlyZWN0b3JpZXMgYXJlIG5vdCB0aGUgc2FtZSwgdXBkYXRlIG5ld19kaXIgYXMgd2VsbCAqL1xuLVx0aWYgKG9sZF9kaXIgIT0gbmV3X2Rpcilcbi1cdFx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG5ld19kaXIsIFx1MDAyNnRzKTtcbiYjNDM7XHRpZiAob2xkX2RpciAhPSBuZXdfZGlyKSB7XG4mIzQzO1x0XHRpbnQgZXJyMiA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCBcdTAwMjZ0cyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0ZXJyID0gZXJyMjtcbiYjNDM7XHR9XG4gXG4gb3V0OlxuIFx0YnJlbHNlKG9sZF9kb3Rkb3RfYmgpO1xuZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmNcbmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDRcbi0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mcy13cml0ZWJhY2suY1xuQEAgLTE4NTEsNiAmIzQzOzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0ID0gZXJyO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERvIHdlIG5lZWQgdG8gd2FpdCBmb3IgaW5vZGUgbWV0YWRhdGEgSU8gcG9zc2libHkgc3VibWl0dGVkXG4mIzQzO1x0ICogYnkgcHJldmlvdXMgV0JfU1lOQ19OT05FIHdyaXRlYmFjaz9cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgIXdiYy1cdTAwM2Vmb3Jfc3luYyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0XHRpbm9kZV9zdGF0ZV9jbGVhcihpbm9kZSwgSV9NRVRBREFUQV9XUklURUJBQ0spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19vcC1cdTAwM2VzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCB3YmMpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAwKVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1x0fVxuIFx0d2JjLVx1MDAzZXVucGlubmVkX25ldGZzX3diID0gZmFsc2U7XG4gXHR0cmFjZV93cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCB3YmMsIG5yX3RvX3dyaXRlKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTg5MiwxNCAmIzQzOzE5MDgsMTcgQEAgc3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQvKlxuIFx0ICogSWYgdGhlIGlub2RlIGlzIGFscmVhZHkgZnVsbHkgY2xlYW4sIHRoZW4gdGhlcmUmIzM5O3Mgbm90aGluZyB0byBkby5cbiBcdCAqXG4tXHQgKiBGb3IgZGF0YS1pbnRlZ3JpdHkgc3luY3Mgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IHBhZ2VzIGFyZVxuLVx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcbi1cdCAqIHRoZXJlIGFyZSBhbnkgc3VjaCBwYWdlcywgd2UmIzM5O2xsIG5lZWQgdG8gd2FpdCBmb3IgdGhlbS5cbiYjNDM7XHQgKiBGb3IgZGF0YS1pbnRlZ3JpdHkgc3luY3Mgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYW55IGZvbGlvcyBvclxuJiM0MztcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxuJiM0MztcdCAqIHdyaXRlYmFjay4gSWYgdGhlcmUsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXG4gXHQgKi9cbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwgfHxcbi1cdCAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVx1MDAzZWlfbWFwcGluZywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spKSlcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSkge1xuJiM0MztcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0aWYgKCFtYXBwaW5nX3RhZ2dlZChpbm9kZS1cdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTtcbiBcdHdiY19hdHRhY2hfYW5kX3VubG9ja19pbm9kZSh3YmMsIGlub2RlKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xuaW5kZXggNWEwZDI3NjM3OWQxM2IuLjI3ZDdkYzE2ZmNiMGEwIDEwMDY0NFxuLS0tIGEvZnMvbGliZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbGliZnMuY1xuQEAgLTE1NTksOSAmIzQzOzE1NTksMTIgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuJiM0MztcdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2XG4mIzQzO1x0XHRcdChJX0RJUlRZX0FMTCB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKGRhdGFzeW5jIFx1MDAyNlx1MDAyNiAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfREFUQVNZTkMpKVxuJiM0MztcdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNlxuJiM0MztcdFx0XHQoSV9ESVJUWV9EQVRBU1lOQyB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuY1xuaW5kZXggMzYxZDI2ZDg3ZDJlMmQuLjJjYTE2Zjg0OWQ1YWMwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL21pbml4L2Rpci5jXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbiYjNDM7XHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2ZpbGUuYyBiL2ZzL21pbml4L2ZpbGUuY1xuaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9maWxlLmNcbkBAIC0xMCwxMyAmIzQzOzEwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7bWluaXguaFwmIzM0O1xuIFxuLWludCBtaW5peF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxuLVx0XHRcdFx1MDAyNm1pbml4X2koZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLX1cbi1cbiAvKlxuICAqIFdlIGhhdmUgbW9zdGx5IE5VTExzIGhlcmU6IHRoZSBjdXJyZW50IGRlZmF1bHRzIGFyZSBPSyBmb3JcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cbkBAIC0yNiw3ICYjNDM7MTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5yZWFkX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC53cml0ZV9pdGVyXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuLVx0LmZzeW5jXHRcdD0gbWluaXhfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLmRhZjgzZTRmZjI1YzgxIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgJiM0MzsyNCw4IEBAXG4gXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICYjNDM7MTMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gbWluaXhfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBtaW5peF9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gbWluaXhfd3JpdGVfaW5vZGUsXG4mIzQzO1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxuIFx0LnB1dF9zdXBlclx0PSBtaW5peF9wdXRfc3VwZXIsXG4gXHQuc3RhdGZzXHRcdD0gbWluaXhfc3RhdGZzLFxuQEAgLTYzMCw3ICYjNDM7NjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4mIzQzO3N0YXRpYyBpbnQgVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlO1xuQEAgLTYzOSw3ICYjNDM7NjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyAmIzQzOzY1NCwxNSBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFx0ZWxzZSBmb3IgKGkgPSAwOyBpIFx1MDAzYyA5OyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuJiM0MztzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcbiBcdHN0cnVjdCBtaW5peDJfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjY2LDcgJiM0Mzs2NzEsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIFxuIFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRpZiAoIXJhd19pbm9kZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICYjNDM7Njg1LDQyIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpJiM0MzsmIzQzOylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbiYjNDM7XHRicmVsc2UoYmgpO1xuJiM0MztcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxuJiM0MztcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuJiM0MztcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4gXHRlbHNlXG4tXHRcdGJoID0gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbi1cdGlmICghYmgpXG4mIzQzO1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiYjNDM7XHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxcblwmIzM0Oyxcbi1cdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbiYjNDM7XHRlcnIgPSBtbWJfc3luYyhcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbiYjNDM7XHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xuJiM0MztcdFx0cHJpbnRrKFwmIzM0O0lPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiBcdH1cbi1cdGJyZWxzZSAoYmgpO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGJoKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9kaXIuYyBiL2ZzL3VkZi9kaXIuY1xuaW5kZXggZWJjOWY2YTM3OWZlM2EuLjQyNWUzYzE2MjkzNTA0IDEwMDY0NFxuLS0tIGEvZnMvdWRmL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvZGlyLmNcbkBAIC0xNTcsNiAmIzQzOzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4gXHQuaXRlcmF0ZV9zaGFyZWRcdFx0PSB1ZGZfcmVhZGRpcixcbiBcdC51bmxvY2tlZF9pb2N0bFx0XHQ9IHVkZl9pb2N0bCxcbi1cdC5mc3luY1x0XHRcdD0gdWRmX2ZzeW5jLFxuJiM0MztcdC5mc3luY1x0XHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNldGxlYXNlXHRcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jXG5pbmRleCBmN2YxNDIyZGUzMGZhNC4uNTdkMTE2MDZhMmE3NzYgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvZmlsZS5jXG5AQCAtMTk4LDEzICYjNDM7MTk4LDYgQEAgc3RhdGljIGludCB1ZGZfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbi17XG4tXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXG4tXHRcdFx0XHUwMDI2VURGX0koZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLX1cbi1cbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC51bmxvY2tlZF9pb2N0bFx0XHQ9IHVkZl9pb2N0bCxcbkBAIC0yMTIsNyAmIzQzOzIwNSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5tbWFwXHRcdFx0PSB1ZGZfZmlsZV9tbWFwLFxuIFx0LndyaXRlX2l0ZXJcdFx0PSB1ZGZfZmlsZV93cml0ZV9pdGVyLFxuIFx0LnJlbGVhc2VcdFx0PSB1ZGZfcmVsZWFzZV9maWxlLFxuLVx0LmZzeW5jXHRcdFx0PSB1ZGZfZnN5bmMsXG4mIzQzO1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc3BsaWNlX3JlYWRcdFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuIFx0LnNwbGljZV93cml0ZVx0XHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4gXHQubGxzZWVrXHRcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuQEAgLTI1Myw2ICYjNDM7MjQ2LDggQEAgc3RhdGljIGludCB1ZGZfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFxuIFx0c2V0YXR0cl9jb3B5KFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBhdHRyKTtcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdGlmIChJU19TWU5DKGlub2RlKSlcbiYjNDM7XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcbmluZGV4IDY3YmNmODM3NThjOGZiLi42OGM2YzJiYThlZDFhMiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuY1xuQEAgLTUxLDggJiM0Mzs1MSw2IEBAXG4gc3RydWN0IHVkZl9tYXBfcnE7XG4gXG4gc3RhdGljIHVtb2RlX3QgdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoc3RydWN0IGZpbGVFbnRyeSAqKTtcbi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7XG4tc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpO1xuIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApO1xuIHN0YXRpYyBpbnQgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLFxuQEAgLTE0Miw3ICYjNDM7MTQwLDcgQEAgdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdFx0d2FudF9kZWxldGUgPSAxO1xuIFx0XHRcdHVkZl9zZXRzaXplKGlub2RlLCAwKTtcbi1cdFx0XHR1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7XG4mIzQzO1x0XHRcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTtcbiBcdFx0fVxuIFx0XHRpZiAoaWluZm8tXHUwMDNlaV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlub2RlLVx1MDAzZWlfc2l6ZSAhPSBpaW5mby1cdTAwM2VpX2xlbkV4dGVudHMpIHtcbkBAIC05MzYsMTAgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKVxuIFx0aWluZm8tXHUwMDNlaV9uZXh0X2FsbG9jX2dvYWwgPSBuZXdibG9ja251bSAmIzQzOyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0ID0gMDtcbiBvdXRfZnJlZTpcbiBcdGJyZWxzZShwcmV2X2Vwb3MuYmgpO1xuQEAgLTEzMjYsMTAgJiM0MzsxMzIxLDcgQEAgaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxuIFx0fVxuIHVwZGF0ZV90aW1lOlxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTcwNSwxNCAmIzQzOzE2OTcsMjggQEAgdm9pZCB1ZGZfdXBkYXRlX2V4dHJhX3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSlcbiBcdFx0aWluZm8tXHUwMDNlaV9leHRyYVBlcm1zIHw9IEZFX1BFUk1fT19ERUxFVEU7XG4gfVxuIFxuLWludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4mIzQzO2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XG4tfVxuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gXG4tc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdHJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCAxKTtcbiYjNDM7XHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZVREZfSShpbm9kZSktXHUwMDNlaV9sb2NhdGlvbiwgMCkpO1xuJiM0MztcdGlmICghYmgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xuJiM0MztcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4mIzQzO1x0XHR1ZGZfd2Fybihpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGlub2RlLVx1MDAzZWlfaW5vKTtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2VURGX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiYjNDM7b3V0OlxuJiM0MztcdGJyZWxzZShiaCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUpXG5AQCAtMTcyMyw3ICYjNDM7MTcyOSw3IEBAIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lXG4gXHRcdGlpbmZvLVx1MDAzZWlfY3J0aW1lID0gdGltZTtcbiB9XG4gXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuJiM0MztpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0c3RydWN0IGZpbGVFbnRyeSAqZmU7XG5AQCAtMTczMiw3ICYjNDM7MTczOCw2IEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbiBcdHVpbnQzMl90IHVkZnBlcm1zO1xuIFx0dWludDE2X3QgaWNiZmxhZ3M7XG4gXHR1aW50MTZfdCBjcmNsZW47XG4tXHRpbnQgZXJyID0gMDtcbiBcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbiBcdHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7XG5AQCAtMTkzNywxNyAmIzQzOzE5NDIsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFxuIFx0Lyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdFx0dWRmX3dhcm4oaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7SU8gZXJyb3Igc3luY2luZyB1ZGYgaW5vZGUgWyUwOGxseF1cXG5cJiMzNDssXG4tXHRcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4mIzQzO1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuY1xuaW5kZXggN2I4NWY1YTJiNzlmYzQuLmU3ZTlmMmEwZDI0ZTgwIDEwMDY0NFxuLS0tIGEvZnMvdWRmL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9zdXBlci5jXG5AQCAtMjExLDYgJiM0MzsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSB1ZGZfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLFxuIFx0LndyaXRlX2lub2RlXHQ9IHVkZl93cml0ZV9pbm9kZSxcbiYjNDM7XHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IHVkZl9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gdWRmX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IHVkZl9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oXG5pbmRleCA2ZDk1MWUwNWMwMDQ2YS4uODZkYzJkNmEyZWYxYjggMTAwNjQ0XG4tLS0gYS9mcy91ZGYvdWRmZGVjbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvdWRmZGVjbC5oXG5AQCAtMTM3LDcgJiM0MzsxMzcsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZGZfZGlyX2VudHJ5X2xlbihzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqY2ZpKVxuIFxuIC8qIGZpbGUuYyAqL1xuIGV4dGVybiBsb25nIHVkZl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xuLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosXG5AQCAtMTU4LDYgJiM0MzsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jayxcbiBleHRlcm4gaW50IHVkZl9zZXRzaXplKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QpO1xuIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XG4gZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiYjNDM7aW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4gZXh0ZXJuIGludCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYyxcbiBcdFx0ICAgICAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQsIGludDhfdCAqZXR5cGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggOGIyM2JjOWEyNDRjYjMuLmZkMmM3MTE1YzA1NDI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC0yMTAsMTAgJiM0MzsyMTAsNiBAQCB2b2lkIGJoX2VuZF9hc3luY193cml0ZShzdHJ1Y3QgYmlvICpiaW8pO1xuIFxuIC8qIFRoaW5ncyB0byBkbyB3aXRoIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdCAqL1xuIHZvaWQgbW1iX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKTtcbi1pbnQgbW1iX2ZzeW5jX25vZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0XHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxuLVx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcbiB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jayxcbiBcdFx0XHRzZWN0b3JfdCBsZW4pO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9iZGV2X2JoX2FsaWFzKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uNzI5ZTNjYjg5ZTM4NGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTc0MCw3ICYjNDM7NzQwLDggQEAgZW51bSBpbm9kZV9zdGF0ZV9mbGFnc19lbnVtIHtcbiBcdElfQ1JFQVRJTkdcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDE1KSxcbiBcdElfRE9OVENBQ0hFXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRJX1NZTkNfUVVFVUVEXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNyksXG4tXHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOClcbiYjNDM7XHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOCksXG4mIzQzO1x0SV9NRVRBREFUQV9XUklURUJBQ0tcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOSksXG4gfTtcbiBcbiAjZGVmaW5lIElfRElSVFlfSU5PREUgKElfRElSVFlfU1lOQyB8IElfRElSVFlfREFUQVNZTkMpXG5AQCAtMjIxMyw2ICYjNDM7MjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIElfRElSVFlfU1lOQyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG5AQCAtODYsNiAmIzQzOzg2LDggQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKmZyZWVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKmRpcnR5X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZ3MpO1xuIFx0aW50ICgqd3JpdGVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiYjNDM7XHRpbnQgKCpzeW5jX2lub2RlX21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBcdGludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcdHZvaWQgKCpwdXRfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUMl9GUyYjMzQ7LAogICAgJiMzNDtNU0RPU19GUyYjMzQ7LAogICAgJiMzNDtWRkFUX0ZTJiMzNDssCiAgICAmIzM0O01JTklYX0ZTJiMzNDssCiAgICAmIzM0O1VERl9GUyYjMzQ7LAogICAgJiMzNDtCRlNfRlMmIzM0OywKICAgICYjMzQ7QUZGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt3cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7ZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7bWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtiZnNfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtzaW1wbGVfZnN5bmNfbm9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBzeW5jX2lub2RlX21ldGFkYXRhYCBjYWxsYmFjayBpbiBgc3VwZXJfb3BlcmF0aW9uc2AgYW5kIG1vZGlmaWVzIHRoZSBWRlMgd3JpdGViYWNrIGxvZ2ljIHRvIGhhbmRsZSBhIG5ldyBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcuIEl0IGltcGxlbWVudHMgdGhpcyBjYWxsYmFjayBmb3Igc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgZXh0MiwgZmF0LCBtaW5peCwgdWRmLCBiZnMpIGFuZCByZWZhY3RvcnMgdGhlaXIgbWV0YWRhdGEgc3luY2hyb25pemF0aW9uIGxvZ2ljLCByZXBsYWNpbmcgYG1tYl9mc3luY2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIFZGUyB3cml0ZWJhY2sgYW5kIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaGFuZGxpbmcsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljYjUzYThkNTk2M2ZkMWU2NWJjZTllYTJmNWE2M2FkYzgzMzI5YmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAxNiAyMDozMjowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmgKaW5kZXggNDRhM2Y2OWQyNzVmOTYuLmE3ZmFhOTFkZWVkNWFjIDEwMDY0NAotLS0gYS9mcy9hZmZzL2FmZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2FmZnMuaApAQCAtNDQsNyAmIzQzOzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7CiAJc3RydWN0IG11dGV4IGlfbGlua19sb2NrOwkJLyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqLwogCXN0cnVjdCBtdXRleCBpX2V4dF9sb2NrOwkJLyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqLwogI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrCi0Jc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzOwogCXUzMgkgaV9ibGtjbnQ7CQkJLyogYmxvY2sgY291bnQgKi8KIAl1MzIJIGlfZXh0Y250OwkJCS8qIGV4dGVuZGVkIGJsb2NrIGNvdW50ICovCiAJdTMyCSppX2xjOwkJCQkvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovCkBAIC0xNTIsNyAmIzQzOzE1MSw2IEBAIGV4dGVybiBib29sCWFmZnNfbm9maWxlbmFtZXRydW5jYXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gaW50CWFmZnNfY2hlY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuLAogCQkJCWJvb2wgbm90cnVuY2F0ZSk7CiBleHRlcm4gaW50CWFmZnNfY29weV9uYW1lKHVuc2lnbmVkIGNoYXIgKmJzdHIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogYml0bWFwLiBjICovCiAKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYW1pZ2FmZnMuYyBiL2ZzL2FmZnMvYW1pZ2FmZnMuYwppbmRleCBiZWQ0ZmM4MDVlOGU2Ni4uNmNjMGZjOWE0Y2JmOTIgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL2FtaWdhZmZzLmMKQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAJCUFGRlNfVEFJTChzYiwgZGlyX2JoKS0mZ3Q7aGFzaF9jaGFpbiA9IGNwdV90b19iZTMyKGlubyk7CiAKIAlhZmZzX2FkanVzdF9jaGVja3N1bShkaXJfYmgsIGlubyk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCwgJmFtcDtBRkZTX0koZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgpOwogCWFmZnNfYnJlbHNlKGRpcl9iaCk7CiAKIAlpbm9kZV9zZXRfbXRpbWVfdG9fdHMoZGlyLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChkaXIpKTsKQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgYWZmc19yZW1vdmVfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZW1fYmgpCiAJCQllbHNlCiAJCQkJQUZGU19UQUlMKHNiLCBiaCktJmd0O2hhc2hfY2hhaW4gPSBpbm87CiAJCQlhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vKSAtIGhhc2hfaW5vKTsKLQkJCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCUFGRlNfVEFJTChzYiwgcmVtX2JoKS0mZ3Q7cGFyZW50ID0gMDsKIAkJCXJldHZhbCA9IDA7CiAJCQlicmVhazsKQEAgLTE4MCw3ICYjNDM7MTgwLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCQlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQltbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTsKIAogCQltZW1jcHkoQUZGU19UQUlMKHNiLCBiaCktJmd0O25hbWUsIEFGRlNfVEFJTChzYiwgbGlua19iaCktJmd0O25hbWUsIDMyKTsKIAkJcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTsKQEAgLTE4OCw3ICYjNDM7MTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCQlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCiAJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCQlpcHV0KGRpcik7CkBAIC0yMDMsNyAmIzQzOzIwMyw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCQkJX19iZTMyIGlubzIgPSBBRkZTX1RBSUwoc2IsIGxpbmtfYmgpLSZndDtsaW5rX2NoYWluOwogCQkJQUZGU19UQUlMKHNiLCBiaCktJmd0O2xpbmtfY2hhaW4gPSBpbm8yOwogCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubzIpIC0gbGlua19pbm8pOwotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQlyZXR2YWwgPSAwOwogCQkJLyogRml4IHRoZSBsaW5rIGNvdW50LCBpZiBiaCBpcyBhIG5vcm1hbCBoZWFkZXIgYmxvY2sgd2l0aG91dCBsaW5rcyAqLwogCQkJc3dpdGNoIChiZTMyX3RvX2NwdShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7c3R5cGUpKSB7CkBAIC0zMDYsNyAmIzQzOzMwNiw3IEBAIGFmZnNfcmVtb3ZlX2hlYWRlcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGRvbmVfdW5sb2NrOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAogCWFmZnNfdW5sb2NrX2RpcihkaXIpOwogCmRpZmYgLS1naXQgYS9mcy9hZmZzL2ZpbGUuYyBiL2ZzL2FmZnMvZmlsZS5jCmluZGV4IDE0NGIxNzQ4MmQxMmRhLi4yM2UwODhhN2VkNGZiMyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZmcy9maWxlLmMKQEAgLTE0MCwxNCAmIzQzOzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpCiAJQUZGU19UQUlMKHNiLCBuZXdfYmgpLSZndDtwYXJlbnQgPSBjcHVfdG9fYmUzMihpbm9kZS0mZ3Q7aV9pbm8pOwogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBuZXdfYmgpOwogCi0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCk7CiAKIAl0bXAgPSBiZTMyX3RvX2NwdShBRkZTX1RBSUwoc2IsIGJoKS0mZ3Q7ZXh0ZW5zaW9uKTsKIAlpZiAodG1wKQogCQlhZmZzX3dhcm5pbmcoc2IsICYjMzQ7YWxsb2NfZXh0JiMzNDssICYjMzQ7cHJldmlvdXMgZXh0ZW5zaW9uIHNldCAoJXgpJiMzNDssIHRtcCk7CiAJQUZGU19UQUlMKHNiLCBiaCktJmd0O2V4dGVuc2lvbiA9IGNwdV90b19iZTMyKGJsb2NrbnIpOwogCWFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAKIAlBRkZTX0koaW5vZGUpLSZndDtpX2V4dGNudCYjNDM7JiM0Mzs7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CkBAIC01ODEsNyAmIzQzOzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCQltZW1zZXQoQUZGU19EQVRBKGJoKSAmIzQzOyBib2ZmLCAwLCB0bXApOwogCQliZTMyX2FkZF9jcHUoJmFtcDtBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUsIHRtcCk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCXNpemUgJiM0Mzs9IHRtcDsKIAkJYmlkeCYjNDM7JiM0Mzs7CiAJfSBlbHNlIGlmIChiaWR4KSB7CkBAIC02MDMsNyAmIzQzOzYwMyw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKQogCQlBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUgPSBjcHVfdG9fYmUzMih0bXApOwogCQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwogCQliaC0mZ3Q7Yl9zdGF0ZSAmYW1wOz0gfigxVUwgJmx0OyZsdDsgQkhfTmV3KTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJaWYgKHByZXZfYmgpIHsKIAkJCXUzMiB0bXBfbmV4dCA9IGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLSZndDtuZXh0KTsKIApAQCAtNjEzLDggJiM0Mzs2MTMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSkKIAkJCQkJICAgICBiaWR4LCB0bXBfbmV4dCk7CiAJCQlBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS0mZ3Q7bmV4dCA9IGNwdV90b19iZTMyKGJoLSZndDtiX2Jsb2NrbnIpOwogCQkJYWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtJmd0O2JfYmxvY2tuciAtIHRtcF9uZXh0KTsKLQkJCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLAotCQkJCQkgICAgICAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCQltYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTsKIAkJCWFmZnNfYnJlbHNlKHByZXZfYmgpOwogCQl9CiAJCXNpemUgJiM0Mzs9IGJzaXplOwpAQCAtNzMzLDcgJiM0Mzs3MzIsNyBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCUFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSA9IGNwdV90b19iZTMyKAogCQkJbWF4KGJvZmYgJiM0MzsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktJmd0O3NpemUpKSk7CiAJCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCXdyaXR0ZW4gJiM0Mzs9IHRtcDsKIAkJZnJvbSAmIzQzOz0gdG1wOwogCQliaWR4JiM0MzsmIzQzOzsKQEAgLTc2NiwxMyAmIzQzOzc2NSwxMiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQkJCQkgICAgIGJpZHgsIHRtcF9uZXh0KTsKIAkJCQlBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS0mZ3Q7bmV4dCA9IGNwdV90b19iZTMyKGJoLSZndDtiX2Jsb2NrbnIpOwogCQkJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLSZndDtiX2Jsb2NrbnIgLSB0bXBfbmV4dCk7Ci0JCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsCi0JCQkJCSZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJCQltYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTsKIAkJCX0KIAkJfQogCQlhZmZzX2JyZWxzZShwcmV2X2JoKTsKIAkJYWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTsKLQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJd3JpdHRlbiAmIzQzOz0gYnNpemU7CiAJCWZyb20gJiM0Mzs9IGJzaXplOwogCQliaWR4JiM0MzsmIzQzOzsKQEAgLTgwMSwxNCAmIzQzOzc5OSwxMyBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQkJCQkgICAgIGJpZHgsIHRtcF9uZXh0KTsKIAkJCQlBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS0mZ3Q7bmV4dCA9IGNwdV90b19iZTMyKGJoLSZndDtiX2Jsb2NrbnIpOwogCQkJCWFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLSZndDtiX2Jsb2NrbnIgLSB0bXBfbmV4dCk7Ci0JCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsCi0JCQkJCQkmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJCQkJbWFya19idWZmZXJfZGlydHkocHJldl9iaCk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoYmUzMl90b19jcHUoQUZGU19EQVRBX0hFQUQoYmgpLSZndDtzaXplKSAmbHQ7IHRtcCkKIAkJCUFGRlNfREFUQV9IRUFEKGJoKS0mZ3Q7c2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7CiAJCWFmZnNfYnJlbHNlKHByZXZfYmgpOwogCQlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl3cml0dGVuICYjNDM7PSB0bXA7CiAJCWZyb20gJiM0Mzs9IHRtcDsKIAkJYmlkeCYjNDM7JiM0Mzs7CkBAIC05NDUsNyAmIzQzOzk0Miw3IEBAIGFmZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIAl9CiAJQUZGU19UQUlMKHNiLCBleHRfYmgpLSZndDtleHRlbnNpb24gPSAwOwogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBleHRfYmgpOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgpOwogCWFmZnNfYnJlbHNlKGV4dF9iaCk7CiAKIAlpZiAoaW5vZGUtJmd0O2lfc2l6ZSkgewpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9pbm9kZS5jIGIvZnMvYWZmcy9pbm9kZS5jCmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDQKLS0tIGEvZnMvYWZmcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvaW5vZGUuYwpAQCAtMjA2LDcgJiM0MzsyMDYsNyBAQCBhZmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQl9CiAJfQogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWFmZnNfYnJlbHNlKGJoKTsKIAlhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpOwogCXJldHVybiAwOwpAQCAtMjY2LDExICYjNDM7MjY2LDggQEAgYWZmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWlmICghaW5vZGUtJmd0O2lfbmxpbmspIHsKIAkJaW5vZGUtJmd0O2lfc2l6ZSA9IDA7CiAJCWFmZnNfdHJ1bmNhdGUoaW5vZGUpOwotCX0gZWxzZSB7Ci0JCW1tYl9zeW5jKCZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCX0KIAotCW1tYl9pbnZhbGlkYXRlKCZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwogCWNsZWFyX2lub2RlKGlub2RlKTsKIAlhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpOwogCWNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLSZndDtpX2xjOwpAQCAtMzA1LDcgJiM0MzszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcikKIAliaCA9IGFmZnNfZ2V0emVyb2JsayhzYiwgYmxvY2spOwogCWlmICghYmgpCiAJCWdvdG8gZXJyX2JoOwotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgJmFtcDtBRkZTX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlhZmZzX2JyZWxzZShiaCk7CiAKIAlpbm9kZS0mZ3Q7aV91aWQgICAgID0gY3VycmVudF9mc3VpZCgpOwpAQCAtMzkzLDE3ICYjNDM7MzkwLDE3IEBAIGFmZnNfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHMzCiAJCUFGRlNfVEFJTChzYiwgYmgpLSZndDtsaW5rX2NoYWluID0gY2hhaW47CiAJCUFGRlNfVEFJTChzYiwgaW5vZGVfYmgpLSZndDtsaW5rX2NoYWluID0gY3B1X3RvX2JlMzIoYmxvY2spOwogCQlhZmZzX2FkanVzdF9jaGVja3N1bShpbm9kZV9iaCwgYmxvY2sgLSBiZTMyX3RvX2NwdShjaGFpbikpOwotCQltbWJfbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgpOwogCQlzZXRfbmxpbmsoaW5vZGUsIDIpOwogCQlpaG9sZChpbm9kZSk7CiAJfQogCWFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWRlbnRyeS0mZ3Q7ZF9mc2RhdGEgPSAodm9pZCAqKShsb25nKWJoLSZndDtiX2Jsb2NrbnI7CiAKIAlhZmZzX2xvY2tfZGlyKGRpcik7CiAJcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChkaXIsIGJoKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7QUZGU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc191bmxvY2tfZGlyKGRpcik7CiAJYWZmc191bmxvY2tfbGluayhpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvbmFtZWkuYyBiL2ZzL2FmZnMvbmFtZWkuYwppbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTM3Myw3ICYjNDM7MzczLDcgQEAgYWZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAl9CiAJKnAgPSAwOwogCWlub2RlLSZndDtpX3NpemUgPSBpICYjNDM7IDE7Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO0FGRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWFmZnNfYnJlbHNlKGJoKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIApAQCAtNDQzLDggJiM0Mzs0NDMsNyBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJLyogVE9ETzogbW92ZSBpdCBiYWNrIHRvIG9sZF9kaXIsIGlmIGVycm9yPyAqLwogCiBkb25lOgotCW1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwKLQkJCSZhbXA7QUZGU19JKHJldHZhbCA/IG9sZF9kaXIgOiBuZXdfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYWZmc19icmVsc2UoYmgpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC00OTcsOCAmIzQzOzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJcmV0dmFsID0gYWZmc19pbnNlcnRfaGFzaChvbGRfZGlyLCBiaF9uZXcpOwogCWFmZnNfdW5sb2NrX2RpcihvbGRfZGlyKTsKIGRvbmU6Ci0JbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoX29sZCwgJmFtcDtBRkZTX0kobmV3X2RpciktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQltbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCAmYW1wO0FGRlNfSShvbGRfZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQpOwomIzQzOwltYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcpOwogCWFmZnNfYnJlbHNlKGJoX29sZCk7CiAJYWZmc19icmVsc2UoYmhfbmV3KTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jCmluZGV4IGIyMzIyNTFhYTdiYmQwLi4wYWQ1MTI3ZTlmYjhlZSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2FmZnMvc3VwZXIuYwpAQCAtMTA4LDcgJiM0MzsxMDgsNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJaS0mZ3Q7aV9sYyA9IE5VTEw7CiAJaS0mZ3Q7aV9leHRfYmggPSBOVUxMOwogCWktJmd0O2lfcGFfY250ID0gMDsKLQltbWJfaW5pdCgmYW1wO2ktJmd0O2lfbWV0YWRhdGFfYmhzLCAmYW1wO2ktJmd0O3Zmc19pbm9kZS5pX2RhdGEpOwogCiAJcmV0dXJuICZhbXA7aS0mZ3Q7dmZzX2lub2RlOwogfQpkaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jCmluZGV4IDViNDBhYjA5YTc5NmRlLi45YjM3ZWM0YmQ4OWE4YyAxMDA2NDQKLS0tIGEvZnMvYmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Jmcy9kaXIuYwpAQCAtNjgsMTcgJiM0Mzs2OCwxMCBAQCBzdGF0aWMgaW50IGJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQotewotCXJldHVybiBtbWJfZnN5bmMoZmlsZSwKLQkJCSZhbXA7QkZTX0koZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7Ci19Ci0KIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLml0ZXJhdGVfc2hhcmVkCT0gYmZzX3JlYWRkaXIsCi0JLmZzeW5jCQk9IGJmc19mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jCmluZGV4IGU0MWVmZGQzNWRiOWVmLi5jYWNjN2VmZjljMzNjZSAxMDA2NDQKLS0tIGEvZnMvYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmZzL2lub2RlLmMKQEAgLTEzNiw3ICYjNDM7MTM2LDYgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJdW5zaWduZWQgbG9uZyBpX3NibG9jazsKIAlzdHJ1Y3QgYmZzX2lub2RlICpkaTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCWludCBlcnIgPSAwOwogCiAJZHByaW50ZigmIzM0O2lubz0lMDh4XG4mIzM0OywgaW5vKTsKIApAQCAtMTY1LDEzICYjNDM7MTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCWRpLSZndDtpX2VvZmZzZXQgPSBjcHVfdG9fbGUzMihpX3NibG9jayAqIEJGU19CU0laRSAmIzQzOyBpbm9kZS0mZ3Q7aV9zaXplIC0gMSk7CiAKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMKSB7Ci0JCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCi0JCQllcnIgPSAtRUlPOwotCX0KIAlicmVsc2UoYmgpOwogCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O2Jmc19sb2NrKTsKJiM0MzsJc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CXN0cnVjdCBiZnNfaW5vZGUgKmRpOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwomIzQzOwlkaSA9IGZpbmRfaW5vZGUoaW5vZGUtJmd0O2lfc2IsICh1MTYpaW5vZGUtJmd0O2lubywgJmFtcDtiaCk7CiYjNDM7CWlmIChJU19FUlIoZGkpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZGkpOwomIzQzOwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZXJyID0gbW1iX3N5bmMoJmFtcDtCRlNfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzAyLDYgJiM0MzszMTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmZzX3NvcHMgPSB7CiAJLmFsbG9jX2lub2RlCT0gYmZzX2FsbG9jX2lub2RlLAogCS5mcmVlX2lub2RlCT0gYmZzX2ZyZWVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gYmZzX3dyaXRlX2lub2RlLAomIzQzOwkuc3luY19pbm9kZV9tZXRhZGF0YSA9IGJmc19zeW5jX2lub2RlX21ldGFkYXRhLAogCS5ldmljdF9pbm9kZQk9IGJmc19ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gYmZzX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IGJmc19zdGF0ZnMsCmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDlhZjVmMDYxYTFmODVhLi5iZThiNTdhNjM1Y2Q4MiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnVmZmVyLmMKQEAgLTYyOCw3OSAmIzQzOzYyOCw2IEBAIGludCBtbWJfc3luYyhzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYikKIH0KIEVYUE9SVF9TWU1CT0wobW1iX3N5bmMpOwogCi0vKioKLSAqIG1tYl9mc3luY19ub2ZsdXNoIC0gZnN5bmMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aXRoCi0gKiAJCSAgICAgICBtZXRhZGF0YSBidWZmZXJzIGxpc3QKLSAqCi0gKiBAZmlsZToJZmlsZSB0byBzeW5jaHJvbml6ZQotICogQG1tYjoJbGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2gKLSAqIEBzdGFydDoJc3RhcnQgb2Zmc2V0IGluIGJ5dGVzCi0gKiBAZW5kOgllbmQgb2Zmc2V0IGluIGJ5dGVzIChpbmNsdXNpdmUpCi0gKiBAZGF0YXN5bmM6CW9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWUKLSAqCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaAotICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iCi0gKiBzdHJ1Y3R1cmUuCi0gKi8KLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsCi0JCSAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwotCWludCBlcnI7Ci0JaW50IHJldCA9IDA7Ci0KLQllcnIgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAobW1iKQotCQlyZXQgPSBtbWJfc3luYyhtbWIpOwotCWlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgJmFtcDsgSV9ESVJUWV9BTEwpKQotCQlnb3RvIG91dDsKLQlpZiAoZGF0YXN5bmMgJmFtcDsmYW1wOyAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgJmFtcDsgSV9ESVJUWV9EQVRBU1lOQykpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBlcnI7Ci0KLW91dDoKLQkvKiBjaGVjayBhbmQgYWR2YW5jZSBhZ2FpbiB0byBjYXRjaCBlcnJvcnMgYWZ0ZXIgc3luY2luZyBvdXQgYnVmZmVycyAqLwotCWVyciA9IGZpbGVfY2hlY2tfYW5kX2FkdmFuY2Vfd2JfZXJyKGZpbGUpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gZXJyOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKG1tYl9mc3luY19ub2ZsdXNoKTsKLQotLyoqCi0gKiBtbWJfZnN5bmMgLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGggbWV0YWRhdGEKLSAqIAkgICAgICAgYnVmZmVycyBsaXN0Ci0gKgotICogQGZpbGU6CWZpbGUgdG8gc3luY2hyb25pemUKLSAqIEBtbWI6CWxpc3Qgb2YgbWV0YWRhdGEgYmhzIHRvIGZsdXNoCi0gKiBAc3RhcnQ6CXN0YXJ0IG9mZnNldCBpbiBieXRlcwotICogQGVuZDoJZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKQotICogQGRhdGFzeW5jOglvbmx5IHN5bmNocm9uaXplIGVzc2VudGlhbCBtZXRhZGF0YSBpZiB0cnVlCi0gKgotICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2gKLSAqIHRyYWNrIGFsbCBub24taW5vZGUgbWV0YWRhdGEgaW4gdGhlIGJ1ZmZlcnMgbGlzdCBoYW5naW5nIG9mZiB0aGUgQG1tYgotICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpcwotICogY2FsbGVkIGF0IHRoZSBlbmQuCi0gKi8KLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLAotCSAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwotCWludCByZXQ7Ci0KLQlyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBtbWIsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKG1tYl9mc3luYyk7Ci0KIC8qCiAgKiBDYWxsZWQgd2hlbiB3ZSYjMzk7dmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJiMzOTssIGFuZCBpdCBpcyBrbm93biB0aGF0CiAgKiBgYmJsb2NrJiMzOTsgd2FzIGZvciBhIGJ1ZmZlcl9ib3VuZGFyeSgpIGJ1ZmZlci4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgYmxvY2sgYXQKQEAgLTExMjMsMTIgJiM0MzsxMDUwLDE4IEBAIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfZGlydHkpOwogCiB2b2lkIG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwogCXNldF9idWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpOwogCS8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHNldCB0aGlzIGluIGJvdGggcGxhY2VzPyAqLwogCWlmIChiaC0mZ3Q7Yl9mb2xpbyAmYW1wOyZhbXA7IGJoLSZndDtiX2ZvbGlvLSZndDttYXBwaW5nKQogCQltYXBwaW5nX3NldF9lcnJvcihiaC0mZ3Q7Yl9mb2xpby0mZ3Q7bWFwcGluZywgLUVJTyk7Ci0JaWYgKGJoLSZndDtiX21tYikKLQkJbWFwcGluZ19zZXRfZXJyb3IoYmgtJmd0O2JfbW1iLSZndDttYXBwaW5nLCAtRUlPKTsKJiM0MzsJLyogUHJvdGVjdCB1cyBmcm9tIG1tYiAmYW1wOyBpbm9kZSBnZXR0aW5nIGZyZWVkIHdoaWxlIHdlIHdvcmsgb24gaXQgKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltbWIgPSBSRUFEX09OQ0UoYmgtJmd0O2JfbW1iKTsKJiM0MzsJaWYgKG1tYikKJiM0MzsJCW1hcHBpbmdfc2V0X2Vycm9yKG1tYi0mZ3Q7bWFwcGluZywgLUVJTyk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcik7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZGlyLmMgYi9mcy9leHQyL2Rpci5jCmluZGV4IDI3OGQ0YmU4ZWNiZTc3Li5lMTdiYmM3NTk4YzE0MyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL2Rpci5jCkBAIC03MzQsNiAmIzQzOzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDJfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JLmZzeW5jCQk9IGV4dDJfZnN5bmMsCiYjNDM7CS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiAJLnNldGxlYXNlCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oCmluZGV4IDc5ZjdiMzk1MjU4YzJhLi41NjQyNDUxYmYxOTE3MyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9leHQyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9leHQyLmgKQEAgLTczNSw2ICYjNDM7NzM1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQpOwogLyogaW5vZGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiYjNDM7ZXh0ZXJuIGludCBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogdm9pZCBleHQyX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKTsKIGV4dGVybiBpbnQgZXh0Ml9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKQEAgLTc3Miw4ICYjNDM7NzczLDYgQEAgZXh0ZXJuIHZvaWQgZXh0Ml9zeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICplcywKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGlyX29wZXJhdGlvbnM7CiAKIC8qIGZpbGUuYyAqLwotZXh0ZXJuIGludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgIGludCBkYXRhc3luYyk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9uczsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9maWxlLmMgYi9mcy9leHQyL2ZpbGUuYwppbmRleCA4ZGNhOWVjNGNhY2Q5YS4uYjkwMjBkZjdkODllMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDIvZmlsZS5jCkBAIC00NywyMSAmIzQzOzQ3LDYgQEAgc3RhdGljIGludCBleHQyX3JlbGVhc2VfZmlsZSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7Ci0KLQlyZXQgPSBtbWJfZnN5bmMoZmlsZSwgJmFtcDtFWFQyX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2JocywKLQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKLQlpZiAocmV0ID09IC1FSU8pCi0JCS8qIFdlIGRvbiYjMzk7dCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi8KLQkJZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkgICAmIzM0O2RldGVjdGVkIElPIGVycm9yIHdoZW4gd3JpdGluZyBtZXRhZGF0YSBidWZmZXJzJiMzNDspOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwpAQCAtMjEzLDcgJiM0MzsxOTgsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zID0gewogCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAogCS5vcGVuCQk9IGV4dDJfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gZXh0Ml9yZWxlYXNlX2ZpbGUsCi0JLmZzeW5jCQk9IGV4dDJfZnN5bmMsCiYjNDM7CS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiAJLmdldF91bm1hcHBlZF9hcmVhID0gdGhwX2dldF91bm1hcHBlZF9hcmVhLAogCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggMjk4MDg2MjljY2U1NmYuLjk5YWNkNzlhNGFmMjcyIDEwMDY0NAotLS0gYS9mcy9leHQyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi9pbm9kZS5jCkBAIC0zOSw4ICYjNDM7MzksNiBAQAogI2luY2x1ZGUgJiMzNDthY2wuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwogCi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYyk7Ci0KIC8qCiAgKiBUZXN0IHdoZXRoZXIgYW4gaW5vZGUgaXMgYSBmYXN0IHN5bWxpbmsuCiAgKi8KQEAgLTg3LDcgJiM0Mzs4NSw3IEBAIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAkJLyogc2V0IGR0aW1lICovCiAJCUVYVDJfSShpbm9kZSktJmd0O2lfZHRpbWUJPSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQlfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTsKJiM0MzsJCXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTsKIAkJLyogdHJ1bmNhdGUgdG8gMCAqLwogCQlpbm9kZS0mZ3Q7aV9zaXplID0gMDsKIAkJaWYgKGlub2RlLSZndDtpX2Jsb2NrcykKQEAgLTEyNTgsMTIgJiM0MzsxMjU2LDkgQEAgc3RhdGljIGludCBleHQyX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpCiAJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKIAogCWlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTsKLQlpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHsKLQkJbW1iX3N5bmMoJmFtcDtFWFQyX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpCiAJCXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwotCX0gZWxzZSB7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTQ2OSw3ICYjNDM7MTQ2NCw3IEBAIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKJiM0MztpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwpAQCAtMTU2MCwyMiAmIzQzOzE1NTUsMzMgQEAgc3RhdGljIGludCBfX2V4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpCiAJfSBlbHNlIGZvciAobiA9IDA7IG4gJmx0OyBFWFQyX05fQkxPQ0tTOyBuJiM0MzsmIzQzOykKIAkJcmF3X2lub2RlLSZndDtpX2Jsb2NrW25dID0gZWktJmd0O2lfZGF0YVtuXTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JaWYgKGRvX3N5bmMpIHsKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkgewotCQkJcHJpbnRrICgmIzM0O0lPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXG4mIzM0OywKLQkJCQlzYi0mZ3Q7c19pZCwgKHVuc2lnbmVkIGxvbmcpIGlubyk7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQogCWVpLSZndDtpX3N0YXRlICZhbXA7PSB+RVhUMl9TVEFURV9ORVc7CiAJYnJlbHNlIChiaCk7CiYjNDM7CXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CiAKLWludCBleHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO2ludCBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7Ci0JcmV0dXJuIF9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgd2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGlub2RlLSZndDtpX2lubywKJiM0MzsJCQkJCQkgICAgICAmYW1wO2JoKTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmIChJU19FUlIocmF3X2lub2RlKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO0VYVDJfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7CiYjNDM7CQlwcmludGsoJiMzNDtJTyBlcnJvciBzeW5jaW5nIGV4dDIgaW5vZGUgWyVzOiUwOGx4XVxuJiMzNDssCiYjNDM7CQkgICAgICAgaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBpbnQgZXh0Ml9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCAzOTk5ZjhmM2IxNTZlMy4uYTQwZjUzMDg3MmE0MDcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTM2Miw2ICYjNDM7MzYyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDJfc29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSBleHQyX2FsbG9jX2lub2RlLAogCS5mcmVlX2lub2RlCT0gZXh0Ml9mcmVlX2luX2NvcmVfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gZXh0Ml93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEsCiAJLmV2aWN0X2lub2RlCT0gZXh0Ml9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gZXh0Ml9wdXRfc3VwZXIsCiAJLnN5bmNfZnMJPSBleHQyX3N5bmNfZnMsCmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyLmMgYi9mcy9leHQyL3hhdHRyLmMKaW5kZXggZTU1ZDE2YWJmNDIyZjQuLmJlNjNmODk0MDJhMzgxIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0Mi94YXR0ci5jCkBAIC03NzcsNiAmIzQzOzc3Nyw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCwKIAkvKiBVcGRhdGUgdGhlIGlub2RlLiAqLwogCUVYVDJfSShpbm9kZSktJmd0O2lfZmlsZV9hY2wgPSBuZXdfYmggPyBuZXdfYmgtJmd0O2JfYmxvY2tuciA6IDA7CiAJaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlpZiAoSVNfU1lOQyhpbm9kZSkpIHsKIAkJZXJyb3IgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAkJLyogSW4gY2FzZSBzeW5jIGZhaWxlZCBkdWUgdG8gRU5PU1BDIHRoZSBpbm9kZSB3YXMgYWN0dWFsbHkKQEAgLTc4OSw4ICYjNDM7NzkwLDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLAogCQkJfQogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JfSBlbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiAKIAllcnJvciA9IDA7CiAJaWYgKG9sZF9iaCAmYW1wOyZhbXA7IG9sZF9iaCAhPSBuZXdfYmgpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLjBmMDYxNTVhMzVhNjk0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTE1MSw3ICYjNDM7MTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCXN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogCXN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7Ci0Jc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzOwomIzQzOwlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzOwogCiAJLyoKIAkgKiBGaWxlIGNyZWF0aW9uIHRpbWUuIEl0cyBmdW5jdGlvbiBpcyBzYW1lIGFzIHRoYXQgb2YKQEAgLTIxMjYsNiAmIzQzOzIxMjYsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfb3JwaGFuX3RyYWNrZWQoc3RydWN0IGlub2RlICppbm9kZSkKIAkJIWxpc3RfZW1wdHkoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX29ycGhhbik7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocygKJiM0MzsJCQkJCQkJc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIGlfbWV0YWRhdGFfYmhzIGlzIHNldCBpbiBleHQ0X2lub2RlX2F0dGFjaF9tbWIoKSB1c2luZyBjbXB4Y2hnKCkuCiYjNDM7CSAqIFdlIHVzZSBSRUFEX09OQ0Ugd2hlbiBhY2Nlc3NpbmcgaV9tZXRhZGF0YV9iaHMgdG8gbWFrZSBzdXJlIHdlIGdldAomIzQzOwkgKiBjb25zaXN0ZW50IHZpZXcgZm9yIGFsbCBhY2Nlc3Nlcy4KJiM0MzsJICovCiYjNDM7CXJldHVybiBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDb2RlcyBmb3Igb3BlcmF0aW5nIHN5c3RlbXMKICAqLwpAQCAtMzE1NSw2ICYjNDM7MzE2Niw3IEBAIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLAogCV9fZXh0NF9pZ2V0KChzYiksIChpbm8pLCAoZmxhZ3MpLCBfX2Z1bmNfXywgX19MSU5FX18pCiAKIGV4dGVybiBpbnQgIGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKJiM0MztleHRlcm4gaW50ICBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKiwKIAkJCSBzdHJ1Y3QgaWF0dHIgKik7CiBleHRlcm4gdTMyICBleHQ0X2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuYwppbmRleCA5YThjMjI1ZjI3NTMwOS4uM2IyZjhhYzIwYmY4NWIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0X2piZDIuYwpAQCAtMzUwLDYgJiM0MzszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGV4dDRfaW5vZGVfYXR0YWNoX21tYihzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEl0JiMzOTtzIGRpZmZpY3VsdCB0byBoYW5kbGUgZmFpbHVyZSB3aGVuIG1hcmtpbmcgYnVmZmVyIGRpcnR5IHdpdGhvdXQKJiM0MzsJICogbGVhdmluZyBmaWxlc3lzdGVtIGNvcnJ1cHRlZAomIzQzOwkgKi8KJiM0MzsJbW1iID0ga21hbGxvY19vYmooKm1tYiwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwomIzQzOwltbWJfaW5pdChtbWIsICZhbXA7aW5vZGUtJmd0O2lfZGF0YSk7CiYjNDM7CS8qIFNvbWVvbmUgc3dhcHBlZCBhbm90aGVyIG1tYiBiZWZvcmUgdXM/ICovCiYjNDM7CWlmIChjbXB4Y2hnKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpCiYjNDM7CQlrZnJlZShtbWIpOwomIzQzO30KJiM0MzsKIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKIAkJCQkgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKQEAgLTM4OSwxMSAmIzQzOzQwNCwxMyBAQCBpbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCiAJCQkJCSBlcnIpOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKGlub2RlKQotCQkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLAotCQkJCQkgICAgICAmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQkJZWxzZQomIzQzOwkJaWYgKGlub2RlKSB7CiYjNDM7CQkJaWYgKCFleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKSkKJiM0MzsJCQkJZXh0NF9pbm9kZV9hdHRhY2hfbW1iKGlub2RlKTsKJiM0MzsJCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsIGV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiYjNDM7CQl9CiAJCWlmIChpbm9kZSAmYW1wOyZhbXA7IGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKSB7CiAJCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCQlpZiAoYnVmZmVyX3JlcShiaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGJoKSkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mc3luYy5jIGIvZnMvZXh0NC9mc3luYy5jCmluZGV4IDkyNDcyNmRjYzg1ZmY1Li4yOTk5YzJjYzhmY2ZhMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mc3luYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZnN5bmMuYwpAQCAtNjgsOSAmIzQzOzY4LDYgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCSAqIHRocm91Z2ggZXh0NF9ldmljdF9pbm9kZSgpKSBhbmQgc28gd2UgYXJlIHNhZmUgdG8gZmx1c2gKIAkJICogbWV0YWRhdGEgYmxvY2tzIGFuZCB0aGUgaW5vZGUuCiAJCSAqLwotCQlyZXQgPSBtbWJfc3luYygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwogCQlyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwpAQCAtODMsMjIgJiM0Mzs4MCwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZnN5bmNfbm9qb3VybmFsKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiAJCQkJaW50IGRhdGFzeW5jLCBib29sICpuZWVkc19iYXJyaWVyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX2lub2RlOwotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKLQkJLm5yX3RvX3dyaXRlID0gMCwKLQl9OwogCWludCByZXQ7CiAKLQlyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCAmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzLAotCQkJCXN0YXJ0LCBlbmQsIGRhdGFzeW5jKTsKJiM0MzsJcmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQotCS8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovCi0JcmV0ID0gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgJmFtcDt3YmMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlyZXQgPSBleHQ0X3N5bmNfcGFyZW50KGlub2RlKTsKIAogCWlmICh0ZXN0X29wdChpbm9kZS0mZ3Q7aV9zYiwgQkFSUklFUikpCkBAIC0xNTYsNiAmIzQzOzE0MiwxMCBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQogCWlmIChzYl9yZG9ubHkoaW5vZGUtJmd0O2lfc2IpKQogCQlnb3RvIG91dDsKIAomIzQzOwlyZXQgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsKSB7CiAJCXJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLAogCQkJCQkgICAmYW1wO25lZWRzX2JhcnJpZXIpOwpAQCAtMTY0LDEwICYjNDM7MTU0LDYgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQogCS8qCiAJICogIFRoZSBjYWxsZXImIzM5O3MgZmlsZW1hcF9mZGF0YXdyaXRlKCkvd2FpdCB3aWxsIHN5bmMgdGhlIGRhdGEuCiAJICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uMGMyMjBiNTM1NTkwZjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE4Niw2ICYjNDM7MTg2LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJaWYgKEVYVDRfSShpbm9kZSktJmd0O2lfZmxhZ3MgJmFtcDsgRVhUNF9FQV9JTk9ERV9GTCkKIAkJZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7CiAJaWYgKGlub2RlLSZndDtpX25saW5rKSB7CiYjNDM7CQlzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjsKJiM0MzsKIAkJLyoKIAkJICogSWYgdGhlcmUmIzM5O3MgZGlydHkgcGFnZSB3aWxsIGxlYWQgdG8gZGF0YSBsb3NzLCB1c2VyCiAJCSAqIGNvdWxkIHNlZSBzdGFsZSBkYXRhLgpAQCAtMTk1LDkgJiM0MzsxOTcsOSBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJCWV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgJiMzNDtkYXRhIHdpbGwgYmUgbG9zdCYjMzQ7KTsKIAogCQl0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbCgmYW1wO2lub2RlLSZndDtpX2RhdGEpOwotCQkvKiBBdm9pZCBtYmFsbG9jIHNwZWNpYWwgaW5vZGUgd2hpY2ggaGFzIG5vIHByb3BlciBpb3BzICovCi0JCWlmICghRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O3Nfam91cm5hbCkKLQkJCW1tYl9zeW5jKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwkJbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7CiYjNDM7CQlpZiAobW1iKQomIzQzOwkJCW1tYl9zeW5jKG1tYik7CiAJCWdvdG8gbm9fZGVsZXRlOwogCX0KIApAQCAtMzQ1Miw2ICYjNDM7MzQ1NCw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KQogc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWw7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwogCiAJaWYgKGpvdXJuYWwpIHsKIAkJaWYgKGpiZDJfdHJhbnNhY3Rpb25fY29tbWl0dGVkKGpvdXJuYWwsCkBAIC0zNDYyLDggJiM0MzszNDY1LDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKJiM0MzsJbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7CiAJLyogQW55IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gd3JpdGU/ICovCi0JaWYgKG1tYl9oYXNfYnVmZmVycygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKSkKJiM0MzsJaWYgKG1tYiAmYW1wOyZhbXA7IG1tYl9oYXNfYnVmZmVycyhtbWIpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DOwogfQpAQCAtNTgzOCwyNCAmIzQzOzU4NDIsMzggQEAgaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiAJCWVyciA9IGV4dDRfZmNfY29tbWl0KEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwsCiAJCQkJCQlFWFQ0X0koaW5vZGUpLSZndDtpX3N5bmNfdGlkKTsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CQlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KIAotCQllcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCAmYW1wO2lsb2MpOwomIzQzO2ludCBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiYjNDM7CXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2pvdXJuYWwpKQomIzQzOwkJcmV0dXJuIC1FRlNDT1JSVVBURUQ7CiYjNDM7CiYjNDM7CWVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsICZhbXA7aWxvYyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwltbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwomIzQzOwlpZiAobW1iKSB7CiYjNDM7CQllcnIgPSBtbWJfc3luYyhtbWIpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJLyoKLQkJICogc3luYygyKSB3aWxsIGZsdXNoIHRoZSB3aG9sZSBidWZmZXIgY2FjaGUuIE5vIG5lZWQgdG8gZG8KLQkJICogaXQgaGVyZSBzZXBhcmF0ZWx5IGZvciBlYWNoIGlub2RlLgotCQkgKi8KLQkJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMpCi0JCQlzeW5jX2RpcnR5X2J1ZmZlcihpbG9jLmJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoaWxvYy5iaCkgJmFtcDsmYW1wOyAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7Ci0JCQlleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLSZndDtiX2Jsb2NrbnIsIEVJTywKLQkJCQkJICAgICAgICYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZSYjMzQ7KTsKLQkJCWVyciA9IC1FSU87Ci0JCX0KLQkJYnJlbHNlKGlsb2MuYmgpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CXN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7CiYjNDM7CQlleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLSZndDtiX2Jsb2NrbnIsIEVJTywKJiM0MzsJCQkJICAgICAgICYjMzQ7SU8gZXJyb3Igc3luY2luZyBpbm9kZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU87CiAJfQomIzQzO291dDoKJiM0MzsJYnJlbHNlKGlsb2MuYmgpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uYWUzM2Y1YmNiMTMzMTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTE0MzAsNyAmIzQzOzE0MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJSU5JVF9XT1JLKCZhbXA7ZWktJmd0O2lfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfZmNfbG9jayk7Ci0JbW1iX2luaXQoJmFtcDtlaS0mZ3Q7aV9tZXRhZGF0YV9iaHMsICZhbXA7ZWktJmd0O3Zmc19pbm9kZS5pX2RhdGEpOwomIzQzOwllaS0mZ3Q7aV9tZXRhZGF0YV9iaHMgPSBOVUxMOwogI2lmZGVmIENPTkZJR19MT0NLREVQCiAJbG9ja2RlcF9zZXRfc3ViY2xhc3MoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSwgSV9EQVRBX1NFTV9OT1JNQUwpOwogI2VuZGlmCkBAIC0xNDUxLDYgJiM0MzsxNDUxLDcgQEAgc3RhdGljIGludCBleHQ0X2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJZnNjcnlwdF9mcmVlX2lub2RlKGlub2RlKTsKJiM0MzsJa2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpOwogCWlmICghbGlzdF9lbXB0eSgmYW1wOyhFWFQ0X0koaW5vZGUpLSZndDtpX2ZjX2xpc3QpKSkgewogCQlwcl93YXJuKCYjMzQ7JXM6IGlub2RlICVsbHUgc3RpbGwgaW4gZmMgbGlzdCYjMzQ7LAogCQkJX19mdW5jX18sIGlub2RlLSZndDtpX2lubyk7CkBAIC0xNTI5LDkgJiM0MzsxNTMwLDExIEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogCiB2b2lkIGV4dDRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKJiM0MzsJc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTsKJiM0MzsKIAlleHQ0X2ZjX2RlbChpbm9kZSk7Ci0JaWYgKCFFWFQ0X1NCKGlub2RlLSZndDtpX3NiKS0mZ3Q7c19qb3VybmFsKQotCQltbWJfaW52YWxpZGF0ZSgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKJiM0MzsJaWYgKG1tYikKJiM0MzsJCW1tYl9pbnZhbGlkYXRlKG1tYik7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiAJLyoKQEAgLTE2MDUsOSAmIzQzOzE2MDgsMTMgQEAgc3RhdGljIGludCBleHQ0X25mc19jb21taXRfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSkKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewogCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwKIAl9OwomIzQzOwlpbnQgcmV0OwogCiAJdHJhY2VfZXh0NF9uZnNfY29tbWl0X21ldGFkYXRhKGlub2RlKTsKLQlyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgJmFtcDt3YmMpOwomIzQzOwlyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCAmYW1wO3diYyk7CiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX01FVEFEQVRBX1dSSVRFQkFDSykKJiM0MzsJCXJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgJmFtcDt3YmMpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX1FVT1RBCkBAIC0xNjY0LDYgJiM0MzsxNjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHsKIAkuZnJlZV9pbm9kZQk9IGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gZXh0NF9kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IGV4dDRfd3JpdGVfaW5vZGUsCiYjNDM7CS5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLAogCS5kaXJ0eV9pbm9kZQk9IGV4dDRfZGlydHlfaW5vZGUsCiAJLmRyb3BfaW5vZGUJPSBleHQ0X2Ryb3BfaW5vZGUsCiAJLmV2aWN0X2lub2RlCT0gZXh0NF9ldmljdF9pbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuYwppbmRleCBjNmNjYTVkMDBmZmQ3ZS4uOTE2ZjVjNGNkY2YzOTAgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZGlyLmMKQEAgLTEwNTMsMTEgJiM0MzsxMDUzLDcgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKQogCQkJbnJfc2xvdHMtLTsKIAkJfQogCQltbWJfbWFya19idWZmZXJfZGlydHkoYmgsICZhbXA7TVNET1NfSShkaXIpLSZndDtpX21ldGFkYXRhX2Jocyk7Ci0JCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCWJyZWxzZShiaCk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKIAogCQkvKiBwb3MgaXMgKm5leHQqIGRlJiMzOTtzIHBvc2l0aW9uLCBzbyB0aGlzIGRvZXMgYC0gc2l6ZW9mKGRlKSYjMzk7ICovCiAJCXBvcyAmIzQzOz0gKChvcmlnX3Nsb3RzIC0gbnJfc2xvdHMpICogc2l6ZW9mKCpkZSkpIC0gc2l6ZW9mKCpkZSk7CkBAIC0xMDg4LDExICYjNDM7MTA4NCw3IEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbykKIAkJbnJfc2xvdHMtLTsKIAl9CiAJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCAmYW1wO01TRE9TX0koZGlyKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCWVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAlicmVsc2UoYmgpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiAJaW5vZGVfaW5jX2l2ZXJzaW9uKGRpcik7CiAKIAlpZiAobnJfc2xvdHMpIHsKQEAgLTExMDksMTIgJiM0MzsxMTAxLDEyIEBAIGludCBmYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBmYXRfc2xvdF9pbmZvICpzaW5mbykKIAl9CiAKIAlmYXRfdHJ1bmNhdGVfdGltZShkaXIsIE5VTEwsIEZBVF9VUERBVEVfQVRJTUUgfCBGQVRfVVBEQVRFX0NNVElNRSk7CiYjNDM7CWVyciA9IDA7CiYjNDM7CW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQkodm9pZClmYXRfc3luY19pbm9kZShkaXIpOwotCWVsc2UKLQkJbWFya19pbm9kZV9kaXJ0eShkaXIpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfcmVtb3ZlX2VudHJpZXMpOwogCkBAIC0xMTQ0LDIxICYjNDM7MTEzNiwxMSBAQCBzdGF0aWMgaW50IGZhdF96ZXJvZWRfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwgc2VjdG9yX3QgYmxrbnIsIGludCBucl91c2VkLAogCQluJiM0MzsmIzQzOzsKIAkJYmxrbnImIzQzOyYjNDM7OwogCQlpZiAobiA9PSBucl9iaHMpIHsKLQkJCWlmIChJU19ESVJTWU5DKGRpcikpIHsKLQkJCQllcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlnb3RvIGVycm9yOwotCQkJfQogCQkJZm9yIChpID0gMDsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KQogCQkJCWJyZWxzZShiaHNbaV0pOwogCQkJbiA9IDA7CiAJCX0KIAl9Ci0JaWYgKElTX0RJUlNZTkMoZGlyKSkgewotCQllcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0JfQogCWZvciAoaSA9IDA7IGkgJmx0OyBuOyBpJiM0MzsmIzQzOykKIAkJYnJlbHNlKGJoc1tpXSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaAppbmRleCA5OWVkOTIyOGE2NzdiZS4uZGNiNWJhNzU3MDczZWQgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmF0LmgKQEAgLTQyMSw3ICYjNDM7NDIxLDYgQEAgZXh0ZXJuIHZvaWQgZmF0X2RldGFjaChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7CiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfYnVpbGRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCXN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBsb2ZmX3QgaV9wb3MpOwotZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgZmF0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjLAogCQkJICB2b2lkICgqc2V0dXApKHN0cnVjdCBzdXBlcl9ibG9jayAqKSk7CiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDM3ZTcwNDliNGM4YzQ0Li4xYzgzNWNhNWYyMWE1MSAxMDA2NDQKLS0tIGEvZnMvZmF0L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mYXQvZmlsZS5jCkBAIC0xOTAsOCAmIzQzOzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiAJc3RydWN0IGlub2RlICpmYXRfaW5vZGUgPSBNU0RPU19TQihpbm9kZS0mZ3Q7aV9zYiktJmd0O2ZhdF9pbm9kZTsKIAlpbnQgZXJyOwogCi0JZXJyID0gbW1iX2ZzeW5jX25vZmx1c2goZmlscCwgJmFtcDtNU0RPU19JKGlub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQkJc3RhcnQsIGVuZCwgZGF0YXN5bmMpOwomIzQzOwllcnIgPSBzaW1wbGVfZnN5bmNfbm9mbHVzaChmaWxwLCBzdGFydCwgZW5kLCBkYXRhc3luYyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzMyLDE1ICYjNDM7MzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApCiAJfQogCU1TRE9TX0koaW5vZGUpLSZndDtpX2F0dHJzIHw9IEFUVFJfQVJDSDsKIAlmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlpZiAod2FpdCkgewotCQllcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAkJaWYgKGVycikgewogCQkJTVNET1NfSShpbm9kZSktJmd0O2lfc3RhcnQgPSBpX3N0YXJ0OwogCQkJTVNET1NfSShpbm9kZSktJmd0O2lfbG9nc3RhcnQgPSBpX2xvZ3N0YXJ0OwogCQkJcmV0dXJuIGVycjsKIAkJfQotCX0gZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQogCiAJLyogV3JpdGUgYSBuZXcgRU9GLCBhbmQgZ2V0IHRoZSByZW1haW5pbmcgY2x1c3RlciBjaGFpbiBmb3IgZnJlZWluZy4gKi8KIAlpZiAoc2tpcCkgewpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCAzYWE1MjQ4MWFkNWNmMy4uZTNiYjdiNDcxM2YyYWMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC02MjMsNyAmIzQzOzYyMywzNCBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpOwogCi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KTsKJiM0MztzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlsb2ZmX3QgaV9wb3M7CiYjNDM7CXNlY3Rvcl90IGJsb2NrbnI7CiYjNDM7CWludCBvZmZzZXQ7CiYjNDM7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaV9wb3MgPSBmYXRfaV9wb3NfcmVhZChzYmksIGlub2RlKTsKJiM0MzsJaWYgKCFpX3BvcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmYXRfZ2V0X2Jsa25yX29mZnNldChzYmksIGlfcG9zLCAmYW1wO2Jsb2NrbnIsICZhbXA7b2Zmc2V0KTsKJiM0MzsJYmggPSBzYl9maW5kX2dldF9ibG9ja19ub25hdG9taWMoaW5vZGUtJmd0O2lfc2IsIGJsb2NrbnIpOwomIzQzOwkvKgomIzQzOwkgKiBCdWZmZXIgcHJlc2VudD8gV2UgbGVhdmUgYnVmZmVyX2RpcnR5IGNoZWNrIGZvciBzeW5jX2RpcnR5X2J1ZmZlcigpCiYjNDM7CSAqIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy4KJiM0MzsJICovCiYjNDM7CWlmIChiaCAmYW1wOyZhbXA7IGJ1ZmZlcl91cHRvZGF0ZShiaCkpCiYjNDM7CQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXJldHVybiBtbWJfc3luYygmYW1wO01TRE9TX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7fQogCiBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTY0MCw3ICYjNDM7NjY3LDcgQEAgc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCSAqIGFueSBjb3JydXB0aW9uIG9uIHRoZSBuZXh0IGFjY2VzcyB0byB0aGUgY2x1c3RlcgogCQkgKiBjaGFpbiBmb3IgdGhlIGZpbGUuCiAJCSAqLwotCQllcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOwogCQlpZiAoZXJyKSB7CiAJCQlmYXRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX1dBUk5JTkcsICYjMzQ7RmFpbGVkIHRvICYjMzQ7CiAJCQkJCSYjMzQ7dXBkYXRlIG9uIGRpc2sgaW5vZGUgZm9yIHVudXNlZCAmIzM0OwpAQCAtODU0LDcgJiM0Mzs4ODEsNyBAQCBzdGF0aWMgaW50IGZhdF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQomIzQzO3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKHNiKTsKQEAgLTg2Myw3ICYjNDM7ODkwLDcgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIAlzdHJ1Y3QgdGltZXNwZWM2NCBtdGltZTsKIAlsb2ZmX3QgaV9wb3M7CiAJc2VjdG9yX3QgYmxvY2tucjsKLQlpbnQgZXJyLCBvZmZzZXQ7CiYjNDM7CWludCBvZmZzZXQ7CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IE1TRE9TX1JPT1RfSU5PKQogCQlyZXR1cm4gMDsKQEAgLTkwNywxMSAmIzQzOzkzNCw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7c2JpLSZndDtpbm9kZV9oYXNoX2xvY2spOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQllcnIgPSAwOwotCWlmICh3YWl0KQotCQllcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJYnJlbHNlKGJoKTsKLQlyZXR1cm4gZXJyOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpAQCAtOTI1LDIzICYjNDM7OTUwLDE3IEBAIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQllcnIgPSBmYXRfY2x1c3RlcnNfZmx1c2goc2IpOwogCQltdXRleF91bmxvY2soJmFtcDtNU0RPU19TQihzYiktJmd0O3NfbG9jayk7CiAJfSBlbHNlCi0JCWVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiYjNDM7CQllcnIgPSBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChmYXRfc3luY19pbm9kZSk7Ci0KIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0gewogCS5hbGxvY19pbm9kZQk9IGZhdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IGZhdF9mcmVlX2lub2RlLAogCS53cml0ZV9pbm9kZQk9IGZhdF93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBmYXRfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSBmYXRfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGZhdF9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBmYXRfc3RhdGZzLApkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggMzAyN2VmNTNhZjIxNGMuLmJlMThmNmI1ODE5YmE3IDEwMDY0NAotLS0gYS9mcy9mYXQvbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZhdC9taXNjLmMKQEAgLTE0NiwxNiAmIzQzOzE0NiwxNyBAQCBpbnQgZmF0X2NoYWluX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2RjbHVzLCBpbnQgbnJfY2x1c3RlcikKIAl9IGVsc2UgewogCQlNU0RPU19JKGlub2RlKS0mZ3Q7aV9zdGFydCA9IG5ld19kY2x1czsKIAkJTVNET1NfSShpbm9kZSktJmd0O2lfbG9nc3RhcnQgPSBuZXdfZGNsdXM7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJLyoKIAkJICogU2luY2UgZ2VuZXJpY193cml0ZV9zeW5jKCkgc3luY2hyb25pemVzIHJlZ3VsYXIgZmlsZXMgbGF0ZXIsCiAJCSAqIHdlIHN5bmMgaGVyZSBvbmx5IGRpcmVjdG9yaWVzLgogCQkgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBJU19ESVJTWU5DKGlub2RlKSkgewotCQkJcmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwomIzQzOwkJCXJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UKLQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQomIzQzOwogCX0KIAlpZiAobmV3X2ZjbHVzICE9IChpbm9kZS0mZ3Q7aV9ibG9ja3MgJmd0OyZndDsgKHNiaS0mZ3Q7Y2x1c3Rlcl9iaXRzIC0gOSkpKSB7CiAJCWZhdF9mc19lcnJvcl9yYXRlbGltaXQoCmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jCmluZGV4IDBmZDI5NzFhZDRiMTMxLi44NjhlZjA5MTA0OGU0MCAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTI1MiwxMiAmIzQzOzI1MiwxMSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAkJcmV0dXJuIGVycjsKIAogCWZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCSh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqKioqIENyZWF0ZSBhIGZpbGUgKi8KQEAgLTQ3MywyMSAmIzQzOzQ3MiwyMCBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLAogCQkJCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyB8PSBBVFRSX0hJRERFTjsKIAkJCWVsc2UKIAkJCQlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgJmFtcDs9IH5BVFRSX0hJRERFTjsKJiM0MzsJCQltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAJCQlpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkgewotCQkJCWVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7CiYjNDM7CQkJCWVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTsKIAkJCQlpZiAoZXJyKSB7CiAJCQkJCU1TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9hdHRycyA9IG9sZF9hdHRyczsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJfSBlbHNlCi0JCQkJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwomIzQzOwkJCX0KIAogCQkJaW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpOwogCQkJZmF0X3RydW5jYXRlX3RpbWUob2xkX2RpciwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiAJCQlpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkKLQkJCQkodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTsKLQkJCWVsc2UKLQkJCQltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwomIzQzOwkJCQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9kaXIsIDEpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC01MTgsMjYgJiM0Mzs1MTYsMjEgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSwKIAkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzIHw9IEFUVFJfSElEREVOOwogCWVsc2UKIAkJTVNET1NfSShvbGRfaW5vZGUpLSZndDtpX2F0dHJzICZhbXA7PSB+QVRUUl9ISURERU47Ci0JaWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHsKLQkJZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3JfaW5vZGU7Ci0JfSBlbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKLQogCWlmICh1cGRhdGVfZG90ZG90KSB7CiAJCWZhdF9zZXRfc3RhcnQoZG90ZG90X2RlLCBNU0RPU19JKG5ld19kaXIpLSZndDtpX2xvZ3N0YXJ0KTsKIAkJbW1iX21hcmtfYnVmZmVyX2RpcnR5KGRvdGRvdF9iaCwKIAkJCQkgICAgICAmYW1wO01TRE9TX0kob2xkX2lub2RlKS0mZ3Q7aV9tZXRhZGF0YV9iaHMpOwotCQlpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkgewotCQkJZXJyID0gc3luY19kaXJ0eV9idWZmZXIoZG90ZG90X2JoKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBlcnJvcl9kb3Rkb3Q7Ci0JCX0KIAkJZHJvcF9ubGluayhvbGRfZGlyKTsKIAkJaWYgKCFuZXdfaW5vZGUpCiAJCQlpbmNfbmxpbmsobmV3X2Rpcik7CiAJfQomIzQzOwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiYjNDM7CWlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyb3JfZG90ZG90OwomIzQzOwl9CiYjNDM7CiAKIAllcnIgPSBmYXRfcmVtb3ZlX2VudHJpZXMob2xkX2RpciwgJmFtcDtvbGRfc2luZm8pOwkvKiBhbmQgcmVsZWFzZXMgYmggKi8KIAlvbGRfc2luZm8uYmggPSBOVUxMOwpAQCAtNTQ1LDEwICYjNDM7NTM4LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSwKIAkJZ290byBlcnJvcl9kb3Rkb3Q7CiAJaW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpOwogCWZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsICZhbXA7dHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTsKIAlpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwomIzQzOwkJZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTsKIAogCWlmIChuZXdfaW5vZGUpIHsKIAkJZHJvcF9ubGluayhuZXdfaW5vZGUpOwpAQCAtNTcxLDE0ICYjNDM7NTYzLDE1IEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsCiAJCQkJICAgICAgJmFtcDtNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfbWV0YWRhdGFfYmhzKTsKIAkJY29ycnVwdCB8PSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpOwogCX0KLWVycm9yX2lub2RlOgogCWZhdF9kZXRhY2gob2xkX2lub2RlKTsKIAlmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTsKIAlNU0RPU19JKG9sZF9pbm9kZSktJmd0O2lfYXR0cnMgPSBvbGRfYXR0cnM7CiAJaWYgKG5ld19pbm9kZSkgewogCQlmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTsKLQkJaWYgKGNvcnJ1cHQpCi0JCQljb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7CiYjNDM7CQlpZiAoY29ycnVwdCkgewomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTsKJiM0MzsJCQljb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQkvKgogCQkgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0CmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfdmZhdC5jIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwppbmRleCBlOTA5NDQ3ODczZTM2NC4uMzA4MTU4ODk1YjFkOGEgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtNjc4LDEwICYjNDM7Njc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLAogCiAJLyogdXBkYXRlIHRpbWVzdGFtcCAqLwogCWZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCWlmIChJU19ESVJTWU5DKGRpcikpCi0JCSh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiYjNDM7CQllcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiBjbGVhbnVwOgogCWtmcmVlKHNsb3RzKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTA0LDkgJiM0Mzs5MDMsOSBAQCBzdGF0aWMgaW50IHZmYXRfZ2V0X2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKIAogc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpZiAoSVNfRElSU1lOQyhkaXIpKQotCQlyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwlpZiAoSVNfRElSU1lOQyhkaXIpKQomIzQzOwkJcmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC05MjEsMTQgJiM0Mzs5MjAsMTQgQEAgc3RhdGljIGludCB2ZmF0X3VwZGF0ZV9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQomIzQzO3N0YXRpYyBpbnQgdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiB7CiAJaW5vZGVfaW5jX2l2ZXJzaW9uKGRpcik7CiAJZmF0X3RydW5jYXRlX3RpbWUoZGlyLCB0cywgRkFUX1VQREFURV9DTVRJTUUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJaWYgKElTX0RJUlNZTkMoZGlyKSkKLQkJKHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKJiM0MzsJCXJldHVybiBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKQEAgLTk5Niw3ICYjNDM7OTk1LDcgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJb2xkX3NpbmZvLmJoID0gTlVMTDsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yX2RvdGRvdDsKLQl2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgJmFtcDt0cyk7CiYjNDM7CWVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCAmYW1wO3RzKTsKIAogCWlmIChuZXdfaW5vZGUpIHsKIAkJZHJvcF9ubGluayhuZXdfaW5vZGUpOwpAQCAtMTAyNCw4ICYjNDM7MTAyMywxMCBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTsKIAlpZiAobmV3X2lub2RlKSB7CiAJCWZhdF9hdHRhY2gobmV3X2lub2RlLCBuZXdfaV9wb3MpOwotCQlpZiAoY29ycnVwdCkKLQkJCWNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTsKJiM0MzsJCWlmIChjb3JydXB0KSB7CiYjNDM7CQkJbWFya19pbm9kZV9kaXJ0eShuZXdfaW5vZGUpOwomIzQzOwkJCWNvcnJ1cHQgfD0gc3luY19pbm9kZV9tZXRhZGF0YShuZXdfaW5vZGUsIDEpOwomIzQzOwkJfQogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIElmIG5ldyBlbnRyeSB3YXMgbm90IHNoYXJpbmcgdGhlIGRhdGEgY2x1c3RlciwgaXQKQEAgLTExMjMsMTAgJiM0MzsxMTI0LDEzIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWVfZXhjaGFuZ2Uoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5CiAJCQl2ZmF0X21vdmVfbmxpbmsobmV3X2Rpciwgb2xkX2Rpcik7CiAJfQogCi0JdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsICZhbXA7dHMpOwomIzQzOwllcnIgPSB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgJmFtcDt0cyk7CiAJLyogaWYgZGlyZWN0b3JpZXMgYXJlIG5vdCB0aGUgc2FtZSwgdXBkYXRlIG5ld19kaXIgYXMgd2VsbCAqLwotCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCi0JCXZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCAmYW1wO3RzKTsKJiM0MzsJaWYgKG9sZF9kaXIgIT0gbmV3X2RpcikgewomIzQzOwkJaW50IGVycjIgPSB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEobmV3X2RpciwgJmFtcDt0cyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQllcnIgPSBlcnIyOwomIzQzOwl9CiAKIG91dDoKIAlicmVsc2Uob2xkX2RvdGRvdF9iaCk7CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTE4NTEsNiAmIzQzOzE4NTEsMjIgQEAgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogCQlpZiAocmV0ID09IDApCiAJCQlyZXQgPSBlcnI7CiAJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZAomIzQzOwkgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrPwomIzQzOwkgKi8KJiM0MzsJaWYgKHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfQUxMICZhbXA7JmFtcDsgIXdiYy0mZ3Q7Zm9yX3N5bmMgJmFtcDsmYW1wOwomIzQzOwkgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX01FVEFEQVRBX1dSSVRFQkFDSykgewomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwkJaW5vZGVfc3RhdGVfY2xlYXIoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQllcnIgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19vcC0mZ3Q7c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgd2JjKTsKJiM0MzsJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KIAl3YmMtJmd0O3VucGlubmVkX25ldGZzX3diID0gZmFsc2U7CiAJdHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7CiAJcmV0dXJuIHJldDsKQEAgLTE4OTIsMTQgJiM0MzsxOTA4LDE3IEBAIHN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCS8qCiAJICogSWYgdGhlIGlub2RlIGlzIGFscmVhZHkgZnVsbHkgY2xlYW4sIHRoZW4gdGhlcmUmIzM5O3Mgbm90aGluZyB0byBkby4KIAkgKgotCSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgcGFnZXMgYXJlCi0JICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWYKLQkgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uCiYjNDM7CSAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yCiYjNDM7CSAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORQomIzQzOwkgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciB0aGVtLgogCSAqLwotCWlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSAmYW1wOyZhbXA7Ci0JICAgICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCB8fAotCSAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLSZndDtpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSAmYW1wOyBJX0RJUlRZX0FMTCkpIHsKJiM0MzsJCWlmICh3YmMtJmd0O3N5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCWlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtJmd0O2lfbWFwcGluZywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpICZhbXA7IElfTUVUQURBVEFfV1JJVEVCQUNLKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQogCWlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9TWU5DKTsKIAl3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDVhMGQyNzYzNzlkMTNiLi4yN2Q3ZGMxNmZjYjBhMCAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9saWJmcy5jCkBAIC0xNTU5LDkgJiM0MzsxNTU5LDEyIEBAIGludCBzaW1wbGVfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IElfRElSVFlfQUxMKSkKJiM0MzsJaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOwomIzQzOwkJCShJX0RJUlRZX0FMTCB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpCiAJCWdvdG8gb3V0OwotCWlmIChkYXRhc3luYyAmYW1wOyZhbXA7ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX0RJUlRZX0RBVEFTWU5DKSkKJiM0MzsJaWYgKGRhdGFzeW5jICZhbXA7JmFtcDsKJiM0MzsJICAgICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOwomIzQzOwkJCShJX0RJUlRZX0RBVEFTWU5DIHwgSV9TWU5DIHwgSV9NRVRBREFUQV9XUklURUJBQ0spKSkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmMKaW5kZXggMzYxZDI2ZDg3ZDJlMmQuLjJjYTE2Zjg0OWQ1YWMwIDEwMDY0NAotLS0gYS9mcy9taW5peC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9taW5peC9kaXIuYwpAQCAtMjMsNyAmIzQzOzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkuaXRlcmF0ZV9zaGFyZWQJPSBtaW5peF9yZWFkZGlyLAotCS5mc3luYwkJPSBtaW5peF9mc3luYywKJiM0MzsJLmZzeW5jCQk9IHNpbXBsZV9mc3luYywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9taW5peC9maWxlLmMgYi9mcy9taW5peC9maWxlLmMKaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NAotLS0gYS9mcy9taW5peC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvZmlsZS5jCkBAIC0xMCwxMyAmIzQzOzEwLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwogI2luY2x1ZGUgJiMzNDttaW5peC5oJiMzNDsKIAotaW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKLXsKLQlyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsCi0JCQkmYW1wO21pbml4X2koZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7Ci19Ci0KIC8qCiAgKiBXZSBoYXZlIG1vc3RseSBOVUxMcyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgT0sgZm9yCiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS4KQEAgLTI2LDcgJiM0MzsxOSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkX2l0ZXIJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAogCS53cml0ZV9pdGVyCT0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsCiAJLm1tYXBfcHJlcGFyZQk9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsCi0JLmZzeW5jCQk9IG1pbml4X2ZzeW5jLAomIzQzOwkuZnN5bmMJCT0gc2ltcGxlX2ZzeW5jLAogCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBjMzBjYzU5MDY5OGQ2Zi4uZGFmODNlNGZmMjVjODEgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtMjQsNiAmIzQzOzI0LDggQEAKIAogc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiYjNDM7c3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKTsKIAogdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLApAQCAtMTI4LDYgJiM0MzsxMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSBtaW5peF9hbGxvY19pbm9kZSwKIAkuZnJlZV9pbm9kZQk9IG1pbml4X2ZyZWVfaW5fY29yZV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBtaW5peF93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhLAogCS5ldmljdF9pbm9kZQk9IG1pbml4X2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBtaW5peF9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBtaW5peF9zdGF0ZnMsCkBAIC02MzAsNyAmIzQzOzYzMyw3IEBAIHN0cnVjdCBpbm9kZSAqbWluaXhfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKIC8qCiAgKiBUaGUgbWluaXggVjEgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiYjNDM7c3RhdGljIGludCBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7CiAJc3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlOwpAQCAtNjM5LDcgJiM0Mzs2NDIsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCiAJcmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwogCWlmICghcmF3X2lub2RlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXJldHVybiAtRUlPOwogCXJhd19pbm9kZS0mZ3Q7aV9tb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKIAlyYXdfaW5vZGUtJmd0O2lfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpOwogCXJhd19pbm9kZS0mZ3Q7aV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7CkBAIC02NTEsMTMgJiM0Mzs2NTQsMTUgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAllbHNlIGZvciAoaSA9IDA7IGkgJmx0OyA5OyBpJiM0MzsmIzQzOykKIAkJcmF3X2lub2RlLSZndDtpX3pvbmVbaV0gPSBtaW5peF9pbm9kZS0mZ3Q7dS5pMV9kYXRhW2ldOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlyZXR1cm4gYmg7CiYjNDM7CWJyZWxzZShiaCk7CiYjNDM7CXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoKICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS4KICAqLwotc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKJiM0MztzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDsKIAlzdHJ1Y3QgbWluaXgyX2lub2RlICogcmF3X2lub2RlOwpAQCAtNjY2LDcgJiM0Mzs2NzEsNyBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogCiAJcmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwogCWlmICghcmF3X2lub2RlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXJldHVybiAtRUlPOwogCXJhd19pbm9kZS0mZ3Q7aV9tb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKIAlyYXdfaW5vZGUtJmd0O2lfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpOwogCXJhd19pbm9kZS0mZ3Q7aV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7CkBAIC02ODAsMjkgJiM0Mzs2ODUsNDIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIAllbHNlIGZvciAoaSA9IDA7IGkgJmx0OyAxMDsgaSYjNDM7JiM0MzspCiAJCXJhd19pbm9kZS0mZ3Q7aV96b25lW2ldID0gbWluaXhfaW5vZGUtJmd0O3UuaTJfZGF0YVtpXTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JcmV0dXJuIGJoOwomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiYjNDM7ewomIzQzOwlpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpCiYjNDM7CQlyZXR1cm4gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTsKJiM0MzsJcmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiYjNDM7CXZvaWQgKnJhd19pbm9kZTsKIAogCWlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSkKLQkJYmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpOwomIzQzOwkJcmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLSZndDtpX3NiLCBpbm9kZS0mZ3Q7aV9pbm8sICZhbXA7YmgpOwogCWVsc2UKLQkJYmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpOwotCWlmICghYmgpCiYjNDM7CQlyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGlub2RlLSZndDtpX2lubywgJmFtcDtiaCk7CiYjNDM7CWlmICghcmF3X2lub2RlKQogCQlyZXR1cm4gLUVJTzsKLQlpZiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgJmFtcDsmYW1wOyBidWZmZXJfZGlydHkoYmgpKSB7Ci0JCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKLQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICZhbXA7JmFtcDsgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKLQkJCXByaW50aygmIzM0O0lPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cbiYjMzQ7LAotCQkJCWlub2RlLSZndDtpX3NiLSZndDtzX2lkLCBpbm9kZS0mZ3Q7aV9pbm8pOwotCQkJZXJyID0gLUVJTzsKLQkJfQomIzQzOwllcnIgPSBtbWJfc3luYygmYW1wO21pbml4X2koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewomIzQzOwkJcHJpbnRrKCYjMzQ7SU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bGx4XVxuJiMzNDssCiYjNDM7CQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfaWQsIGlub2RlLSZndDtpX2lubyk7CiYjNDM7CQllcnIgPSAtRUlPOwogCX0KLQlicmVsc2UgKGJoKTsKJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShiaCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jCmluZGV4IGViYzlmNmEzNzlmZTNhLi40MjVlM2MxNjI5MzUwNCAxMDA2NDQKLS0tIGEvZnMvdWRmL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9kaXIuYwpAQCAtMTU3LDYgJiM0MzsxNTcsNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9kaXJfb3BlcmF0aW9ucyA9IHsKIAkucmVhZAkJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkuaXRlcmF0ZV9zaGFyZWQJCT0gdWRmX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCQk9IHVkZl9pb2N0bCwKLQkuZnN5bmMJCQk9IHVkZl9mc3luYywKJiM0MzsJLmZzeW5jCQkJPSBzaW1wbGVfZnN5bmMsCiAJLnNldGxlYXNlCQk9IGdlbmVyaWNfc2V0bGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggZjdmMTQyMmRlMzBmYTQuLjU3ZDExNjA2YTJhNzc2IDEwMDY0NAotLS0gYS9mcy91ZGYvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3VkZi9maWxlLmMKQEAgLTE5OCwxMyAmIzQzOzE5OCw2IEBAIHN0YXRpYyBpbnQgdWRmX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB1ZGZfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKQotewotCXJldHVybiBtbWJfZnN5bmMoZmlsZSwKLQkJCSZhbXA7VURGX0koZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0KS0mZ3Q7aV9tZXRhZGF0YV9iaHMsCi0JCQlzdGFydCwgZW5kLCBkYXRhc3luYyk7Ci19Ci0KIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZF9pdGVyCQk9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsCiAJLnVubG9ja2VkX2lvY3RsCQk9IHVkZl9pb2N0bCwKQEAgLTIxMiw3ICYjNDM7MjA1LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0gewogCS5tbWFwCQkJPSB1ZGZfZmlsZV9tbWFwLAogCS53cml0ZV9pdGVyCQk9IHVkZl9maWxlX3dyaXRlX2l0ZXIsCiAJLnJlbGVhc2UJCT0gdWRmX3JlbGVhc2VfZmlsZSwKLQkuZnN5bmMJCQk9IHVkZl9mc3luYywKJiM0MzsJLmZzeW5jCQkJPSBzaW1wbGVfZnN5bmMsCiAJLnNwbGljZV9yZWFkCQk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQkJPSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLAogCS5sbHNlZWsJCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCkBAIC0yNTMsNiAmIzQzOzI0Niw4IEBAIHN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAogCXNldGF0dHJfY29weSgmYW1wO25vcF9tbnRfaWRtYXAsIGlub2RlLCBhdHRyKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJaWYgKElTX1NZTkMoaW5vZGUpKQomIzQzOwkJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLjY4YzZjMmJhOGVkMWEyIDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvaW5vZGUuYwpAQCAtNTEsOCAmIzQzOzUxLDYgQEAKIHN0cnVjdCB1ZGZfbWFwX3JxOwogCiBzdGF0aWMgdW1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5ICopOwotc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0YXRpYyBpbnQgdWRmX2FsbG9jX2lfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKTsKIHN0YXRpYyBpbnQgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLApAQCAtMTQyLDcgJiM0MzsxNDAsNyBAQCB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlpZiAoIWlub2RlLSZndDtpX25saW5rKSB7CiAJCQl3YW50X2RlbGV0ZSA9IDE7CiAJCQl1ZGZfc2V0c2l6ZShpbm9kZSwgMCk7Ci0JCQl1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7CiYjNDM7CQkJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpOwogCQl9CiAJCWlmIChpaW5mby0mZ3Q7aV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQiAmYW1wOyZhbXA7CiAJCSAgICBpbm9kZS0mZ3Q7aV9zaXplICE9IGlpbmZvLSZndDtpX2xlbkV4dGVudHMpIHsKQEAgLTkzNiwxMCAmIzQzOzkzNCw3IEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApCiAJaWluZm8tJmd0O2lfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gJiM0MzsgMTsKIAlpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7CiAKLQlpZiAoSVNfU1lOQyhpbm9kZSkpCi0JCXVkZl9zeW5jX2lub2RlKGlub2RlKTsKLQllbHNlCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXQgPSAwOwogb3V0X2ZyZWU6CiAJYnJlbHNlKHByZXZfZXBvcy5iaCk7CkBAIC0xMzI2LDEwICYjNDM7MTMyMSw3IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSkKIAl9CiB1cGRhdGVfdGltZToKIAlpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7Ci0JaWYgKElTX1NZTkMoaW5vZGUpKQotCQl1ZGZfc3luY19pbm9kZShpbm9kZSk7Ci0JZWxzZQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTcwNSwxNCAmIzQzOzE2OTcsMjggQEAgdm9pZCB1ZGZfdXBkYXRlX2V4dHJhX3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSkKIAkJaWluZm8tJmd0O2lfZXh0cmFQZXJtcyB8PSBGRV9QRVJNX09fREVMRVRFOwogfQogCi1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKLQlyZXR1cm4gdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgd2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOwotfQomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwomIzQzOwlpbnQgZXJyID0gMDsKIAotc3RhdGljIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCAxKTsKJiM0MzsJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsCiYjNDM7CQkJdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtJmd0O2lfc2IsCiYjNDM7CQkJCQkgICZhbXA7VURGX0koaW5vZGUpLSZndDtpX2xvY2F0aW9uLCAwKSk7CiYjNDM7CWlmICghYmgpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJc3luY19kaXJ0eV9idWZmZXIoYmgpOwomIzQzOwlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewomIzQzOwkJdWRmX3dhcm4oaW5vZGUtJmd0O2lfc2IsICYjMzQ7SU8gZXJyb3Igc3luY2luZyB1ZGYgaW5vZGUgWyUwOGxseF1cbiYjMzQ7LAomIzQzOwkJCSBpbm9kZS0mZ3Q7aV9pbm8pOwomIzQzOwkJZXJyID0gLUVJTzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWVyciA9IG1tYl9zeW5jKCZhbXA7VURGX0koaW5vZGUpLSZndDtpX21ldGFkYXRhX2Jocyk7CiYjNDM7b3V0OgomIzQzOwlicmVsc2UoYmgpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZSkKQEAgLTE3MjMsNyAmIzQzOzE3MjksNyBAQCBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZQogCQlpaW5mby0mZ3Q7aV9jcnRpbWUgPSB0aW1lOwogfQogCi1zdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpCiYjNDM7aW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZUVudHJ5ICpmZTsKQEAgLTE3MzIsNyAmIzQzOzE3MzgsNiBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpCiAJdWludDMyX3QgdWRmcGVybXM7CiAJdWludDE2X3QgaWNiZmxhZ3M7CiAJdWludDE2X3QgY3JjbGVuOwotCWludCBlcnIgPSAwOwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLSZndDtpX3NiKTsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTsKQEAgLTE5MzcsMTcgJiM0MzsxOTQyLDEwIEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKIAogCS8qIHdyaXRlIHRoZSBkYXRhIGJsb2NrcyAqLwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQlpZiAoZG9fc3luYykgewotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCWlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7Ci0JCQl1ZGZfd2Fybihpbm9kZS0mZ3Q7aV9zYiwgJiMzNDtJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxuJiMzNDssCi0JCQkJIGlub2RlLSZndDtpX2lubyk7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQogCWJyZWxzZShiaCk7CiYjNDM7CXNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpOwogCi0JcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubywKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmMKaW5kZXggN2I4NWY1YTJiNzlmYzQuLmU3ZTlmMmEwZDI0ZTgwIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMjExLDYgJiM0MzsyMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHsKIAkuYWxsb2NfaW5vZGUJPSB1ZGZfYWxsb2NfaW5vZGUsCiAJLmZyZWVfaW5vZGUJPSB1ZGZfZnJlZV9pbl9jb3JlX2lub2RlLAogCS53cml0ZV9pbm9kZQk9IHVkZl93cml0ZV9pbm9kZSwKJiM0MzsJLnN5bmNfaW5vZGVfbWV0YWRhdGEgPSB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YSwKIAkuZXZpY3RfaW5vZGUJPSB1ZGZfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IHVkZl9wdXRfc3VwZXIsCiAJLnN5bmNfZnMJPSB1ZGZfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oCmluZGV4IDZkOTUxZTA1YzAwNDZhLi44NmRjMmQ2YTJlZjFiOCAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZmRlY2wuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy91ZGYvdWRmZGVjbC5oCkBAIC0xMzcsNyAmIzQzOzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpCiAKIC8qIGZpbGUuYyAqLwogZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7CiAKIC8qIGlub2RlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLApAQCAtMTU4LDYgJiM0MzsxNTcsNyBAQCBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdWRmX3BibGtfdCBibG9jaywKIGV4dGVybiBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICosIGxvZmZfdCk7CiBleHRlcm4gdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKJiM0MztpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGV4dGVybiBpbnQgaW5vZGVfYm1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBibG9jaywKIAkJICAgICAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqcG9zLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsCiAJCSAgICAgIHVpbnQzMl90ICplbGVuLCBzZWN0b3JfdCAqb2Zmc2V0LCBpbnQ4X3QgKmV0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCA4YjIzYmM5YTI0NGNiMy4uZmQyYzcxMTVjMDU0MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTIxMCwxMCAmIzQzOzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7CiAKIC8qIFRoaW5ncyB0byBkbyB3aXRoIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdCAqLwogdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpOwotaW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYiwKLQkJICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTsKLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLAotCSAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7CiB2b2lkIGNsZWFuX2JkZXZfYWxpYXNlcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBibG9jaywKIAkJCXNlY3Rvcl90IGxlbik7CiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5fYmRldl9iaF9hbGlhcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDUwY2U3MzFhMmI3OGYxLi43MjllM2NiODllMzg0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNzQwLDcgJiM0Mzs3NDAsOCBAQCBlbnVtIGlub2RlX3N0YXRlX2ZsYWdzX2VudW0gewogCUlfQ1JFQVRJTkcJCT0gKDFVICZsdDsmbHQ7IDE1KSwKIAlJX0RPTlRDQUNIRQkJPSAoMVUgJmx0OyZsdDsgMTYpLAogCUlfU1lOQ19RVUVVRUQJCT0gKDFVICZsdDsmbHQ7IDE3KSwKLQlJX1BJTk5JTkdfTkVURlNfV0IJPSAoMVUgJmx0OyZsdDsgMTgpCiYjNDM7CUlfUElOTklOR19ORVRGU19XQgk9ICgxVSAmbHQ7Jmx0OyAxOCksCiYjNDM7CUlfTUVUQURBVEFfV1JJVEVCQUNLCT0gKDFVICZsdDsmbHQ7IDE5KSwKIH07CiAKICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQykKQEAgLTIyMTMsNiAmIzQzOzIyMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHlfc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9TWU5DKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzcGluX2xvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKJiM0MzsJaW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7fQomIzQzOwogLyoKICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaApAQCAtODYsNiAmIzQzOzg2LDggQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgewogCXZvaWQgKCpmcmVlX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAl2b2lkICgqZGlydHlfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncyk7CiAJaW50ICgqd3JpdGVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKJiM0MzsJaW50ICgqc3luY19pbm9kZV9tZXRhZGF0YSkoc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogCWludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCXZvaWQgKCpldmljdF9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7CiAJdm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDk3CgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogNjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZXRhZGF0YSBTeW5jIFBhdGNoKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBpbm9kZSBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24uIEl0JiMzOTtzIGFkZGluZyBgc3luY19pbm9kZV9tZXRhZGF0YWAgdG8gdGhlIGBzdXBlcl9vcGVyYXRpb25zYCBzdHJ1Y3QgYW5kIHRoZW4gdXBkYXRpbmcgYSB3aG9sZSBidW5jaCBvZiBmaWxlc3lzdGVtcyDigJMgYWZmcywgYmZzLCBleHQyLCBleHQ0LCBmYXQsIG1pbml4LCBhbmQgdWRmIOKAkyB0byB1c2UgdGhpcyBuZXcgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgb2xkZXIgYG1tYl9mc3luY2AgYW5kIGBtbWJfZnN5bmNfbm9mbHVzaGAgbWV0aG9kcy4gVGhpcyBhbHNvIHRvdWNoZXMgYGZzL2ZzLXdyaXRlYmFjay5jYCwgc3BlY2lmaWNhbGx5IHRvIGRlYWwgd2l0aCBgSV9NRVRBREFUQV9XUklURUJBQ0tgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgY29yZSBWRlMgd3JpdGViYWNrIGFuZCBtdWx0aXBsZSBmaWxlc3lzdGVtcywgc28gYFdvcnRoRnV6emluZz10cnVlYCBpcyBhIG5vLWJyYWluZXIuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMgb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzeW5jX2lub2RlX21ldGFkYXRhYCwgc28gdGhhdCYjMzk7cyBvYnZpb3VzbHkgYSBrZXkgdGFyZ2V0LiBJdCBhbHNvIG1vZGlmaWVzIGJvdGggYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFuZCBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCB3aXRoaW4gYGZzL2ZzLXdyaXRlYmFjay5jYC4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB1cGRhdGluZyB0aG9zZSBmaWxlc3lzdGVtc+KAmSByZXNwZWN0aXZlIGltcGxlbWVudGF0aW9uczogYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgLgoKUGx1cywgd2UgaGF2ZSB0aGVzZSBvdGhlciB3cml0ZSBmdW5jdGlvbnMgaW1wYWN0ZWQ6IGBleHQ0X3dyaXRlX2lub2RlYCwgYGV4dDJfd3JpdGVfaW5vZGVgLCBgZmF0X3dyaXRlX2lub2RlYCwgYG1pbml4X3dyaXRlX2lub2RlYCwgYHVkZl93cml0ZV9pbm9kZWAsIGFuZCBgYmZzX3dyaXRlX2lub2RlYC4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IGFib3V0IHRoZSBldmljdGlvbiBjaGFuZ2VzIHRvbywgYGV4dDRfZXZpY3RfaW5vZGVgLCBgZXh0Ml9ldmljdF9pbm9kZWAsIGBmYXRfZXZpY3RfaW5vZGVgLCBgbWluaXhfZXZpY3RfaW5vZGVgLCBgdWRmX2V2aWN0X2lub2RlYCwgYW5kIGBiZnNfZXZpY3RfaW5vZGVgLiBPaCwgYW5kIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGAgaW4gYGZzL2xpYmZzLmNgIGFsc28uCgpTbywgdG8gcmVjYXAgdGhlIGZ1bmN0aW9ucywgSSBzaG91bGQgZm9jdXMgb24gYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBpbiBgZnMvZnMtd3JpdGViYWNrLmNgLCB0aGVuIGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgIGluIGBmcy9leHQ0L2lub2RlLmNgLCBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCBpbiBgZnMvZXh0Mi9pbm9kZS5jYCwgYW5kIHRoZW4gYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCBpbiBgZnMvZmF0L2lub2RlLmNgLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IHRoZSBrZXJuZWwgY29uZmlncyB3ZSBoYXZlIGFyZSB2YWxpZCwgc28gdGhlIG1vZHVsZXMgd2lsbCBhY3R1YWxseSBiZSBwcmVzZW50LiBMb29rcyBsaWtlIHdlIGhhdmUgYENPTkZJR19FWFQ0X0ZTYCwgYENPTkZJR19FWFQyX0ZTYCwgYENPTkZJR19GQVRfRlNgLCBgQ09ORklHX01JTklYX0ZTYCwgYENPTkZJR19VREZfRlNgLCBgQ09ORklHX0JGU19GU2AsIGFuZCBgQ09ORklHX0FGRlNfRlNgLiBBbHJpZ2h0LCBhbmQgdGhvc2UgYWxpZ24gd2l0aCB0aGUgZmlsZXN5c3RlbXMgd2XigJlyZSBkZWFsaW5nIHdpdGguIEFsdGhvdWdoLCB3YWl0Li4uIGBGQVRfRlNgIGlzIHVzdWFsbHkgYE1TRE9TX0ZTYCBhbmQgYFZGQVRfRlNgIC0gbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBmcy9mYXQvS2NvbmZpZ2AgZmlsZSB0byBiZSBzdXJlLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIHZlcmlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoRVhUNF9GU3xFWFQyX0ZTfEZBVF9GU3xNU0RPU19GU3xWRkFUX0ZTfE1JTklYX0ZTfFVERl9GU3xCRlNfRlN8QUZGU19GUykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZmZzL0tjb25maWc6Mjpjb25maWcgQUZGU19GU1xuZnMvYWZmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWlnYSBGRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Jmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9iZnMvS2NvbmZpZzoyOmNvbmZpZyBCRlNfRlNcbmZzL2Jmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0Mi9LY29uZmlnOjI6Y29uZmlnIEVYVDJfRlNcbmZzL2V4dDIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvZXh0Mi9LY29uZmlnLTIwLVxuZnMvZXh0Mi9LY29uZmlnOjIxOmNvbmZpZyBFWFQyX0ZTX1hBVFRSXG5mcy9leHQyL0tjb25maWctMjItXHRib29sIFwmIzM0O0V4dDIgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0yOS1cbmZzL2V4dDIvS2NvbmZpZzozMDpjb25maWcgRVhUMl9GU19QT1NJWF9BQ0xcbmZzL2V4dDIvS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7RXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDIvS2NvbmZpZy0zOS1cbmZzL2V4dDIvS2NvbmZpZzo0MDpjb25maWcgRVhUMl9GU19TRUNVUklUWVxuZnMvZXh0Mi9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtFeHQyIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4tLVxuZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2ZhdC9LY29uZmlnOjI6Y29uZmlnIEZBVF9GU1xuZnMvZmF0L0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZnMvZmF0L0tjb25maWctMzctXG5mcy9mYXQvS2NvbmZpZzozODpjb25maWcgTVNET1NfRlNcbmZzL2ZhdC9LY29uZmlnLTM5LVx0dHJpc3RhdGUgXCYjMzQ7TVNET1MgZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2ZhdC9LY29uZmlnLTYyLVxuZnMvZmF0L0tjb25maWc6NjM6Y29uZmlnIFZGQVRfRlNcbmZzL2ZhdC9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7VkZBVCAoV2luZG93cy05NSkgZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL21pbml4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL21pbml4L0tjb25maWc6Mjpjb25maWcgTUlOSVhfRlNcbmZzL21pbml4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pbml4IGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9taW5peC9LY29uZmlnLTIwLVxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxuZnMvbWluaXgvS2NvbmZpZy0yMi1cdGRlZl9ib29sIE1JTklYX0ZTXG4tLVxuZnMvbWluaXgvS2NvbmZpZy0yNC1cbmZzL21pbml4L0tjb25maWc6MjU6Y29uZmlnIE1JTklYX0ZTX0JJR19FTkRJQU5fMTZCSVRfSU5ERVhFRFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cdGRlZl9ib29sIE1JTklYX0ZTXG4tLVxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3VkZi9LY29uZmlnOjI6Y29uZmlnIFVERl9GU1xuZnMvdWRmL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VERiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4OTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZpbGVzeXN0ZW0gU3luY2hyb25pemF0aW9uIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBmaWxlc3lzdGVtcyB0byBjb25zaWRlcjogYEVYVDRfRlNgLCBgRVhUMl9GU2AsIGBNU0RPU19GU2AsIGBWRkFUX0ZTYCwgYE1JTklYX0ZTYCwgYFVERl9GU2AsIGBCRlNfRlNgLCBgQUZGU19GU2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZWlyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXM6IGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGBleHQ0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYC4gQSBxdWljayBnbGFuY2UgYXQgdGhlIGZ1bmN0aW9uIG5hbWVzLCBhbmQgbXkga25vd2xlZGdlIHRlbGxzIG1lIHRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byB3cml0aW5nIGRhdGEgb3V0IHRvIHRoZSBkaXNrIGluIGEgY29udHJvbGxlZCB3YXksIG1ha2luZyB0aGVtIGNydWNpYWwgZm9yIGRhdGEgaW50ZWdyaXR5LgoKTm93LCBsZXQgbWUgY2hlY2sgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEkgc2VlIHRoYXQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhcmUgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gcXVpY2tseSB3aGV0aGVyIHRoZXkgYXJlIHN0YXRpYyBvciBnbG9iYWwuIEFoLCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgc3RhdGljLiBBbmQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgYWxzbyBzdGF0aWMuIE5vdywgdGhlIGBleHQ0YCwgYGV4dDJgLCBgdWRmYCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYCBzeW5jIGZ1bmN0aW9ucyBhcmUgZ2xvYmFsLiBMb29rcyBsaWtlIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAgYXJlIGFsc28gc3RhdGljLCBpbmRpY2F0aW5nIHRoZXkgYXJlIGxpa2VseSBpbnRlcm5hbCB0byB0aGVpciByZXNwZWN0aXZlIGZpbGVzeXN0ZW1zIGFuZCBub3QgcGFydCBvZiBhIGNvbW1vbiBzeW5jaHJvbml6YXRpb24gaW50ZXJmYWNlLgoKSSBzaG91bGQgZXhhbWluZSBgZnMvZnMtd3JpdGViYWNrLmNgIGZ1cnRoZXIsIGluIHBhcnRpY3VsYXIgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgd3JpdGViYWNrIHByb2Nlc3Mgd29ya3MuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mcy13cml0ZWJhY2suYz0xNzc1PXN0YXRpYyBpbnRcbmZzL2ZzLXdyaXRlYmFjay5jOjE3NzY6X193cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuZnMvZnMtd3JpdGViYWNrLmMtMTc3Ny17XG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTc4NC1cbmZzL2ZzLXdyaXRlYmFjay5jOjE3ODU6XHR0cmFjZV93cml0ZWJhY2tfc2luZ2xlX2lub2RlX3N0YXJ0KGlub2RlLCB3YmMsIG5yX3RvX3dyaXRlKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTE3ODYtXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTg3MC1cdHdiYy1cdTAwM2V1bnBpbm5lZF9uZXRmc193YiA9IGZhbHNlO1xuZnMvZnMtd3JpdGViYWNrLmM6MTg3MTpcdHRyYWNlX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYywgbnJfdG9fd3JpdGUpO1xuZnMvZnMtd3JpdGViYWNrLmMtMTg3Mi1cdHJldHVybiByZXQ7XG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMTg4My0gKi9cbmZzL2ZzLXdyaXRlYmFjay5jOjE4ODQ6c3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9mcy13cml0ZWJhY2suYy0xODg1LVx0XHRcdFx0ICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9mcy13cml0ZWJhY2suYy0xOTI0LVxuZnMvZnMtd3JpdGViYWNrLmM6MTkyNTpcdHJldCA9IF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTE5MjYtXG4tLVxuZnMvZnMtd3JpdGViYWNrLmM9MTk5OT1zdGF0aWMgbG9uZyB3cml0ZWJhY2tfc2JfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMjA5Ny1cdFx0ICovXG5mcy9mcy13cml0ZWJhY2suYzoyMDk4Olx0XHRfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG5mcy9mcy13cml0ZWJhY2suYy0yMDk5LVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTI2OTM9dm9pZCBfX21hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jLTI3NDctXHQvKlxuZnMvZnMtd3JpdGViYWNrLmM6Mjc0ODpcdCAqIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZSgpIGZvciB0aGVcbmZzL2ZzLXdyaXRlYmFjay5jLTI3NDktXHQgKiBmb2xsb3dpbmcgbG9ja2xlc3MgaV9zdGF0ZSB0ZXN0LiAgU2VlIHRoZXJlIGZvciBkZXRhaWxzLlxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTMwNjY9aW50IHdyaXRlX2lub2RlX25vdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc3luYylcbi0tXG5mcy9mcy13cml0ZWJhY2suYy0zMDc4LVx0bWlnaHRfc2xlZXAoKTtcbmZzL2ZzLXdyaXRlYmFjay5jOjMwNzk6XHRyZXR1cm4gd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTMwODAtfVxuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTMwOTI9aW50IHN5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtMzA5OC1cbmZzL2ZzLXdyaXRlYmFjay5jOjMwOTk6XHRyZXR1cm4gd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbmZzL2ZzLXdyaXRlYmFjay5jLTMxMDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTA2CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDEyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTWV0YWRhdGEgU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBwb2ludGVyLCBgc3luY19pbm9kZV9tZXRhZGF0YWAsIGludG8gdGhlIGBzdXBlcl9vcGVyYXRpb25zYCBzdHJ1Y3QuICBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHVzZWQgdG8gcHJvdmlkZSBhIG1vcmUgc3BlY2lmaWMgd2F5IHRvIGZsdXNoIG1ldGFkYXRhIGZvciBhbiBpbm9kZSwgcG90ZW50aWFsbHkgYXMgcGFydCBvZiB3cml0ZWJhY2suICBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcgaXMgYWxzbyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgYSByZWZpbmVkIGNvbnRyb2wgZmxvdyBmb3Igd2hlbiBhbmQgaG93IG1ldGFkYXRhIGlzIHdyaXR0ZW4gYmFjay4gIFRoZSBjb3JlIG9mIHRoZSBsb2dpYyBzZWVtcyB0byByZXNpZGUgaW4gYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYC4KCkkmIzM5O20gZ29pbmcgdG8gYWRkIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGZvciB0aGUgdmFyaW91cyBmaWxlc3lzdGVtcyB0byBteSBsaXN0IG9mIHN5bWJvbHMgdG8gd2F0Y2g6ICBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgLCBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGAuCgpXYWl0LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaW5jbHVkZSB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhbmQgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFyZSBpbmRlZWQgc3RhdGljLCBidXQgdGhvc2UgYXJlIGZpbmUgdG8gYmUgaW4gYEZvY3VzU3ltYm9sc2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlIG90aGVyIGZ1bmN0aW9ucy4gT2theSwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCBhcmUgYWxzbyBzdGF0aWMuIExldCBtZSBjb25maXJtIHRoZSBnbG9iYWxzLiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgIGFyZSBnbG9iYWwuCgpOb3csIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byBlbnN1cmUgSSYjMzk7bSBjb3ZlcmluZyB0aGUgcmlnaHQgZmlsZXN5c3RlbXM6IGBFWFQ0X0ZTYCwgYEVYVDJfRlNgLCBgTVNET1NfRlNgLCBgVkZBVF9GU2AsIGBNSU5JWF9GU2AsIGBVREZfRlNgLCBgQkZTX0ZTYCwgYW5kIGBBRkZTX0ZTYC4KCkkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZ1bmN0aW9ucyB0byBzZWUgaWYgSSYjMzk7bSBtaXNzaW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gbWV0YWRhdGEgbWFuaXB1bGF0aW9uIGluIHRoZXNlIGZpbGVzeXN0ZW1zLiAgTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb250ZXh0LCBhbmQgY3Jvc3MgcmVmZXJlbmNpbmcgcmVsYXRlZCBmdW5jdGlvbnMuLi4gbm90aGluZyBlbHNlIGp1bXBzIG91dCBhdCBtZSBhcyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWwgY2hhbmdlLgoKU28gdGhlIG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGUgYWRkZWQgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGltcGxlbWVudGF0aW9ucyB0aGVtc2VsdmVzLCBhcyB3ZWxsIGFzIHRoZSBjb3JlIHdyaXRlYmFjayBmdW5jdGlvbnMuICBJJiMzOTttIGFkZGluZyB0aGVzZSB0byBgRm9jdXNTeW1ib2xzYC4KCkZpbmFsIGxpc3Q6CiogICBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYAoqICAgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgCiogICBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAKKiAgIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAKKiAgIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYAoqICAgYHNpbXBsZV9mc3luY19ub2ZsdXNoYAoKQ29uZmlnczoKKiAgIGBFWFQ0X0ZTYAoqICAgYEVYVDJfRlNgCiogICBgTVNET1NfRlNgCiogICBgVkZBVF9GU2AKKiAgIGBNSU5JWF9GU2AKKiAgIGBVREZfRlNgCiogICBgQkZTX0ZTYAoqICAgYEFGRlNfRlNgCgpUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBWRlMgd3JpdGViYWNrIGFuZCB0aGUgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZy4gIFRoaXMgaXMgYSBiaWcgY2hhbmdlLCBzbyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgpBbHJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O01TRE9TX0ZTJiMzNDssCiAgICAmIzM0O1ZGQVRfRlMmIzM0OywKICAgICYjMzQ7TUlOSVhfRlMmIzM0OywKICAgICYjMzQ7VURGX0ZTJiMzNDssCiAgICAmIzM0O0JGU19GUyYjMzQ7LAogICAgJiMzNDtBRkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X193cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2V4dDJfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtmYXRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDttaW5peF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2Jmc19zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3NpbXBsZV9mc3luY19ub2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQyX0ZTJiMzNDssCiAgICAmIzM0O01TRE9TX0ZTJiMzNDssCiAgICAmIzM0O1ZGQVRfRlMmIzM0OywKICAgICYjMzQ7TUlOSVhfRlMmIzM0OywKICAgICYjMzQ7VURGX0ZTJiMzNDssCiAgICAmIzM0O0JGU19GUyYjMzQ7LAogICAgJiMzNDtBRkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X193cml0ZWJhY2tfc2luZ2xlX2lub2RlJiMzNDssCiAgICAmIzM0O3dyaXRlYmFja19zaW5nbGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2V4dDJfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDtmYXRfc3luY19pbm9kZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDttaW5peF9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3VkZl9zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O2Jmc19zeW5jX2lub2RlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3NpbXBsZV9mc3luY19ub2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjMyOjAyLjg1MTM5NDMyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzE4NDk0NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwibWluaXhfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MDIuODUxNDAwMzY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAzMTA2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5Y2I1M2E4ZDU5NjNmZDFlNjViY2U5ZWEyZjVhNjNhZGM4MzMyOWJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDIwOjMyOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcXG5pbmRleCA0NGEzZjY5ZDI3NWY5Ni4uYTdmYWE5MWRlZWQ1YWMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9hZmZzLmhcXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxcbkBAIC00NCw3ICs0NCw2IEBAIHN0cnVjdCBhZmZzX2lub2RlX2luZm8ge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XFx0XFx0LyogUHJvdGVjdHMgaW50ZXJuYWwgaW5vZGUgYWNjZXNzLiAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggaV9leHRfbG9jaztcXHRcXHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXFxuICNkZWZpbmUgaV9oYXNoX2xvY2sgaV9leHRfbG9ja1xcbi1cXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XFxuIFxcdHUzMlxcdCBpX2Jsa2NudDtcXHRcXHRcXHQvKiBibG9jayBjb3VudCAqL1xcbiBcXHR1MzJcXHQgaV9leHRjbnQ7XFx0XFx0XFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cXG4gXFx0dTMyXFx0KmlfbGM7XFx0XFx0XFx0XFx0LyogbGluZWFyIGNhY2hlIG9mIGV4dGVuZGVkIGJsb2NrcyAqL1xcbkBAIC0xNTIsNyArMTUxLDYgQEAgZXh0ZXJuIGJvb2xcXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbiBleHRlcm4gaW50XFx0YWZmc19jaGVja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4sXFxuIFxcdFxcdFxcdFxcdGJvb2wgbm90cnVuY2F0ZSk7XFxuIGV4dGVybiBpbnRcXHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1zdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmFmZnNfZ2V0X21ldGFkYXRhX2JocyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIC8qIGJpdG1hcC4gYyAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jXFxuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbisrKyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIFxcdFxcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGNwdV90b19iZTMyKGlubyk7XFxuIFxcbiBcXHRhZmZzX2FkanVzdF9jaGVja3N1bShkaXJfYmgsIGlubyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFxcdTAwMjZBRkZTX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xcbiBcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBhZmZzX3JlbW92ZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlbV9iaClcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlaGFzaF9jaGFpbiA9IGlubztcXG4gXFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShkaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCByZW1fYmgpLVxcdTAwM2VwYXJlbnQgPSAwO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0XFx0Z290byBkb25lO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShsaW5rX2JoKTtcXG4gXFxuIFxcdFxcdG1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbmFtZSwgMzIpO1xcbiBcXHRcXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xcbkBAIC0xODgsNyArMTg4LDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0XFx0aXB1dChkaXIpO1xcbkBAIC0yMDMsNyArMjAzLDcgQEAgYWZmc19yZW1vdmVfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdFxcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cXHUwMDNlbGlua19jaGFpbjtcXG4gXFx0XFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xcbiBcXHRcXHRcXHRhZmZzX2FkanVzdF9jaGVja3N1bShiaCwgYmUzMl90b19jcHUoaW5vMikgLSBsaW5rX2lubyk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHRcXHRyZXR2YWwgPSAwO1xcbiBcXHRcXHRcXHQvKiBGaXggdGhlIGxpbmsgY291bnQsIGlmIGJoIGlzIGEgbm9ybWFsIGhlYWRlciBibG9jayB3aXRob3V0IGxpbmtzICovXFxuIFxcdFxcdFxcdHN3aXRjaCAoYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZXN0eXBlKSkge1xcbkBAIC0zMDYsNyArMzA2LDcgQEAgYWZmc19yZW1vdmVfaGVhZGVyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0Z290byBkb25lX3VubG9jaztcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmNcXG5pbmRleCAxNDRiMTc0ODJkMTJkYS4uMjNlMDg4YTdlZDRmYjMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcXG4rKysgYi9mcy9hZmZzL2ZpbGUuY1xcbkBAIC0xNDAsMTQgKzE0MCwxNCBAQCBhZmZzX2FsbG9jX2V4dGJsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUzMiBleHQpXFxuIFxcdEFGRlNfVEFJTChzYiwgbmV3X2JoKS1cXHUwMDNlcGFyZW50ID0gY3B1X3RvX2JlMzIoaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIG5ld19iaCk7XFxuIFxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkobmV3X2JoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xcbiBcXG4gXFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWV4dGVuc2lvbik7XFxuIFxcdGlmICh0bXApXFxuIFxcdFxcdGFmZnNfd2FybmluZyhzYiwgXFxcImFsbG9jX2V4dFxcXCIsIFxcXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcXFwiLCB0bXApO1xcbiBcXHRBRkZTX1RBSUwoc2IsIGJoKS1cXHUwMDNlZXh0ZW5zaW9uID0gY3B1X3RvX2JlMzIoYmxvY2tucik7XFxuIFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBibG9ja25yIC0gdG1wKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcbiBcXHRBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2V4dGNudCsrO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG5AQCAtNTgxLDcgKzU4MSw3IEBAIGFmZnNfZXh0ZW50X2ZpbGVfb2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBuZXdzaXplKVxcbiBcXHRcXHRtZW1zZXQoQUZGU19EQVRBKGJoKSArIGJvZmYsIDAsIHRtcCk7XFxuIFxcdFxcdGJlMzJfYWRkX2NwdShcXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplLCB0bXApO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0c2l6ZSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG4gXFx0fSBlbHNlIGlmIChiaWR4KSB7XFxuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIodG1wKTtcXG4gXFx0XFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4gXFx0XFx0YmgtXFx1MDAzZWJfc3RhdGUgXFx1MDAyNj0gfigxVUwgXFx1MDAzY1xcdTAwM2MgQkhfTmV3KTtcXG4tXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdFxcdGlmIChwcmV2X2JoKSB7XFxuIFxcdFxcdFxcdHUzMiB0bXBfbmV4dCA9IGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0KTtcXG4gXFxuQEAgLTYxMyw4ICs2MTMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0c2l6ZSArPSBic2l6ZTtcXG5AQCAtNzMzLDcgKzczMiw3IEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0QUZGU19EQVRBX0hFQUQoYmgpLVxcdTAwM2VzaXplID0gY3B1X3RvX2JlMzIoXFxuIFxcdFxcdFxcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXFx1MDAzZXNpemUpKSk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IHRtcDtcXG4gXFx0XFx0ZnJvbSArPSB0bXA7XFxuIFxcdFxcdGJpZHgrKztcXG5AQCAtNzY2LDEzICs3NjUsMTIgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJpZHgsIHRtcF9uZXh0KTtcXG4gXFx0XFx0XFx0XFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXFx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cXHUwMDNlYl9ibG9ja25yKTtcXG4gXFx0XFx0XFx0XFx0YWZmc19hZGp1c3RfY2hlY2tzdW0ocHJldl9iaCwgYmgtXFx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcXG4tXFx0XFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdFxcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0YWZmc19icmVsc2UocHJldl9iaCk7XFxuIFxcdFxcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRcXHR3cml0dGVuICs9IGJzaXplO1xcbiBcXHRcXHRmcm9tICs9IGJzaXplO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTgwMSwxNCArNzk5LDEzIEBAIHN0YXRpYyBpbnQgYWZmc193cml0ZV9lbmRfb2ZzKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XFxuIFxcdFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVxcdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuIFxcdFxcdFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVxcdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XFxuLVxcdFxcdFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRcXHRcXHRtYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2UgaWYgKGJlMzJfdG9fY3B1KEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSkgXFx1MDAzYyB0bXApXFxuIFxcdFxcdFxcdEFGRlNfREFUQV9IRUFEKGJoKS1cXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XFxuIFxcdFxcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xcbiBcXHRcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0XFx0d3JpdHRlbiArPSB0bXA7XFxuIFxcdFxcdGZyb20gKz0gdG1wO1xcbiBcXHRcXHRiaWR4Kys7XFxuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFx0QUZGU19UQUlMKHNiLCBleHRfYmgpLVxcdTAwM2VleHRlbnNpb24gPSAwO1xcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgZXh0X2JoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoZXh0X2JoKTtcXG4gXFx0YWZmc19icmVsc2UoZXh0X2JoKTtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuY1xcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcXG4tLS0gYS9mcy9hZmZzL2lub2RlLmNcXG4rKysgYi9mcy9hZmZzL2lub2RlLmNcXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRhZmZzX2ZyZWVfcHJlYWxsb2MoaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjY2LDExICsyNjYsOCBAQCBhZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmICghaW5vZGUtXFx1MDAzZWlfbmxpbmspIHtcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtbWJfc3luYyhcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHR9XFxuIFxcbi1cXHRtbWJfaW52YWxpZGF0ZShcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuIFxcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XFxuIFxcdGNhY2hlX3BhZ2UgPSAodW5zaWduZWQgbG9uZylBRkZTX0koaW5vZGUpLVxcdTAwM2VpX2xjO1xcbkBAIC0zMDUsNyArMzAyLDcgQEAgYWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpXFxuIFxcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XFxuIFxcdGlmICghYmgpXFxuIFxcdFxcdGdvdG8gZXJyX2JoO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXG4gXFx0aW5vZGUtXFx1MDAzZWlfdWlkICAgICA9IGN1cnJlbnRfZnN1aWQoKTtcXG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBiaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjaGFpbjtcXG4gXFx0XFx0QUZGU19UQUlMKHNiLCBpbm9kZV9iaCktXFx1MDAzZWxpbmtfY2hhaW4gPSBjcHVfdG9fYmUzMihibG9jayk7XFxuIFxcdFxcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGlub2RlX2JoLCBibG9jayAtIGJlMzJfdG9fY3B1KGNoYWluKSk7XFxuLVxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0XFx0bWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgpO1xcbiBcXHRcXHRzZXRfbmxpbmsoaW5vZGUsIDIpO1xcbiBcXHRcXHRpaG9sZChpbm9kZSk7XFxuIFxcdH1cXG4gXFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcXG4tXFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcXHUwMDI2QUZGU19JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuIFxcdGRlbnRyeS1cXHUwMDNlZF9mc2RhdGEgPSAodm9pZCAqKShsb25nKWJoLVxcdTAwM2ViX2Jsb2NrbnI7XFxuIFxcbiBcXHRhZmZzX2xvY2tfZGlyKGRpcik7XFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNkFGRlNfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX3VubG9ja19kaXIoZGlyKTtcXG4gXFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9hZmZzL25hbWVpLmMgYi9mcy9hZmZzL25hbWVpLmNcXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZmcy9uYW1laS5jXFxuKysrIGIvZnMvYWZmcy9uYW1laS5jXFxuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHR9XFxuIFxcdCpwID0gMDtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGkgKyAxO1xcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFxcdTAwMjZBRkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4gXFx0YWZmc19icmVsc2UoYmgpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFxuQEAgLTQ0Myw4ICs0NDMsNyBAQCBhZmZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cXG4gXFxuIGRvbmU6XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcXG4tXFx0XFx0XFx0XFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbiBcXHRhZmZzX2JyZWxzZShiaCk7XFxuIFxcdHJldHVybiByZXR2YWw7XFxuIH1cXG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2gob2xkX2RpciwgYmhfbmV3KTtcXG4gXFx0YWZmc191bmxvY2tfZGlyKG9sZF9kaXIpO1xcbiBkb25lOlxcbi1cXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfb2xkLCBcXHUwMDI2QUZGU19JKG5ld19kaXIpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuLVxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9uZXcsIFxcdTAwMjZBRkZTX0kob2xkX2RpciktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcXG4rXFx0bWFya19idWZmZXJfZGlydHkoYmhfbmV3KTtcXG4gXFx0YWZmc19icmVsc2UoYmhfb2xkKTtcXG4gXFx0YWZmc19icmVsc2UoYmhfbmV3KTtcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXFxuaW5kZXggYjIzMjI1MWFhN2JiZDAuLjBhZDUxMjdlOWZiOGVlIDEwMDY0NFxcbi0tLSBhL2ZzL2FmZnMvc3VwZXIuY1xcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xcbkBAIC0xMDgsNyArMTA4LDYgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqYWZmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRpLVxcdTAwM2VpX2xjID0gTlVMTDtcXG4gXFx0aS1cXHUwMDNlaV9leHRfYmggPSBOVUxMO1xcbiBcXHRpLVxcdTAwM2VpX3BhX2NudCA9IDA7XFxuLVxcdG1tYl9pbml0KFxcdTAwMjZpLVxcdTAwM2VpX21ldGFkYXRhX2JocywgXFx1MDAyNmktXFx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIFxcdTAwMjZpLVxcdTAwM2V2ZnNfaW5vZGU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvYmZzL2Rpci5jIGIvZnMvYmZzL2Rpci5jXFxuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9kaXIuY1xcbisrKyBiL2ZzL2Jmcy9kaXIuY1xcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxcbi1cXHRcXHRcXHRcXHUwMDI2QkZTX0koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZGlyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkXFx0XFx0PSBnZW5lcmljX3JlYWRfZGlyLFxcbiBcXHQuaXRlcmF0ZV9zaGFyZWRcXHQ9IGJmc19yZWFkZGlyLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IGJmc19mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXFxuaW5kZXggZTQxZWZkZDM1ZGI5ZWYuLmNhY2M3ZWZmOWMzM2NlIDEwMDY0NFxcbi0tLSBhL2ZzL2Jmcy9pbm9kZS5jXFxuKysrIGIvZnMvYmZzL2lub2RlLmNcXG5AQCAtMTM2LDcgKzEzNiw2IEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xcbiBcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRkcHJpbnRmKFxcXCJpbm89JTA4eFxcXFxuXFxcIiwgaW5vKTtcXG4gXFxuQEAgLTE2NSwxMyArMTY0LDMxIEBAIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRkaS1cXHUwMDNlaV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgKyBpbm9kZS1cXHUwMDNlaV9zaXplIC0gMSk7XFxuIFxcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSlcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0fVxcbiBcXHRicmVsc2UoYmgpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWJmc19sb2NrKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXHRzdHJ1Y3QgYmZzX2lub2RlICpkaTtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFxuK1xcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgKHUxNilpbm9kZS1cXHUwMDNlaW5vLCBcXHUwMDI2YmgpO1xcbitcXHRpZiAoSVNfRVJSKGRpKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZGkpO1xcbitcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRlcnIgPSBtbWJfc3luYyhcXHUwMDI2QkZTX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK291dDpcXG4rXFx0YnJlbHNlKGJoKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcXG4gXFx0LmFsbG9jX2lub2RlXFx0PSBiZnNfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBiZnNfZnJlZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBiZnNfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gYmZzX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSBiZnNfcHV0X3N1cGVyLFxcbiBcXHQuc3RhdGZzXFx0XFx0PSBiZnNfc3RhdGZzLFxcbmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jXFxuaW5kZXggOWFmNWYwNjFhMWY4NWEuLmJlOGI1N2E2MzVjZDgyIDEwMDY0NFxcbi0tLSBhL2ZzL2J1ZmZlci5jXFxuKysrIGIvZnMvYnVmZmVyLmNcXG5AQCAtNjI4LDc5ICs2MjgsNiBAQCBpbnQgbW1iX3N5bmMoc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtbWJfc3luYyk7XFxuIFxcbi0vKipcXG4tICogbW1iX2ZzeW5jX25vZmx1c2ggLSBmc3luYyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdpdGhcXG4tICogXFx0XFx0ICAgICAgIG1ldGFkYXRhIGJ1ZmZlcnMgbGlzdFxcbi0gKlxcbi0gKiBAZmlsZTpcXHRmaWxlIHRvIHN5bmNocm9uaXplXFxuLSAqIEBtbWI6XFx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcXG4tICogQHN0YXJ0OlxcdHN0YXJ0IG9mZnNldCBpbiBieXRlc1xcbi0gKiBAZW5kOlxcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcXG4tICogQGRhdGFzeW5jOlxcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcXG4tICpcXG4tICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZnN5bmMgbWV0aG9kIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2hpY2hcXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXFxuLSAqIHN0cnVjdHVyZS5cXG4tICovXFxuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXFxuLVxcdFxcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcXG4te1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXHRpbnQgcmV0ID0gMDtcXG4tXFxuLVxcdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcbi1cXHRpZiAobW1iKVxcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhtbWIpO1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKGRhdGFzeW5jIFxcdTAwMjZcXHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRElSVFlfREFUQVNZTkMpKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbi1cXHRpZiAocmV0ID09IDApXFxuLVxcdFxcdHJldCA9IGVycjtcXG4tXFxuLW91dDpcXG4tXFx0LyogY2hlY2sgYW5kIGFkdmFuY2UgYWdhaW4gdG8gY2F0Y2ggZXJyb3JzIGFmdGVyIHN5bmNpbmcgb3V0IGJ1ZmZlcnMgKi9cXG4tXFx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XFxuLVxcdGlmIChyZXQgPT0gMClcXG4tXFx0XFx0cmV0ID0gZXJyO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xcbi1cXG4tLyoqXFxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxcbi0gKiBcXHQgICAgICAgYnVmZmVycyBsaXN0XFxuLSAqXFxuLSAqIEBmaWxlOlxcdGZpbGUgdG8gc3luY2hyb25pemVcXG4tICogQG1tYjpcXHRsaXN0IG9mIG1ldGFkYXRhIGJocyB0byBmbHVzaFxcbi0gKiBAc3RhcnQ6XFx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXFxuLSAqIEBlbmQ6XFx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxcbi0gKiBAZGF0YXN5bmM6XFx0b25seSBzeW5jaHJvbml6ZSBlc3NlbnRpYWwgbWV0YWRhdGEgaWYgdHJ1ZVxcbi0gKlxcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxcbi0gKiB0cmFjayBhbGwgbm9uLWlub2RlIG1ldGFkYXRhIGluIHRoZSBidWZmZXJzIGxpc3QgaGFuZ2luZyBvZmYgdGhlIEBtbWJcXG4tICogc3RydWN0dXJlLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IGEgZGV2aWNlIGNhY2hlIGZsdXNoIG9wZXJhdGlvbiBpc1xcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cXG4tICovXFxuLWludCBtbWJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iLFxcbi1cXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIG1tYiwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0cmV0ID0gYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jKTtcXG4tXFxuIC8qXFxuICAqIENhbGxlZCB3aGVuIHdlJ3ZlIHJlY2VudGx5IHdyaXR0ZW4gYmxvY2sgYGJibG9jaycsIGFuZCBpdCBpcyBrbm93biB0aGF0XFxuICAqIGBiYmxvY2snIHdhcyBmb3IgYSBidWZmZXJfYm91bmRhcnkoKSBidWZmZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGJsb2NrIGF0XFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XFxuIFxcbiB2b2lkIG1hcmtfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuK1xcbiBcXHRzZXRfYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKTtcXG4gXFx0LyogRklYTUU6IGRvIHdlIG5lZWQgdG8gc2V0IHRoaXMgaW4gYm90aCBwbGFjZXM/ICovXFxuIFxcdGlmIChiaC1cXHUwMDNlYl9mb2xpbyBcXHUwMDI2XFx1MDAyNiBiaC1cXHUwMDNlYl9mb2xpby1cXHUwMDNlbWFwcGluZylcXG4gXFx0XFx0bWFwcGluZ19zZXRfZXJyb3IoYmgtXFx1MDAzZWJfZm9saW8tXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbi1cXHRpZiAoYmgtXFx1MDAzZWJfbW1iKVxcbi1cXHRcXHRtYXBwaW5nX3NldF9lcnJvcihiaC1cXHUwMDNlYl9tbWItXFx1MDAzZW1hcHBpbmcsIC1FSU8pO1xcbitcXHQvKiBQcm90ZWN0IHVzIGZyb20gbW1iIFxcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bW1iID0gUkVBRF9PTkNFKGJoLVxcdTAwM2ViX21tYik7XFxuK1xcdGlmIChtbWIpXFxuK1xcdFxcdG1hcHBpbmdfc2V0X2Vycm9yKG1tYi1cXHUwMDNlbWFwcGluZywgLUVJTyk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmNcXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9kaXIuY1xcbisrKyBiL2ZzL2V4dDIvZGlyLmNcXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcXG4gI2lmZGVmIENPTkZJR19DT01QQVRcXG4gXFx0LmNvbXBhdF9pb2N0bFxcdD0gZXh0Ml9jb21wYXRfaW9jdGwsXFxuICNlbmRpZlxcbi1cXHQuZnN5bmNcXHRcXHQ9IGV4dDJfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiBcXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcXG5pbmRleCA3OWY3YjM5NTI1OGMyYS4uNTY0MjQ1MWJmMTkxNzMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9leHQyLmhcXG4rKysgYi9mcy9leHQyL2V4dDIuaFxcbkBAIC03MzUsNiArNzM1LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQpO1xcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xcbiBleHRlcm4gaW50IGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuK2V4dGVybiBpbnQgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGV4dDJfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pO1xcbiBleHRlcm4gaW50IGV4dDJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7XFxuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9vcGVyYXRpb25zO1xcbiBcXG4gLyogZmlsZS5jICovXFxuLWV4dGVybiBpbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi1cXHRcXHQgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9maWxlLmMgYi9mcy9leHQyL2ZpbGUuY1xcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQyL2ZpbGUuY1xcbisrKyBiL2ZzL2V4dDIvZmlsZS5jXFxuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgZXh0Ml9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi1cXHRpZiAocmV0ID09IC1FSU8pXFxuLVxcdFxcdC8qIFdlIGRvbid0IHJlYWxseSBrbm93IHdoZXJlIHRoZSBJTyBlcnJvciBoYXBwZW5lZC4uLiAqL1xcbi1cXHRcXHRleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXyxcXG4tXFx0XFx0XFx0ICAgXFxcImRldGVjdGVkIElPIGVycm9yIHdoZW4gd3JpdGluZyBtZXRhZGF0YSBidWZmZXJzXFxcIik7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbkBAIC0yMTMsNyArMTk4LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4gXFx0Lm9wZW5cXHRcXHQ9IGV4dDJfZmlsZV9vcGVuLFxcbiBcXHQucmVsZWFzZVxcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXFxuLVxcdC5mc3luY1xcdFxcdD0gZXh0Ml9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IHRocF9nZXRfdW5tYXBwZWRfYXJlYSxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiBcXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmNcXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uOTlhY2Q3OWE0YWYyNzIgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9pbm9kZS5jXFxuKysrIGIvZnMvZXh0Mi9pbm9kZS5jXFxuQEAgLTM5LDggKzM5LDYgQEBcXG4gI2luY2x1ZGUgXFxcImFjbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGF0dHIuaFxcXCJcXG4gXFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcXG4tXFxuIC8qXFxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cXG4gICovXFxuQEAgLTg3LDcgKzg1LDcgQEAgdm9pZCBleHQyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHRcXHQvKiBzZXQgZHRpbWUgKi9cXG4gXFx0XFx0RVhUMl9JKGlub2RlKS1cXHUwMDNlaV9kdGltZVxcdD0ga3RpbWVfZ2V0X3JlYWxfc2Vjb25kcygpO1xcbiBcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4tXFx0XFx0X19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XFxuK1xcdFxcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcXG4gXFx0XFx0LyogdHJ1bmNhdGUgdG8gMCAqL1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9zaXplID0gMDtcXG4gXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX2Jsb2NrcylcXG5AQCAtMTI1OCwxMiArMTI1Niw5IEBAIHN0YXRpYyBpbnQgZXh0Ml9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKVxcbiBcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4gXFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGlub2RlLCBpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSkpO1xcbi1cXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcXG4tXFx0XFx0bW1iX3N5bmMoXFx1MDAyNkVYVDJfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdGlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSlcXG4gXFx0XFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbi1cXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNDY5LDcgKzE0NjQsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbiBcXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG5AQCAtMTU2MCwyMiArMTU1NSwzMyBAQCBzdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcXG4gXFx0fSBlbHNlIGZvciAobiA9IDA7IG4gXFx1MDAzYyBFWFQyX05fQkxPQ0tTOyBuKyspXFxuIFxcdFxcdHJhd19pbm9kZS1cXHUwMDNlaV9ibG9ja1tuXSA9IGVpLVxcdTAwM2VpX2RhdGFbbl07XFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0aWYgKGRvX3N5bmMpIHtcXG4tXFx0XFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbi1cXHRcXHRpZiAoYnVmZmVyX3JlcShiaCkgXFx1MDAyNlxcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG4tXFx0XFx0XFx0cHJpbnRrIChcXFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2lkLCAodW5zaWduZWQgbG9uZykgaW5vKTtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuIFxcdGVpLVxcdTAwM2VpX3N0YXRlIFxcdTAwMjY9IH5FWFQyX1NUQVRFX05FVztcXG4gXFx0YnJlbHNlIChiaCk7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4raW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4ge1xcbi1cXHRyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdHN0cnVjdCBleHQyX2lub2RlICpyYXdfaW5vZGUgPSBleHQyX2dldF9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YmgpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGlmIChJU19FUlIocmF3X2lub2RlKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZFWFQyX0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2Jocyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuK1xcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XFxuK1xcdFxcdHByaW50ayhcXFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgKHVuc2lnbmVkIGxvbmcpaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIGludCBleHQyX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbmRpZmYgLS1naXQgYS9mcy9leHQyL3N1cGVyLmMgYi9mcy9leHQyL3N1cGVyLmNcXG5pbmRleCAzOTk5ZjhmM2IxNTZlMy4uYTQwZjUzMDg3MmE0MDcgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0Mi9zdXBlci5jXFxuKysrIGIvZnMvZXh0Mi9zdXBlci5jXFxuQEAgLTM2Miw2ICszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xcbiBcXHQuYWxsb2NfaW5vZGVcXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXFxuIFxcdC5mcmVlX2lub2RlXFx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSBleHQyX3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YSxcXG4gXFx0LmV2aWN0X2lub2RlXFx0PSBleHQyX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSBleHQyX3B1dF9zdXBlcixcXG4gXFx0LnN5bmNfZnNcXHQ9IGV4dDJfc3luY19mcyxcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jXFxuaW5kZXggZTU1ZDE2YWJmNDIyZjQuLmJlNjNmODk0MDJhMzgxIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDIveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDIveGF0dHIuY1xcbkBAIC03NzcsNiArNzc3LDcgQEAgZXh0Ml94YXR0cl9zZXQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbiBcXHQvKiBVcGRhdGUgdGhlIGlub2RlLiAqL1xcbiBcXHRFWFQyX0koaW5vZGUpLVxcdTAwM2VpX2ZpbGVfYWNsID0gbmV3X2JoID8gbmV3X2JoLVxcdTAwM2ViX2Jsb2NrbnIgOiAwO1xcbiBcXHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRpZiAoSVNfU1lOQyhpbm9kZSkpIHtcXG4gXFx0XFx0ZXJyb3IgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0XFx0LyogSW4gY2FzZSBzeW5jIGZhaWxlZCBkdWUgdG8gRU5PU1BDIHRoZSBpbm9kZSB3YXMgYWN0dWFsbHlcXG5AQCAtNzg5LDggKzc5MCw3IEBAIGV4dDJfeGF0dHJfc2V0MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXHR9XFxuIFxcbiBcXHRlcnJvciA9IDA7XFxuIFxcdGlmIChvbGRfYmggXFx1MDAyNlxcdTAwMjYgb2xkX2JoICE9IG5ld19iaCkge1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLjBmMDYxNTVhMzVhNjk0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTE1MSw3ICsxMTUxLDcgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmUgaV9kYXRhX3NlbTtcXG4gXFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcXG4gXFx0c3RydWN0IGpiZDJfaW5vZGUgKmppbm9kZTtcXG4tXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzIGlfbWV0YWRhdGFfYmhzO1xcbitcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRmlsZSBjcmVhdGlvbiB0aW1lLiBJdHMgZnVuY3Rpb24gaXMgc2FtZSBhcyB0aGF0IG9mXFxuQEAgLTIxMjYsNiArMjEyNiwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHQhbGlzdF9lbXB0eShcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9vcnBoYW4pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocyhcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBpX21ldGFkYXRhX2JocyBpcyBzZXQgaW4gZXh0NF9pbm9kZV9hdHRhY2hfbW1iKCkgdXNpbmcgY21weGNoZygpLlxcbitcXHQgKiBXZSB1c2UgUkVBRF9PTkNFIHdoZW4gYWNjZXNzaW5nIGlfbWV0YWRhdGFfYmhzIHRvIG1ha2Ugc3VyZSB3ZSBnZXRcXG4rXFx0ICogY29uc2lzdGVudCB2aWV3IGZvciBhbGwgYWNjZXNzZXMuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rfVxcbitcXG4gLypcXG4gICogQ29kZXMgZm9yIG9wZXJhdGluZyBzeXN0ZW1zXFxuICAqL1xcbkBAIC0zMTU1LDYgKzMxNjYsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcXG4gXFx0X19leHQ0X2lnZXQoKHNiKSwgKGlubyksIChmbGFncyksIF9fZnVuY19fLCBfX0xJTkVfXylcXG4gXFxuIGV4dGVybiBpbnQgIGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcXG4rZXh0ZXJuIGludCAgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7XFxuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcXG4gXFx0XFx0XFx0IHN0cnVjdCBpYXR0ciAqKTtcXG4gZXh0ZXJuIHUzMiAgZXh0NF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xcbmluZGV4IDlhOGMyMjVmMjc1MzA5Li4zYjJmOGFjMjBiZjg1YiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5jXFxuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xcbkBAIC0zNTAsNiArMzUwLDIxIEBAIGludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEl0J3MgZGlmZmljdWx0IHRvIGhhbmRsZSBmYWlsdXJlIHdoZW4gbWFya2luZyBidWZmZXIgZGlydHkgd2l0aG91dFxcbitcXHQgKiBsZWF2aW5nIGZpbGVzeXN0ZW0gY29ycnVwdGVkXFxuK1xcdCAqL1xcbitcXHRtbWIgPSBrbWFsbG9jX29iaigqbW1iLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XFxuK1xcdG1tYl9pbml0KG1tYiwgXFx1MDAyNmlub2RlLVxcdTAwM2VpX2RhdGEpO1xcbitcXHQvKiBTb21lb25lIHN3YXBwZWQgYW5vdGhlciBtbWIgYmVmb3JlIHVzPyAqL1xcbitcXHRpZiAoY21weGNoZyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpXFxuK1xcdFxcdGtmcmVlKG1tYik7XFxuK31cXG4rXFxuIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcXG4gXFx0XFx0XFx0XFx0IGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbkBAIC0zODksMTEgKzQwNCwxMyBAQCBpbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsXFxuIFxcdFxcdFxcdFxcdFxcdCBlcnIpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChpbm9kZSlcXG4tXFx0XFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdGlmIChpbm9kZSkge1xcbitcXHRcXHRcXHRpZiAoIWV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKVxcbitcXHRcXHRcXHRcXHRleHQ0X2lub2RlX2F0dGFjaF9tbWIoaW5vZGUpO1xcbitcXHRcXHRcXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIGV4dDRfaV9tZXRhZGF0YV9iaHMoaW5vZGUpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkge1xcbiBcXHRcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmNcXG5pbmRleCA5MjQ3MjZkY2M4NWZmNS4uMjk5OWMyY2M4ZmNmYTAgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXFxuKysrIGIvZnMvZXh0NC9mc3luYy5jXFxuQEAgLTY4LDkgKzY4LDYgQEAgc3RhdGljIGludCBleHQ0X3N5bmNfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdCAqIHRocm91Z2ggZXh0NF9ldmljdF9pbm9kZSgpKSBhbmQgc28gd2UgYXJlIHNhZmUgdG8gZmx1c2hcXG4gXFx0XFx0ICogbWV0YWRhdGEgYmxvY2tzIGFuZCB0aGUgaW5vZGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC04MywyMiArODAsMTEgQEAgc3RhdGljIGludCBleHQ0X2ZzeW5jX25vam91cm5hbChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbiBcXHRcXHRcXHRcXHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfaW5vZGU7XFxuLVxcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XFxuLVxcdFxcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcXG4tXFx0XFx0Lm5yX3RvX3dyaXRlID0gMCxcXG4tXFx0fTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbGUsIFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbitcXHRyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXFxuLVxcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0cmV0ID0gZXh0NF9zeW5jX3BhcmVudChpbm9kZSk7XFxuIFxcbiBcXHRpZiAodGVzdF9vcHQoaW5vZGUtXFx1MDAzZWlfc2IsIEJBUlJJRVIpKVxcbkBAIC0xNTYsNiArMTQyLDEwIEBAIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdGlmIChzYl9yZG9ubHkoaW5vZGUtXFx1MDAzZWlfc2IpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKSB7XFxuIFxcdFxcdHJldCA9IGV4dDRfZnN5bmNfbm9qb3VybmFsKGZpbGUsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmVlZHNfYmFycmllcik7XFxuQEAgLTE2NCwxMCArMTU0LDYgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0LypcXG4gXFx0ICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS5cXG4gXFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjBjMjIwYjUzNTU5MGY0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xODYsNiArMTg2LDggQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGlmIChFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTClcXG4gXFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9ubGluaykge1xcbitcXHRcXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZXJlJ3MgZGlydHkgcGFnZSB3aWxsIGxlYWQgdG8gZGF0YSBsb3NzLCB1c2VyXFxuIFxcdFxcdCAqIGNvdWxkIHNlZSBzdGFsZSBkYXRhLlxcbkBAIC0xOTUsOSArMTk3LDkgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXFxcImRhdGEgd2lsbCBiZSBsb3N0XFxcIik7XFxuIFxcbiBcXHRcXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSk7XFxuLVxcdFxcdC8qIEF2b2lkIG1iYWxsb2Mgc3BlY2lhbCBpbm9kZSB3aGljaCBoYXMgbm8gcHJvcGVyIGlvcHMgKi9cXG4tXFx0XFx0aWYgKCFFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19qb3VybmFsKVxcbi1cXHRcXHRcXHRtbWJfc3luYyhcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRcXHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcXG4rXFx0XFx0aWYgKG1tYilcXG4rXFx0XFx0XFx0bW1iX3N5bmMobW1iKTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTM0NTIsNiArMzQ1NCw3IEBAIHN0YXRpYyBib29sIGV4dDRfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCB3YWl0KVxcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbDtcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuIFxcbiBcXHRpZiAoam91cm5hbCkge1xcbiBcXHRcXHRpZiAoamJkMl90cmFuc2FjdGlvbl9jb21taXR0ZWQoam91cm5hbCxcXG5AQCAtMzQ2Miw4ICszNDY1LDkgQEAgc3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0bW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7XFxuIFxcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xcbi1cXHRpZiAobW1iX2hhc19idWZmZXJzKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX21ldGFkYXRhX2JocykpXFxuK1xcdGlmIChtbWIgXFx1MDAyNlxcdTAwMjYgbW1iX2hhc19idWZmZXJzKG1tYikpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRElSVFlfREFUQVNZTkM7XFxuIH1cXG5AQCAtNTgzOCwyNCArNTg0MiwzOCBAQCBpbnQgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4gXFx0XFx0ZXJyID0gZXh0NF9mY19jb21taXQoRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9zeW5jX3RpZCk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4rXFx0XFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbiBcXG4tXFx0XFx0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbitpbnQgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4rXFx0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWI7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpbiBub2pvdXJuYWwgbW9kZSAqL1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2pvdXJuYWwpKVxcbitcXHRcXHRyZXR1cm4gLUVGU0NPUlJVUFRFRDtcXG4rXFxuK1xcdGVyciA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0bW1iID0gUkVBRF9PTkNFKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0aWYgKG1tYikge1xcbitcXHRcXHRlcnIgPSBtbWJfc3luYyhtbWIpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBzeW5jKDIpIHdpbGwgZmx1c2ggdGhlIHdob2xlIGJ1ZmZlciBjYWNoZS4gTm8gbmVlZCB0byBkb1xcbi1cXHRcXHQgKiBpdCBoZXJlIHNlcGFyYXRlbHkgZm9yIGVhY2ggaW5vZGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXFx1MDAyNlxcdTAwMjYgIXdiYy1cXHUwMDNlZm9yX3N5bmMpXFxuLVxcdFxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xcbi1cXHRcXHRpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7XFxuLVxcdFxcdFxcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcXFwiKTtcXG4tXFx0XFx0XFx0ZXJyID0gLUVJTztcXG4tXFx0XFx0fVxcbi1cXHRcXHRicmVsc2UoaWxvYy5iaCk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGlsb2MuYmgpKSB7XFxuK1xcdFxcdGV4dDRfZXJyb3JfaW5vZGVfYmxvY2soaW5vZGUsIGlsb2MuYmgtXFx1MDAzZWJfYmxvY2tuciwgRUlPLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIklPIGVycm9yIHN5bmNpbmcgaW5vZGVcXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4gXFx0fVxcbitvdXQ6XFxuK1xcdGJyZWxzZShpbG9jLmJoKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLmFlMzNmNWJjYjEzMzE0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xcbkBAIC0xNDMwLDcgKzE0MzAsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2ZWktXFx1MDAzZWlfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZWktXFx1MDAzZWlfZmNfbG9jayk7XFxuLVxcdG1tYl9pbml0KFxcdTAwMjZlaS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlLmlfZGF0YSk7XFxuK1xcdGVpLVxcdTAwM2VpX21ldGFkYXRhX2JocyA9IE5VTEw7XFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiBcXHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0sIElfREFUQV9TRU1fTk9STUFMKTtcXG4gI2VuZGlmXFxuQEAgLTE0NTEsNiArMTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHN0YXRpYyB2b2lkIGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0ZnNjcnlwdF9mcmVlX2lub2RlKGlub2RlKTtcXG4rXFx0a2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNihFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZjX2xpc3QpKSkge1xcbiBcXHRcXHRwcl93YXJuKFxcXCIlczogaW5vZGUgJWxsdSBzdGlsbCBpbiBmYyBsaXN0XFxcIixcXG4gXFx0XFx0XFx0X19mdW5jX18sIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuQEAgLTE1MjksOSArMTUzMCwxMSBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZClcXG4gXFxuIHZvaWQgZXh0NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuK1xcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iID0gZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSk7XFxuK1xcbiBcXHRleHQ0X2ZjX2RlbChpbm9kZSk7XFxuLVxcdGlmICghRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfam91cm5hbClcXG4tXFx0XFx0bW1iX2ludmFsaWRhdGUoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rXFx0aWYgKG1tYilcXG4rXFx0XFx0bW1iX2ludmFsaWRhdGUobW1iKTtcXG4gXFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbiBcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbiBcXHQvKlxcbkBAIC0xNjA1LDkgKzE2MDgsMTMgQEAgc3RhdGljIGludCBleHQ0X25mc19jb21taXRfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcXG4gXFx0XFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXFxuIFxcdH07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHR0cmFjZV9leHQ0X25mc19jb21taXRfbWV0YWRhdGEoaW5vZGUpO1xcbi1cXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spXFxuK1xcdFxcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXFx1MDAyNndiYyk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfUVVPVEFcXG5AQCAtMTY2NCw2ICsxNjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHtcXG4gXFx0LmZyZWVfaW5vZGVcXHQ9IGV4dDRfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQuZGVzdHJveV9pbm9kZVxcdD0gZXh0NF9kZXN0cm95X2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IGV4dDRfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxcbiBcXHQuZGlydHlfaW5vZGVcXHQ9IGV4dDRfZGlydHlfaW5vZGUsXFxuIFxcdC5kcm9wX2lub2RlXFx0PSBleHQ0X2Ryb3BfaW5vZGUsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gZXh0NF9ldmljdF9pbm9kZSxcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2Rpci5jIGIvZnMvZmF0L2Rpci5jXFxuaW5kZXggYzZjY2E1ZDAwZmZkN2UuLjkxNmY1YzRjZGNmMzkwIDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xcbisrKyBiL2ZzL2ZhdC9kaXIuY1xcbkBAIC0xMDUzLDExICsxMDUzLDcgQEAgc3RhdGljIGludCBfX2ZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcywgaW50IG5yX3Nsb3RzKVxcbiBcXHRcXHRcXHRucl9zbG90cy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNk1TRE9TX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdFxcdGJyZWxzZShiaCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LyogcG9zIGlzICpuZXh0KiBkZSdzIHBvc2l0aW9uLCBzbyB0aGlzIGRvZXMgYC0gc2l6ZW9mKGRlKScgKi9cXG4gXFx0XFx0cG9zICs9ICgob3JpZ19zbG90cyAtIG5yX3Nsb3RzKSAqIHNpemVvZigqZGUpKSAtIHNpemVvZigqZGUpO1xcbkBAIC0xMDg4LDExICsxMDg0LDcgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxcbiBcXHRcXHRucl9zbG90cy0tO1xcbiBcXHR9XFxuIFxcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXFx1MDAyNk1TRE9TX0koZGlyKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdGJyZWxzZShiaCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuIFxcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xcbiBcXG4gXFx0aWYgKG5yX3Nsb3RzKSB7XFxuQEAgLTExMDksMTIgKzExMDEsMTIgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxcbiBcXHR9XFxuIFxcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIE5VTEwsIEZBVF9VUERBVEVfQVRJTUUgfCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdGVyciA9IDA7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuK1xcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9yZW1vdmVfZW50cmllcyk7XFxuIFxcbkBAIC0xMTQ0LDIxICsxMTM2LDExIEBAIHN0YXRpYyBpbnQgZmF0X3plcm9lZF9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBzZWN0b3JfdCBibGtuciwgaW50IG5yX3VzZWQsXFxuIFxcdFxcdG4rKztcXG4gXFx0XFx0YmxrbnIrKztcXG4gXFx0XFx0aWYgKG4gPT0gbnJfYmhzKSB7XFxuLVxcdFxcdFxcdGlmIChJU19ESVJTWU5DKGRpcikpIHtcXG4tXFx0XFx0XFx0XFx0ZXJyID0gZmF0X3N5bmNfYmhzKGJocywgbik7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKylcXG4gXFx0XFx0XFx0XFx0YnJlbHNlKGJoc1tpXSk7XFxuIFxcdFxcdFxcdG4gPSAwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0aWYgKElTX0RJUlNZTkMoZGlyKSkge1xcbi1cXHRcXHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0fVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbjsgaSsrKVxcbiBcXHRcXHRicmVsc2UoYmhzW2ldKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxcbmluZGV4IDk5ZWQ5MjI4YTY3N2JlLi5kY2I1YmE3NTcwNzNlZCAxMDA2NDRcXG4tLS0gYS9mcy9mYXQvZmF0LmhcXG4rKysgYi9mcy9mYXQvZmF0LmhcXG5AQCAtNDIxLDcgKzQyMSw2IEBAIGV4dGVybiB2b2lkIGZhdF9kZXRhY2goc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBpX3Bvcyk7XFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSwgbG9mZl90IGlfcG9zKTtcXG4tZXh0ZXJuIGludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuIFxcdFxcdFxcdCAgdm9pZCAoKnNldHVwKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikpO1xcbiBleHRlcm4gaW50IGZhdF9maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZpbGUuYyBiL2ZzL2ZhdC9maWxlLmNcXG5pbmRleCAzN2U3MDQ5YjRjOGM0NC4uMWM4MzVjYTVmMjFhNTEgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2ZpbGUuY1xcbisrKyBiL2ZzL2ZhdC9maWxlLmNcXG5AQCAtMTkwLDggKzE5MCw3IEBAIGludCBmYXRfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXFxuIFxcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VmYXRfaW5vZGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxwLCBcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzLFxcbi1cXHRcXHRcXHRcXHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XFxuK1xcdGVyciA9IHNpbXBsZV9mc3luY19ub2ZsdXNoKGZpbHAsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTMzMiwxNSArMzMxLDE1IEBAIHN0YXRpYyBpbnQgZmF0X2ZyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHNraXApXFxuIFxcdH1cXG4gXFx0TVNET1NfSShpbm9kZSktXFx1MDAzZWlfYXR0cnMgfD0gQVRUUl9BUkNIO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4gXFx0aWYgKHdhaXQpIHtcXG4tXFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9zdGFydCA9IGlfc3RhcnQ7XFxuIFxcdFxcdFxcdE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX2xvZ3N0YXJ0ID0gaV9sb2dzdGFydDtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFdyaXRlIGEgbmV3IEVPRiwgYW5kIGdldCB0aGUgcmVtYWluaW5nIGNsdXN0ZXIgY2hhaW4gZm9yIGZyZWVpbmcuICovXFxuIFxcdGlmIChza2lwKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmNcXG5pbmRleCAzYWE1MjQ4MWFkNWNmMy4uZTNiYjdiNDcxM2YyYWMgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L2lub2RlLmNcXG4rKysgYi9mcy9mYXQvaW5vZGUuY1xcbkBAIC02MjMsNyArNjIzLDM0IEBAIHN0cnVjdCBpbm9kZSAqZmF0X2J1aWxkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfYnVpbGRfaW5vZGUpO1xcbiBcXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XFxuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcbitzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbit7XFxuK1xcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuK1xcdGxvZmZfdCBpX3BvcztcXG4rXFx0c2VjdG9yX3QgYmxvY2tucjtcXG4rXFx0aW50IG9mZnNldDtcXG4rXFxuK1xcdGlmIChpbm9kZS1cXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpX3BvcyA9IGZhdF9pX3Bvc19yZWFkKHNiaSwgaW5vZGUpO1xcbitcXHRpZiAoIWlfcG9zKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZhdF9nZXRfYmxrbnJfb2Zmc2V0KHNiaSwgaV9wb3MsIFxcdTAwMjZibG9ja25yLCBcXHUwMDI2b2Zmc2V0KTtcXG4rXFx0YmggPSBzYl9maW5kX2dldF9ibG9ja19ub25hdG9taWMoaW5vZGUtXFx1MDAzZWlfc2IsIGJsb2NrbnIpO1xcbitcXHQvKlxcbitcXHQgKiBCdWZmZXIgcHJlc2VudD8gV2UgbGVhdmUgYnVmZmVyX2RpcnR5IGNoZWNrIGZvciBzeW5jX2RpcnR5X2J1ZmZlcigpXFxuK1xcdCAqIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cXG4rXFx0ICovXFxuK1xcdGlmIChiaCBcXHUwMDI2XFx1MDAyNiBidWZmZXJfdXB0b2RhdGUoYmgpKVxcbitcXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuK1xcdGJyZWxzZShiaCk7XFxuK1xcdHJldHVybiBtbWJfc3luYyhcXHUwMDI2TVNET1NfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rfVxcbiBcXG4gc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG5AQCAtNjQwLDcgKzY2Nyw3IEBAIHN0YXRpYyB2b2lkIGZhdF9mcmVlX2VvZmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHQgKiBhbnkgY29ycnVwdGlvbiBvbiB0aGUgbmV4dCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXJcXG4gXFx0XFx0ICogY2hhaW4gZm9yIHRoZSBmaWxlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcXG4rXFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGZhdF9tc2coaW5vZGUtXFx1MDAzZWlfc2IsIEtFUk5fV0FSTklORywgXFxcIkZhaWxlZCB0byBcXFwiXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJ1cGRhdGUgb24gZGlzayBpbm9kZSBmb3IgdW51c2VkIFxcXCJcXG5AQCAtODU0LDcgKzg4MSw3IEBAIHN0YXRpYyBpbnQgZmF0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxcbitzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbiBcXHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpO1xcbkBAIC04NjMsNyArODkwLDcgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgbXRpbWU7XFxuIFxcdGxvZmZfdCBpX3BvcztcXG4gXFx0c2VjdG9yX3QgYmxvY2tucjtcXG4tXFx0aW50IGVyciwgb2Zmc2V0O1xcbitcXHRpbnQgb2Zmc2V0O1xcbiBcXG4gXFx0aWYgKGlub2RlLVxcdTAwM2VpX2lubyA9PSBNU0RPU19ST09UX0lOTylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTkwNywxMSArOTM0LDkgQEAgc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdClcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2c2JpLVxcdTAwM2Vpbm9kZV9oYXNoX2xvY2spO1xcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGVyciA9IDA7XFxuLVxcdGlmICh3YWl0KVxcbi1cXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuIFxcdGJyZWxzZShiaCk7XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBmYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuQEAgLTkyNSwyMyArOTUwLDE3IEBAIHN0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiBcXHRcXHRlcnIgPSBmYXRfY2x1c3RlcnNfZmx1c2goc2IpO1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNk1TRE9TX1NCKHNiKS1cXHUwMDNlc19sb2NrKTtcXG4gXFx0fSBlbHNlXFxuLVxcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XFxuK1xcdFxcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBmYXRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdHJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgMSk7XFxuLX1cXG4tXFxuLUVYUE9SVF9TWU1CT0xfR1BMKGZhdF9zeW5jX2lub2RlKTtcXG4tXFxuIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZmF0X3NvcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gZmF0X2FsbG9jX2lub2RlLFxcbiBcXHQuZnJlZV9pbm9kZVxcdD0gZmF0X2ZyZWVfaW5vZGUsXFxuIFxcdC53cml0ZV9pbm9kZVxcdD0gZmF0X3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhLFxcbiBcXHQuZXZpY3RfaW5vZGVcXHQ9IGZhdF9ldmljdF9pbm9kZSxcXG4gXFx0LnB1dF9zdXBlclxcdD0gZmF0X3B1dF9zdXBlcixcXG4gXFx0LnN0YXRmc1xcdFxcdD0gZmF0X3N0YXRmcyxcXG5kaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmNcXG5pbmRleCAzMDI3ZWY1M2FmMjE0Yy4uYmUxOGY2YjU4MTliYTcgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L21pc2MuY1xcbisrKyBiL2ZzL2ZhdC9taXNjLmNcXG5AQCAtMTQ2LDE2ICsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdE1TRE9TX0koaW5vZGUpLVxcdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xcbiBcXHRcXHRNU0RPU19JKGlub2RlKS1cXHUwMDNlaV9sb2dzdGFydCA9IG5ld19kY2x1cztcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFNpbmNlIGdlbmVyaWNfd3JpdGVfc3luYygpIHN5bmNocm9uaXplcyByZWd1bGFyIGZpbGVzIGxhdGVyLFxcbiBcXHRcXHQgKiB3ZSBzeW5jIGhlcmUgb25seSBkaXJlY3Rvcmllcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IElTX0RJUlNZTkMoaW5vZGUpKSB7XFxuLVxcdFxcdFxcdHJldCA9IGZhdF9zeW5jX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0XFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH0gZWxzZVxcbi1cXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0fVxcbiBcXHRpZiAobmV3X2ZjbHVzICE9IChpbm9kZS1cXHUwMDNlaV9ibG9ja3MgXFx1MDAzZVxcdTAwM2UgKHNiaS1cXHUwMDNlY2x1c3Rlcl9iaXRzIC0gOSkpKSB7XFxuIFxcdFxcdGZhdF9mc19lcnJvcl9yYXRlbGltaXQoXFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uODY4ZWYwOTEwNDhlNDAgMTAwNjQ0XFxuLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmNcXG4rKysgYi9mcy9mYXQvbmFtZWlfbXNkb3MuY1xcbkBAIC0yNTIsMTIgKzI1MiwxMSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShkaXIpO1xcbiBcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbi1cXHRcXHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4rXFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIC8qKioqKiBDcmVhdGUgYSBmaWxlICovXFxuQEAgLTQ3MywyMSArNDcyLDIwIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXFxuIFxcdFxcdFxcdFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgXFx1MDAyNj0gfkFUVFJfSElEREVOO1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XFxuIFxcdFxcdFxcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKSB7XFxuLVxcdFxcdFxcdFxcdGVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgPSBvbGRfYXR0cnM7XFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH0gZWxzZVxcbi1cXHRcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XFxuK1xcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdGlub2RlX2luY19pdmVyc2lvbihvbGRfZGlyKTtcXG4gXFx0XFx0XFx0ZmF0X3RydW5jYXRlX3RpbWUob2xkX2RpciwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xcbiBcXHRcXHRcXHRpZiAoSVNfRElSU1lOQyhvbGRfZGlyKSlcXG4tXFx0XFx0XFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC01MTgsMjYgKzUxNiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxcbiBcXHRcXHRNU0RPU19JKG9sZF9pbm9kZSktXFx1MDAzZWlfYXR0cnMgfD0gQVRUUl9ISURERU47XFxuIFxcdGVsc2VcXG4gXFx0XFx0TVNET1NfSShvbGRfaW5vZGUpLVxcdTAwM2VpX2F0dHJzIFxcdTAwMjY9IH5BVFRSX0hJRERFTjtcXG4tXFx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcXG4tXFx0XFx0ZXJyID0gZmF0X3N5bmNfaW5vZGUob2xkX2lub2RlKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJvcl9pbm9kZTtcXG4tXFx0fSBlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4tXFxuIFxcdGlmICh1cGRhdGVfZG90ZG90KSB7XFxuIFxcdFxcdGZhdF9zZXRfc3RhcnQoZG90ZG90X2RlLCBNU0RPU19JKG5ld19kaXIpLVxcdTAwM2VpX2xvZ3N0YXJ0KTtcXG4gXFx0XFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGRvdGRvdF9iaCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNk1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbi1cXHRcXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xcbi1cXHRcXHRcXHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihkb3Rkb3RfYmgpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4tXFx0XFx0fVxcbiBcXHRcXHRkcm9wX25saW5rKG9sZF9kaXIpO1xcbiBcXHRcXHRpZiAoIW5ld19pbm9kZSlcXG4gXFx0XFx0XFx0aW5jX25saW5rKG5ld19kaXIpO1xcbiBcXHR9XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcXG4rXFx0aWYgKElTX0RJUlNZTkMobmV3X2RpcikpIHtcXG4rXFx0XFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfaW5vZGUsIDEpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4rXFx0fVxcbitcXG4gXFxuIFxcdGVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCBcXHUwMDI2b2xkX3NpbmZvKTtcXHQvKiBhbmQgcmVsZWFzZXMgYmggKi9cXG4gXFx0b2xkX3NpbmZvLmJoID0gTlVMTDtcXG5AQCAtNTQ1LDEwICs1MzgsOSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxcbiBcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4gXFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcXHUwMDI2dHMsIEZBVF9VUERBVEVfQ01USU1FKTtcXG4rXFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpXFxuLVxcdFxcdCh2b2lkKWZhdF9zeW5jX2lub2RlKG9sZF9kaXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7XFxuK1xcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2RpciwgMSk7XFxuIFxcbiBcXHRpZiAobmV3X2lub2RlKSB7XFxuIFxcdFxcdGRyb3BfbmxpbmsobmV3X2lub2RlKTtcXG5AQCAtNTcxLDE0ICs1NjMsMTUgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNk1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbiBcXHRcXHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XFxuIFxcdH1cXG4tZXJyb3JfaW5vZGU6XFxuIFxcdGZhdF9kZXRhY2gob2xkX2lub2RlKTtcXG4gXFx0ZmF0X2F0dGFjaChvbGRfaW5vZGUsIG9sZF9zaW5mby5pX3Bvcyk7XFxuIFxcdE1TRE9TX0kob2xkX2lub2RlKS1cXHUwMDNlaV9hdHRycyA9IG9sZF9hdHRycztcXG4gXFx0aWYgKG5ld19pbm9kZSkge1xcbiBcXHRcXHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcXG4tXFx0XFx0aWYgKGNvcnJ1cHQpXFxuLVxcdFxcdFxcdGNvcnJ1cHQgfD0gZmF0X3N5bmNfaW5vZGUobmV3X2lub2RlKTtcXG4rXFx0XFx0aWYgKGNvcnJ1cHQpIHtcXG4rXFx0XFx0XFx0bWFya19pbm9kZV9kaXJ0eShuZXdfaW5vZGUpO1xcbitcXHRcXHRcXHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBuZXcgZW50cnkgd2FzIG5vdCBzaGFyaW5nIHRoZSBkYXRhIGNsdXN0ZXIsIGl0XFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuaW5kZXggZTkwOTQ0Nzg3M2UzNjQuLjMwODE1ODg5NWIxZDhhIDEwMDY0NFxcbi0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmNcXG4rKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXFxuQEAgLTY3OCwxMCArNjc4LDkgQEAgc3RhdGljIGludCB2ZmF0X2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFuYW1lLFxcbiBcXG4gXFx0LyogdXBkYXRlIHRpbWVzdGFtcCAqL1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuK1xcdFxcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcXG4gY2xlYW51cDpcXG4gXFx0a2ZyZWUoc2xvdHMpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC05MDQsOSArOTAzLDkgQEAgc3RhdGljIGludCB2ZmF0X2dldF9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsXFxuIFxcbiBzdGF0aWMgaW50IHZmYXRfc3luY19pcG9zKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuLVxcdGlmIChJU19ESVJTWU5DKGRpcikpXFxuLVxcdFxcdHJldHVybiBmYXRfc3luY19pbm9kZShpbm9kZSk7XFxuIFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxcbitcXHRcXHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC05MjEsMTQgKzkyMCwxNCBAQCBzdGF0aWMgaW50IHZmYXRfdXBkYXRlX2RvdGRvdF9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbitzdGF0aWMgaW50IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuIFxcdGlub2RlX2luY19pdmVyc2lvbihkaXIpO1xcbiBcXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcXG4gXFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcXG4tXFx0XFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUoZGlyKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XFxuK1xcdFxcdHJldHVybiBzeW5jX2lub2RlX21ldGFkYXRhKGRpciwgMSk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5AQCAtOTk2LDcgKzk5NSw3IEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRvbGRfc2luZm8uYmggPSBOVUxMO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycm9yX2RvdGRvdDtcXG4tXFx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFxcdTAwMjZ0cyk7XFxuK1xcdGVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCBcXHUwMDI2dHMpO1xcbiBcXG4gXFx0aWYgKG5ld19pbm9kZSkge1xcbiBcXHRcXHRkcm9wX25saW5rKG5ld19pbm9kZSk7XFxuQEAgLTEwMjQsOCArMTAyMywxMCBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0ZmF0X2F0dGFjaChvbGRfaW5vZGUsIG9sZF9zaW5mby5pX3Bvcyk7XFxuIFxcdGlmIChuZXdfaW5vZGUpIHtcXG4gXFx0XFx0ZmF0X2F0dGFjaChuZXdfaW5vZGUsIG5ld19pX3Bvcyk7XFxuLVxcdFxcdGlmIChjb3JydXB0KVxcbi1cXHRcXHRcXHRjb3JydXB0IHw9IGZhdF9zeW5jX2lub2RlKG5ld19pbm9kZSk7XFxuK1xcdFxcdGlmIChjb3JydXB0KSB7XFxuK1xcdFxcdFxcdG1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTtcXG4rXFx0XFx0XFx0Y29ycnVwdCB8PSBzeW5jX2lub2RlX21ldGFkYXRhKG5ld19pbm9kZSwgMSk7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxcbkBAIC0xMTIzLDEwICsxMTI0LDEzIEBAIHN0YXRpYyBpbnQgdmZhdF9yZW5hbWVfZXhjaGFuZ2Uoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5XFxuIFxcdFxcdFxcdHZmYXRfbW92ZV9ubGluayhuZXdfZGlyLCBvbGRfZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0dmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFxcdTAwMjZ0cyk7XFxuK1xcdGVyciA9IHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShvbGRfZGlyLCBcXHUwMDI2dHMpO1xcbiBcXHQvKiBpZiBkaXJlY3RvcmllcyBhcmUgbm90IHRoZSBzYW1lLCB1cGRhdGUgbmV3X2RpciBhcyB3ZWxsICovXFxuLVxcdGlmIChvbGRfZGlyICE9IG5ld19kaXIpXFxuLVxcdFxcdHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCBcXHUwMDI2dHMpO1xcbitcXHRpZiAob2xkX2RpciAhPSBuZXdfZGlyKSB7XFxuK1xcdFxcdGludCBlcnIyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG5ld19kaXIsIFxcdTAwMjZ0cyk7XFxuK1xcdFxcdGlmICghZXJyKVxcbitcXHRcXHRcXHRlcnIgPSBlcnIyO1xcbitcXHR9XFxuIFxcbiBvdXQ6XFxuIFxcdGJyZWxzZShvbGRfZG90ZG90X2JoKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xcbmluZGV4IGZkYjg3NjZkMjc1YTE3Li45ZDk2MzU3NzMxYTNkNCAxMDA2NDRcXG4tLS0gYS9mcy9mcy13cml0ZWJhY2suY1xcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXFxuQEAgLTE4NTEsNiArMTg1MSwyMiBAQCBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIFxcdFxcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0XFx0cmV0ID0gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxcbitcXHQgKiBieSBwcmV2aW91cyBXQl9TWU5DX05PTkUgd3JpdGViYWNrP1xcbitcXHQgKi9cXG4rXFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMIFxcdTAwMjZcXHUwMDI2ICF3YmMtXFx1MDAzZWZvcl9zeW5jIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdFxcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4rXFx0XFx0ZXJyID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIHdiYyk7XFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuIFxcdHdiYy1cXHUwMDNldW5waW5uZWRfbmV0ZnNfd2IgPSBmYWxzZTtcXG4gXFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE4OTIsMTQgKzE5MDgsMTcgQEAgc3RhdGljIGludCB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IGNsZWFuLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkby5cXG4gXFx0ICpcXG4tXFx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcXG4tXFx0ICogc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLiAgSWZcXG4tXFx0ICogdGhlcmUgYXJlIGFueSBzdWNoIHBhZ2VzLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuK1xcdCAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yXFxuK1xcdCAqIG1ldGFkYXRhIGFyZSBzdGlsbCB1bmRlciB3cml0ZWJhY2ssIGUuZy4gZHVlIHRvIHByaW9yIFdCX1NZTkNfTk9ORVxcbitcXHQgKiB3cml0ZWJhY2suIElmIHRoZXJlLCB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZW0uXFxuIFxcdCAqL1xcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHdiYy1cXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfQUxMIHx8XFxuLVxcdCAgICAgIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfRElSVFlfQUxMKSkge1xcbitcXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRpZiAoIW1hcHBpbmdfdGFnZ2VkKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IElfTUVUQURBVEFfV1JJVEVCQUNLKSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX1NZTkMpO1xcbiBcXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuY1xcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi4yN2Q3ZGMxNmZjYjBhMCAxMDA2NDRcXG4tLS0gYS9mcy9saWJmcy5jXFxuKysrIGIvZnMvbGliZnMuY1xcbkBAIC0xNTU5LDkgKzE1NTksMTIgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ESVJUWV9BTEwpKVxcbitcXHRpZiAoIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjZcXG4rXFx0XFx0XFx0KElfRElSVFlfQUxMIHwgSV9TWU5DIHwgSV9NRVRBREFUQV9XUklURUJBQ0spKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdGlmIChkYXRhc3luYyBcXHUwMDI2XFx1MDAyNiAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcXG4rXFx0aWYgKGRhdGFzeW5jIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXFx1MDAyNlxcbitcXHRcXHRcXHQoSV9ESVJUWV9EQVRBU1lOQyB8IElfU1lOQyB8IElfTUVUQURBVEFfV1JJVEVCQUNLKSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XFxuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmNcXG5pbmRleCAzNjFkMjZkODdkMmUyZC4uMmNhMTZmODQ5ZDVhYzAgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvZGlyLmNcXG4rKysgYi9mcy9taW5peC9kaXIuY1xcbkBAIC0yMyw3ICsyMyw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWluaXhfZGlyX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIFxcdC5yZWFkXFx0XFx0PSBnZW5lcmljX3JlYWRfZGlyLFxcbiBcXHQuaXRlcmF0ZV9zaGFyZWRcXHQ9IG1pbml4X3JlYWRkaXIsXFxuLVxcdC5mc3luY1xcdFxcdD0gbWluaXhfZnN5bmMsXFxuK1xcdC5mc3luY1xcdFxcdD0gc2ltcGxlX2ZzeW5jLFxcbiB9O1xcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXFxuaW5kZXggODZlNTk0M2NkMmZmNzQuLjAyYWFiYmRiNWRlYWEwIDEwMDY0NFxcbi0tLSBhL2ZzL21pbml4L2ZpbGUuY1xcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xcbkBAIC0xMCwxMyArMTAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIm1pbml4LmhcXFwiXFxuIFxcbi1pbnQgbWluaXhfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxcbi17XFxuLVxcdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcXG4tXFx0XFx0XFx0XFx1MDAyNm1pbml4X2koZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0KS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMsXFxuLVxcdFxcdFxcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcXG4tfVxcbi1cXG4gLypcXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxcbiAgKiB0aGUgbWluaXggZmlsZXN5c3RlbS5cXG5AQCAtMjYsNyArMTksNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnJlYWRfaXRlclxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4gXFx0LndyaXRlX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLFxcbiBcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IG1pbml4X2ZzeW5jLFxcbitcXHQuZnN5bmNcXHRcXHQ9IHNpbXBsZV9mc3luYyxcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmNcXG5pbmRleCBjMzBjYzU5MDY5OGQ2Zi4uZGFmODNlNGZmMjVjODEgMTAwNjQ0XFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xcbisrKyBiL2ZzL21pbml4L2lub2RlLmNcXG5AQCAtMjQsNiArMjQsOCBAQFxcbiBcXG4gc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuK3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4gc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKTtcXG4gXFxuIHZvaWQgX19taW5peF9lcnJvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jdGlvbixcXG5AQCAtMTI4LDYgKzEzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtaW5peF9zb3BzID0ge1xcbiBcXHQuYWxsb2NfaW5vZGVcXHQ9IG1pbml4X2FsbG9jX2lub2RlLFxcbiBcXHQuZnJlZV9pbm9kZVxcdD0gbWluaXhfZnJlZV9pbl9jb3JlX2lub2RlLFxcbiBcXHQud3JpdGVfaW5vZGVcXHQ9IG1pbml4X3dyaXRlX2lub2RlLFxcbitcXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gbWluaXhfZXZpY3RfaW5vZGUsXFxuIFxcdC5wdXRfc3VwZXJcXHQ9IG1pbml4X3B1dF9zdXBlcixcXG4gXFx0LnN0YXRmc1xcdFxcdD0gbWluaXhfc3RhdGZzLFxcbkBAIC02MzAsNyArNjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxcbiAvKlxcbiAgKiBUaGUgbWluaXggVjEgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjFfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbitzdGF0aWMgaW50IFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcXG4gXFx0c3RydWN0IG1pbml4X2lub2RlICogcmF3X2lub2RlO1xcbkBAIC02MzksNyArNjQyLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYxX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4gXFxuIFxcdHJhd19pbm9kZSA9IG1pbml4X1YxX3Jhd19pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBcXHUwMDI2YmgpO1xcbiBcXHRpZiAoIXJhd19pbm9kZSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfbW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XFxuIFxcdHJhd19pbm9kZS1cXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XFxuQEAgLTY1MSwxMyArNjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcdGVsc2UgZm9yIChpID0gMDsgaSBcXHUwMDNjIDk7IGkrKylcXG4gXFx0XFx0cmF3X2lub2RlLVxcdTAwM2VpX3pvbmVbaV0gPSBtaW5peF9pbm9kZS1cXHUwMDNldS5pMV9kYXRhW2ldO1xcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdHJldHVybiBiaDtcXG4rXFx0YnJlbHNlKGJoKTtcXG4rXFx0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbiAgKiBUaGUgbWluaXggVjIgZnVuY3Rpb24gdG8gc3luY2hyb25pemUgYW4gaW5vZGUuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbitzdGF0aWMgaW50IFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDtcXG4gXFx0c3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTtcXG5AQCAtNjY2LDcgKzY3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMl9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXFxuIFxcbiBcXHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4gXFx0aWYgKCFyYXdfaW5vZGUpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0cmF3X2lub2RlLVxcdTAwM2VpX21vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xcbiBcXHRyYXdfaW5vZGUtXFx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xcbkBAIC02ODAsMjkgKzY4NSw0MiBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbiBcXHRlbHNlIGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDsgaSsrKVxcbiBcXHRcXHRyYXdfaW5vZGUtXFx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVxcdTAwM2V1LmkyX2RhdGFbaV07XFxuIFxcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcXG4tXFx0cmV0dXJuIGJoO1xcbitcXHRicmVsc2UoYmgpO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3tcXG4rXFx0aWYgKElOT0RFX1ZFUlNJT04oaW5vZGUpID09IE1JTklYX1YxKVxcbitcXHRcXHRyZXR1cm4gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcXG4rXFx0cmV0dXJuIFYyX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbitcXHR2b2lkICpyYXdfaW5vZGU7XFxuIFxcbiBcXHRpZiAoSU5PREVfVkVSU0lPTihpbm9kZSkgPT0gTUlOSVhfVjEpXFxuLVxcdFxcdGJoID0gVjFfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcXG4rXFx0XFx0cmF3X2lub2RlID0gbWluaXhfVjFfcmF3X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sIFxcdTAwMjZiaCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0YmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xcbi1cXHRpZiAoIWJoKVxcbitcXHRcXHRyYXdfaW5vZGUgPSBtaW5peF9WMl9yYXdfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgXFx1MDAyNmJoKTtcXG4rXFx0aWYgKCFyYXdfaW5vZGUpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXFx1MDAyNlxcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xcbi1cXHRcXHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XFxuLVxcdFxcdGlmIChidWZmZXJfcmVxKGJoKSBcXHUwMDI2XFx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xcbi1cXHRcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlPO1xcbi1cXHRcXHR9XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZtaW5peF9pKGlub2RlKS1cXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0c3luY19kaXJ0eV9idWZmZXIoYmgpO1xcbitcXHRpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkge1xcbitcXHRcXHRwcmludGsoXFxcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2lkLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbiBcXHR9XFxuLVxcdGJyZWxzZSAoYmgpO1xcbitvdXQ6XFxuK1xcdGJyZWxzZShiaCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9kaXIuYyBiL2ZzL3VkZi9kaXIuY1xcbmluZGV4IGViYzlmNmEzNzlmZTNhLi40MjVlM2MxNjI5MzUwNCAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvZGlyLmNcXG4rKysgYi9mcy91ZGYvZGlyLmNcXG5AQCAtMTU3LDYgKzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0ge1xcbiBcXHQucmVhZFxcdFxcdFxcdD0gZ2VuZXJpY19yZWFkX2RpcixcXG4gXFx0Lml0ZXJhdGVfc2hhcmVkXFx0XFx0PSB1ZGZfcmVhZGRpcixcXG4gXFx0LnVubG9ja2VkX2lvY3RsXFx0XFx0PSB1ZGZfaW9jdGwsXFxuLVxcdC5mc3luY1xcdFxcdFxcdD0gdWRmX2ZzeW5jLFxcbitcXHQuZnN5bmNcXHRcXHRcXHQ9IHNpbXBsZV9mc3luYyxcXG4gXFx0LnNldGxlYXNlXFx0XFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9mcy91ZGYvZmlsZS5jIGIvZnMvdWRmL2ZpbGUuY1xcbmluZGV4IGY3ZjE0MjJkZTMwZmE0Li41N2QxMTYwNmEyYTc3NiAxMDA2NDRcXG4tLS0gYS9mcy91ZGYvZmlsZS5jXFxuKysrIGIvZnMvdWRmL2ZpbGUuY1xcbkBAIC0xOTgsMTMgKzE5OCw2IEBAIHN0YXRpYyBpbnQgdWRmX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcXG4te1xcbi1cXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXFxuLVxcdFxcdFxcdFxcdTAwMjZVREZfSShmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QpLVxcdTAwM2VpX21ldGFkYXRhX2JocyxcXG4tXFx0XFx0XFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xcbi19XFxuLVxcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuIFxcdC51bmxvY2tlZF9pb2N0bFxcdFxcdD0gdWRmX2lvY3RsLFxcbkBAIC0yMTIsNyArMjA1LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xcbiBcXHQubW1hcFxcdFxcdFxcdD0gdWRmX2ZpbGVfbW1hcCxcXG4gXFx0LndyaXRlX2l0ZXJcXHRcXHQ9IHVkZl9maWxlX3dyaXRlX2l0ZXIsXFxuIFxcdC5yZWxlYXNlXFx0XFx0PSB1ZGZfcmVsZWFzZV9maWxlLFxcbi1cXHQuZnN5bmNcXHRcXHRcXHQ9IHVkZl9mc3luYyxcXG4rXFx0LmZzeW5jXFx0XFx0XFx0PSBzaW1wbGVfZnN5bmMsXFxuIFxcdC5zcGxpY2VfcmVhZFxcdFxcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcXG4gXFx0LnNwbGljZV93cml0ZVxcdFxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gXFx0Lmxsc2Vla1xcdFxcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5AQCAtMjUzLDYgKzI0Niw4IEBAIHN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFxuIFxcdHNldGF0dHJfY29weShcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIGF0dHIpO1xcbiBcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbitcXHRcXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmNcXG5pbmRleCA2N2JjZjgzNzU4YzhmYi4uNjhjNmMyYmE4ZWQxYTIgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL2lub2RlLmNcXG4rKysgYi9mcy91ZGYvaW5vZGUuY1xcbkBAIC01MSw4ICs1MSw2IEBAXFxuIHN0cnVjdCB1ZGZfbWFwX3JxO1xcbiBcXG4gc3RhdGljIHVtb2RlX3QgdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoc3RydWN0IGZpbGVFbnRyeSAqKTtcXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBzdGF0aWMgaW50IHVkZl9hbGxvY19pX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHNpemUpO1xcbiBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKTtcXG4gc3RhdGljIGludCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sXFxuQEAgLTE0Miw3ICsxNDAsNyBAQCB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRpZiAoIWlub2RlLVxcdTAwM2VpX25saW5rKSB7XFxuIFxcdFxcdFxcdHdhbnRfZGVsZXRlID0gMTtcXG4gXFx0XFx0XFx0dWRmX3NldHNpemUoaW5vZGUsIDApO1xcbi1cXHRcXHRcXHR1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7XFxuK1xcdFxcdFxcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIElTX1NZTkMoaW5vZGUpKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoaWluZm8tXFx1MDAzZWlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGlub2RlLVxcdTAwM2VpX3NpemUgIT0gaWluZm8tXFx1MDAzZWlfbGVuRXh0ZW50cykge1xcbkBAIC05MzYsMTAgKzkzNCw3IEBAIHN0YXRpYyBpbnQgaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB1ZGZfbWFwX3JxICptYXApXFxuIFxcdGlpbmZvLVxcdTAwM2VpX25leHRfYWxsb2NfZ29hbCA9IG5ld2Jsb2NrbnVtICsgMTtcXG4gXFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xcbiBcXG4tXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbi1cXHRcXHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRyZXQgPSAwO1xcbiBvdXRfZnJlZTpcXG4gXFx0YnJlbHNlKHByZXZfZXBvcy5iaCk7XFxuQEAgLTEzMjYsMTAgKzEzMjEsNyBAQCBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXFxuIFxcdH1cXG4gdXBkYXRlX3RpbWU6XFxuIFxcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcXG4tXFx0aWYgKElTX1NZTkMoaW5vZGUpKVxcbi1cXHRcXHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xNzA1LDE0ICsxNjk3LDI4IEBAIHZvaWQgdWRmX3VwZGF0ZV9leHRyYV9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90IG1vZGUpXFxuIFxcdFxcdGlpbmZvLVxcdTAwM2VpX2V4dHJhUGVybXMgfD0gRkVfUEVSTV9PX0RFTEVURTtcXG4gfVxcbiBcXG4taW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4raW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuLVxcdHJldHVybiB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7XFxuLX1cXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpO1xcbitcXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0dWRmX2dldF9sYl9wYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNlVERl9JKGlub2RlKS1cXHUwMDNlaV9sb2NhdGlvbiwgMCkpO1xcbitcXHRpZiAoIWJoKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4rXFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4rXFx0XFx0dWRmX3dhcm4oaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGlub2RlLVxcdTAwM2VpX2lubyk7XFxuK1xcdFxcdGVyciA9IC1FSU87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGVyciA9IG1tYl9zeW5jKFxcdTAwMjZVREZfSShpbm9kZSktXFx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcXG4rb3V0OlxcbitcXHRicmVsc2UoYmgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB1ZGZfYWRqdXN0X3RpbWUoc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbywgc3RydWN0IHRpbWVzcGVjNjQgdGltZSlcXG5AQCAtMTcyMyw3ICsxNzI5LDcgQEAgc3RhdGljIHZvaWQgdWRmX2FkanVzdF90aW1lKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8sIHN0cnVjdCB0aW1lc3BlYzY0IHRpbWVcXG4gXFx0XFx0aWluZm8tXFx1MDAzZWlfY3J0aW1lID0gdGltZTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbitpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZmlsZUVudHJ5ICpmZTtcXG5AQCAtMTczMiw3ICsxNzM4LDYgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxcbiBcXHR1aW50MzJfdCB1ZGZwZXJtcztcXG4gXFx0dWludDE2X3QgaWNiZmxhZ3M7XFxuIFxcdHVpbnQxNl90IGNyY2xlbjtcXG4tXFx0aW50IGVyciA9IDA7XFxuIFxcdHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0dW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbiBcXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xcbkBAIC0xOTM3LDE3ICsxOTQyLDEwIEBAIHN0YXRpYyBpbnQgdWRmX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcXG4gXFxuIFxcdC8qIHdyaXRlIHRoZSBkYXRhIGJsb2NrcyAqL1xcbiBcXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XFxuLVxcdGlmIChkb19zeW5jKSB7XFxuLVxcdFxcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcXG4tXFx0XFx0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihiaCkpIHtcXG4tXFx0XFx0XFx0dWRmX3dhcm4oaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLVxcdFxcdFxcdGVyciA9IC1FSU87XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXHRicmVsc2UoYmgpO1xcbitcXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8sXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmNcXG5pbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0XFxuLS0tIGEvZnMvdWRmL3N1cGVyLmNcXG4rKysgYi9mcy91ZGYvc3VwZXIuY1xcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVkZl9zYl9vcHMgPSB7XFxuIFxcdC5hbGxvY19pbm9kZVxcdD0gdWRmX2FsbG9jX2lub2RlLFxcbiBcXHQuZnJlZV9pbm9kZVxcdD0gdWRmX2ZyZWVfaW5fY29yZV9pbm9kZSxcXG4gXFx0LndyaXRlX2lub2RlXFx0PSB1ZGZfd3JpdGVfaW5vZGUsXFxuK1xcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEsXFxuIFxcdC5ldmljdF9pbm9kZVxcdD0gdWRmX2V2aWN0X2lub2RlLFxcbiBcXHQucHV0X3N1cGVyXFx0PSB1ZGZfcHV0X3N1cGVyLFxcbiBcXHQuc3luY19mc1xcdD0gdWRmX3N5bmNfZnMsXFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oXFxuaW5kZXggNmQ5NTFlMDVjMDA0NmEuLjg2ZGMyZDZhMmVmMWI4IDEwMDY0NFxcbi0tLSBhL2ZzL3VkZi91ZGZkZWNsLmhcXG4rKysgYi9mcy91ZGYvdWRmZGVjbC5oXFxuQEAgLTEzNyw3ICsxMzcsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1ZGZfZGlyX2VudHJ5X2xlbihzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqY2ZpKVxcbiBcXG4gLyogZmlsZS5jICovXFxuIGV4dGVybiBsb25nIHVkZl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xcbi1pbnQgdWRmX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYyk7XFxuIFxcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLFxcbkBAIC0xNTgsNiArMTU3LDcgQEAgZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX2JyZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVkZl9wYmxrX3QgYmxvY2ssXFxuIGV4dGVybiBpbnQgdWRmX3NldHNpemUoc3RydWN0IGlub2RlICosIGxvZmZfdCk7XFxuIGV4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuIGV4dGVybiBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuK2ludCB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBleHRlcm4gaW50IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywgc3RydWN0IGtlcm5lbF9sYl9hZGRyICplbG9jLFxcbiBcXHRcXHQgICAgICB1aW50MzJfdCAqZWxlbiwgc2VjdG9yX3QgKm9mZnNldCwgaW50OF90ICpldHlwZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxcbmluZGV4IDhiMjNiYzlhMjQ0Y2IzLi5mZDJjNzExNWMwNTQyNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcXG5AQCAtMjEwLDEwICsyMTAsNiBAQCB2b2lkIGJoX2VuZF9hc3luY193cml0ZShzdHJ1Y3QgYmlvICpiaW8pO1xcbiBcXG4gLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovXFxuIHZvaWQgbW1iX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKTtcXG4taW50IG1tYl9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcXG4tXFx0XFx0ICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBib29sIGRhdGFzeW5jKTtcXG4taW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXFxuLVxcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XFxuIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxcbiBcXHRcXHRcXHRzZWN0b3JfdCBsZW4pO1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW5fYmRldl9iaF9hbGlhcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5pbmRleCA1MGNlNzMxYTJiNzhmMS4uNzI5ZTNjYjg5ZTM4NGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuQEAgLTc0MCw3ICs3NDAsOCBAQCBlbnVtIGlub2RlX3N0YXRlX2ZsYWdzX2VudW0ge1xcbiBcXHRJX0NSRUFUSU5HXFx0XFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTUpLFxcbiBcXHRJX0RPTlRDQUNIRVxcdFxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE2KSxcXG4gXFx0SV9TWU5DX1FVRVVFRFxcdFxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE3KSxcXG4tXFx0SV9QSU5OSU5HX05FVEZTX1dCXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMTgpXFxuK1xcdElfUElOTklOR19ORVRGU19XQlxcdD0gKDFVIFxcdTAwM2NcXHUwMDNjIDE4KSxcXG4rXFx0SV9NRVRBREFUQV9XUklURUJBQ0tcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAxOSksXFxuIH07XFxuIFxcbiAjZGVmaW5lIElfRElSVFlfSU5PREUgKElfRElSVFlfU1lOQyB8IElfRElSVFlfREFUQVNZTkMpXFxuQEAgLTIyMTMsNiArMjIxNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdF9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9TWU5DKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfTUVUQURBVEFfV1JJVEVCQUNLKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbit9XFxuK1xcbiAvKlxcbiAgKiByZXR1cm5zIHRoZSByZWZjb3VudCBvbiB0aGUgaW5vZGUuIGl0IGNhbiBjaGFuZ2UgYXJiaXRyYXJpbHkuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcXG5pbmRleCBlZjc5NDFlOWRjNzlhYy4uMTcwNTYxZThmMmUyYzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXFxuQEAgLTg2LDYgKzg2LDggQEAgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMge1xcbiBcXHR2b2lkICgqZnJlZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIFxcdHZvaWQgKCpkaXJ0eV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKTtcXG4gXFx0aW50ICgqd3JpdGVfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4rXFx0aW50ICgqc3luY19pbm9kZV9tZXRhZGF0YSkoc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBcXHRpbnQgKCpkcm9wX2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFx0dm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFx0dm9pZCAoKnB1dF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDIwOjMyOjAzLjU5MjQzMDExMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1Nzc0NDE2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIixcbiAgICBcIk1JTklYX0ZTXCIsXG4gICAgXCJVREZfRlNcIixcbiAgICBcIkJGU19GU1wiLFxuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwid3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwiZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImZhdF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJ1ZGZfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcInNpbXBsZV9mc3luY19ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgc3luY19pbm9kZV9tZXRhZGF0YWAgY2FsbGJhY2sgaW4gYHN1cGVyX29wZXJhdGlvbnNgIGFuZCBtb2RpZmllcyB0aGUgVkZTIHdyaXRlYmFjayBsb2dpYyB0byBoYW5kbGUgYSBuZXcgYElfTUVUQURBVEFfV1JJVEVCQUNLYCBmbGFnLiBJdCBpbXBsZW1lbnRzIHRoaXMgY2FsbGJhY2sgZm9yIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzKSBhbmQgcmVmYWN0b3JzIHRoZWlyIG1ldGFkYXRhIHN5bmNocm9uaXphdGlvbiBsb2dpYywgcmVwbGFjaW5nIGBtbWJfZnN5bmNgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBWRlMgd3JpdGViYWNrIGFuZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGhhbmRsaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljYjUzYThkNTk2M2ZkMWU2NWJjZTllYTJmNWE2M2FkYzgzMzI5YmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAyMDozMjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmhcbmluZGV4IDQ0YTNmNjlkMjc1Zjk2Li5hN2ZhYTkxZGVlZDVhYyAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvYWZmcy5oXG4rKysgYi9mcy9hZmZzL2FmZnMuaFxuQEAgLTQ0LDcgKzQ0LDYgQEAgc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgbXV0ZXggaV9saW5rX2xvY2s7XHRcdC8qIFByb3RlY3RzIGludGVybmFsIGlub2RlIGFjY2Vzcy4gKi9cbiBcdHN0cnVjdCBtdXRleCBpX2V4dF9sb2NrO1x0XHQvKiBQcm90ZWN0cyBpbnRlcm5hbCBpbm9kZSBhY2Nlc3MuICovXG4gI2RlZmluZSBpX2hhc2hfbG9jayBpX2V4dF9sb2NrXG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4gXHR1MzJcdCBpX2Jsa2NudDtcdFx0XHQvKiBibG9jayBjb3VudCAqL1xuIFx0dTMyXHQgaV9leHRjbnQ7XHRcdFx0LyogZXh0ZW5kZWQgYmxvY2sgY291bnQgKi9cbiBcdHUzMlx0KmlfbGM7XHRcdFx0XHQvKiBsaW5lYXIgY2FjaGUgb2YgZXh0ZW5kZWQgYmxvY2tzICovXG5AQCAtMTUyLDcgKzE1MSw2IEBAIGV4dGVybiBib29sXHRhZmZzX25vZmlsZW5hbWV0cnVuY2F0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBpbnRcdGFmZnNfY2hlY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuLFxuIFx0XHRcdFx0Ym9vbCBub3RydW5jYXRlKTtcbiBleHRlcm4gaW50XHRhZmZzX2NvcHlfbmFtZSh1bnNpZ25lZCBjaGFyICpic3RyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLXN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqYWZmc19nZXRfbWV0YWRhdGFfYmhzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIC8qIGJpdG1hcC4gYyAqL1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYW1pZ2FmZnMuYyBiL2ZzL2FmZnMvYW1pZ2FmZnMuY1xuaW5kZXggYmVkNGZjODA1ZThlNjYuLjZjYzBmYzlhNGNiZjkyIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jXG4rKysgYi9mcy9hZmZzL2FtaWdhZmZzLmNcbkBAIC01Nyw3ICs1Nyw3IEBAIGFmZnNfaW5zZXJ0X2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gXHRcdEFGRlNfVEFJTChzYiwgZGlyX2JoKS1cdTAwM2VoYXNoX2NoYWluID0gY3B1X3RvX2JlMzIoaW5vKTtcbiBcbiBcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGRpcl9iaCwgaW5vKTtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkaXJfYmgsIFx1MDAyNkFGRlNfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGRpcl9iaCk7XG4gXHRhZmZzX2JyZWxzZShkaXJfYmgpO1xuIFxuIFx0aW5vZGVfc2V0X210aW1lX3RvX3RzKGRpciwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoZGlyKSk7XG5AQCAtMTAwLDcgKzEwMCw3IEBAIGFmZnNfcmVtb3ZlX2hhc2goc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqcmVtX2JoKVxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWhhc2hfY2hhaW4gPSBpbm87XG4gXHRcdFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJlMzJfdG9fY3B1KGlubykgLSBoYXNoX2lubyk7XG4tXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgcmVtX2JoKS1cdTAwM2VwYXJlbnQgPSAwO1xuIFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTgwLDcgKzE4MCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkobGlua19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGxpbmtfYmgpO1xuIFxuIFx0XHRtZW1jcHkoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VuYW1lLCAzMik7XG4gXHRcdHJldHZhbCA9IGFmZnNfaW5zZXJ0X2hhc2goZGlyLCBiaCk7XG5AQCAtMTg4LDcgKzE4OCw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXG4gXHRcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0XHRpcHV0KGRpcik7XG5AQCAtMjAzLDcgKzIwMyw3IEBAIGFmZnNfcmVtb3ZlX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRcdF9fYmUzMiBpbm8yID0gQUZGU19UQUlMKHNiLCBsaW5rX2JoKS1cdTAwM2VsaW5rX2NoYWluO1xuIFx0XHRcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWxpbmtfY2hhaW4gPSBpbm8yO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKGJoLCBiZTMyX3RvX2NwdShpbm8yKSAtIGxpbmtfaW5vKTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0XHRyZXR2YWwgPSAwO1xuIFx0XHRcdC8qIEZpeCB0aGUgbGluayBjb3VudCwgaWYgYmggaXMgYSBub3JtYWwgaGVhZGVyIGJsb2NrIHdpdGhvdXQgbGlua3MgKi9cbiBcdFx0XHRzd2l0Y2ggKGJlMzJfdG9fY3B1KEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZXN0eXBlKSkge1xuQEAgLTMwNiw3ICszMDYsNyBAQCBhZmZzX3JlbW92ZV9oZWFkZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dmFsID0gYWZmc19yZW1vdmVfaGFzaChkaXIsIGJoKTtcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gZG9uZV91bmxvY2s7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFxuIFx0YWZmc191bmxvY2tfZGlyKGRpcik7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9maWxlLmMgYi9mcy9hZmZzL2ZpbGUuY1xuaW5kZXggMTQ0YjE3NDgyZDEyZGEuLjIzZTA4OGE3ZWQ0ZmIzIDEwMDY0NFxuLS0tIGEvZnMvYWZmcy9maWxlLmNcbisrKyBiL2ZzL2FmZnMvZmlsZS5jXG5AQCAtMTQwLDE0ICsxNDAsMTQgQEAgYWZmc19hbGxvY19leHRibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCB1MzIgZXh0KVxuIFx0QUZGU19UQUlMKHNiLCBuZXdfYmgpLVx1MDAzZXBhcmVudCA9IGNwdV90b19iZTMyKGlub2RlLVx1MDAzZWlfaW5vKTtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBuZXdfYmgpO1xuIFxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KG5ld19iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShuZXdfYmgpO1xuIFxuIFx0dG1wID0gYmUzMl90b19jcHUoQUZGU19UQUlMKHNiLCBiaCktXHUwMDNlZXh0ZW5zaW9uKTtcbiBcdGlmICh0bXApXG4gXHRcdGFmZnNfd2FybmluZyhzYiwgXCJhbGxvY19leHRcIiwgXCJwcmV2aW91cyBleHRlbnNpb24gc2V0ICgleClcIiwgdG1wKTtcbiBcdEFGRlNfVEFJTChzYiwgYmgpLVx1MDAzZWV4dGVuc2lvbiA9IGNwdV90b19iZTMyKGJsb2NrbnIpO1xuIFx0YWZmc19hZGp1c3RfY2hlY2tzdW0oYmgsIGJsb2NrbnIgLSB0bXApO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcbiBcdEFGRlNfSShpbm9kZSktXHUwMDNlaV9leHRjbnQrKztcbiBcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuQEAgLTU4MSw3ICs1ODEsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0bWVtc2V0KEFGRlNfREFUQShiaCkgKyBib2ZmLCAwLCB0bXApO1xuIFx0XHRiZTMyX2FkZF9jcHUoXHUwMDI2QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUsIHRtcCk7XG4gXHRcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0c2l6ZSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbiBcdH0gZWxzZSBpZiAoYmlkeCkge1xuQEAgLTYwMyw3ICs2MDMsNyBAQCBhZmZzX2V4dGVudF9maWxlX29mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmV3c2l6ZSlcbiBcdFx0QUZGU19EQVRBX0hFQUQoYmgpLVx1MDAzZXNpemUgPSBjcHVfdG9fYmUzMih0bXApO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuIFx0XHRiaC1cdTAwM2ViX3N0YXRlIFx1MDAyNj0gfigxVUwgXHUwMDNjXHUwMDNjIEJIX05ldyk7XG4tXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdFx0aWYgKHByZXZfYmgpIHtcbiBcdFx0XHR1MzIgdG1wX25leHQgPSBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0KTtcbiBcbkBAIC02MTMsOCArNjEzLDcgQEAgYWZmc19leHRlbnRfZmlsZV9vZnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5ld3NpemUpXG4gXHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdEFGRlNfREFUQV9IRUFEKHByZXZfYmgpLVx1MDAzZW5leHQgPSBjcHVfdG9fYmUzMihiaC1cdTAwM2ViX2Jsb2NrbnIpO1xuIFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRcdFx0bWFya19idWZmZXJfZGlydHkocHJldl9iaCk7XG4gXHRcdFx0YWZmc19icmVsc2UocHJldl9iaCk7XG4gXHRcdH1cbiBcdFx0c2l6ZSArPSBic2l6ZTtcbkBAIC03MzMsNyArNzMyLDcgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKFxuIFx0XHRcdG1heChib2ZmICsgdG1wLCBiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkpKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IHRtcDtcbiBcdFx0ZnJvbSArPSB0bXA7XG4gXHRcdGJpZHgrKztcbkBAIC03NjYsMTMgKzc2NSwxMiBAQCBzdGF0aWMgaW50IGFmZnNfd3JpdGVfZW5kX29mcyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdFx0XHRcdFx0ICAgICBiaWR4LCB0bXBfbmV4dCk7XG4gXHRcdFx0XHRBRkZTX0RBVEFfSEVBRChwcmV2X2JoKS1cdTAwM2VuZXh0ID0gY3B1X3RvX2JlMzIoYmgtXHUwMDNlYl9ibG9ja25yKTtcbiBcdFx0XHRcdGFmZnNfYWRqdXN0X2NoZWNrc3VtKHByZXZfYmgsIGJoLVx1MDAzZWJfYmxvY2tuciAtIHRtcF9uZXh0KTtcbi1cdFx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoLFxuLVx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRhZmZzX2JyZWxzZShwcmV2X2JoKTtcbiBcdFx0YWZmc19maXhfY2hlY2tzdW0oc2IsIGJoKTtcbi1cdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0XHR3cml0dGVuICs9IGJzaXplO1xuIFx0XHRmcm9tICs9IGJzaXplO1xuIFx0XHRiaWR4Kys7XG5AQCAtODAxLDE0ICs3OTksMTMgQEAgc3RhdGljIGludCBhZmZzX3dyaXRlX2VuZF9vZnMoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdFx0XHRcdCAgICAgYmlkeCwgdG1wX25leHQpO1xuIFx0XHRcdFx0QUZGU19EQVRBX0hFQUQocHJldl9iaCktXHUwMDNlbmV4dCA9IGNwdV90b19iZTMyKGJoLVx1MDAzZWJfYmxvY2tucik7XG4gXHRcdFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShwcmV2X2JoLCBiaC1cdTAwM2ViX2Jsb2NrbnIgLSB0bXBfbmV4dCk7XG4tXHRcdFx0XHRtbWJfbWFya19idWZmZXJfZGlydHkocHJldl9iaCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdFx0XHRcdG1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIGlmIChiZTMyX3RvX2NwdShBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSkgXHUwMDNjIHRtcClcbiBcdFx0XHRBRkZTX0RBVEFfSEVBRChiaCktXHUwMDNlc2l6ZSA9IGNwdV90b19iZTMyKHRtcCk7XG4gXHRcdGFmZnNfYnJlbHNlKHByZXZfYmgpO1xuIFx0XHRhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRcdHdyaXR0ZW4gKz0gdG1wO1xuIFx0XHRmcm9tICs9IHRtcDtcbiBcdFx0YmlkeCsrO1xuQEAgLTk0NSw3ICs5NDIsNyBAQCBhZmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXHRBRkZTX1RBSUwoc2IsIGV4dF9iaCktXHUwMDNlZXh0ZW5zaW9uID0gMDtcbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBleHRfYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGV4dF9iaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShleHRfYmgpO1xuIFx0YWZmc19icmVsc2UoZXh0X2JoKTtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmNcbmluZGV4IDVkZDFiMDE2YmNiMDBhLi5kNGEzZjM4MWM0YmNmZiAxMDA2NDRcbi0tLSBhL2ZzL2FmZnMvaW5vZGUuY1xuKysrIGIvZnMvYWZmcy9pbm9kZS5jXG5AQCAtMjA2LDcgKzIwNiw3IEBAIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHRcdH1cbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0YWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTtcbiBcdHJldHVybiAwO1xuQEAgLTI2NiwxMSArMjY2LDggQEAgYWZmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGFmZnNfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4gXHR9XG4gXG4tXHRtbWJfaW52YWxpZGF0ZShcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGFmZnNfZnJlZV9wcmVhbGxvYyhpbm9kZSk7XG4gXHRjYWNoZV9wYWdlID0gKHVuc2lnbmVkIGxvbmcpQUZGU19JKGlub2RlKS1cdTAwM2VpX2xjO1xuQEAgLTMwNSw3ICszMDIsNyBAQCBhZmZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpcilcbiBcdGJoID0gYWZmc19nZXR6ZXJvYmxrKHNiLCBibG9jayk7XG4gXHRpZiAoIWJoKVxuIFx0XHRnb3RvIGVycl9iaDtcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2QUZGU19JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4gXHRhZmZzX2JyZWxzZShiaCk7XG4gXG4gXHRpbm9kZS1cdTAwM2VpX3VpZCAgICAgPSBjdXJyZW50X2ZzdWlkKCk7XG5AQCAtMzkzLDE3ICszOTAsMTcgQEAgYWZmc19hZGRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgczNcbiBcdFx0QUZGU19UQUlMKHNiLCBiaCktXHUwMDNlbGlua19jaGFpbiA9IGNoYWluO1xuIFx0XHRBRkZTX1RBSUwoc2IsIGlub2RlX2JoKS1cdTAwM2VsaW5rX2NoYWluID0gY3B1X3RvX2JlMzIoYmxvY2spO1xuIFx0XHRhZmZzX2FkanVzdF9jaGVja3N1bShpbm9kZV9iaCwgYmxvY2sgLSBiZTMyX3RvX2NwdShjaGFpbikpO1xuLVx0XHRtbWJfbWFya19idWZmZXJfZGlydHkoaW5vZGVfYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtYXJrX2J1ZmZlcl9kaXJ0eShpbm9kZV9iaCk7XG4gXHRcdHNldF9ubGluayhpbm9kZSwgMik7XG4gXHRcdGlob2xkKGlub2RlKTtcbiBcdH1cbiBcdGFmZnNfZml4X2NoZWNrc3VtKHNiLCBiaCk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0ZGVudHJ5LVx1MDAzZWRfZnNkYXRhID0gKHZvaWQgKikobG9uZyliaC1cdTAwM2ViX2Jsb2NrbnI7XG4gXG4gXHRhZmZzX2xvY2tfZGlyKGRpcik7XG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpO1xuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZBRkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbiBcdGFmZnNfdW5sb2NrX2RpcihkaXIpO1xuIFx0YWZmc191bmxvY2tfbGluayhpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jXG5pbmRleCBjM2M2NTMyZGE0YjBkYS4uNTdkOGQ3NTVhYWRhMDUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL25hbWVpLmNcbisrKyBiL2ZzL2FmZnMvbmFtZWkuY1xuQEAgLTM3Myw3ICszNzMsNyBAQCBhZmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0fVxuIFx0KnAgPSAwO1xuIFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaSArIDE7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmgsIFx1MDAyNkFGRlNfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXG5AQCAtNDQzLDggKzQ0Myw3IEBAIGFmZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdC8qIFRPRE86IG1vdmUgaXQgYmFjayB0byBvbGRfZGlyLCBpZiBlcnJvcj8gKi9cbiBcbiBkb25lOlxuLVx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLFxuLVx0XHRcdFx1MDAyNkFGRlNfSShyZXR2YWwgPyBvbGRfZGlyIDogbmV3X2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmgpO1xuIFx0YWZmc19icmVsc2UoYmgpO1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG5AQCAtNDk3LDggKzQ5Niw4IEBAIGFmZnNfeHJlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKG9sZF9kaXIsIGJoX25ldyk7XG4gXHRhZmZzX3VubG9ja19kaXIob2xkX2Rpcik7XG4gZG9uZTpcbi1cdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaF9vbGQsIFx1MDAyNkFGRlNfSShuZXdfZGlyKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRtbWJfbWFya19idWZmZXJfZGlydHkoYmhfbmV3LCBcdTAwMjZBRkZTX0kob2xkX2RpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0bWFya19idWZmZXJfZGlydHkoYmhfb2xkKTtcbitcdG1hcmtfYnVmZmVyX2RpcnR5KGJoX25ldyk7XG4gXHRhZmZzX2JyZWxzZShiaF9vbGQpO1xuIFx0YWZmc19icmVsc2UoYmhfbmV3KTtcbiBcdHJldHVybiByZXR2YWw7XG5kaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jXG5pbmRleCBiMjMyMjUxYWE3YmJkMC4uMGFkNTEyN2U5ZmI4ZWUgMTAwNjQ0XG4tLS0gYS9mcy9hZmZzL3N1cGVyLmNcbisrKyBiL2ZzL2FmZnMvc3VwZXIuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICphZmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpLVx1MDAzZWlfbGMgPSBOVUxMO1xuIFx0aS1cdTAwM2VpX2V4dF9iaCA9IE5VTEw7XG4gXHRpLVx1MDAzZWlfcGFfY250ID0gMDtcbi1cdG1tYl9pbml0KFx1MDAyNmktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmktXHUwMDNldmZzX2lub2RlLmlfZGF0YSk7XG4gXG4gXHRyZXR1cm4gXHUwMDI2aS1cdTAwM2V2ZnNfaW5vZGU7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuY1xuaW5kZXggNWI0MGFiMDlhNzk2ZGUuLjliMzdlYzRiZDg5YThjIDEwMDY0NFxuLS0tIGEvZnMvYmZzL2Rpci5jXG4rKysgYi9mcy9iZnMvZGlyLmNcbkBAIC02OCwxNyArNjgsMTAgQEAgc3RhdGljIGludCBiZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBiZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHJldHVybiBtbWJfZnN5bmMoZmlsZSxcbi1cdFx0XHRcdTAwMjZCRlNfSShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZzX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IGJmc19yZWFkZGlyLFxuLVx0LmZzeW5jXHRcdD0gYmZzX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9iZnMvaW5vZGUuYyBiL2ZzL2Jmcy9pbm9kZS5jXG5pbmRleCBlNDFlZmRkMzVkYjllZi4uY2FjYzdlZmY5YzMzY2UgMTAwNjQ0XG4tLS0gYS9mcy9iZnMvaW5vZGUuY1xuKysrIGIvZnMvYmZzL2lub2RlLmNcbkBAIC0xMzYsNyArMTM2LDYgQEAgc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4gXHR1bnNpZ25lZCBsb25nIGlfc2Jsb2NrO1xuIFx0c3RydWN0IGJmc19pbm9kZSAqZGk7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLVx0aW50IGVyciA9IDA7XG4gXG4gXHRkcHJpbnRmKFwiaW5vPSUwOHhcXG5cIiwgaW5vKTtcbiBcbkBAIC0xNjUsMTMgKzE2NCwzMSBAQCBzdGF0aWMgaW50IGJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdGRpLVx1MDAzZWlfZW9mZnNldCA9IGNwdV90b19sZTMyKGlfc2Jsb2NrICogQkZTX0JTSVpFICsgaW5vZGUtXHUwMDNlaV9zaXplIC0gMSk7XG4gXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpXG4tXHRcdFx0ZXJyID0gLUVJTztcbi1cdH1cbiBcdGJyZWxzZShiaCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2ViZnNfbG9jayk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJmc19zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcdHN0cnVjdCBiZnNfaW5vZGUgKmRpO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcbitcdGRpID0gZmluZF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCAodTE2KWlub2RlLVx1MDAzZWlubywgXHUwMDI2YmgpO1xuK1x0aWYgKElTX0VSUihkaSkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGRpKTtcbitcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2QkZTX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMzAyLDYgKzMxOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBiZnNfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBiZnNfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBiZnNfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGJmc19zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGJmc19ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gYmZzX3B1dF9zdXBlcixcbiBcdC5zdGF0ZnNcdFx0PSBiZnNfc3RhdGZzLFxuZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmNcbmluZGV4IDlhZjVmMDYxYTFmODVhLi5iZThiNTdhNjM1Y2Q4MiAxMDA2NDRcbi0tLSBhL2ZzL2J1ZmZlci5jXG4rKysgYi9mcy9idWZmZXIuY1xuQEAgLTYyOCw3OSArNjI4LDYgQEAgaW50IG1tYl9zeW5jKHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iKVxuIH1cbiBFWFBPUlRfU1lNQk9MKG1tYl9zeW5jKTtcbiBcbi0vKipcbi0gKiBtbWJfZnN5bmNfbm9mbHVzaCAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aFxuLSAqIFx0XHQgICAgICAgbWV0YWRhdGEgYnVmZmVycyBsaXN0XG4tICpcbi0gKiBAZmlsZTpcdGZpbGUgdG8gc3luY2hyb25pemVcbi0gKiBAbW1iOlx0bGlzdCBvZiBtZXRhZGF0YSBiaHMgdG8gZmx1c2hcbi0gKiBAc3RhcnQ6XHRzdGFydCBvZmZzZXQgaW4gYnl0ZXNcbi0gKiBAZW5kOlx0ZW5kIG9mZnNldCBpbiBieXRlcyAoaW5jbHVzaXZlKVxuLSAqIEBkYXRhc3luYzpcdG9ubHkgc3luY2hyb25pemUgZXNzZW50aWFsIG1ldGFkYXRhIGlmIHRydWVcbi0gKlxuLSAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGZzeW5jIG1ldGhvZCBmb3Igc2ltcGxlIGZpbGVzeXN0ZW1zIHdoaWNoXG4tICogdHJhY2sgYWxsIG5vbi1pbm9kZSBtZXRhZGF0YSBpbiB0aGUgYnVmZmVycyBsaXN0IGhhbmdpbmcgb2ZmIHRoZSBAbW1iXG4tICogc3RydWN0dXJlLlxuLSAqL1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCBlcnI7XG4tXHRpbnQgcmV0ID0gMDtcbi1cbi1cdGVyciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKG1tYilcbi1cdFx0cmV0ID0gbW1iX3N5bmMobW1iKTtcbi1cdGlmICghKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoZGF0YXN5bmMgXHUwMDI2XHUwMDI2ICEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9EQVRBU1lOQykpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cbi1vdXQ6XG4tXHQvKiBjaGVjayBhbmQgYWR2YW5jZSBhZ2FpbiB0byBjYXRjaCBlcnJvcnMgYWZ0ZXIgc3luY2luZyBvdXQgYnVmZmVycyAqL1xuLVx0ZXJyID0gZmlsZV9jaGVja19hbmRfYWR2YW5jZV93Yl9lcnIoZmlsZSk7XG4tXHRpZiAocmV0ID09IDApXG4tXHRcdHJldCA9IGVycjtcbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0wobW1iX2ZzeW5jX25vZmx1c2gpO1xuLVxuLS8qKlxuLSAqIG1tYl9mc3luYyAtIGZzeW5jIGltcGxlbWVudGF0aW9uIGZvciBzaW1wbGUgZmlsZXN5c3RlbXMgd2l0aCBtZXRhZGF0YVxuLSAqIFx0ICAgICAgIGJ1ZmZlcnMgbGlzdFxuLSAqXG4tICogQGZpbGU6XHRmaWxlIHRvIHN5bmNocm9uaXplXG4tICogQG1tYjpcdGxpc3Qgb2YgbWV0YWRhdGEgYmhzIHRvIGZsdXNoXG4tICogQHN0YXJ0Olx0c3RhcnQgb2Zmc2V0IGluIGJ5dGVzXG4tICogQGVuZDpcdGVuZCBvZmZzZXQgaW4gYnl0ZXMgKGluY2x1c2l2ZSlcbi0gKiBAZGF0YXN5bmM6XHRvbmx5IHN5bmNocm9uaXplIGVzc2VudGlhbCBtZXRhZGF0YSBpZiB0cnVlXG4tICpcbi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmc3luYyBtZXRob2QgZm9yIHNpbXBsZSBmaWxlc3lzdGVtcyB3aGljaFxuLSAqIHRyYWNrIGFsbCBub24taW5vZGUgbWV0YWRhdGEgaW4gdGhlIGJ1ZmZlcnMgbGlzdCBoYW5naW5nIG9mZiB0aGUgQG1tYlxuLSAqIHN0cnVjdHVyZS4gVGhpcyBhbHNvIG1ha2VzIHN1cmUgdGhhdCBhIGRldmljZSBjYWNoZSBmbHVzaCBvcGVyYXRpb24gaXNcbi0gKiBjYWxsZWQgYXQgdGhlIGVuZC5cbi0gKi9cbi1pbnQgbW1iX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYixcbi1cdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBtbWJfZnN5bmNfbm9mbHVzaChmaWxlLCBtbWIsIHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbi1cdGlmICghcmV0KVxuLVx0XHRyZXQgPSBibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChtbWJfZnN5bmMpO1xuLVxuIC8qXG4gICogQ2FsbGVkIHdoZW4gd2UndmUgcmVjZW50bHkgd3JpdHRlbiBibG9jayBgYmJsb2NrJywgYW5kIGl0IGlzIGtub3duIHRoYXRcbiAgKiBgYmJsb2NrJyB3YXMgZm9yIGEgYnVmZmVyX2JvdW5kYXJ5KCkgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBibG9jayBhdFxuQEAgLTExMjMsMTIgKzEwNTAsMTggQEAgRVhQT1JUX1NZTUJPTChtYXJrX2J1ZmZlcl9kaXJ0eSk7XG4gXG4gdm9pZCBtYXJrX2J1ZmZlcl93cml0ZV9pb19lcnJvcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbitcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xuK1xuIFx0c2V0X2J1ZmZlcl93cml0ZV9pb19lcnJvcihiaCk7XG4gXHQvKiBGSVhNRTogZG8gd2UgbmVlZCB0byBzZXQgdGhpcyBpbiBib3RoIHBsYWNlcz8gKi9cbiBcdGlmIChiaC1cdTAwM2ViX2ZvbGlvIFx1MDAyNlx1MDAyNiBiaC1cdTAwM2ViX2ZvbGlvLVx1MDAzZW1hcHBpbmcpXG4gXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfZm9saW8tXHUwMDNlbWFwcGluZywgLUVJTyk7XG4tXHRpZiAoYmgtXHUwMDNlYl9tbWIpXG4tXHRcdG1hcHBpbmdfc2V0X2Vycm9yKGJoLVx1MDAzZWJfbW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0LyogUHJvdGVjdCB1cyBmcm9tIG1tYiBcdTAwMjYgaW5vZGUgZ2V0dGluZyBmcmVlZCB3aGlsZSB3ZSB3b3JrIG9uIGl0ICovXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtbWIgPSBSRUFEX09OQ0UoYmgtXHUwMDNlYl9tbWIpO1xuK1x0aWYgKG1tYilcbitcdFx0bWFwcGluZ19zZXRfZXJyb3IobW1iLVx1MDAzZW1hcHBpbmcsIC1FSU8pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWFya19idWZmZXJfd3JpdGVfaW9fZXJyb3IpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZGlyLmMgYi9mcy9leHQyL2Rpci5jXG5pbmRleCAyNzhkNGJlOGVjYmU3Ny4uZTE3YmJjNzU5OGMxNDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2Rpci5jXG4rKysgYi9mcy9leHQyL2Rpci5jXG5AQCAtNzM0LDYgKzczNCw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9kaXJfb3BlcmF0aW9ucyA9IHtcbiAjaWZkZWYgQ09ORklHX0NPTVBBVFxuIFx0LmNvbXBhdF9pb2N0bFx0PSBleHQyX2NvbXBhdF9pb2N0bCxcbiAjZW5kaWZcbi1cdC5mc3luY1x0XHQ9IGV4dDJfZnN5bmMsXG4rXHQuZnN5bmNcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiB9O1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZXh0Mi5oIGIvZnMvZXh0Mi9leHQyLmhcbmluZGV4IDc5ZjdiMzk1MjU4YzJhLi41NjQyNDUxYmYxOTE3MyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZXh0Mi5oXG4rKysgYi9mcy9leHQyL2V4dDIuaFxuQEAgLTczNSw2ICs3MzUsNyBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBleHQyX2NvdW50X2ZyZWUgKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCk7XG4gLyogaW5vZGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpO1xuIGV4dGVybiBpbnQgZXh0Ml93cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTtcbitleHRlcm4gaW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiB2b2lkIGV4dDJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIHZvaWQgZXh0Ml93cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0byk7XG4gZXh0ZXJuIGludCBleHQyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpO1xuQEAgLTc3Miw4ICs3NzMsNiBAQCBleHRlcm4gdm9pZCBleHQyX3N5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKmVzLFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGlyX29wZXJhdGlvbnM7XG4gXG4gLyogZmlsZS5jICovXG4tZXh0ZXJuIGludCBleHQyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgIGludCBkYXRhc3luYyk7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZmlsZV9vcGVyYXRpb25zO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZmlsZS5jIGIvZnMvZXh0Mi9maWxlLmNcbmluZGV4IDhkY2E5ZWM0Y2FjZDlhLi5iOTAyMGRmN2Q4OWUwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDIvZmlsZS5jXG4rKysgYi9mcy9leHQyL2ZpbGUuY1xuQEAgLTQ3LDIxICs0Nyw2IEBAIHN0YXRpYyBpbnQgZXh0Ml9yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGV4dDJfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuLXtcbi1cdGludCByZXQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0cmV0ID0gbW1iX2ZzeW5jKGZpbGUsIFx1MDAyNkVYVDJfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsXG4tXHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuLVx0aWYgKHJldCA9PSAtRUlPKVxuLVx0XHQvKiBXZSBkb24ndCByZWFsbHkga25vdyB3aGVyZSB0aGUgSU8gZXJyb3IgaGFwcGVuZWQuLi4gKi9cbi1cdFx0ZXh0Ml9lcnJvcihzYiwgX19mdW5jX18sXG4tXHRcdFx0ICAgXCJkZXRlY3RlZCBJTyBlcnJvciB3aGVuIHdyaXRpbmcgbWV0YWRhdGEgYnVmZmVyc1wiKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGV4dDJfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5AQCAtMjEzLDcgKzE5OCw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gXHQub3Blblx0XHQ9IGV4dDJfZmlsZV9vcGVuLFxuIFx0LnJlbGVhc2VcdD0gZXh0Ml9yZWxlYXNlX2ZpbGUsXG4tXHQuZnN5bmNcdFx0PSBleHQyX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhID0gdGhwX2dldF91bm1hcHBlZF9hcmVhLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jXG5pbmRleCAyOTgwODYyOWNjZTU2Zi4uOTlhY2Q3OWE0YWYyNzIgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL2lub2RlLmNcbisrKyBiL2ZzL2V4dDIvaW5vZGUuY1xuQEAgLTM5LDggKzM5LDYgQEBcbiAjaW5jbHVkZSBcImFjbC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKTtcbi1cbiAvKlxuICAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay5cbiAgKi9cbkBAIC04Nyw3ICs4NSw3IEBAIHZvaWQgZXh0Ml9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdFx0Lyogc2V0IGR0aW1lICovXG4gXHRcdEVYVDJfSShpbm9kZSktXHUwMDNlaV9kdGltZVx0PSBrdGltZV9nZXRfcmVhbF9zZWNvbmRzKCk7XG4gXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuLVx0XHRfX2V4dDJfd3JpdGVfaW5vZGUoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpO1xuIFx0XHQvKiB0cnVuY2F0ZSB0byAwICovXG4gXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IDA7XG4gXHRcdGlmIChpbm9kZS1cdTAwM2VpX2Jsb2NrcylcbkBAIC0xMjU4LDEyICsxMjU2LDkgQEAgc3RhdGljIGludCBleHQyX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHRpbm9kZV9zZXRfbXRpbWVfdG9fdHMoaW5vZGUsIGlub2RlX3NldF9jdGltZV9jdXJyZW50KGlub2RlKSk7XG4tXHRpZiAoaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbi1cdFx0bW1iX3N5bmMoXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdGlmIChpbm9kZV9uZWVkc19zeW5jKGlub2RlKSlcbiBcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXHR9IGVsc2Uge1xuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbi1cdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNDY5LDcgKzE0NjQsNyBAQCBzdHJ1Y3QgaW5vZGUgKmV4dDJfaWdldCAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pXG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYylcbitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4gXHRzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbkBAIC0xNTYwLDIyICsxNTU1LDMzIEBAIHN0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFx0fSBlbHNlIGZvciAobiA9IDA7IG4gXHUwMDNjIEVYVDJfTl9CTE9DS1M7IG4rKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfYmxvY2tbbl0gPSBlaS1cdTAwM2VpX2RhdGFbbl07XG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsgKFwiSU8gZXJyb3Igc3luY2luZyBleHQyIGlub2RlIFslczolMDhseF1cXG5cIixcbi1cdFx0XHRcdHNiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKSBpbm8pO1xuLVx0XHRcdGVyciA9IC1FSU87XG4tXHRcdH1cbi1cdH1cbiBcdGVpLVx1MDAzZWlfc3RhdGUgXHUwMDI2PSB+RVhUMl9TVEFURV9ORVc7XG4gXHRicmVsc2UgKGJoKTtcbitcdHNldF9pbm9kZV9tZXRhZGF0YV93cml0ZWJhY2soaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGV4dDJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4raW50IGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4tXHRyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4rXHRzdHJ1Y3QgZXh0Ml9pbm9kZSAqcmF3X2lub2RlID0gZXh0Ml9nZXRfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2YmgpO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoSVNfRVJSKHJhd19pbm9kZSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1x0ZXJyID0gbW1iX3N5bmMoXHUwMDI2RVhUMl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdHByaW50ayhcIklPIGVycm9yIHN5bmNpbmcgZXh0MiBpbm9kZSBbJXM6JTA4bHhdXFxuXCIsXG4rXHRcdCAgICAgICBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsICh1bnNpZ25lZCBsb25nKWlub2RlLVx1MDAzZWlfaW5vKTtcbitcdFx0ZXJyID0gLUVJTztcbitcdH1cbitvdXQ6XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gaW50IGV4dDJfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jXG5pbmRleCAzOTk5ZjhmM2IxNTZlMy4uYTQwZjUzMDg3MmE0MDcgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL3N1cGVyLmNcbisrKyBiL2ZzL2V4dDIvc3VwZXIuY1xuQEAgLTM2Miw2ICszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0Ml9zb3BzID0ge1xuIFx0LmFsbG9jX2lub2RlXHQ9IGV4dDJfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBleHQyX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBleHQyX3dyaXRlX2lub2RlLFxuK1x0LnN5bmNfaW5vZGVfbWV0YWRhdGEgPSBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGEsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0Ml9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gZXh0Ml9wdXRfc3VwZXIsXG4gXHQuc3luY19mc1x0PSBleHQyX3N5bmNfZnMsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0Mi94YXR0ci5jIGIvZnMvZXh0Mi94YXR0ci5jXG5pbmRleCBlNTVkMTZhYmY0MjJmNC4uYmU2M2Y4OTQwMmEzODEgMTAwNjQ0XG4tLS0gYS9mcy9leHQyL3hhdHRyLmNcbisrKyBiL2ZzL2V4dDIveGF0dHIuY1xuQEAgLTc3Nyw2ICs3NzcsNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4gXHQvKiBVcGRhdGUgdGhlIGlub2RlLiAqL1xuIFx0RVhUMl9JKGlub2RlKS1cdTAwM2VpX2ZpbGVfYWNsID0gbmV3X2JoID8gbmV3X2JoLVx1MDAzZWJfYmxvY2tuciA6IDA7XG4gXHRpbm9kZV9zZXRfY3RpbWVfY3VycmVudChpbm9kZSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdGlmIChJU19TWU5DKGlub2RlKSkge1xuIFx0XHRlcnJvciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHQvKiBJbiBjYXNlIHN5bmMgZmFpbGVkIGR1ZSB0byBFTk9TUEMgdGhlIGlub2RlIHdhcyBhY3R1YWxseVxuQEAgLTc4OSw4ICs3OTAsNyBAQCBleHQyX3hhdHRyX3NldDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4gXHRcdFx0fVxuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0fSBlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuIFxuIFx0ZXJyb3IgPSAwO1xuIFx0aWYgKG9sZF9iaCBcdTAwMjZcdTAwMjYgb2xkX2JoICE9IG5ld19iaCkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi4wZjA2MTU1YTM1YTY5NCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTExNTEsNyArMTE1MSw3IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZSBpX2RhdGFfc2VtO1xuIFx0c3RydWN0IGlub2RlIHZmc19pbm9kZTtcbiBcdHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGU7XG4tXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgaV9tZXRhZGF0YV9iaHM7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmlfbWV0YWRhdGFfYmhzO1xuIFxuIFx0LypcbiBcdCAqIEZpbGUgY3JlYXRpb24gdGltZS4gSXRzIGZ1bmN0aW9uIGlzIHNhbWUgYXMgdGhhdCBvZlxuQEAgLTIxMjYsNiArMjEyNiwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQhbGlzdF9lbXB0eShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfb3JwaGFuKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKmV4dDRfaV9tZXRhZGF0YV9iaHMoXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdC8qXG4rXHQgKiBpX21ldGFkYXRhX2JocyBpcyBzZXQgaW4gZXh0NF9pbm9kZV9hdHRhY2hfbW1iKCkgdXNpbmcgY21weGNoZygpLlxuK1x0ICogV2UgdXNlIFJFQURfT05DRSB3aGVuIGFjY2Vzc2luZyBpX21ldGFkYXRhX2JocyB0byBtYWtlIHN1cmUgd2UgZ2V0XG4rXHQgKiBjb25zaXN0ZW50IHZpZXcgZm9yIGFsbCBhY2Nlc3Nlcy5cbitcdCAqL1xuK1x0cmV0dXJuIFJFQURfT05DRShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbit9XG4rXG4gLypcbiAgKiBDb2RlcyBmb3Igb3BlcmF0aW5nIHN5c3RlbXNcbiAgKi9cbkBAIC0zMTU1LDYgKzMxNjYsNyBAQCBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdF9fZXh0NF9pZ2V0KChzYiksIChpbm8pLCAoZmxhZ3MpLCBfX2Z1bmNfXywgX19MSU5FX18pXG4gXG4gZXh0ZXJuIGludCAgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuK2V4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopO1xuIGV4dGVybiBpbnQgIGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbiBcdFx0XHQgc3RydWN0IGlhdHRyICopO1xuIGV4dGVybiB1MzIgIGV4dDRfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5jIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuaW5kZXggOWE4YzIyNWYyNzUzMDkuLjNiMmY4YWMyMGJmODViIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuY1xuKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuY1xuQEAgLTM1MCw2ICszNTAsMjEgQEAgaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBleHQ0X2lub2RlX2F0dGFjaF9tbWIoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcbitcdC8qXG4rXHQgKiBJdCdzIGRpZmZpY3VsdCB0byBoYW5kbGUgZmFpbHVyZSB3aGVuIG1hcmtpbmcgYnVmZmVyIGRpcnR5IHdpdGhvdXRcbitcdCAqIGxlYXZpbmcgZmlsZXN5c3RlbSBjb3JydXB0ZWRcbitcdCAqL1xuK1x0bW1iID0ga21hbGxvY19vYmooKm1tYiwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpO1xuK1x0bW1iX2luaXQobW1iLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuK1x0LyogU29tZW9uZSBzd2FwcGVkIGFub3RoZXIgbW1iIGJlZm9yZSB1cz8gKi9cbitcdGlmIChjbXB4Y2hnKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIE5VTEwsIG1tYikpXG4rXHRcdGtmcmVlKG1tYik7XG4rfVxuK1xuIGludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSxcbiBcdFx0XHRcdCBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG5AQCAtMzg5LDExICs0MDQsMTMgQEAgaW50IF9fZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLFxuIFx0XHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGlub2RlKVxuLVx0XHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGVsc2VcbitcdFx0aWYgKGlub2RlKSB7XG4rXHRcdFx0aWYgKCFleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKSlcbitcdFx0XHRcdGV4dDRfaW5vZGVfYXR0YWNoX21tYihpbm9kZSk7XG4rXHRcdFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKSk7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0bWFya19idWZmZXJfZGlydHkoYmgpO1xuK1x0XHR9XG4gXHRcdGlmIChpbm9kZSBcdTAwMjZcdTAwMjYgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpIHtcbiBcdFx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdFx0aWYgKGJ1ZmZlcl9yZXEoYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuY1xuaW5kZXggOTI0NzI2ZGNjODVmZjUuLjI5OTljMmNjOGZjZmEwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9mc3luYy5jXG4rKysgYi9mcy9leHQ0L2ZzeW5jLmNcbkBAIC02OCw5ICs2OCw2IEBAIHN0YXRpYyBpbnQgZXh0NF9zeW5jX3BhcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHQgKiB0aHJvdWdoIGV4dDRfZXZpY3RfaW5vZGUoKSkgYW5kIHNvIHdlIGFyZSBzYWZlIHRvIGZsdXNoXG4gXHRcdCAqIG1ldGFkYXRhIGJsb2NrcyBhbmQgdGhlIGlub2RlLlxuIFx0XHQgKi9cbi1cdFx0cmV0ID0gbW1iX3N5bmMoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0YnJlYWs7XG4gXHRcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTgzLDIyICs4MCwxMSBAQCBzdGF0aWMgaW50IGV4dDRfZnN5bmNfbm9qb3VybmFsKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRcdFx0XHRpbnQgZGF0YXN5bmMsIGJvb2wgKm5lZWRzX2JhcnJpZXIpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXHUwMDNlZl9pbm9kZTtcbi1cdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7XG4tXHRcdC5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCxcbi1cdFx0Lm5yX3RvX3dyaXRlID0gMCxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gbW1iX2ZzeW5jX25vZmx1c2goZmlsZSwgXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbitcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEZvcmNlIHdyaXRlb3V0IG9mIGlub2RlIHRhYmxlIGJ1ZmZlciB0byBkaXNrICovXG4tXHRyZXQgPSBleHQ0X3dyaXRlX2lub2RlKGlub2RlLCBcdTAwMjZ3YmMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJldCA9IGV4dDRfc3luY19wYXJlbnQoaW5vZGUpO1xuIFxuIFx0aWYgKHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIEJBUlJJRVIpKVxuQEAgLTE1Niw2ICsxNDIsMTAgQEAgaW50IGV4dDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdGlmIChzYl9yZG9ubHkoaW5vZGUtXHUwMDNlaV9zYikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0cmV0ID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKCFFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCkge1xuIFx0XHRyZXQgPSBleHQ0X2ZzeW5jX25vam91cm5hbChmaWxlLCBzdGFydCwgZW5kLCBkYXRhc3luYyxcbiBcdFx0XHRcdFx0ICAgXHUwMDI2bmVlZHNfYmFycmllcik7XG5AQCAtMTY0LDEwICsxNTQsNiBAQCBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qXG4gXHQgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpL3dhaXQgd2lsbCBzeW5jIHRoZSBkYXRhLlxuIFx0ICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBwcm9wZXIgdHJhbnNhY3Rpb24gdG9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi4wYzIyMGI1MzU1OTBmNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTg2LDYgKzE4Niw4IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0aWYgKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTClcbiBcdFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9ubGluaykge1xuK1x0XHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbitcbiBcdFx0LypcbiBcdFx0ICogSWYgdGhlcmUncyBkaXJ0eSBwYWdlIHdpbGwgbGVhZCB0byBkYXRhIGxvc3MsIHVzZXJcbiBcdFx0ICogY291bGQgc2VlIHN0YWxlIGRhdGEuXG5AQCAtMTk1LDkgKzE5Nyw5IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShpbm9kZSwgXCJkYXRhIHdpbGwgYmUgbG9zdFwiKTtcbiBcbiBcdFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi1cdFx0LyogQXZvaWQgbWJhbGxvYyBzcGVjaWFsIGlub2RlIHdoaWNoIGhhcyBubyBwcm9wZXIgaW9wcyAqL1xuLVx0XHRpZiAoIUVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKVxuLVx0XHRcdG1tYl9zeW5jKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0XHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbitcdFx0aWYgKG1tYilcbitcdFx0XHRtbWJfc3luYyhtbWIpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zNDUyLDYgKzM0NTQsNyBAQCBzdGF0aWMgYm9vbCBleHQ0X3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3Qgd2FpdClcbiBzdGF0aWMgYm9vbCBleHQ0X2lub2RlX2RhdGFzeW5jX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0am91cm5hbF90ICpqb3VybmFsID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWw7XG4rXHRzdHJ1Y3QgbWFwcGluZ19tZXRhZGF0YV9iaHMgKm1tYjtcbiBcbiBcdGlmIChqb3VybmFsKSB7XG4gXHRcdGlmIChqYmQyX3RyYW5zYWN0aW9uX2NvbW1pdHRlZChqb3VybmFsLFxuQEAgLTM0NjIsOCArMzQ2NSw5IEBAIHN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4rXHRtbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbiBcdC8qIEFueSBtZXRhZGF0YSBidWZmZXJzIHRvIHdyaXRlPyAqL1xuLVx0aWYgKG1tYl9oYXNfYnVmZmVycyhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKSlcbitcdGlmIChtbWIgXHUwMDI2XHUwMDI2IG1tYl9oYXNfYnVmZmVycyhtbWIpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DO1xuIH1cbkBAIC01ODM4LDI0ICs1ODQyLDM4IEBAIGludCBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIFx0XHRlcnIgPSBleHQ0X2ZjX2NvbW1pdChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfam91cm5hbCxcbiBcdFx0XHRcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfc3luY190aWQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuK1x0XHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdH1cbitcdHJldHVybiBlcnI7XG4rfVxuIFxuLVx0XHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbitpbnQgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK3tcbitcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbitcdHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqbW1iO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGluIG5vam91cm5hbCBtb2RlICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19qb3VybmFsKSlcbitcdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4rXG4rXHRlcnIgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcdTAwMjZpbG9jKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRtbWIgPSBSRUFEX09OQ0UoRVhUNF9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRpZiAobW1iKSB7XG4rXHRcdGVyciA9IG1tYl9zeW5jKG1tYik7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0Lypcbi1cdFx0ICogc3luYygyKSB3aWxsIGZsdXNoIHRoZSB3aG9sZSBidWZmZXIgY2FjaGUuIE5vIG5lZWQgdG8gZG9cbi1cdFx0ICogaXQgaGVyZSBzZXBhcmF0ZWx5IGZvciBlYWNoIGlub2RlLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXHUwMDI2XHUwMDI2ICF3YmMtXHUwMDNlZm9yX3N5bmMpXG4tXHRcdFx0c3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGlsb2MuYmgpIFx1MDAyNlx1MDAyNiAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7XG4tXHRcdFx0ZXh0NF9lcnJvcl9pbm9kZV9ibG9jayhpbm9kZSwgaWxvYy5iaC1cdTAwM2ViX2Jsb2NrbnIsIEVJTyxcbi1cdFx0XHRcdFx0ICAgICAgIFwiSU8gZXJyb3Igc3luY2luZyBpbm9kZVwiKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4tXHRcdGJyZWxzZShpbG9jLmJoKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbitcdHN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpO1xuK1x0aWYgKGJ1ZmZlcl93cml0ZV9pb19lcnJvcihpbG9jLmJoKSkge1xuK1x0XHRleHQ0X2Vycm9yX2lub2RlX2Jsb2NrKGlub2RlLCBpbG9jLmJoLVx1MDAzZWJfYmxvY2tuciwgRUlPLFxuK1x0XHRcdFx0ICAgICAgIFwiSU8gZXJyb3Igc3luY2luZyBpbm9kZVwiKTtcbitcdFx0ZXJyID0gLUVJTztcbiBcdH1cbitvdXQ6XG4rXHRicmVsc2UoaWxvYy5iaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li5hZTMzZjViY2IxMzMxNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTQzMCw3ICsxNDMwLDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0SU5JVF9XT1JLKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fd29yaywgZXh0NF9lbmRfaW9fcnN2X3dvcmspO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2ZjX2xvY2spO1xuLVx0bW1iX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9tZXRhZGF0YV9iaHMsIFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZS5pX2RhdGEpO1xuK1x0ZWktXHUwMDNlaV9tZXRhZGF0YV9iaHMgPSBOVUxMO1xuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSwgSV9EQVRBX1NFTV9OT1JNQUwpO1xuICNlbmRpZlxuQEAgLTE0NTEsNiArMTQ1MSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gc3RhdGljIHZvaWQgZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRmc2NyeXB0X2ZyZWVfaW5vZGUoaW5vZGUpO1xuK1x0a2ZyZWUoZXh0NF9pX21ldGFkYXRhX2Jocyhpbm9kZSkpO1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNihFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmNfbGlzdCkpKSB7XG4gXHRcdHByX3dhcm4oXCIlczogaW5vZGUgJWxsdSBzdGlsbCBpbiBmYyBsaXN0XCIsXG4gXHRcdFx0X19mdW5jX18sIGlub2RlLVx1MDAzZWlfaW5vKTtcbkBAIC0xNTI5LDkgKzE1MzAsMTEgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpXG4gXG4gdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuK1x0c3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIgPSBleHQ0X2lfbWV0YWRhdGFfYmhzKGlub2RlKTtcbitcbiBcdGV4dDRfZmNfZGVsKGlub2RlKTtcbi1cdGlmICghRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2pvdXJuYWwpXG4tXHRcdG1tYl9pbnZhbGlkYXRlKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuK1x0aWYgKG1tYilcbitcdFx0bW1iX2ludmFsaWRhdGUobW1iKTtcbiBcdGNsZWFyX2lub2RlKGlub2RlKTtcbiBcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4gXHQvKlxuQEAgLTE2MDUsOSArMTYwOCwxMyBAQCBzdGF0aWMgaW50IGV4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0c3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHtcbiBcdFx0LnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMXG4gXHR9O1xuK1x0aW50IHJldDtcbiBcbiBcdHRyYWNlX2V4dDRfbmZzX2NvbW1pdF9tZXRhZGF0YShpbm9kZSk7XG4tXHRyZXR1cm4gZXh0NF93cml0ZV9pbm9kZShpbm9kZSwgXHUwMDI2d2JjKTtcbitcdHJldCA9IGV4dDRfd3JpdGVfaW5vZGUoaW5vZGUsIFx1MDAyNndiYyk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spXG4rXHRcdHJldCA9IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgXHUwMDI2d2JjKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfUVVPVEFcbkBAIC0xNjY0LDYgKzE2NzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXh0NF9zb3BzID0ge1xuIFx0LmZyZWVfaW5vZGVcdD0gZXh0NF9mcmVlX2luX2NvcmVfaW5vZGUsXG4gXHQuZGVzdHJveV9pbm9kZVx0PSBleHQ0X2Rlc3Ryb3lfaW5vZGUsXG4gXHQud3JpdGVfaW5vZGVcdD0gZXh0NF93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmRpcnR5X2lub2RlXHQ9IGV4dDRfZGlydHlfaW5vZGUsXG4gXHQuZHJvcF9pbm9kZVx0PSBleHQ0X2Ryb3BfaW5vZGUsXG4gXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmNcbmluZGV4IGM2Y2NhNWQwMGZmZDdlLi45MTZmNWM0Y2RjZjM5MCAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9kaXIuY1xuKysrIGIvZnMvZmF0L2Rpci5jXG5AQCAtMTA1MywxMSArMTA1Myw3IEBAIHN0YXRpYyBpbnQgX19mYXRfcmVtb3ZlX2VudHJpZXMoc3RydWN0IGlub2RlICpkaXIsIGxvZmZfdCBwb3MsIGludCBucl9zbG90cylcbiBcdFx0XHRucl9zbG90cy0tO1xuIFx0XHR9XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShiaCwgXHUwMDI2TVNET1NfSShkaXIpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbi1cdFx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0XHRlcnIgPSBzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4gXHRcdGJyZWxzZShiaCk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qIHBvcyBpcyAqbmV4dCogZGUncyBwb3NpdGlvbiwgc28gdGhpcyBkb2VzIGAtIHNpemVvZihkZSknICovXG4gXHRcdHBvcyArPSAoKG9yaWdfc2xvdHMgLSBucl9zbG90cykgKiBzaXplb2YoKmRlKSkgLSBzaXplb2YoKmRlKTtcbkBAIC0xMDg4LDExICsxMDg0LDcgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0XHRucl9zbG90cy0tO1xuIFx0fVxuIFx0bW1iX21hcmtfYnVmZmVyX2RpcnR5KGJoLCBcdTAwMjZNU0RPU19JKGRpciktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0aWYgKElTX0RJUlNZTkMoZGlyKSlcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcbiBcbiBcdGlmIChucl9zbG90cykge1xuQEAgLTExMDksMTIgKzExMDEsMTIgQEAgaW50IGZhdF9yZW1vdmVfZW50cmllcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZhdF9zbG90X2luZm8gKnNpbmZvKVxuIFx0fVxuIFxuIFx0ZmF0X3RydW5jYXRlX3RpbWUoZGlyLCBOVUxMLCBGQVRfVVBEQVRFX0FUSU1FIHwgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0ZXJyID0gMDtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfcmVtb3ZlX2VudHJpZXMpO1xuIFxuQEAgLTExNDQsMjEgKzExMzYsMTEgQEAgc3RhdGljIGludCBmYXRfemVyb2VkX2NsdXN0ZXIoc3RydWN0IGlub2RlICpkaXIsIHNlY3Rvcl90IGJsa25yLCBpbnQgbnJfdXNlZCxcbiBcdFx0bisrO1xuIFx0XHRibGtucisrO1xuIFx0XHRpZiAobiA9PSBucl9iaHMpIHtcbi1cdFx0XHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdFx0XHRlcnIgPSBmYXRfc3luY19iaHMoYmhzLCBuKTtcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0fVxuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkrKylcbiBcdFx0XHRcdGJyZWxzZShiaHNbaV0pO1xuIFx0XHRcdG4gPSAwO1xuIFx0XHR9XG4gXHR9XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKSB7XG4tXHRcdGVyciA9IGZhdF9zeW5jX2JocyhiaHMsIG4pO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpKyspXG4gXHRcdGJyZWxzZShiaHNbaV0pO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaFxuaW5kZXggOTllZDkyMjhhNjc3YmUuLmRjYjViYTc1NzA3M2VkIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2ZhdC5oXG4rKysgYi9mcy9mYXQvZmF0LmhcbkBAIC00MjEsNyArNDIxLDYgQEAgZXh0ZXJuIHZvaWQgZmF0X2RldGFjaChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gc3RydWN0IGlub2RlICpmYXRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3QgaV9wb3MpO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlLCBsb2ZmX3QgaV9wb3MpO1xuLWV4dGVybiBpbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIGludCBmYXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRcdFx0ICB2b2lkICgqc2V0dXApKHN0cnVjdCBzdXBlcl9ibG9jayAqKSk7XG4gZXh0ZXJuIGludCBmYXRfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2ZpbGUuYyBiL2ZzL2ZhdC9maWxlLmNcbmluZGV4IDM3ZTcwNDliNGM4YzQ0Li4xYzgzNWNhNWYyMWE1MSAxMDA2NDRcbi0tLSBhL2ZzL2ZhdC9maWxlLmNcbisrKyBiL2ZzL2ZhdC9maWxlLmNcbkBAIC0xOTAsOCArMTkwLDcgQEAgaW50IGZhdF9maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbiBcdHN0cnVjdCBpbm9kZSAqZmF0X2lub2RlID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlZmF0X2lub2RlO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1tYl9mc3luY19ub2ZsdXNoKGZpbHAsIFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdFx0c3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuK1x0ZXJyID0gc2ltcGxlX2ZzeW5jX25vZmx1c2goZmlscCwgc3RhcnQsIGVuZCwgZGF0YXN5bmMpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0zMzIsMTUgKzMzMSwxNSBAQCBzdGF0aWMgaW50IGZhdF9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBza2lwKVxuIFx0fVxuIFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0FSQ0g7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShpbm9kZSwgTlVMTCwgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRpZiAod2FpdCkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9zdGFydCA9IGlfc3RhcnQ7XG4gXHRcdFx0TVNET1NfSShpbm9kZSktXHUwMDNlaV9sb2dzdGFydCA9IGlfbG9nc3RhcnQ7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0fSBlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fVxuIFxuIFx0LyogV3JpdGUgYSBuZXcgRU9GLCBhbmQgZ2V0IHRoZSByZW1haW5pbmcgY2x1c3RlciBjaGFpbiBmb3IgZnJlZWluZy4gKi9cbiBcdGlmIChza2lwKSB7XG5kaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuY1xuaW5kZXggM2FhNTI0ODFhZDVjZjMuLmUzYmI3YjQ3MTNmMmFjIDEwMDY0NFxuLS0tIGEvZnMvZmF0L2lub2RlLmNcbisrKyBiL2ZzL2ZhdC9pbm9kZS5jXG5AQCAtNjIzLDcgKzYyMywzNCBAQCBzdHJ1Y3QgaW5vZGUgKmZhdF9idWlsZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZhdF9idWlsZF9pbm9kZSk7XG4gXG4tc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCk7XG4rc3RhdGljIGludCBfX2ZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbitzdGF0aWMgaW50IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuK1x0bG9mZl90IGlfcG9zO1xuK1x0c2VjdG9yX3QgYmxvY2tucjtcbitcdGludCBvZmZzZXQ7XG4rXG4rXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gTVNET1NfUk9PVF9JTk8pXG4rXHRcdHJldHVybiAwO1xuK1x0aV9wb3MgPSBmYXRfaV9wb3NfcmVhZChzYmksIGlub2RlKTtcbitcdGlmICghaV9wb3MpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZmF0X2dldF9ibGtucl9vZmZzZXQoc2JpLCBpX3BvcywgXHUwMDI2YmxvY2tuciwgXHUwMDI2b2Zmc2V0KTtcbitcdGJoID0gc2JfZmluZF9nZXRfYmxvY2tfbm9uYXRvbWljKGlub2RlLVx1MDAzZWlfc2IsIGJsb2NrbnIpO1xuK1x0LypcbitcdCAqIEJ1ZmZlciBwcmVzZW50PyBXZSBsZWF2ZSBidWZmZXJfZGlydHkgY2hlY2sgZm9yIHN5bmNfZGlydHlfYnVmZmVyKClcbitcdCAqIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggb25nb2luZyBJTy5cbitcdCAqL1xuK1x0aWYgKGJoIFx1MDAyNlx1MDAyNiBidWZmZXJfdXB0b2RhdGUoYmgpKVxuK1x0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4rXHRicmVsc2UoYmgpO1xuK1x0cmV0dXJuIG1tYl9zeW5jKFx1MDAyNk1TRE9TX0koaW5vZGUpLVx1MDAzZWlfbWV0YWRhdGFfYmhzKTtcbit9XG4gXG4gc3RhdGljIHZvaWQgZmF0X2ZyZWVfZW9mYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTY0MCw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCBmYXRfZnJlZV9lb2ZibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ICogYW55IGNvcnJ1cHRpb24gb24gdGhlIG5leHQgYWNjZXNzIHRvIHRoZSBjbHVzdGVyXG4gXHRcdCAqIGNoYWluIGZvciB0aGUgZmlsZS5cbiBcdFx0ICovXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIGlub2RlX25lZWRzX3N5bmMoaW5vZGUpKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGZhdF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9XQVJOSU5HLCBcIkZhaWxlZCB0byBcIlxuIFx0XHRcdFx0XHRcInVwZGF0ZSBvbiBkaXNrIGlub2RlIGZvciB1bnVzZWQgXCJcbkBAIC04NTQsNyArODgxLDcgQEAgc3RhdGljIGludCBmYXRfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KVxuK3N0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcdHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7XG5AQCAtODYzLDcgKzg5MCw3IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBtdGltZTtcbiBcdGxvZmZfdCBpX3BvcztcbiBcdHNlY3Rvcl90IGJsb2NrbnI7XG4tXHRpbnQgZXJyLCBvZmZzZXQ7XG4rXHRpbnQgb2Zmc2V0O1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfaW5vID09IE1TRE9TX1JPT1RfSU5PKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC05MDcsMTEgKzkzNCw5IEBAIHN0YXRpYyBpbnQgX19mYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZzYmktXHUwMDNlaW5vZGVfaGFzaF9sb2NrKTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdGVyciA9IDA7XG4tXHRpZiAod2FpdClcbi1cdFx0ZXJyID0gc3luY19kaXJ0eV9idWZmZXIoYmgpO1xuIFx0YnJlbHNlKGJoKTtcbi1cdHJldHVybiBlcnI7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbkBAIC05MjUsMjMgKzk1MCwxNyBAQCBzdGF0aWMgaW50IGZhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0ZXJyID0gZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNk1TRE9TX1NCKHNiKS1cdTAwM2VzX2xvY2spO1xuIFx0fSBlbHNlXG4tXHRcdGVyciA9IF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfQUxMKTtcbitcdFx0ZXJyID0gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGZhdF9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0cmV0dXJuIF9fZmF0X3dyaXRlX2lub2RlKGlub2RlLCAxKTtcbi19XG4tXG4tRVhQT1JUX1NZTUJPTF9HUEwoZmF0X3N5bmNfaW5vZGUpO1xuLVxuIHN0YXRpYyBpbnQgZmF0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmYXRfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBmYXRfYWxsb2NfaW5vZGUsXG4gXHQuZnJlZV9pbm9kZVx0PSBmYXRfZnJlZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBmYXRfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IGZhdF9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IGZhdF9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gZmF0X3B1dF9zdXBlcixcbiBcdC5zdGF0ZnNcdFx0PSBmYXRfc3RhdGZzLFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jXG5pbmRleCAzMDI3ZWY1M2FmMjE0Yy4uYmUxOGY2YjU4MTliYTcgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbWlzYy5jXG4rKysgYi9mcy9mYXQvbWlzYy5jXG5AQCAtMTQ2LDE2ICsxNDYsMTcgQEAgaW50IGZhdF9jaGFpbl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19kY2x1cywgaW50IG5yX2NsdXN0ZXIpXG4gXHR9IGVsc2Uge1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX3N0YXJ0ID0gbmV3X2RjbHVzO1xuIFx0XHRNU0RPU19JKGlub2RlKS1cdTAwM2VpX2xvZ3N0YXJ0ID0gbmV3X2RjbHVzO1xuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiBcdFx0LypcbiBcdFx0ICogU2luY2UgZ2VuZXJpY193cml0ZV9zeW5jKCkgc3luY2hyb25pemVzIHJlZ3VsYXIgZmlsZXMgbGF0ZXIsXG4gXHRcdCAqIHdlIHN5bmMgaGVyZSBvbmx5IGRpcmVjdG9yaWVzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgSVNfRElSU1lOQyhpbm9kZSkpIHtcbi1cdFx0XHRyZXQgPSBmYXRfc3luY19pbm9kZShpbm9kZSk7XG4rXHRcdFx0cmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH0gZWxzZVxuLVx0XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0XHR9XG4rXG4gXHR9XG4gXHRpZiAobmV3X2ZjbHVzICE9IChpbm9kZS1cdTAwM2VpX2Jsb2NrcyBcdTAwM2VcdTAwM2UgKHNiaS1cdTAwM2VjbHVzdGVyX2JpdHMgLSA5KSkpIHtcbiBcdFx0ZmF0X2ZzX2Vycm9yX3JhdGVsaW1pdChcbmRpZmYgLS1naXQgYS9mcy9mYXQvbmFtZWlfbXNkb3MuYyBiL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jXG5pbmRleCAwZmQyOTcxYWQ0YjEzMS4uODY4ZWYwOTEwNDhlNDAgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfbXNkb3MuY1xuKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmNcbkBAIC0yNTIsMTIgKzI1MiwxMSBAQCBzdGF0aWMgaW50IG1zZG9zX2FkZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShkaXIsIDEpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKioqKiogQ3JlYXRlIGEgZmlsZSAqL1xuQEAgLTQ3MywyMSArNDcyLDIwIEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyBcdTAwMjY9IH5BVFRSX0hJRERFTjtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7XG4gXHRcdFx0aWYgKElTX0RJUlNZTkMob2xkX2RpcikpIHtcbi1cdFx0XHRcdGVyciA9IGZhdF9zeW5jX2lub2RlKG9sZF9pbm9kZSk7XG4rXHRcdFx0XHRlcnIgPSBzeW5jX2lub2RlX21ldGFkYXRhKG9sZF9pbm9kZSwgMSk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi1cdFx0XHRcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdFx0XHR9XG4gXG4gXHRcdFx0aW5vZGVfaW5jX2l2ZXJzaW9uKG9sZF9kaXIpO1xuIFx0XHRcdGZhdF90cnVuY2F0ZV90aW1lKG9sZF9kaXIsIE5VTEwsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpO1xuIFx0XHRcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHRcdFx0KHZvaWQpZmF0X3N5bmNfaW5vZGUob2xkX2Rpcik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbitcdFx0XHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2RpciwgMSk7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC01MTgsMjYgKzUxNiwyMSBAQCBzdGF0aWMgaW50IGRvX21zZG9zX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHVuc2lnbmVkIGNoYXIgKm9sZF9uYW1lLFxuIFx0XHRNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9hdHRycyB8PSBBVFRSX0hJRERFTjtcbiBcdGVsc2VcbiBcdFx0TVNET1NfSShvbGRfaW5vZGUpLVx1MDAzZWlfYXR0cnMgXHUwMDI2PSB+QVRUUl9ISURERU47XG4tXHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRlcnIgPSBmYXRfc3luY19pbm9kZShvbGRfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gZXJyb3JfaW5vZGU7XG4tXHR9IGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpO1xuLVxuIFx0aWYgKHVwZGF0ZV9kb3Rkb3QpIHtcbiBcdFx0ZmF0X3NldF9zdGFydChkb3Rkb3RfZGUsIE1TRE9TX0kobmV3X2RpciktXHUwMDNlaV9sb2dzdGFydCk7XG4gXHRcdG1tYl9tYXJrX2J1ZmZlcl9kaXJ0eShkb3Rkb3RfYmgsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuLVx0XHRpZiAoSVNfRElSU1lOQyhuZXdfZGlyKSkge1xuLVx0XHRcdGVyciA9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gZXJyb3JfZG90ZG90O1xuLVx0XHR9XG4gXHRcdGRyb3Bfbmxpbmsob2xkX2Rpcik7XG4gXHRcdGlmICghbmV3X2lub2RlKVxuIFx0XHRcdGluY19ubGluayhuZXdfZGlyKTtcbiBcdH1cbitcdG1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTtcbitcdGlmIChJU19ESVJTWU5DKG5ld19kaXIpKSB7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEob2xkX2lub2RlLCAxKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycm9yX2RvdGRvdDtcbitcdH1cbitcbiBcbiBcdGVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhvbGRfZGlyLCBcdTAwMjZvbGRfc2luZm8pO1x0LyogYW5kIHJlbGVhc2VzIGJoICovXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuQEAgLTU0NSwxMCArNTM4LDkgQEAgc3RhdGljIGludCBkb19tc2Rvc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSxcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24ob2xkX2Rpcik7XG4gXHRmYXRfdHJ1bmNhdGVfdGltZShvbGRfZGlyLCBcdTAwMjZ0cywgRkFUX1VQREFURV9DTVRJTUUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKG9sZF9kaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShvbGRfZGlyKTtcbi1cdGVsc2Vcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTtcbitcdFx0ZXJyID0gc3luY19pbm9kZV9tZXRhZGF0YShvbGRfZGlyLCAxKTtcbiBcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xuQEAgLTU3MSwxNCArNTYzLDE1IEBAIHN0YXRpYyBpbnQgZG9fbXNkb3NfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2RpciwgdW5zaWduZWQgY2hhciAqb2xkX25hbWUsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZNU0RPU19JKG9sZF9pbm9kZSktXHUwMDNlaV9tZXRhZGF0YV9iaHMpO1xuIFx0XHRjb3JydXB0IHw9IHN5bmNfZGlydHlfYnVmZmVyKGRvdGRvdF9iaCk7XG4gXHR9XG4tZXJyb3JfaW5vZGU6XG4gXHRmYXRfZGV0YWNoKG9sZF9pbm9kZSk7XG4gXHRmYXRfYXR0YWNoKG9sZF9pbm9kZSwgb2xkX3NpbmZvLmlfcG9zKTtcbiBcdE1TRE9TX0kob2xkX2lub2RlKS1cdTAwM2VpX2F0dHJzID0gb2xkX2F0dHJzO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbi1cdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuK1x0XHRpZiAoY29ycnVwdCkge1xuK1x0XHRcdG1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTtcbitcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5pbmRleCBlOTA5NDQ3ODczZTM2NC4uMzA4MTU4ODk1YjFkOGEgMTAwNjQ0XG4tLS0gYS9mcy9mYXQvbmFtZWlfdmZhdC5jXG4rKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jXG5AQCAtNjc4LDEwICs2NzgsOSBAQCBzdGF0aWMgaW50IHZmYXRfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqcW5hbWUsXG4gXG4gXHQvKiB1cGRhdGUgdGltZXN0YW1wICovXG4gXHRmYXRfdHJ1bmNhdGVfdGltZShkaXIsIHRzLCBGQVRfVVBEQVRFX0NNVElNRSk7XG4rXHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4gXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHQodm9pZClmYXRfc3luY19pbm9kZShkaXIpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGRpcik7XG4rXHRcdGVyciA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbiBjbGVhbnVwOlxuIFx0a2ZyZWUoc2xvdHMpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC05MDQsOSArOTAzLDkgQEAgc3RhdGljIGludCB2ZmF0X2dldF9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsXG4gXG4gc3RhdGljIGludCB2ZmF0X3N5bmNfaXBvcyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4tXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuLVx0XHRyZXR1cm4gZmF0X3N5bmNfaW5vZGUoaW5vZGUpO1xuIFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRpZiAoSVNfRElSU1lOQyhkaXIpKVxuK1x0XHRyZXR1cm4gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTIxLDE0ICs5MjAsMTQgQEAgc3RhdGljIGludCB2ZmF0X3VwZGF0ZV9kb3Rkb3RfZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4rc3RhdGljIGludCB2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4gXHRpbm9kZV9pbmNfaXZlcnNpb24oZGlyKTtcbiBcdGZhdF90cnVuY2F0ZV90aW1lKGRpciwgdHMsIEZBVF9VUERBVEVfQ01USU1FKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbiBcdGlmIChJU19ESVJTWU5DKGRpcikpXG4tXHRcdCh2b2lkKWZhdF9zeW5jX2lub2RlKGRpcik7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoZGlyKTtcbitcdFx0cmV0dXJuIHN5bmNfaW5vZGVfbWV0YWRhdGEoZGlyLCAxKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbkBAIC05OTYsNyArOTk1LDcgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRvbGRfc2luZm8uYmggPSBOVUxMO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9kb3Rkb3Q7XG4tXHR2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuK1x0ZXJyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFx1MDAyNnRzKTtcbiBcbiBcdGlmIChuZXdfaW5vZGUpIHtcbiBcdFx0ZHJvcF9ubGluayhuZXdfaW5vZGUpO1xuQEAgLTEwMjQsOCArMTAyMywxMCBAQCBzdGF0aWMgaW50IHZmYXRfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdGZhdF9hdHRhY2gob2xkX2lub2RlLCBvbGRfc2luZm8uaV9wb3MpO1xuIFx0aWYgKG5ld19pbm9kZSkge1xuIFx0XHRmYXRfYXR0YWNoKG5ld19pbm9kZSwgbmV3X2lfcG9zKTtcbi1cdFx0aWYgKGNvcnJ1cHQpXG4tXHRcdFx0Y29ycnVwdCB8PSBmYXRfc3luY19pbm9kZShuZXdfaW5vZGUpO1xuK1x0XHRpZiAoY29ycnVwdCkge1xuK1x0XHRcdG1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTtcbitcdFx0XHRjb3JydXB0IHw9IHN5bmNfaW5vZGVfbWV0YWRhdGEobmV3X2lub2RlLCAxKTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3IGVudHJ5IHdhcyBub3Qgc2hhcmluZyB0aGUgZGF0YSBjbHVzdGVyLCBpdFxuQEAgLTExMjMsMTAgKzExMjQsMTMgQEAgc3RhdGljIGludCB2ZmF0X3JlbmFtZV9leGNoYW5nZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnlcbiBcdFx0XHR2ZmF0X21vdmVfbmxpbmsobmV3X2Rpciwgb2xkX2Rpcik7XG4gXHR9XG4gXG4tXHR2ZmF0X3VwZGF0ZV9kaXJfbWV0YWRhdGEob2xkX2RpciwgXHUwMDI2dHMpO1xuK1x0ZXJyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG9sZF9kaXIsIFx1MDAyNnRzKTtcbiBcdC8qIGlmIGRpcmVjdG9yaWVzIGFyZSBub3QgdGhlIHNhbWUsIHVwZGF0ZSBuZXdfZGlyIGFzIHdlbGwgKi9cbi1cdGlmIChvbGRfZGlyICE9IG5ld19kaXIpXG4tXHRcdHZmYXRfdXBkYXRlX2Rpcl9tZXRhZGF0YShuZXdfZGlyLCBcdTAwMjZ0cyk7XG4rXHRpZiAob2xkX2RpciAhPSBuZXdfZGlyKSB7XG4rXHRcdGludCBlcnIyID0gdmZhdF91cGRhdGVfZGlyX21ldGFkYXRhKG5ld19kaXIsIFx1MDAyNnRzKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0ZXJyID0gZXJyMjtcbitcdH1cbiBcbiBvdXQ6XG4gXHRicmVsc2Uob2xkX2RvdGRvdF9iaCk7XG5kaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suY1xuaW5kZXggZmRiODc2NmQyNzVhMTcuLjlkOTYzNTc3MzFhM2Q0IDEwMDY0NFxuLS0tIGEvZnMvZnMtd3JpdGViYWNrLmNcbisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jXG5AQCAtMTg1MSw2ICsxODUxLDIyIEBAIF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldCA9IGVycjtcbiBcdH1cbitcbitcdC8qXG4rXHQgKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGlub2RlIG1ldGFkYXRhIElPIHBvc3NpYmx5IHN1Ym1pdHRlZFxuK1x0ICogYnkgcHJldmlvdXMgV0JfU1lOQ19OT05FIHdyaXRlYmFjaz9cbitcdCAqL1xuK1x0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgXHUwMDI2XHUwMDI2ICF3YmMtXHUwMDNlZm9yX3N5bmMgXHUwMDI2XHUwMDI2XG4rXHQgICAgaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9NRVRBREFUQV9XUklURUJBQ0spIHtcbitcdFx0aW50IGVycjtcbitcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRcdGlub2RlX3N0YXRlX2NsZWFyKGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19vcC1cdTAwM2VzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCB3YmMpO1xuK1x0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuIFx0d2JjLVx1MDAzZXVucGlubmVkX25ldGZzX3diID0gZmFsc2U7XG4gXHR0cmFjZV93cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCB3YmMsIG5yX3RvX3dyaXRlKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTg5MiwxNCArMTkwOCwxNyBAQCBzdGF0aWMgaW50IHdyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdC8qXG4gXHQgKiBJZiB0aGUgaW5vZGUgaXMgYWxyZWFkeSBmdWxseSBjbGVhbiwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uXG4gXHQgKlxuLVx0ICogRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmNzIHdlIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGFueSBwYWdlcyBhcmVcbi1cdCAqIHN0aWxsIHVuZGVyIHdyaXRlYmFjaywgZS5nLiBkdWUgdG8gcHJpb3IgV0JfU1lOQ19OT05FIHdyaXRlYmFjay4gIElmXG4tXHQgKiB0aGVyZSBhcmUgYW55IHN1Y2ggcGFnZXMsIHdlJ2xsIG5lZWQgdG8gd2FpdCBmb3IgdGhlbS5cbitcdCAqIEZvciBkYXRhLWludGVncml0eSBzeW5jcyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZm9saW9zIG9yXG4rXHQgKiBtZXRhZGF0YSBhcmUgc3RpbGwgdW5kZXIgd3JpdGViYWNrLCBlLmcuIGR1ZSB0byBwcmlvciBXQl9TWU5DX05PTkVcbitcdCAqIHdyaXRlYmFjay4gSWYgdGhlcmUsIHdlJ2xsIG5lZWQgdG8gd2FpdCBmb3IgdGhlbS5cbiBcdCAqL1xuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXHUwMDI2IElfRElSVFlfQUxMKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAod2JjLVx1MDAzZXN5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCB8fFxuLVx0ICAgICAhbWFwcGluZ190YWdnZWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSykpKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0FMTCkpIHtcbitcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdGlmICghbWFwcGluZ190YWdnZWQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiBJX01FVEFEQVRBX1dSSVRFQkFDSykpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4gXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfU1lOQyk7XG4gXHR3YmNfYXR0YWNoX2FuZF91bmxvY2tfaW5vZGUod2JjLCBpbm9kZSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmNcbmluZGV4IDVhMGQyNzYzNzlkMTNiLi4yN2Q3ZGMxNmZjYjBhMCAxMDA2NDRcbi0tLSBhL2ZzL2xpYmZzLmNcbisrKyBiL2ZzL2xpYmZzLmNcbkBAIC0xNTU5LDkgKzE1NTksMTIgQEAgaW50IHNpbXBsZV9mc3luY19ub2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ESVJUWV9BTEwpKVxuK1x0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjZcbitcdFx0XHQoSV9ESVJUWV9BTEwgfCBJX1NZTkMgfCBJX01FVEFEQVRBX1dSSVRFQkFDSykpKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjYgIShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFx1MDAyNiBJX0RJUlRZX0RBVEFTWU5DKSlcbitcdGlmIChkYXRhc3luYyBcdTAwMjZcdTAwMjZcbitcdCAgICAhKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2XG4rXHRcdFx0KElfRElSVFlfREFUQVNZTkMgfCBJX1NZTkMgfCBJX01FVEFEQVRBX1dSSVRFQkFDSykpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdHJldCA9IHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuZGlmZiAtLWdpdCBhL2ZzL21pbml4L2Rpci5jIGIvZnMvbWluaXgvZGlyLmNcbmluZGV4IDM2MWQyNmQ4N2QyZTJkLi4yY2ExNmY4NDlkNWFjMCAxMDA2NDRcbi0tLSBhL2ZzL21pbml4L2Rpci5jXG4rKysgYi9mcy9taW5peC9kaXIuY1xuQEAgLTIzLDcgKzIzLDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9kaXJfb3BlcmF0aW9ucyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIFx0LnJlYWRcdFx0PSBnZW5lcmljX3JlYWRfZGlyLFxuIFx0Lml0ZXJhdGVfc2hhcmVkXHQ9IG1pbml4X3JlYWRkaXIsXG4tXHQuZnN5bmNcdFx0PSBtaW5peF9mc3luYyxcbitcdC5mc3luY1x0XHQ9IHNpbXBsZV9mc3luYyxcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jXG5pbmRleCA4NmU1OTQzY2QyZmY3NC4uMDJhYWJiZGI1ZGVhYTAgMTAwNjQ0XG4tLS0gYS9mcy9taW5peC9maWxlLmNcbisrKyBiL2ZzL21pbml4L2ZpbGUuY1xuQEAgLTEwLDEzICsxMCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVmZmVyX2hlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwibWluaXguaFwiXG4gXG4taW50IG1pbml4X2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYylcbi17XG4tXHRyZXR1cm4gbW1iX2ZzeW5jKGZpbGUsXG4tXHRcdFx0XHUwMDI2bWluaXhfaShmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0KS1cdTAwM2VpX21ldGFkYXRhX2Jocyxcbi1cdFx0XHRzdGFydCwgZW5kLCBkYXRhc3luYyk7XG4tfVxuLVxuIC8qXG4gICogV2UgaGF2ZSBtb3N0bHkgTlVMTHMgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIE9LIGZvclxuICAqIHRoZSBtaW5peCBmaWxlc3lzdGVtLlxuQEAgLTI2LDcgKzE5LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbiBcdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5mc3luY1x0XHQ9IG1pbml4X2ZzeW5jLFxuK1x0LmZzeW5jXHRcdD0gc2ltcGxlX2ZzeW5jLFxuIFx0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuY1xuaW5kZXggYzMwY2M1OTA2OThkNmYuLmRhZjgzZTRmZjI1YzgxIDEwMDY0NFxuLS0tIGEvZnMvbWluaXgvaW5vZGUuY1xuKysrIGIvZnMvbWluaXgvaW5vZGUuY1xuQEAgLTI0LDYgKzI0LDggQEBcbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbitzdGF0aWMgaW50IG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4gXG4gdm9pZCBfX21pbml4X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLFxuQEAgLTEyOCw2ICsxMzAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbWluaXhfc29wcyA9IHtcbiBcdC5hbGxvY19pbm9kZVx0PSBtaW5peF9hbGxvY19pbm9kZSxcbiBcdC5mcmVlX2lub2RlXHQ9IG1pbml4X2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSBtaW5peF93cml0ZV9pbm9kZSxcbitcdC5zeW5jX2lub2RlX21ldGFkYXRhID0gbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YSxcbiBcdC5ldmljdF9pbm9kZVx0PSBtaW5peF9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gbWluaXhfcHV0X3N1cGVyLFxuIFx0LnN0YXRmc1x0XHQ9IG1pbml4X3N0YXRmcyxcbkBAIC02MzAsNyArNjMzLDcgQEAgc3RydWN0IGlub2RlICptaW5peF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKVxuIC8qXG4gICogVGhlIG1pbml4IFYxIGZ1bmN0aW9uIHRvIHN5bmNocm9uaXplIGFuIGlub2RlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4rc3RhdGljIGludCBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICogYmg7XG4gXHRzdHJ1Y3QgbWluaXhfaW5vZGUgKiByYXdfaW5vZGU7XG5AQCAtNjM5LDcgKzY0Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXG4gXHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGlmICghcmF3X2lub2RlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9tb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfdWlkID0gZnNfaGlnaDJsb3d1aWQoaV91aWRfcmVhZChpbm9kZSkpO1xuIFx0cmF3X2lub2RlLVx1MDAzZWlfZ2lkID0gZnNfaGlnaDJsb3dnaWQoaV9naWRfcmVhZChpbm9kZSkpO1xuQEAgLTY1MSwxMyArNjU0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBWMV9taW5peF91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICogaW5vZGUpXG4gXHRlbHNlIGZvciAoaSA9IDA7IGkgXHUwMDNjIDk7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTFfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuICAqIFRoZSBtaW5peCBWMiBmdW5jdGlvbiB0byBzeW5jaHJvbml6ZSBhbiBpbm9kZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuK3N0YXRpYyBpbnQgVjJfbWluaXhfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoO1xuIFx0c3RydWN0IG1pbml4Ml9pbm9kZSAqIHJhd19pbm9kZTtcbkBAIC02NjYsNyArNjcxLDcgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcbiBcdHJhd19pbm9kZSA9IG1pbml4X1YyX3Jhd19pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZS1cdTAwM2VpX2lubywgXHUwMDI2YmgpO1xuIFx0aWYgKCFyYXdfaW5vZGUpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRyZXR1cm4gLUVJTztcbiBcdHJhd19pbm9kZS1cdTAwM2VpX21vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV91aWQgPSBmc19oaWdoMmxvd3VpZChpX3VpZF9yZWFkKGlub2RlKSk7XG4gXHRyYXdfaW5vZGUtXHUwMDNlaV9naWQgPSBmc19oaWdoMmxvd2dpZChpX2dpZF9yZWFkKGlub2RlKSk7XG5AQCAtNjgwLDI5ICs2ODUsNDIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIFYyX21pbml4X3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSlcbiBcdGVsc2UgZm9yIChpID0gMDsgaSBcdTAwM2MgMTA7IGkrKylcbiBcdFx0cmF3X2lub2RlLVx1MDAzZWlfem9uZVtpXSA9IG1pbml4X2lub2RlLVx1MDAzZXUuaTJfZGF0YVtpXTtcbiBcdG1hcmtfYnVmZmVyX2RpcnR5KGJoKTtcbi1cdHJldHVybiBiaDtcbitcdGJyZWxzZShiaCk7XG4rXHRzZXRfaW5vZGVfbWV0YWRhdGFfd3JpdGViYWNrKGlub2RlKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuK3tcbitcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbitcdFx0cmV0dXJuIFYxX21pbml4X3VwZGF0ZV9pbm9kZShpbm9kZSk7XG4rXHRyZXR1cm4gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTtcbit9XG4rXG4rc3RhdGljIGludCBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbitcdHZvaWQgKnJhd19pbm9kZTtcbiBcbiBcdGlmIChJTk9ERV9WRVJTSU9OKGlub2RlKSA9PSBNSU5JWF9WMSlcbi1cdFx0YmggPSBWMV9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuK1x0XHRyYXdfaW5vZGUgPSBtaW5peF9WMV9yYXdfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIFx1MDAyNmJoKTtcbiBcdGVsc2Vcbi1cdFx0YmggPSBWMl9taW5peF91cGRhdGVfaW5vZGUoaW5vZGUpO1xuLVx0aWYgKCFiaClcbitcdFx0cmF3X2lub2RlID0gbWluaXhfVjJfcmF3X2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBcdTAwMjZiaCk7XG4rXHRpZiAoIXJhd19pbm9kZSlcbiBcdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAod2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCBcdTAwMjZcdTAwMjYgYnVmZmVyX2RpcnR5KGJoKSkge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfcmVxKGJoKSBcdTAwMjZcdTAwMjYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbi1cdFx0XHRwcmludGsoXCJJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhsbHhdXFxuXCIsXG4tXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4rXHRlcnIgPSBtbWJfc3luYyhcdTAwMjZtaW5peF9pKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdHByaW50ayhcIklPIGVycm9yIHN5bmNpbmcgbWluaXggaW5vZGUgWyVzOiUwOGxseF1cXG5cIixcbitcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGlub2RlLVx1MDAzZWlfaW5vKTtcbitcdFx0ZXJyID0gLUVJTztcbiBcdH1cbi1cdGJyZWxzZSAoYmgpO1xuK291dDpcbitcdGJyZWxzZShiaCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmNcbmluZGV4IGViYzlmNmEzNzlmZTNhLi40MjVlM2MxNjI5MzUwNCAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9kaXIuY1xuKysrIGIvZnMvdWRmL2Rpci5jXG5AQCAtMTU3LDYgKzE1Nyw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRcdFx0XHQ9IGdlbmVyaWNfcmVhZF9kaXIsXG4gXHQuaXRlcmF0ZV9zaGFyZWRcdFx0PSB1ZGZfcmVhZGRpcixcbiBcdC51bmxvY2tlZF9pb2N0bFx0XHQ9IHVkZl9pb2N0bCxcbi1cdC5mc3luY1x0XHRcdD0gdWRmX2ZzeW5jLFxuK1x0LmZzeW5jXHRcdFx0PSBzaW1wbGVfZnN5bmMsXG4gXHQuc2V0bGVhc2VcdFx0PSBnZW5lcmljX3NldGxlYXNlLFxuIH07XG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmNcbmluZGV4IGY3ZjE0MjJkZTMwZmE0Li41N2QxMTYwNmEyYTc3NiAxMDA2NDRcbi0tLSBhL2ZzL3VkZi9maWxlLmNcbisrKyBiL2ZzL3VkZi9maWxlLmNcbkBAIC0xOTgsMTMgKzE5OCw2IEBAIHN0YXRpYyBpbnQgdWRmX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpXG4te1xuLVx0cmV0dXJuIG1tYl9mc3luYyhmaWxlLFxuLVx0XHRcdFx1MDAyNlVERl9JKGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QpLVx1MDAzZWlfbWV0YWRhdGFfYmhzLFxuLVx0XHRcdHN0YXJ0LCBlbmQsIGRhdGFzeW5jKTtcbi19XG4tXG4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZGZfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnJlYWRfaXRlclx0XHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4gXHQudW5sb2NrZWRfaW9jdGxcdFx0PSB1ZGZfaW9jdGwsXG5AQCAtMjEyLDcgKzIwNSw3IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5tbWFwXHRcdFx0PSB1ZGZfZmlsZV9tbWFwLFxuIFx0LndyaXRlX2l0ZXJcdFx0PSB1ZGZfZmlsZV93cml0ZV9pdGVyLFxuIFx0LnJlbGVhc2VcdFx0PSB1ZGZfcmVsZWFzZV9maWxlLFxuLVx0LmZzeW5jXHRcdFx0PSB1ZGZfZnN5bmMsXG4rXHQuZnN5bmNcdFx0XHQ9IHNpbXBsZV9mc3luYyxcbiBcdC5zcGxpY2VfcmVhZFx0XHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4gXHQuc3BsaWNlX3dyaXRlXHRcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5sbHNlZWtcdFx0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5AQCAtMjUzLDYgKzI0Niw4IEBAIHN0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcbiBcdHNldGF0dHJfY29weShcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgYXR0cik7XG4gXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdGlmIChJU19TWU5DKGlub2RlKSlcbitcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuY1xuaW5kZXggNjdiY2Y4Mzc1OGM4ZmIuLjY4YzZjMmJhOGVkMWEyIDEwMDY0NFxuLS0tIGEvZnMvdWRmL2lub2RlLmNcbisrKyBiL2ZzL3VkZi9pbm9kZS5jXG5AQCAtNTEsOCArNTEsNiBAQFxuIHN0cnVjdCB1ZGZfbWFwX3JxO1xuIFxuIHN0YXRpYyB1bW9kZV90IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKHN0cnVjdCBmaWxlRW50cnkgKik7XG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xuLXN0YXRpYyBpbnQgdWRmX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gc3RhdGljIGludCB1ZGZfYWxsb2NfaV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBzaXplKTtcbiBzdGF0aWMgaW50IGlub2RlX2dldGJsayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdWRmX21hcF9ycSAqbWFwKTtcbiBzdGF0aWMgaW50IHVkZl9pbnNlcnRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbixcbkBAIC0xNDIsNyArMTQwLDcgQEAgdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKSB7XG4gXHRcdFx0d2FudF9kZWxldGUgPSAxO1xuIFx0XHRcdHVkZl9zZXRzaXplKGlub2RlLCAwKTtcbi1cdFx0XHR1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7XG4rXHRcdFx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpO1xuIFx0XHR9XG4gXHRcdGlmIChpaW5mby1cdTAwM2VpX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaW5vZGUtXHUwMDNlaV9zaXplICE9IGlpbmZvLVx1MDAzZWlfbGVuRXh0ZW50cykge1xuQEAgLTkzNiwxMCArOTM0LDcgQEAgc3RhdGljIGludCBpbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHVkZl9tYXBfcnEgKm1hcClcbiBcdGlpbmZvLVx1MDAzZWlfbmV4dF9hbGxvY19nb2FsID0gbmV3YmxvY2tudW0gKyAxO1xuIFx0aW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpO1xuIFxuLVx0aWYgKElTX1NZTkMoaW5vZGUpKVxuLVx0XHR1ZGZfc3luY19pbm9kZShpbm9kZSk7XG4tXHRlbHNlXG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRyZXQgPSAwO1xuIG91dF9mcmVlOlxuIFx0YnJlbHNlKHByZXZfZXBvcy5iaCk7XG5AQCAtMTMyNiwxMCArMTMyMSw3IEBAIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSlcbiBcdH1cbiB1cGRhdGVfdGltZTpcbiBcdGlub2RlX3NldF9tdGltZV90b190cyhpbm9kZSwgaW5vZGVfc2V0X2N0aW1lX2N1cnJlbnQoaW5vZGUpKTtcbi1cdGlmIChJU19TWU5DKGlub2RlKSlcbi1cdFx0dWRmX3N5bmNfaW5vZGUoaW5vZGUpO1xuLVx0ZWxzZVxuLVx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTcwNSwxNCArMTY5NywyOCBAQCB2b2lkIHVkZl91cGRhdGVfZXh0cmFfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCBtb2RlKVxuIFx0XHRpaW5mby1cdTAwM2VpX2V4dHJhUGVybXMgfD0gRkVfUEVSTV9PX0RFTEVURTtcbiB9XG4gXG4taW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbitpbnQgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuLVx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpO1xuLX1cbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4rXHRpbnQgZXJyID0gMDtcbiBcbi1zdGF0aWMgaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0cmV0dXJuIHVkZl91cGRhdGVfaW5vZGUoaW5vZGUsIDEpO1xuK1x0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYixcbitcdFx0XHR1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHQgIFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX2xvY2F0aW9uLCAwKSk7XG4rXHRpZiAoIWJoKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHN5bmNfZGlydHlfYnVmZmVyKGJoKTtcbitcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4rXHRcdHVkZl93YXJuKGlub2RlLVx1MDAzZWlfc2IsIFwiSU8gZXJyb3Igc3luY2luZyB1ZGYgaW5vZGUgWyUwOGxseF1cXG5cIixcbitcdFx0XHQgaW5vZGUtXHUwMDNlaV9pbm8pO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGVyciA9IG1tYl9zeW5jKFx1MDAyNlVERl9JKGlub2RlKS1cdTAwM2VpX21ldGFkYXRhX2Jocyk7XG4rb3V0OlxuK1x0YnJlbHNlKGJoKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lKVxuQEAgLTE3MjMsNyArMTcyOSw3IEBAIHN0YXRpYyB2b2lkIHVkZl9hZGp1c3RfdGltZShzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvLCBzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lXG4gXHRcdGlpbmZvLVx1MDAzZWlfY3J0aW1lID0gdGltZTtcbiB9XG4gXG4tc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuK2ludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgZmlsZUVudHJ5ICpmZTtcbkBAIC0xNzMyLDcgKzE3MzgsNiBAQCBzdGF0aWMgaW50IHVkZl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRvX3N5bmMpXG4gXHR1aW50MzJfdCB1ZGZwZXJtcztcbiBcdHVpbnQxNl90IGljYmZsYWdzO1xuIFx0dWludDE2X3QgY3JjbGVuO1xuLVx0aW50IGVyciA9IDA7XG4gXHRzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4gXHRzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpO1xuQEAgLTE5MzcsMTcgKzE5NDIsMTAgQEAgc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKVxuIFxuIFx0Lyogd3JpdGUgdGhlIGRhdGEgYmxvY2tzICovXG4gXHRtYXJrX2J1ZmZlcl9kaXJ0eShiaCk7XG4tXHRpZiAoZG9fc3luYykge1xuLVx0XHRzeW5jX2RpcnR5X2J1ZmZlcihiaCk7XG4tXHRcdGlmIChidWZmZXJfd3JpdGVfaW9fZXJyb3IoYmgpKSB7XG4tXHRcdFx0dWRmX3dhcm4oaW5vZGUtXHUwMDNlaV9zYiwgXCJJTyBlcnJvciBzeW5jaW5nIHVkZiBpbm9kZSBbJTA4bGx4XVxcblwiLFxuLVx0XHRcdFx0IGlub2RlLVx1MDAzZWlfaW5vKTtcbi1cdFx0XHRlcnIgPSAtRUlPO1xuLVx0XHR9XG4tXHR9XG4gXHRicmVsc2UoYmgpO1xuK1x0c2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhpbm9kZSk7XG4gXG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCBpbm9kZSAqX191ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubyxcbmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jXG5pbmRleCA3Yjg1ZjVhMmI3OWZjNC4uZTdlOWYyYTBkMjRlODAgMTAwNjQ0XG4tLS0gYS9mcy91ZGYvc3VwZXIuY1xuKysrIGIvZnMvdWRmL3N1cGVyLmNcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVkZl9zYl9vcHMgPSB7XG4gXHQuYWxsb2NfaW5vZGVcdD0gdWRmX2FsbG9jX2lub2RlLFxuIFx0LmZyZWVfaW5vZGVcdD0gdWRmX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiBcdC53cml0ZV9pbm9kZVx0PSB1ZGZfd3JpdGVfaW5vZGUsXG4rXHQuc3luY19pbm9kZV9tZXRhZGF0YSA9IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhLFxuIFx0LmV2aWN0X2lub2RlXHQ9IHVkZl9ldmljdF9pbm9kZSxcbiBcdC5wdXRfc3VwZXJcdD0gdWRmX3B1dF9zdXBlcixcbiBcdC5zeW5jX2ZzXHQ9IHVkZl9zeW5jX2ZzLFxuZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oXG5pbmRleCA2ZDk1MWUwNWMwMDQ2YS4uODZkYzJkNmEyZWYxYjggMTAwNjQ0XG4tLS0gYS9mcy91ZGYvdWRmZGVjbC5oXG4rKysgYi9mcy91ZGYvdWRmZGVjbC5oXG5AQCAtMTM3LDcgKzEzNyw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVkZl9kaXJfZW50cnlfbGVuKHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmkpXG4gXG4gLyogZmlsZS5jICovXG4gZXh0ZXJuIGxvbmcgdWRmX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4taW50IHVkZl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpO1xuIFxuIC8qIGlub2RlLmMgKi9cbiBleHRlcm4gc3RydWN0IGlub2RlICpfX3VkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKixcbkBAIC0xNTgsNiArMTU3LDcgQEAgZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX2JyZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVkZl9wYmxrX3QgYmxvY2ssXG4gZXh0ZXJuIGludCB1ZGZfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90KTtcbiBleHRlcm4gdm9pZCB1ZGZfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuIGV4dGVybiBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4raW50IHVkZl9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4gZXh0ZXJuIGludCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHQgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYyxcbiBcdFx0ICAgICAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQsIGludDhfdCAqZXR5cGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaFxuaW5kZXggOGIyM2JjOWEyNDRjYjMuLmZkMmM3MTE1YzA1NDI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmhcbkBAIC0yMTAsMTAgKzIxMCw2IEBAIHZvaWQgYmhfZW5kX2FzeW5jX3dyaXRlKHN0cnVjdCBiaW8gKmJpbyk7XG4gXG4gLyogVGhpbmdzIHRvIGRvIHdpdGggbWV0YWRhdGEgYnVmZmVycyBsaXN0ICovXG4gdm9pZCBtbWJfbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIpO1xuLWludCBtbWJfZnN5bmNfbm9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHRcdCAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgYm9vbCBkYXRhc3luYyk7XG4taW50IG1tYl9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICptbWIsXG4tXHQgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGJvb2wgZGF0YXN5bmMpO1xuIHZvaWQgY2xlYW5fYmRldl9hbGlhc2VzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLFxuIFx0XHRcdHNlY3Rvcl90IGxlbik7XG4gc3RhdGljIGlubGluZSB2b2lkIGNsZWFuX2JkZXZfYmhfYWxpYXMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYxLi43MjllM2NiODllMzg0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtNzQwLDcgKzc0MCw4IEBAIGVudW0gaW5vZGVfc3RhdGVfZmxhZ3NfZW51bSB7XG4gXHRJX0NSRUFUSU5HXHRcdD0gKDFVIFx1MDAzY1x1MDAzYyAxNSksXG4gXHRJX0RPTlRDQUNIRVx0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTYpLFxuIFx0SV9TWU5DX1FVRVVFRFx0XHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTcpLFxuLVx0SV9QSU5OSU5HX05FVEZTX1dCXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMTgpXG4rXHRJX1BJTk5JTkdfTkVURlNfV0JcdD0gKDFVIFx1MDAzY1x1MDAzYyAxOCksXG4rXHRJX01FVEFEQVRBX1dSSVRFQkFDS1x0PSAoMVUgXHUwMDNjXHUwMDNjIDE5KSxcbiB9O1xuIFxuICNkZWZpbmUgSV9ESVJUWV9JTk9ERSAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQylcbkBAIC0yMjEzLDYgKzIyMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHlfc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0X19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lub2RlX21ldGFkYXRhX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuK1x0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX01FVEFEQVRBX1dSSVRFQkFDSyk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuK31cbitcbiAvKlxuICAqIHJldHVybnMgdGhlIHJlZmNvdW50IG9uIHRoZSBpbm9kZS4gaXQgY2FuIGNoYW5nZSBhcmJpdHJhcmlseS5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyX3R5cGVzLmhcbmluZGV4IGVmNzk0MWU5ZGM3OWFjLi4xNzA1NjFlOGYyZTJjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMvc3VwZXJfdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy9zdXBlcl90eXBlcy5oXG5AQCAtODYsNiArODYsOCBAQCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7XG4gXHR2b2lkICgqZnJlZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXHR2b2lkICgqZGlydHlfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncyk7XG4gXHRpbnQgKCp3cml0ZV9pbm9kZSkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xuK1x0aW50ICgqc3luY19pbm9kZV9tZXRhZGF0YSkoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBcdGludCAoKmRyb3BfaW5vZGUpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFx0dm9pZCAoKmV2aWN0X2lub2RlKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcdHZvaWQgKCpwdXRfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MDMuNTkyNDMxNzMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1NjM0MTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTWV0YWRhdGEgU3luYyBQYXRjaCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGlub2RlIG1ldGFkYXRhIHN5bmNocm9uaXphdGlvbi4gSXQncyBhZGRpbmcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIHRvIHRoZSBgc3VwZXJfb3BlcmF0aW9uc2Agc3RydWN0IGFuZCB0aGVuIHVwZGF0aW5nIGEgd2hvbGUgYnVuY2ggb2YgZmlsZXN5c3RlbXMg4oCTIGFmZnMsIGJmcywgZXh0MiwgZXh0NCwgZmF0LCBtaW5peCwgYW5kIHVkZiDigJMgdG8gdXNlIHRoaXMgbmV3IGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIG9sZGVyIGBtbWJfZnN5bmNgIGFuZCBgbW1iX2ZzeW5jX25vZmx1c2hgIG1ldGhvZHMuIFRoaXMgYWxzbyB0b3VjaGVzIGBmcy9mcy13cml0ZWJhY2suY2AsIHNwZWNpZmljYWxseSB0byBkZWFsIHdpdGggYElfTUVUQURBVEFfV1JJVEVCQUNLYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMsIHNvIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgYSBuby1icmFpbmVyLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHN5bmNfaW5vZGVfbWV0YWRhdGFgLCBzbyB0aGF0J3Mgb2J2aW91c2x5IGEga2V5IHRhcmdldC4gSXQgYWxzbyBtb2RpZmllcyBib3RoIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhbmQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgd2l0aGluIGBmcy9mcy13cml0ZWJhY2suY2AuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBpdCdzIHVwZGF0aW5nIHRob3NlIGZpbGVzeXN0ZW1z4oCZIHJlc3BlY3RpdmUgaW1wbGVtZW50YXRpb25zOiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYHVkZl9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAuXG5cblBsdXMsIHdlIGhhdmUgdGhlc2Ugb3RoZXIgd3JpdGUgZnVuY3Rpb25zIGltcGFjdGVkOiBgZXh0NF93cml0ZV9pbm9kZWAsIGBleHQyX3dyaXRlX2lub2RlYCwgYGZhdF93cml0ZV9pbm9kZWAsIGBtaW5peF93cml0ZV9pbm9kZWAsIGB1ZGZfd3JpdGVfaW5vZGVgLCBhbmQgYGJmc193cml0ZV9pbm9kZWAuXG5cbkxldCdzIG5vdCBmb3JnZXQgYWJvdXQgdGhlIGV2aWN0aW9uIGNoYW5nZXMgdG9vLCBgZXh0NF9ldmljdF9pbm9kZWAsIGBleHQyX2V2aWN0X2lub2RlYCwgYGZhdF9ldmljdF9pbm9kZWAsIGBtaW5peF9ldmljdF9pbm9kZWAsIGB1ZGZfZXZpY3RfaW5vZGVgLCBhbmQgYGJmc19ldmljdF9pbm9kZWAuIE9oLCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYCBpbiBgZnMvbGliZnMuY2AgYWxzby5cblxuU28sIHRvIHJlY2FwIHRoZSBmdW5jdGlvbnMsIEkgc2hvdWxkIGZvY3VzIG9uIGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFuZCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaW4gYGZzL2ZzLXdyaXRlYmFjay5jYCwgdGhlbiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAgaW4gYGZzL2V4dDIvaW5vZGUuY2AsIGFuZCB0aGVuIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAgaW4gYGZzL2ZhdC9pbm9kZS5jYC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCBjb25maWdzIHdlIGhhdmUgYXJlIHZhbGlkLCBzbyB0aGUgbW9kdWxlcyB3aWxsIGFjdHVhbGx5IGJlIHByZXNlbnQuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgQ09ORklHX0VYVDRfRlNgLCBgQ09ORklHX0VYVDJfRlNgLCBgQ09ORklHX0ZBVF9GU2AsIGBDT05GSUdfTUlOSVhfRlNgLCBgQ09ORklHX1VERl9GU2AsIGBDT05GSUdfQkZTX0ZTYCwgYW5kIGBDT05GSUdfQUZGU19GU2AuIEFscmlnaHQsIGFuZCB0aG9zZSBhbGlnbiB3aXRoIHRoZSBmaWxlc3lzdGVtcyB3ZeKAmXJlIGRlYWxpbmcgd2l0aC4gQWx0aG91Z2gsIHdhaXQuLi4gYEZBVF9GU2AgaXMgdXN1YWxseSBgTVNET1NfRlNgIGFuZCBgVkZBVF9GU2AgLSBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGZzL2ZhdC9LY29uZmlnYCBmaWxlIHRvIGJlIHN1cmUuIEFscmlnaHQsIHRoYXQncyB2ZXJpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OTcsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDozMjoxMy4yNDg3NzU3MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTcyMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAoRVhUNF9GU3xFWFQyX0ZTfEZBVF9GU3xNU0RPU19GU3xWRkFUX0ZTfE1JTklYX0ZTfFVERl9GU3xCRlNfRlN8QUZGU19GUylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2FmZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2FmZnMvS2NvbmZpZzoyOmNvbmZpZyBBRkZTX0ZTXFxuZnMvYWZmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFtaWdhIEZGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvYmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9iZnMvS2NvbmZpZzoyOmNvbmZpZyBCRlNfRlNcXG5mcy9iZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDIvS2NvbmZpZzoyOmNvbmZpZyBFWFQyX0ZTXFxuZnMvZXh0Mi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0yMC1cXG5mcy9leHQyL0tjb25maWc6MjE6Y29uZmlnIEVYVDJfRlNfWEFUVFJcXG5mcy9leHQyL0tjb25maWctMjItXFx0Ym9vbCBcXFwiRXh0MiBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnLTI5LVxcbmZzL2V4dDIvS2NvbmZpZzozMDpjb25maWcgRVhUMl9GU19QT1NJWF9BQ0xcXG5mcy9leHQyL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiRXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy0zOS1cXG5mcy9leHQyL0tjb25maWc6NDA6Y29uZmlnIEVYVDJfRlNfU0VDVVJJVFlcXG5mcy9leHQyL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiRXh0MiBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbi0tXFxuZnMvZmF0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mYXQvS2NvbmZpZzoyOmNvbmZpZyBGQVRfRlNcXG5mcy9mYXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5mcy9mYXQvS2NvbmZpZy0zNy1cXG5mcy9mYXQvS2NvbmZpZzozODpjb25maWcgTVNET1NfRlNcXG5mcy9mYXQvS2NvbmZpZy0zOS1cXHR0cmlzdGF0ZSBcXFwiTVNET1MgZnMgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2ZhdC9LY29uZmlnLTYyLVxcbmZzL2ZhdC9LY29uZmlnOjYzOmNvbmZpZyBWRkFUX0ZTXFxuZnMvZmF0L0tjb25maWctNjQtXFx0dHJpc3RhdGUgXFxcIlZGQVQgKFdpbmRvd3MtOTUpIGZzIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9taW5peC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbWluaXgvS2NvbmZpZzoyOmNvbmZpZyBNSU5JWF9GU1xcbmZzL21pbml4L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWluaXggZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjAtXFxuZnMvbWluaXgvS2NvbmZpZzoyMTpjb25maWcgTUlOSVhfRlNfTkFUSVZFX0VORElBTlxcbmZzL21pbml4L0tjb25maWctMjItXFx0ZGVmX2Jvb2wgTUlOSVhfRlNcXG4tLVxcbmZzL21pbml4L0tjb25maWctMjQtXFxuZnMvbWluaXgvS2NvbmZpZzoyNTpjb25maWcgTUlOSVhfRlNfQklHX0VORElBTl8xNkJJVF9JTkRFWEVEXFxuZnMvbWluaXgvS2NvbmZpZy0yNi1cXHRkZWZfYm9vbCBNSU5JWF9GU1xcbi0tXFxuZnMvdWRmL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy91ZGYvS2NvbmZpZzoyOmNvbmZpZyBVREZfRlNcXG5mcy91ZGYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVREYgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MTMuMzkxOTU4ODc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1NjExNDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmlsZXN5c3RlbSBTeW5jaHJvbml6YXRpb24gT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSd2ZSBnb3QgYSBsaXN0IG9mIGZpbGVzeXN0ZW1zIHRvIGNvbnNpZGVyOiBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgTUlOSVhfRlNgLCBgVURGX0ZTYCwgYEJGU19GU2AsIGBBRkZTX0ZTYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlaXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgYXJlIGltcGxlbWVudGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zLlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhlbXNlbHZlczogYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZnVuY3Rpb24gbmFtZXMsIGFuZCBteSBrbm93bGVkZ2UgdGVsbHMgbWUgdGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIHdyaXRpbmcgZGF0YSBvdXQgdG8gdGhlIGRpc2sgaW4gYSBjb250cm9sbGVkIHdheSwgbWFraW5nIHRoZW0gY3J1Y2lhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkLiBJIHNlZSB0aGF0IGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFuZCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYXJlIGluIGBmcy9mcy13cml0ZWJhY2suY2AuIExldCdzIGNvbmZpcm0gcXVpY2tseSB3aGV0aGVyIHRoZXkgYXJlIHN0YXRpYyBvciBnbG9iYWwuIEFoLCBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgc3RhdGljLiBBbmQgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgaXMgYWxzbyBzdGF0aWMuIE5vdywgdGhlIGBleHQ0YCwgYGV4dDJgLCBgdWRmYCBhbmQgYHNpbXBsZV9mc3luY19ub2ZsdXNoYCBzeW5jIGZ1bmN0aW9ucyBhcmUgZ2xvYmFsLiBMb29rcyBsaWtlIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYW5kIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAgYXJlIGFsc28gc3RhdGljLCBpbmRpY2F0aW5nIHRoZXkgYXJlIGxpa2VseSBpbnRlcm5hbCB0byB0aGVpciByZXNwZWN0aXZlIGZpbGVzeXN0ZW1zIGFuZCBub3QgcGFydCBvZiBhIGNvbW1vbiBzeW5jaHJvbml6YXRpb24gaW50ZXJmYWNlLlxuXG5JIHNob3VsZCBleGFtaW5lIGBmcy9mcy13cml0ZWJhY2suY2AgZnVydGhlciwgaW4gcGFydGljdWxhciBgd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSB3cml0ZWJhY2sgcHJvY2VzcyB3b3Jrcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MTkuNTQ4MDc1MTQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDkxNDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnMtd3JpdGViYWNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnMtd3JpdGViYWNrLmM9MTc3NT1zdGF0aWMgaW50XFxuZnMvZnMtd3JpdGViYWNrLmM6MTc3NjpfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuZnMvZnMtd3JpdGViYWNrLmMtMTc3Ny17XFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy0xNzg0LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjE3ODU6XFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZV9zdGFydChpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTc4Ni1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTE4NzAtXFx0d2JjLVxcdTAwM2V1bnBpbm5lZF9uZXRmc193YiA9IGZhbHNlO1xcbmZzL2ZzLXdyaXRlYmFjay5jOjE4NzE6XFx0dHJhY2Vfd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgd2JjLCBucl90b193cml0ZSk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTg3Mi1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMTg4My0gKi9cXG5mcy9mcy13cml0ZWJhY2suYzoxODg0OnN0YXRpYyBpbnQgd3JpdGViYWNrX3NpbmdsZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2ZzLXdyaXRlYmFjay5jLTE4ODUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTE5MjQtXFxuZnMvZnMtd3JpdGViYWNrLmM6MTkyNTpcXHRyZXQgPSBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYyk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMTkyNi1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTE5OTk9c3RhdGljIGxvbmcgd3JpdGViYWNrX3NiX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjA5Ny1cXHRcXHQgKi9cXG5mcy9mcy13cml0ZWJhY2suYzoyMDk4OlxcdFxcdF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZShpbm9kZSwgXFx1MDAyNndiYyk7XFxuZnMvZnMtd3JpdGViYWNrLmMtMjA5OS1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTI2OTM9dm9pZCBfX21hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmMtMjc0Ny1cXHQvKlxcbmZzL2ZzLXdyaXRlYmFjay5jOjI3NDg6XFx0ICogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX193cml0ZWJhY2tfc2luZ2xlX2lub2RlKCkgZm9yIHRoZVxcbmZzL2ZzLXdyaXRlYmFjay5jLTI3NDktXFx0ICogZm9sbG93aW5nIGxvY2tsZXNzIGlfc3RhdGUgdGVzdC4gIFNlZSB0aGVyZSBmb3IgZGV0YWlscy5cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTMwNjY9aW50IHdyaXRlX2lub2RlX25vdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc3luYylcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTMwNzgtXFx0bWlnaHRfc2xlZXAoKTtcXG5mcy9mcy13cml0ZWJhY2suYzozMDc5OlxcdHJldHVybiB3cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCBcXHUwMDI2d2JjKTtcXG5mcy9mcy13cml0ZWJhY2suYy0zMDgwLX1cXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTMwOTI9aW50IHN5bmNfaW5vZGVfbWV0YWRhdGEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy0zMDk4LVxcbmZzL2ZzLXdyaXRlYmFjay5jOjMwOTk6XFx0cmV0dXJuIHdyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIFxcdTAwMjZ3YmMpO1xcbmZzL2ZzLXdyaXRlYmFjay5jLTMxMDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQyMDozMjoxOS42MDY1NzI0MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ4MjI4NTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBNZXRhZGF0YSBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gcG9pbnRlciwgYHN5bmNfaW5vZGVfbWV0YWRhdGFgLCBpbnRvIHRoZSBgc3VwZXJfb3BlcmF0aW9uc2Agc3RydWN0LiAgSXQgbG9va3MgbGlrZSBpdCdzIGdvaW5nIHRvIGJlIHVzZWQgdG8gcHJvdmlkZSBhIG1vcmUgc3BlY2lmaWMgd2F5IHRvIGZsdXNoIG1ldGFkYXRhIGZvciBhbiBpbm9kZSwgcG90ZW50aWFsbHkgYXMgcGFydCBvZiB3cml0ZWJhY2suICBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgSV9NRVRBREFUQV9XUklURUJBQ0tgIGZsYWcgaXMgYWxzbyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgYSByZWZpbmVkIGNvbnRyb2wgZmxvdyBmb3Igd2hlbiBhbmQgaG93IG1ldGFkYXRhIGlzIHdyaXR0ZW4gYmFjay4gIFRoZSBjb3JlIG9mIHRoZSBsb2dpYyBzZWVtcyB0byByZXNpZGUgaW4gYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAgYW5kIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYC5cblxuSSdtIGdvaW5nIHRvIGFkZCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBzeW5jX2lub2RlX21ldGFkYXRhYCBmb3IgdGhlIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gbXkgbGlzdCBvZiBzeW1ib2xzIHRvIHdhdGNoOiAgYF9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZWAsIGB3cml0ZWJhY2tfc2luZ2xlX2lub2RlYCwgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgZmF0X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGBiZnNfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgLlxuXG5XYWl0LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaW5jbHVkZSB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgX193cml0ZWJhY2tfc2luZ2xlX2lub2RlYCBhbmQgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgIGFyZSBpbmRlZWQgc3RhdGljLCBidXQgdGhvc2UgYXJlIGZpbmUgdG8gYmUgaW4gYEZvY3VzU3ltYm9sc2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlIG90aGVyIGZ1bmN0aW9ucy4gT2theSwgYGZhdF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYG1pbml4X3N5bmNfaW5vZGVfbWV0YWRhdGFgLCBhbmQgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYCBhcmUgYWxzbyBzdGF0aWMuIExldCBtZSBjb25maXJtIHRoZSBnbG9iYWxzLiBgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhYCwgYGV4dDJfc3luY19pbm9kZV9tZXRhZGF0YWAsIGB1ZGZfc3luY19pbm9kZV9tZXRhZGF0YWAsIGFuZCBgc2ltcGxlX2ZzeW5jX25vZmx1c2hgIGFyZSBnbG9iYWwuXG5cbk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIGVuc3VyZSBJJ20gY292ZXJpbmcgdGhlIHJpZ2h0IGZpbGVzeXN0ZW1zOiBgRVhUNF9GU2AsIGBFWFQyX0ZTYCwgYE1TRE9TX0ZTYCwgYFZGQVRfRlNgLCBgTUlOSVhfRlNgLCBgVURGX0ZTYCwgYEJGU19GU2AsIGFuZCBgQUZGU19GU2AuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZ1bmN0aW9ucyB0byBzZWUgaWYgSSdtIG1pc3NpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBtZXRhZGF0YSBtYW5pcHVsYXRpb24gaW4gdGhlc2UgZmlsZXN5c3RlbXMuICBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29udGV4dCwgYW5kIGNyb3NzIHJlZmVyZW5jaW5nIHJlbGF0ZWQgZnVuY3Rpb25zLi4uIG5vdGhpbmcgZWxzZSBqdW1wcyBvdXQgYXQgbWUgYXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsIGNoYW5nZS5cblxuU28gdGhlIG1haW4gZm9jdXMgd2lsbCBiZSBvbiB0aGUgYWRkZWQgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGltcGxlbWVudGF0aW9ucyB0aGVtc2VsdmVzLCBhcyB3ZWxsIGFzIHRoZSBjb3JlIHdyaXRlYmFjayBmdW5jdGlvbnMuICBJJ20gYWRkaW5nIHRoZXNlIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5GaW5hbCBsaXN0OlxuKiAgIGBfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVgXG4qICAgYHdyaXRlYmFja19zaW5nbGVfaW5vZGVgXG4qICAgYGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YWBcbiogICBgZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhYFxuKiAgIGBmYXRfc3luY19pbm9kZV9tZXRhZGF0YWBcbiogICBgbWluaXhfc3luY19pbm9kZV9tZXRhZGF0YWBcbiogICBgdWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFgXG4qICAgYGJmc19zeW5jX2lub2RlX21ldGFkYXRhYFxuKiAgIGBzaW1wbGVfZnN5bmNfbm9mbHVzaGBcblxuQ29uZmlnczpcbiogICBgRVhUNF9GU2BcbiogICBgRVhUMl9GU2BcbiogICBgTVNET1NfRlNgXG4qICAgYFZGQVRfRlNgXG4qICAgYE1JTklYX0ZTYFxuKiAgIGBVREZfRlNgXG4qICAgYEJGU19GU2BcbiogICBgQUZGU19GU2BcblxuVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgaGFuZGxpbmcuICBUaGlzIGlzIGEgYmlnIGNoYW5nZSwgc28gaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTA2LCJPdXRwdXRUb2tlbnMiOjI4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMjA6MzI6MzQuMDg4ODYwMDY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTAwMjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUMl9GU1wiLFxuICAgIFwiTVNET1NfRlNcIixcbiAgICBcIlZGQVRfRlNcIixcbiAgICBcIk1JTklYX0ZTXCIsXG4gICAgXCJVREZfRlNcIixcbiAgICBcIkJGU19GU1wiLFxuICAgIFwiQUZGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fd3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwid3JpdGViYWNrX3NpbmdsZV9pbm9kZVwiLFxuICAgIFwiZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJleHQyX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImZhdF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJtaW5peF9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJ1ZGZfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiYmZzX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcInNpbXBsZV9mc3luY19ub2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgc3luY19pbm9kZV9tZXRhZGF0YWAgY2FsbGJhY2sgaW4gYHN1cGVyX29wZXJhdGlvbnNgIGFuZCBtb2RpZmllcyB0aGUgVkZTIHdyaXRlYmFjayBsb2dpYyB0byBoYW5kbGUgYSBuZXcgYElfTUVUQURBVEFfV1JJVEVCQUNLYCBmbGFnLiBJdCBpbXBsZW1lbnRzIHRoaXMgY2FsbGJhY2sgZm9yIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIGV4dDIsIGZhdCwgbWluaXgsIHVkZiwgYmZzKSBhbmQgcmVmYWN0b3JzIHRoZWlyIG1ldGFkYXRhIHN5bmNocm9uaXphdGlvbiBsb2dpYywgcmVwbGFjaW5nIGBtbWJfZnN5bmNgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBWRlMgd3JpdGViYWNrIGFuZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGhhbmRsaW5nLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDJfRlNcIixcbiAgICBcIk1TRE9TX0ZTXCIsXG4gICAgXCJWRkFUX0ZTXCIsXG4gICAgXCJNSU5JWF9GU1wiLFxuICAgIFwiVURGX0ZTXCIsXG4gICAgXCJCRlNfRlNcIixcbiAgICBcIkFGRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3dyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcIndyaXRlYmFja19zaW5nbGVfaW5vZGVcIixcbiAgICBcImV4dDRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwiZXh0Ml9zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJmYXRfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwibWluaXhfc3luY19pbm9kZV9tZXRhZGF0YVwiLFxuICAgIFwidWRmX3N5bmNfaW5vZGVfbWV0YWRhdGFcIixcbiAgICBcImJmc19zeW5jX2lub2RlX21ldGFkYXRhXCIsXG4gICAgXCJzaW1wbGVfZnN5bmNfbm9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYHN5bmNfaW5vZGVfbWV0YWRhdGFgIGNhbGxiYWNrIGluIGBzdXBlcl9vcGVyYXRpb25zYCBhbmQgbW9kaWZpZXMgdGhlIFZGUyB3cml0ZWJhY2sgbG9naWMgdG8gaGFuZGxlIGEgbmV3IGBJX01FVEFEQVRBX1dSSVRFQkFDS2AgZmxhZy4gSXQgaW1wbGVtZW50cyB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBleHQyLCBmYXQsIG1pbml4LCB1ZGYsIGJmcykgYW5kIHJlZmFjdG9ycyB0aGVpciBtZXRhZGF0YSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHJlcGxhY2luZyBgbW1iX2ZzeW5jYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgVkZTIHdyaXRlYmFjayBhbmQgZmlsZXN5c3RlbSBtZXRhZGF0YSBoYW5kbGluZywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[1] Phase: Succeeded StartedAt: 2026-07-16 20:32:46 +0000 UTC FinishedAt: 2026-07-16 20:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 20:32:46 +0000 UTC FinishedAt: 2026-07-16 20:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2] Phase: Succeeded StartedAt: 2026-07-16 20:32:46 +0000 UTC FinishedAt: 2026-07-16 21:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN) Phase: Failed StartedAt: 2026-07-16 20:32:46 +0000 UTC FinishedAt: 2026-07-16 21:29:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 20:32:46 +0000 UTC FinishedAt: 2026-07-16 20:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 20:32:46 +0000 UTC FinishedAt: 2026-07-16 20:32:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowbqf4g/series-workflowbqf4g-convert-artifact-71506857/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 20:32:56 +0000 UTC FinishedAt: 2026-07-16 21:06:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 20:32:56 +0000 UTC FinishedAt: 2026-07-16 21:06:08 +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:*8f676bd2-a3e8-441e-9e98-a24da39101be,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-workflowbqf4g/series-workflowbqf4g-convert-artifact-71506857/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": "4f48d8e8-e617-4257-b82d-2b4c999a2fc2", "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-workflowbqf4g/series-workflowbqf4g-build-action-4248404999/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 20:32:56 +0000 UTC FinishedAt: 2026-07-16 21:05:58 +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:*8f676bd2-a3e8-441e-9e98-a24da39101be,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-workflowbqf4g/series-workflowbqf4g-convert-artifact-71506857/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": "4f48d8e8-e617-4257-b82d-2b4c999a2fc2", "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-workflowbqf4g/series-workflowbqf4g-build-action-4248404999/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 21:06:08 +0000 UTC FinishedAt: 2026-07-16 21:06:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 21:06:08 +0000 UTC FinishedAt: 2026-07-16 21:06:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 21:06:08 +0000 UTC FinishedAt: 2026-07-16 21:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 21:06:08 +0000 UTC FinishedAt: 2026-07-16 21:06:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowbqf4g/series-workflowbqf4g-convert-artifact-1075252796/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 21:06:18 +0000 UTC FinishedAt: 2026-07-16 21:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 21:06:18 +0000 UTC FinishedAt: 2026-07-16 21:07:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4f48d8e8-e617-4257-b82d-2b4c999a2fc2,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-workflowbqf4g/series-workflowbqf4g-build-action-4248404999/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-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 21:08:06 +0000 UTC FinishedAt: 2026-07-16 21:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 21:08:06 +0000 UTC FinishedAt: 2026-07-16 21:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 21:08:06 +0000 UTC FinishedAt: 2026-07-16 21:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 21:08:06 +0000 UTC FinishedAt: 2026-07-16 21:29:40 +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:*8f676bd2-a3e8-441e-9e98-a24da39101be,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-workflowbqf4g/series-workflowbqf4g-convert-artifact-1075252796/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": "2ee33f91-1593-4a29-b326-61478d582a3c", "success": false },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-workflowbqf4g/series-workflowbqf4g-build-action-269146264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 21:08:06 +0000 UTC FinishedAt: 2026-07-16 21:29:30 +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:*8f676bd2-a3e8-441e-9e98-a24da39101be,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-workflowbqf4g/series-workflowbqf4g-convert-artifact-1075252796/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": "2ee33f91-1593-4a29-b326-61478d582a3c", "success": false },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-workflowbqf4g/series-workflowbqf4g-build-action-269146264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[7] Phase: Failed StartedAt: 2026-07-16 21:29:40 +0000 UTC FinishedAt: 2026-07-16 21:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbqf4g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__writeback_single_inode","writeback_single_inode","ext4_sync_inode_metadata","ext2_sync_inode_metadata","fat_sync_inode_metadata","minix_sync_inode_metadata","udf_sync_inode_metadata","bfs_sync_inode_metadata","simple_fsync_noflush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT2_FS","MSDOS_FS","VFAT_FS","MINIX_FS","UDF_FS","BFS_FS","AFFS_FS"],"series_id":"e6aa6f56-8c07-45cd-b1f0-7496a7e04c37","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["1bc13af8-2d91-4fbd-b43e-fbe72f29ca41"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-07-16 21:29:40 +0000 UTC FinishedAt: 2026-07-16 21:29:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}