Name: series-workflowtv9d9 Phase: Succeeded StartedAt: 2026-06-23 09:15:06 +0000 UTC FinishedAt: 2026-06-23 13:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[0] Phase: Succeeded StartedAt: 2026-06-23 09:15:06 +0000 UTC FinishedAt: 2026-06-23 09:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 09:15:06 +0000 UTC FinishedAt: 2026-06-23 09:28:18 +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": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "cea17a2e-fd8e-4afb-9c24-3a6583692d30" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_put_ea_inode", "ext4_ea_inode_work", "ext4_xattr_delete_inode", "ext4_xattr_inode_dec_ref_all", "ext4_xattr_release_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGV4dDQgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgZGVmZXJyaW5nIHRoZWlyIGlwdXQgdG8gYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGV4dDQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA5ZDQ4Y2U1ZDIwZjUxYmFjNzBkODU2YWQ1M2U0NzNlMTkxMjdhZTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwOToyNjoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggJiM0MzsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0ICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc29cbiBcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xuIFx0ICogRUFzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuJiM0MztcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxuIFx0ICovXG4tXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xuJiM0MztcdH07XG4gXG4gXHQvKlxuIFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcbkBAIC0xNzcwLDYgJiM0MzsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbiYjNDM7XG4mIzQzO1x0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xuJiM0MztcbiBcdHNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4gXHQvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xNzYsNyAmIzQzOzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cbi1cdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdFx0ICAgICAgZXh0cmFfY3JlZGl0cyk7XG4mIzQzO1x0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDt4YXR0ciBkZWxldGUgKGVyciAlZClcJiMzNDssIGVycik7XG4gc3RvcF9oYW5kbGU6XG5AQCAtMjkwLDcgJiM0MzsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbiBcdFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRcdCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQpO1xuIFxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuJiM0MztcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbiYjNDM7XHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXG4mIzQzO1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcbiBcdGVpLVx1MDAzZWlfc3luY190aWQgPSAwO1xuQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NTA4LDYgJiM0Mzs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiBUaGUgZmlyc3QgaW5vZGUgd2UgbG9vayBhdCBpcyB0aGUgam91cm5hbCBpbm9kZS4gIERvbiYjMzk7dCB0cnlcbiBcdCAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCFcbiBcdCAqL1xuJiM0MztcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X29wdChzYiwgTk9MT0FEKSBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG4gXHR9XG4gZmFpbGVkX21vdW50M2E6XG4mIzQzO1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuJiM0MztcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCAmIzQzOzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyAmIzQzOzExNTYsNiBAQCBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExOTcsMTQgJiM0MzsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7RXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgJiM0MzsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0xMjQ1LDYgJiM0MzsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLVx0XHRcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyAmIzQzOzE1NTMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4gXHRcdFx0a3ZmcmVlKGVhX2RhdGEpO1xuIFx0XHRcdHJldHVybiBlYV9pbm9kZTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbkBAIC0xODQ4LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyAmIzQzOzE5OTksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXG4gXHRcdFx0XHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlwdXQodG1wX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXG4gXHRpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IGJzLVx1MDAzZWJoICE9IG5ld19iaCkge1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuLVxuIFx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXHUwMDNlYmgsXG4tXHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHR9XG4gXHRlcnJvciA9IDA7XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICYjNDM7MjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yODYzLDQ2ICYjNDM7Mjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuLVx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuLVx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbi1cdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbi1cdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbi1cdFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xuLVx0fVxuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyAmIzQzOzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cbiAgKi9cbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG5AQCAtMjk1Miw3ICYjNDM7Mjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgJiM0MzsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdH1cbiBcbiBcdFx0fVxuIFxuLVx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LFxuJiM0MztcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICYjNDM7Mjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuJiM0MzsvKlxuJiM0MzsgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbmV4dDtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuJiM0MztcdFx0bmV4dCA9IG5vZGUtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHRcdG5vZGUgPSBuZXh0O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4mIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXG4mIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuJiM0MzsgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbiYjNDM7XHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbiYjNDM7XHRcdCAgXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuJiM0MztcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgJiM0MzsmIzQzO2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4mIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuJiM0Mzt7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSAmIzQzOzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuIH07XG4gXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xuLVx0dW5zaWduZWQgaW50IGNvdW50O1xuLVx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xuLX07XG4tXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xuQEAgLTE4Nyw5ICYjNDM7MTgyLDIxIEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZVxuJiM0MzsgKiBmcmVlaW5nIHJlc291cmNlcyB0aGF0IGV2aWN0aW9uIGRlcGVuZHMgb24gKHF1b3RhLCBibG9jayBhbGxvY2F0b3IpLlxuJiM0MzsgKiBMb29wcyBiZWNhdXNlIHdvcmtlciBpcHV0IG1heSB0cmlnZ2VyIGV2aWN0aW9uIHRoYXQgcmUtcXVldWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAoZmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspIHx8XG4mIzQzO1x0ICAgICAgICFsbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKSlcbiYjNDM7XHRcdDtcbiYjNDM7fVxuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfY291bnQsIC0xLCAxKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA5ZDQ4Y2U1ZDIwZjUxYmFjNzBkODU2YWQ1M2U0NzNlMTkxMjdhZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwOToyNjoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHsKIAkgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzbwogCSAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZwogCSAqIEVBcy4KJiM0MzsJICoKJiM0MzsJICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZQomIzQzOwkgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS4KIAkgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTsKJiM0MzsJfTsKIAogCS8qCiAJICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2UKQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7CiAJc3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0czsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlOwomIzQzOwomIzQzOwkvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yazsKJiM0MzsKIAlzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAJLyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpCiAJICovCiAJaW50IGV4dHJhX2NyZWRpdHMgPSA2OwotCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7CiAJYm9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7CiAKIAl0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTsKQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovCi0JZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgJmFtcDtlYV9pbm9kZV9hcnJheSwKLQkJCQkgICAgICBleHRyYV9jcmVkaXRzKTsKJiM0MzsJZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7CiAJaWYgKGVycikgewogCQlleHQ0X3dhcm5pbmcoaW5vZGUtJmd0O2lfc2IsICYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpJiMzNDssIGVycik7CiBzdG9wX2hhbmRsZToKQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiAJCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAkJZ290byBub19kZWxldGU7CiAJfQogCkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAlyZXR1cm47CiBub19kZWxldGU6CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICZhbXA7c2ItJmd0O3NfdXVpZCk7CiAKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzYmktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCW1lbXNldCgmYW1wO2VpLSZndDtpX2RxdW90LCAwLCBzaXplb2YoZWktJmd0O2lfZHF1b3QpKTsKICNlbmRpZgogCWVpLSZndDtqaW5vZGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXMKJiM0MzsJICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heQomIzQzOwkgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzCiYjNDM7CSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLSZndDtpX3N5bmNfdGlkID0gMDsKQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9vcnBoYW4pOwotCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwogCWlub2RlX2luaXRfb25jZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwpAQCAtNTUwOCw2ICYjNDM7NTUxNiw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCSAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJiMzOTt0IHRyeQogCSAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCEKIAkgKi8KJiM0MzsJZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTsKJiM0MzsKIAlpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpICZhbXA7JmFtcDsgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkgewogCQllcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7CiAJCWlmIChlcnIpCkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9tb3VudDk6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqLwomIzQzOwlleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTsKQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWlmIChFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiBmYWlsZWRfbW91bnRfd3E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSk7CiAJc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlID0gTlVMTDsKIApAQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCX0KIGZhaWxlZF9tb3VudDNhOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovCiYjNDM7CWV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpOwogCWV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpOwogZmFpbGVkX21vdW50MzoKIAkvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTE0LDEwICYjNDM7MTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7CiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKQkoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFwKIAkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvKS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSkKIAotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSkKIHsKQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LAogCQkJCQllYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCX0KIG91dDoKLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCXJldHVybiAwOwogCkBAIC0xMTMzLDcgJiM0MzsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LAogCQkJCQkgICBlcnIpOwotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoZXJyICZndDsgMCkgewpAQCAtMTIyMSw2ICYjNDM7MTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZCYjMzQ7LAogCQkJCQkJZXJyKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTEyMjksNiAmIzQzOzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWQmIzM0OywKIAkJCQkJICAgZXJyKTsKJiM0MzsJCQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQlkaXJ0eSA9IHRydWU7CiAJfQogCkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTsKQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkJCQkgICAgIEJGSVJTVChiaCksCiAJCQkJCQkgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLywKLQkJCQkJCSAgICAgZWFfaW5vZGVfYXJyYXksCiAJCQkJCQkgICAgIGV4dHJhX2NyZWRpdHMsCiAJCQkJCQkgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7CiAJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsCkBAIC0xNTA1LDcgJiM0MzsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LCBlcnIpOwotCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJbmV4dF9lbnRyeToKIAkJY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTsKIAl9CkBAIC0xNjE1LDcgJiM0MzsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAlyZXR1cm4gZWFfaW5vZGU7CiBvdXRfZXJyOgotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQpAQCAtMTg0OCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSwKIAogCXJldCA9IDA7CiBvdXQ6Ci0JaXB1dChvbGRfZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgb2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIHRtcF9pbm9kZSk7CiAKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfaW51bSA9IDA7CiAJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX3NpemUgPSAwOwpAQCAtMjE1MCw3ICYjNDM7MjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCQkgICAmIzM0O2RlYyByZWYgZXJyb3I9JWQmIzM0OywKIAkJCQkJCQkgICBlcnJvcik7Ci0JCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJZWFfaW5vZGUgPSBOVUxMOwogCQkJfQogCkBAIC0yMTgyLDEyICYjNDM7MjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi8KIAlpZiAoYnMtJmd0O2JoICZhbXA7JmFtcDsgYnMtJmd0O2JoICE9IG5ld19iaCkgewotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwotCiAJCWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy0mZ3Q7YmgsCi0JCQkJCSAmYW1wO2VhX2lub2RlX2FycmF5LAogCQkJCQkgMCAvKiBleHRyYV9jcmVkaXRzICovKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAl9CiAJZXJyb3IgPSAwOwogCkBAIC0yMjAzLDcgJiM0MzsyMTg4LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCX0KIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIyOTcsNyAmIzQzOzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJaGVhZGVyLSZndDtoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7CiAJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpOwogCX0KLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg2Myw0NiAmIzQzOzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi8KLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSkKLQotLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS4KLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkCi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci4KLSAqLwotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS4KLQkJICovCi0JCSgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkJCSBFSUFfTUFTSywgR0ZQX05PRlMpOwotCQlpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ID0gMDsKLQl9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJmFtcDsgRUlBX01BU0spID09IEVJQV9NQVNLKSB7Ci0JCS8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgJiM0MzsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovCi0JCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMOwotCi0JCW5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCSAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJiM0MzsgRUlBX0lOQ1IsCi0JCQkJCSBHRlBfTk9GUyk7Ci0JCWlmIChuZXdfYXJyYXkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQltZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksCi0JCSAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkgICAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQpKTsKLQkJa2ZyZWUoKmVhX2lub2RlX2FycmF5KTsKLQkJKmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5OwotCX0KLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQmIzQzOyYjNDM7OwotCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50IC0gMV0gPSBpbm9kZTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKCkKICAqCkBAIC0yOTEzLDcgJiM0MzsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy4KICAqLwogaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICBpbnQgZXh0cmFfY3JlZGl0cykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKQEAgLTI5NTIsNyAmIzQzOzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCwKIAkJCQkJCSAgICAgSUZJUlNUKGhlYWRlciksCiAJCQkJCQkgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTsKIAl9CkBAIC0yOTg2LDEyICYjNDM7MjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJY29udGludWU7CiAJCQkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSwKIAkJCQkJICAgICAgbGUzMl90b19jcHUoZW50cnktJmd0O2VfdmFsdWVfc2l6ZSkpOwotCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDU5IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpuZXh0OwogCi0JaWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpCiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLAomIzQzOwkJCQkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpOwomIzQzOwkJbmV4dCA9IG5vZGUtJmd0O25leHQ7CiYjNDM7CQlpcHV0KCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiYjNDM7CQlub2RlID0gbmV4dDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjE0YTMxZmUwMDE4ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsMjEgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlib29sIGlzX2NyZWF0ZSk7CiAKIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LAogCQkJCSAgIGludCBleHRyYV9jcmVkaXRzKTsKLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpOwomIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZQomIzQzOyAqIGZyZWVpbmcgcmVzb3VyY2VzIHRoYXQgZXZpY3Rpb24gZGVwZW5kcyBvbiAocXVvdGEsIGJsb2NrIGFsbG9jYXRvcikuCiYjNDM7ICogTG9vcHMgYmVjYXVzZSB3b3JrZXIgaXB1dCBtYXkgdHJpZ2dlciBldmljdGlvbiB0aGF0IHJlLXF1ZXVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSkKJiM0Mzt7CiYjNDM7CXdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yaykgfHwKJiM0MzsJICAgICAgICFsbGlzdF9lbXB0eSgmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKSkKJiM0MzsJCTsKJiM0Mzt9CiAKIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAkJCSAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2gKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lCiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdAomIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKCZhbXA7aW5vZGUtJmd0O2lfY291bnQsIC0xLCAxKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBFQSBJbm9kZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgZXh0NCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIHJlcGxhY2luZyB0aGUgb2xkIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCBhcHByb2FjaCwgd2hpY2ggSSByZW1lbWJlciBjb3VsZCBiZSBwcm9ibGVtYXRpYyB3aXRoIGRlZmVycmVkIGBpcHV0YCBvcGVyYXRpb25zLCB3aXRoIGEgcGVyLXN1cGVyYmxvY2sgbGlzdCAoYHNfZWFfaW5vZGVfdG9fZnJlZWApIGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgc19lYV9pbm9kZV93b3JrYCkuIFNtYXJ0IG1vdmUsIHBvdGVudGlhbGx5IGFkZHJlc3NpbmcgdGhvc2UgbmFzdHkgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEkgc2VlIHRoZXkmIzM5O3ZlIGFsc28gaW50cm9kdWNlZCBgaXB1dF9pZl9ub3RfbGFzdGAgaW4gYGluY2x1ZGUvbGludXgvZnMuaGAsIHdoaWNoIGlzIHByb2JhYmx5IHRpZWQgdG8gdGhlIGRlZmVycmVkIHJlbGVhc2UuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW1wYWN0aW5nIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYy4gRXNzZW50aWFsbHksIGl0IGRlbGF5cyB0aGUgYGlwdXRgIG9wZXJhdGlvbiB0byBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NraW5nIHByb2JsZW1zLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBnb2luZyB0byBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbWFuaXB1bGF0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4gVGhvc2UgbGFyZ2UgYXR0cmlidXRlcywgd2hlbiB0aGUgYGVhX2lub2RlYCBmZWF0dXJlIGlzIGVuYWJsZWQsIGVuZCB1cCBiZWluZyBzdG9yZWQgaW4gdGhlaXIgb3duIGRlZGljYXRlZCBpbm9kZXMsIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byB0ZXN0LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYWNlLiBUaGUgZmlsZXN5c3RlbSBpbiBxdWVzdGlvbiBpcyBleHQ0LCBzbyB3ZSBuZWVkIGBFWFQ0X0ZTYC4gTm93IGZvciB0aGUgZmVhdHVyZSBpdHNlbGYg4oCTIHRoYXQgd291bGQgYmUgYGVhX2lub2RlYC4gTmV4dCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYENPTkZJR19FWFQ0X0ZTX1hBVFRSYC4uLiBva2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZnMvZXh0NC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gZmluZC4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GU19YQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpIbW0sIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCBob3cgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBQZXJoYXBzIHRoZSBzeW1ib2wgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYCBpcyBubyBsb25nZXIgdmFsaWQsIG9yIG1heWJlIGl0JiMzOTtzIGJlZW4gcmVuYW1lZCB0byBqdXN0IGBFWFQ0X0ZTX1hBVFRSYC4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBleHQ0LCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBsb2NhdGVkIGluIGBmcy9leHQ0L0tjb25maWdgLiBJJiMzOTtsbCBzY2FuIHRoYXQgZmlsZSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgWEFUVFJgIHRvIGNsYXJpZnkgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEFUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTA5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgcGFydGljdWxhciBNYWtlZmlsZToKCioqQW5hbHl6aW5nIHRoZSBleHQ0IE1ha2VmaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbS4gQXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBleHQ0LXJlbGF0ZWQgdGFyZ2V0cywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGN1c3RvbSBidWlsZCBydWxlcyBvciBmbGFncyB0aGF0IHN0YW5kIG91dC4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgaXQgaGFuZGxlcyBvYmplY3QgZmlsZSBjb21waWxhdGlvbiwgbGlua2luZywgbW9kdWxlIGNyZWF0aW9uIChpZiBhbnkpLCBhbmQgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgdGFpbG9yZWQgdG8gZXh0NC4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBzeXN0ZW0g4oCTIGFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbmNsdWRlIGRpcmVjdGl2ZXMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWw/IEkmIzM5O2xsIHF1aWNrbHkgbG9vayBmb3IgdGhpbmdzIGxpa2Uga2VybmVsIHZlcnNpb24gY2hlY2tzLCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBpbmNsdXNpb25zLCBvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yLiBJIGFsc28gd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIGJlaW5nIHNldCBmb3IgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIHR1bmluZy4gT3ZlcmFsbCwgSSB3YW50IHRvIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBleHQ0IGNvbXBvbmVudHMgYXJlIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCwgd2l0aCBhbiBleWUgdG93YXJkcyBwb3RlbnRpYWwgYXJlYXMgZm9yIG1vZGlmaWNhdGlvbiwgZGVidWdnaW5nLCBvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDczCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgQ29tcGlsYXRpb24gaW4gRVhUNCoqCgpBbHJpZ2h0LCBzbyBgeGF0dHIub2AgaXMgYmVpbmcgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gYEVYVDRfRlNgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbiwgYnV0IEkmIzM5O20gY3VyaW91cyBpZiB3ZSBoYXZlIGFueSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciBleHRlbmRlZCBhdHRyaWJ1dGUgaW5vZGUgZmVhdHVyZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyB0aGF0IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIEVBIGlub2Rlcy4gTWF5YmUgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgY29udHJvbCB0aGFuIGp1c3QgYSBibGFua2V0IGVuYWJsZS9kaXNhYmxlLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igb3B0aW1pemF0aW9uIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBmbGV4aWJsZSB0aGlzIHBhcnQgb2YgdGhlIGZpbGUgc3lzdGVtIGNhbiBiZSBjb25maWd1cmVkLiBMZXQgbWUgc2VlIHdoYXQgSSBjYW4gZmluZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlYV9pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MTYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmZzL2V4dDQvZXh0NC5oPTk2Mz1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmZzL2V4dDQvZXh0NC5oLTEwMTYtICogIElfREFUQV9TRU1fUVVPVEEgIC0gVXNlZCBmb3IgcXVvdGEgaW5vZGVzIG9ubHlcbmZzL2V4dDQvZXh0NC5oOjEwMTc6ICogIElfREFUQV9TRU1fRUEgICAgIC0gVXNlZCBmb3IgZWFfaW5vZGVzIG9ubHlcbmZzL2V4dDQvZXh0NC5oLTEwMTgtICogIElfREFUQV9TRU1fSk9VUk5BTCAtIFVzZWQgZm9yIGpvdXJuYWwgaW5vZGUgb25seVxuLS1cbmZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTc3Ny1cdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbmZzL2V4dDQvZXh0NC5oOjE3Nzg6XHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG5mcy9leHQ0L2V4dDQuaC0xNzc5LVxuZnMvZXh0NC9leHQ0LmgtMTc4MC1cdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuZnMvZXh0NC9leHQ0Lmg6MTc4MTpcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbmZzL2V4dDQvZXh0NC5oOjE3ODI6XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbmZzL2V4dDQvZXh0NC5oLTE3ODMtXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjAzNz1lbnVtIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMDQ1LVx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFx0LyogZXh0ZW50cyBoYXZlIGJlZW4gcHJlY2FjaGVkICovXG5mcy9leHQ0L2V4dDQuaDoyMDQ2Olx0RVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUsXHQvKiBMdXN0cmUtc3R5bGUgZWFfaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oLTIwNDctXHRFWFQ0X1NUQVRFX1ZFUklUWV9JTl9QUk9HUkVTUyxcdC8qIGJ1aWxkaW5nIGZzLXZlcml0eSBNZXJrbGUgdHJlZSAqL1xuLS1cbmZzL2V4dDQvZXh0NC5oPTIzMTQ9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGZsZXhfYmcsXHRcdEZMRVhfQkcpXG5mcy9leHQ0L2V4dDQuaDoyMzE1OkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhlYV9pbm9kZSxcdFx0RUFfSU5PREUpXG5mcy9leHQ0L2V4dDQuaC0yMzE2LUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhkaXJkYXRhLFx0XHRESVJEQVRBKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNTE9aW50IGV4dDRfaW5vZGVfaXNfZmFzdF9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lub2RlLmMtMTUyLXtcbmZzL2V4dDQvaW5vZGUuYzoxNTM6XHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYikpIHtcbmZzL2V4dDQvaW5vZGUuYy0xNTQtXHRcdGludCBlYV9ibG9ja3MgPSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wgP1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4NS1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpXG5mcy9leHQ0L2lub2RlLmM6MTg2Olx0XHRleHQ0X2V2aWN0X2VhX2lub2RlKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy0xODctXHRpZiAoaW5vZGUtXHUwMDNlaV9ubGluaykge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMjItXHRcdCAgICBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wpIHtcbmZzL2V4dDQvaW5vZGUuYzo1MjIzOlx0XHRcdGVycl9zdHIgPSBcJiMzNDtlYV9pbm9kZSB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDs7XG5mcy9leHQ0L2lub2RlLmMtNTIyNC1cdFx0XHRnb3RvIGVycm9yO1xuLS1cbmZzL2V4dDQvaW5vZGUuYy01MjI5LVx0XHRcdCAqIG9wZW5fYnlfaGFuZGxlX2F0KCkgY291bGQgcHJvdmlkZSBhbiBvbGQgaW5vZGUgbnVtYmVyXG5mcy9leHQ0L2lub2RlLmM6NTIzMDpcdFx0XHQgKiB0aGF0IGhhcyBzaW5jZSBiZWVuIHJldXNlZCBmb3IgYW4gZWFfaW5vZGU7IHRoaXMgZG9lc1xuZnMvZXh0NC9pbm9kZS5jLTUyMzEtXHRcdFx0ICogbm90IGluZGljYXRlIGZpbGVzeXN0ZW0gY29ycnVwdGlvblxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMDYtXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG5mcy9leHQ0L3N1cGVyLmM6MTMwNzpcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuZnMvZXh0NC9zdXBlci5jLTEzMDgtXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTM2Ny1cbmZzL2V4dDQvc3VwZXIuYzoxMzY4Olx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbmZzL2V4dDQvc3VwZXIuYzoxMzY5Olx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuZnMvZXh0NC9zdXBlci5jLTEzNzAtXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ2ODU9c3RhdGljIGludCBleHQ0X2luaXRfbWV0YWRhdGFfY3N1bShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ3MTQtXHRlbHNlIGlmIChleHQ0X2hhc19mZWF0dXJlX21ldGFkYXRhX2NzdW0oc2IpIHx8XG5mcy9leHQ0L3N1cGVyLmM6NDcxNTpcdFx0IGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKVxuZnMvZXh0NC9zdXBlci5jLTQ3MTYtXHRcdHNiaS1cdTAwM2VzX2NzdW1fc2VlZCA9IGV4dDRfY2hrc3VtKH4wLCBlcy1cdTAwM2VzX3V1aWQsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ3MjE9c3RhdGljIGludCBleHQ0X2NoZWNrX2ZlYXR1cmVfY29tcGF0aWJpbGl0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NzQzLVx0XHQvKlxuZnMvZXh0NC9zdXBlci5jOjQ3NDQ6XHRcdCAqIGVhX2lub2RlIGZlYXR1cmUgdXNlcyBsX2lfdmVyc2lvbiBmaWVsZCB3aGljaCBpcyBub3RcbmZzL2V4dDQvc3VwZXIuYy00NzQ1LVx0XHQgKiBhdmFpbGFibGUgaW4gSFVSRF9DT01QQVQgbW9kZS5cbmZzL2V4dDQvc3VwZXIuYy00NzQ2LVx0XHQgKi9cbmZzL2V4dDQvc3VwZXIuYzo0NzQ3Olx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShzYikpIHtcbmZzL2V4dDQvc3VwZXIuYy00NzQ4LVx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbmZzL2V4dDQvc3VwZXIuYzo0NzQ5Olx0XHRcdFx0IFwmIzM0O2VhX2lub2RlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBmb3IgSHVyZFwmIzM0Oyk7XG5mcy9leHQ0L3N1cGVyLmMtNDc1MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTM0Nj1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTUxOC1cdCAqL1xuZnMvZXh0NC9zdXBlci5jOjU1MTk6XHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuZnMvZXh0NC9zdXBlci5jLTU1MjAtXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1NjAtXG5mcy9leHQ0L3N1cGVyLmM6NTU2MTpcdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKSB7XG5mcy9leHQ0L3N1cGVyLmM6NTU2MjpcdFx0XHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IGV4dDRfeGF0dHJfY3JlYXRlX2NhY2hlKCk7XG5mcy9leHQ0L3N1cGVyLmM6NTU2MzpcdFx0XHRpZiAoIXNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKSB7XG5mcy9leHQ0L3N1cGVyLmMtNTU2NC1cdFx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbmZzL2V4dDQvc3VwZXIuYzo1NTY1Olx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBlYV9pbm9kZV9jYWNoZVwmIzM0Oyk7XG5mcy9leHQ0L3N1cGVyLmMtNTU2Ni1cdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjAtXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbmZzL2V4dDQvc3VwZXIuYzo1NzYxOlx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG5mcy9leHQ0L3N1cGVyLmMtNTc2Mi1cdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuZnMvZXh0NC9zdXBlci5jPTU3NjM9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTc4Mi1cdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbmZzL2V4dDQvc3VwZXIuYzo1NzgzOlx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG5mcy9leHQ0L3N1cGVyLmM6NTc4NDpcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG5mcy9leHQ0L3N1cGVyLmM6NTc4NTpcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbmZzL2V4dDQvc3VwZXIuYy01Nzg2LVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01Nzk0LVx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuZnMvZXh0NC9zdXBlci5jOjU3OTU6XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbmZzL2V4dDQvc3VwZXIuYy01Nzk2LVx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTE0LSNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG5mcy9leHQ0L3hhdHRyLmM6MTE1Olx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm8pLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXG5mcy9leHQ0L3hhdHRyLmMtMTE2LVxuZnMvZXh0NC94YXR0ci5jLTExNy0jaWZkZWYgQ09ORklHX0xPQ0tERVBcbmZzL2V4dDQveGF0dHIuYzoxMTg6dm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuZnMvZXh0NC94YXR0ci5jLTExOS17XG5mcy9leHQ0L3hhdHRyLmM6MTIwOlx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMS1cbmZzL2V4dDQveGF0dHIuYzoxMjI6XHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcdTAwMjZlYV9pbm9kZS1cdTAwM2VpX3J3c2VtLCAxKTtcbmZzL2V4dDQveGF0dHIuYy0xMjMtXHQodm9pZCkgZWk7XHQvKiBzaHV0IHVwIGNsYW5nIHdhcm5pbmcgaWYgIUNPTkZJR19MT0NLREVQICovXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4Nz1jaGVja194YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjQwLVxuZnMvZXh0NC94YXR0ci5jOjI0MTpcdFx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNiBlYV9pbm8pIHtcbmZzL2V4dDQveGF0dHIuYzoyNDI6XHRcdFx0ZXJyX3N0ciA9IFwmIzM0O2VhX2lub2RlIHNwZWNpZmllZCB3aXRob3V0IGVhX2lub2RlIGZlYXR1cmUgZW5hYmxlZFwmIzM0OztcbmZzL2V4dDQveGF0dHIuYy0yNDMtXHRcdFx0Z290byBlcnJvdXQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTM0OT1leHQ0X3hhdHRyX2lub2RlX2hhc2goc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zNTMtXG5mcy9leHQ0L3hhdHRyLmM6MzU0OnN0YXRpYyB1NjQgZXh0NF94YXR0cl9pbm9kZV9nZXRfcmVmKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMzU1LXtcbmZzL2V4dDQveGF0dHIuYzozNTY6XHRyZXR1cm4gKCh1NjQpIGlub2RlX2dldF9jdGltZV9zZWMoZWFfaW5vZGUpIFx1MDAzY1x1MDAzYyAzMikgfFxuZnMvZXh0NC94YXR0ci5jOjM1NzpcdFx0KHUzMikgaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTM1OC19XG5mcy9leHQ0L3hhdHRyLmMtMzU5LVxuZnMvZXh0NC94YXR0ci5jOjM2MDpzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoc3RydWN0IGlub2RlICplYV9pbm9kZSwgdTY0IHJlZl9jb3VudClcbmZzL2V4dDQveGF0dHIuYy0zNjEte1xuZnMvZXh0NC94YXR0ci5jOjM2MjpcdGlub2RlX3NldF9jdGltZShlYV9pbm9kZSwgKHUzMikocmVmX2NvdW50IFx1MDAzZVx1MDAzZSAzMiksIDApO1xuZnMvZXh0NC94YXR0ci5jOjM2MzpcdGlub2RlX3NldF9pdmVyc2lvbl9yYXcoZWFfaW5vZGUsIHJlZl9jb3VudCBcdTAwMjYgMHhmZmZmZmZmZik7XG5mcy9leHQ0L3hhdHRyLmMtMzY0LX1cbmZzL2V4dDQveGF0dHIuYy0zNjUtXG5mcy9leHQ0L3hhdHRyLmM6MzY2OnN0YXRpYyB1MzIgZXh0NF94YXR0cl9pbm9kZV9nZXRfaGFzaChzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuZnMvZXh0NC94YXR0ci5jLTM2Ny17XG5mcy9leHQ0L3hhdHRyLmM6MzY4Olx0cmV0dXJuICh1MzIpIGlub2RlX2dldF9hdGltZV9zZWMoZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTM2OS19XG5mcy9leHQ0L3hhdHRyLmMtMzcwLVxuZnMvZXh0NC94YXR0ci5jOjM3MTpzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9oYXNoKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsIHUzMiBoYXNoKVxuZnMvZXh0NC94YXR0ci5jLTM3Mi17XG5mcy9leHQ0L3hhdHRyLmM6MzczOlx0aW5vZGVfc2V0X2F0aW1lKGVhX2lub2RlLCBoYXNoLCAwKTtcbmZzL2V4dDQveGF0dHIuYy0zNzQtfVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zNzgtICovXG5mcy9leHQ0L3hhdHRyLmM6Mzc5OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9yZWFkKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXG5mcy9leHQ0L3hhdHRyLmMtMzgwLXtcbmZzL2V4dDQveGF0dHIuYzozODE6XHRpbnQgYmxvY2tzaXplID0gMSBcdTAwM2NcdTAwM2MgZWFfaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuZnMvZXh0NC94YXR0ci5jOjM4MjpcdGludCBiaF9jb3VudCA9IChzaXplICYjNDM7IGJsb2Nrc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBlYV9pbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG5mcy9leHQ0L3hhdHRyLmMtMzgzLVx0aW50IHRhaWxfc2l6ZSA9IChzaXplICUgYmxvY2tzaXplKSA/OiBibG9ja3NpemU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTM5My1cbmZzL2V4dDQveGF0dHIuYzozOTQ6XHRyZXQgPSBleHQ0X2JyZWFkX2JhdGNoKGVhX2lub2RlLCAwIC8qIGJsb2NrICovLCBiaF9jb3VudCxcbmZzL2V4dDQveGF0dHIuYy0zOTUtXHRcdFx0ICAgICAgIHRydWUgLyogd2FpdCAqLywgYmhzKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMzk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmhfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG5mcy9leHQ0L3hhdHRyLmM6NDAwOlx0XHQvKiBUaGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBob2xlcyBpbiBlYV9pbm9kZS4gKi9cbmZzL2V4dDQveGF0dHIuYy00MDEtXHRcdGlmICghYmhzW2ldKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTQyMD1zdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaWdldChzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgdW5zaWduZWQgbG9uZyBlYV9pbm8sXG5mcy9leHQ0L3hhdHRyLmM6NDIxOlx0XHRcdFx0IHUzMiBlYV9pbm9kZV9oYXNoLCBzdHJ1Y3QgaW5vZGUgKiplYV9pbm9kZSlcbmZzL2V4dDQveGF0dHIuYy00MjIte1xuLS1cbmZzL2V4dDQveGF0dHIuYy00NDktXHQgKiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIGhhc2ggdmFsaWRhdGlvbiwgcmF0aGVyIGl0IGhhcyBhXG5mcy9leHQ0L3hhdHRyLmM6NDUwOlx0ICogYmFja3BvaW50ZXIgZnJvbSBlYV9pbm9kZSB0byB0aGUgcGFyZW50IGlub2RlLlxuZnMvZXh0NC94YXR0ci5jLTQ1MS1cdCAqL1xuZnMvZXh0NC94YXR0ci5jOjQ1MjpcdGlmIChlYV9pbm9kZV9oYXNoICE9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC94YXR0ci5jLTQ1My1cdCAgICBFWFQ0X1hBVFRSX0lOT0RFX0dFVF9QQVJFTlQoaW5vZGUpID09IHBhcmVudC1cdTAwM2VpX2lubyBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNDYyLVxuZnMvZXh0NC94YXR0ci5jOjQ2MzpcdCplYV9pbm9kZSA9IGlub2RlO1xuZnMvZXh0NC94YXR0ci5jLTQ2NC1cdHJldHVybiAwO1xuLS1cbmZzL2V4dDQveGF0dHIuYy00NjctLyogUmVtb3ZlIGVudHJ5IGZyb20gbWJjYWNoZSB3aGVuIEVBIGlub2RlIGlzIGdldHRpbmcgZXZpY3RlZCAqL1xuZnMvZXh0NC94YXR0ci5jOjQ2ODp2b2lkIGV4dDRfZXZpY3RfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQveGF0dHIuYy00Njkte1xuLS1cbmZzL2V4dDQveGF0dHIuYz00ODI9c3RhdGljIGludFxuZnMvZXh0NC94YXR0ci5jOjQ4MzpleHQ0X3hhdHRyX2lub2RlX3ZlcmlmeV9oYXNoZXMoc3RydWN0IGlub2RlICplYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy00ODQtXHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSwgdm9pZCAqYnVmZmVyLFxuLS1cbmZzL2V4dDQveGF0dHIuYy00ODktXHQvKiBWZXJpZnkgc3RvcmVkIGhhc2ggbWF0Y2hlcyBjYWxjdWxhdGVkIGhhc2guICovXG5mcy9leHQ0L3hhdHRyLmM6NDkwOlx0aGFzaCA9IGV4dDRfeGF0dHJfaW5vZGVfaGFzaChFWFQ0X1NCKGVhX2lub2RlLVx1MDAzZWlfc2IpLCBidWZmZXIsIHNpemUpO1xuZnMvZXh0NC94YXR0ci5jOjQ5MTpcdGlmIChoYXNoICE9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goZWFfaW5vZGUpKVxuZnMvZXh0NC94YXR0ci5jLTQ5Mi1cdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTUyNT1leHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4tLVxuZnMvZXh0NC94YXR0ci5jLTUyNy17XG5mcy9leHQ0L3hhdHRyLmM6NTI4Olx0c3RydWN0IG1iX2NhY2hlICplYV9pbm9kZV9jYWNoZSA9IEVBX0lOT0RFX0NBQ0hFKGlub2RlKTtcbmZzL2V4dDQveGF0dHIuYzo1Mjk6XHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuZnMvZXh0NC94YXR0ci5jLTUzMC1cdGludCBlcnI7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTUzMi1cdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaWdldChpbm9kZSwgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtKSxcbmZzL2V4dDQveGF0dHIuYzo1MzM6XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSwgXHUwMDI2ZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTUzNC1cdGlmIChlcnIpIHtcbmZzL2V4dDQveGF0dHIuYzo1MzU6XHRcdGVhX2lub2RlID0gTlVMTDtcbmZzL2V4dDQveGF0dHIuYy01MzYtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2V4dDQveGF0dHIuYy01MzgtXG5mcy9leHQ0L3hhdHRyLmM6NTM5Olx0aWYgKGlfc2l6ZV9yZWFkKGVhX2lub2RlKSAhPSBzaXplKSB7XG5mcy9leHQ0L3hhdHRyLmM6NTQwOlx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmM6NTQxOlx0XHRcdFx0ICAgXCYjMzQ7ZWFfaW5vZGUgZmlsZSBzaXplPSVsbHUgZW50cnkgc2l6ZT0lenVcJiMzNDssXG5mcy9leHQ0L3hhdHRyLmM6NTQyOlx0XHRcdFx0ICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpLCBzaXplKTtcbmZzL2V4dDQveGF0dHIuYy01NDMtXHRcdGVyciA9IC1FRlNDT1JSVVBURUQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTU0Ni1cbmZzL2V4dDQveGF0dHIuYzo1NDc6XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX3JlYWQoZWFfaW5vZGUsIGJ1ZmZlciwgc2l6ZSk7XG5mcy9leHQ0L3hhdHRyLmMtNTQ4LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNTUwLVxuZnMvZXh0NC94YXR0ci5jOjU1MTpcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpIHtcbmZzL2V4dDQveGF0dHIuYzo1NTI6XHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfdmVyaWZ5X2hhc2hlcyhlYV9pbm9kZSwgZW50cnksIGJ1ZmZlcixcbmZzL2V4dDQveGF0dHIuYy01NTMtXHRcdFx0XHRcdFx0ICAgICBzaXplKTtcbmZzL2V4dDQveGF0dHIuYy01NTQtXHRcdGlmIChlcnIpIHtcbmZzL2V4dDQveGF0dHIuYzo1NTU6XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTU1Ni1cdFx0XHRcdFx0ICAgXCYjMzQ7RUEgaW5vZGUgaGFzaCB2YWxpZGF0aW9uIGZhaWxlZFwmIzM0Oyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTU1OS1cbmZzL2V4dDQveGF0dHIuYzo1NjA6XHRcdGlmIChlYV9pbm9kZV9jYWNoZSlcbmZzL2V4dDQveGF0dHIuYzo1NjE6XHRcdFx0bWJfY2FjaGVfZW50cnlfY3JlYXRlKGVhX2lub2RlX2NhY2hlLCBHRlBfTk9GUyxcbmZzL2V4dDQveGF0dHIuYzo1NjI6XHRcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goZWFfaW5vZGUpLFxuZnMvZXh0NC94YXR0ci5jOjU2MzpcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuZnMvZXh0NC94YXR0ci5jLTU2NC1cdH1cbmZzL2V4dDQveGF0dHIuYy01NjUtb3V0OlxuZnMvZXh0NC94YXR0ci5jOjU2NjpcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy01NjctXHRyZXR1cm4gZXJyO1xuLS1cbmZzL2V4dDQveGF0dHIuYz04NTE9aW50IGV4dDRfZ2V0X2lub2RlX3VzYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgKnVzYWdlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy04NTctXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnk7XG5mcy9leHQ0L3hhdHRyLmM6ODU4Olx0cXNpemVfdCBlYV9pbm9kZV9yZWZzID0gMDtcbmZzL2V4dDQveGF0dHIuYy04NTktXHRpbnQgcmV0O1xuLS1cbmZzL2V4dDQveGF0dHIuYy04NzItXHRcdFx0aWYgKGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSlcbmZzL2V4dDQveGF0dHIuYzo4NzM6XHRcdFx0XHRlYV9pbm9kZV9yZWZzJiM0MzsmIzQzOztcbmZzL2V4dDQveGF0dHIuYy04NzQtXHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTg5MC1cdFx0XHRpZiAoZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtKVxuZnMvZXh0NC94YXR0ci5jOjg5MTpcdFx0XHRcdGVhX2lub2RlX3JlZnMmIzQzOyYjNDM7O1xuZnMvZXh0NC94YXR0ci5jLTg5Mi1cdH1cbmZzL2V4dDQveGF0dHIuYzo4OTM6XHQqdXNhZ2UgPSBlYV9pbm9kZV9yZWZzICYjNDM7IDE7XG5mcy9leHQ0L3hhdHRyLmMtODk0LVx0cmV0ID0gMDtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbmZzL2V4dDQveGF0dHIuYzo5MjU6XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtOTI2LVx0XHRcdFx0XHRzaXplX3QgbGVuKVxuZnMvZXh0NC94YXR0ci5jLTkyNy17XG5mcy9leHQ0L3hhdHRyLmM6OTI4Olx0aWYgKGVhX2lub2RlIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC94YXR0ci5jOjkyOTpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoZWFfaW5vZGUsIEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSlcbmZzL2V4dDQveGF0dHIuYy05MzAtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9OTM1PWludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTY2LVxuZnMvZXh0NC94YXR0ci5jOjk2NzpcdC8qIFdlIGFyZSBkb25lIGlmIGVhX2lub2RlIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQuICovXG5mcy9leHQ0L3hhdHRyLmM6OTY4Olx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKHNiKSlcbmZzL2V4dDQveGF0dHIuYy05NjktXHRcdHJldHVybiBjcmVkaXRzO1xuZnMvZXh0NC94YXR0ci5jLTk3MC1cbmZzL2V4dDQveGF0dHIuYzo5NzE6XHQvKiBOZXcgZWFfaW5vZGUsIGlub2RlIG1hcCwgYmxvY2sgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yLiAqL1xuZnMvZXh0NC94YXR0ci5jLTk3Mi1cdGNyZWRpdHMgJiM0Mzs9IDQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTk4Ni1cdGlmICghaXNfY3JlYXRlKSB7XG5mcy9leHQ0L3hhdHRyLmM6OTg3Olx0XHQvKiBEZXJlZmVyZW5jZSBlYV9pbm9kZSBob2xkaW5nIG9sZCB4YXR0ciB2YWx1ZS5cbmZzL2V4dDQveGF0dHIuYzo5ODg6XHRcdCAqIE9sZCBlYV9pbm9kZSwgaW5vZGUgbWFwLCBibG9jayBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IuXG5mcy9leHQ0L3hhdHRyLmMtOTg5LVx0XHQgKi9cbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTkxLVxuZnMvZXh0NC94YXR0ci5jOjk5MjpcdFx0LyogRGF0YSBibG9ja3MgZm9yIG9sZCBlYV9pbm9kZS4gKi9cbmZzL2V4dDQveGF0dHIuYy05OTMtXHRcdGJsb2NrcyA9IFhBVFRSX1NJWkVfTUFYIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLS1cbmZzL2V4dDQveGF0dHIuYy05OTUtXHRcdC8qIEluZGlyZWN0aW9uIGJsb2NrIG9yIG9uZSBsZXZlbCBvZiBleHRlbnQgdHJlZSBmb3Igb2xkXG5mcy9leHQ0L3hhdHRyLmM6OTk2Olx0XHQgKiBlYV9pbm9kZS5cbmZzL2V4dDQveGF0dHIuYy05OTctXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDA0LVx0LyogV2UgbWF5IG5lZWQgdG8gY2xvbmUgdGhlIGV4aXN0aW5nIHhhdHRyIGJsb2NrIGluIHdoaWNoIGNhc2Ugd2UgbmVlZFxuZnMvZXh0NC94YXR0ci5jOjEwMDU6XHQgKiB0byBpbmNyZW1lbnQgcmVmIGNvdW50cyBmb3IgZXhpc3RpbmcgZWFfaW5vZGVzIHJlZmVyZW5jZWQgYnkgaXQuXG5mcy9leHQ0L3hhdHRyLmMtMTAwNi1cdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDExLVx0XHRcdGlmIChlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0pXG5mcy9leHQ0L3hhdHRyLmM6MTAxMjpcdFx0XHRcdC8qIFJlZiBjb3VudCB1cGRhdGUgb24gZWFfaW5vZGUuICovXG5mcy9leHQ0L3hhdHRyLmMtMTAxMy1cdFx0XHRcdGNyZWRpdHMgJiM0Mzs9IDE7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMTctXG5mcy9leHQ0L3hhdHRyLmM6MTAxODpzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfdXBkYXRlX3JlZihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEwMTktXHRcdFx0XHQgICAgICAgaW50IHJlZl9jaGFuZ2UpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMjQtXG5mcy9leHQ0L3hhdHRyLmM6MTAyNTpcdGlub2RlX2xvY2tfbmVzdGVkKGVhX2lub2RlLCBJX01VVEVYX1hBVFRSKTtcbmZzL2V4dDQveGF0dHIuYy0xMDI2LVxuZnMvZXh0NC94YXR0ci5jOjEwMjc6XHRyZXQgPSBleHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlLCBlYV9pbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L3hhdHRyLmMtMTAyOC1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMzAtXG5mcy9leHQ0L3hhdHRyLmM6MTAzMTpcdHJlZl9jb3VudCA9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X3JlZihlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTAzMi1cdGlmICgocmVmX2NvdW50ID09IDAgXHUwMDI2XHUwMDI2IHJlZl9jaGFuZ2UgXHUwMDNjIDApIHx8IChyZWZfY291bnQgPT0gVTY0X01BWCBcdTAwMjZcdTAwMjYgcmVmX2NoYW5nZSBcdTAwM2UgMCkpIHtcbmZzL2V4dDQveGF0dHIuYzoxMDMzOlx0XHRleHQ0X2Vycm9yX2lub2RlKGVhX2lub2RlLCBfX2Z1bmNfXywgX19MSU5FX18sIDAsXG5mcy9leHQ0L3hhdHRyLmMtMTAzNC1cdFx0XHRcJiMzNDtFQSBpbm9kZSAlbGx1IHJlZiB3cmFwYXJvdW5kOiByZWZfY291bnQ9JWxsZCByZWZfY2hhbmdlPSVkXCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jOjEwMzU6XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHJlZl9jb3VudCwgcmVmX2NoYW5nZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTAzNi1cdFx0YnJlbHNlKGlsb2MuYmgpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDQwLVx0cmVmX2NvdW50ICYjNDM7PSByZWZfY2hhbmdlO1xuZnMvZXh0NC94YXR0ci5jOjEwNDE6XHRleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoZWFfaW5vZGUsIHJlZl9jb3VudCk7XG5mcy9leHQ0L3hhdHRyLmMtMTA0Mi1cbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA0NC1cdFx0aWYgKHJlZl9jb3VudCA9PSAxKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTA0NTpcdFx0XHRXQVJOX09OQ0UoZWFfaW5vZGUtXHUwMDNlaV9ubGluaywgXCYjMzQ7RUEgaW5vZGUgJWxsdSBpX25saW5rPSV1XCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jOjEwNDY6XHRcdFx0XHQgIGVhX2lub2RlLVx1MDAzZWlfaW5vLCBlYV9pbm9kZS1cdTAwM2VpX25saW5rKTtcbmZzL2V4dDQveGF0dHIuYy0xMDQ3LVxuZnMvZXh0NC94YXR0ci5jOjEwNDg6XHRcdFx0c2V0X25saW5rKGVhX2lub2RlLCAxKTtcbmZzL2V4dDQveGF0dHIuYzoxMDQ5Olx0XHRcdGV4dDRfb3JwaGFuX2RlbChoYW5kbGUsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMDUwLVx0XHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwNTItXHRcdGlmIChyZWZfY291bnQgPT0gMCkge1xuZnMvZXh0NC94YXR0ci5jOjEwNTM6XHRcdFx0V0FSTl9PTkNFKGVhX2lub2RlLVx1MDAzZWlfbmxpbmsgIT0gMSxcbmZzL2V4dDQveGF0dHIuYy0xMDU0LVx0XHRcdFx0ICBcJiMzNDtFQSBpbm9kZSAlbGx1IGlfbmxpbms9JXVcJiMzNDssXG5mcy9leHQ0L3hhdHRyLmM6MTA1NTpcdFx0XHRcdCAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIGVhX2lub2RlLVx1MDAzZWlfbmxpbmspO1xuZnMvZXh0NC94YXR0ci5jLTEwNTYtXG5mcy9leHQ0L3hhdHRyLmM6MTA1NzpcdFx0XHRjbGVhcl9ubGluayhlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTA1ODpcdFx0XHRleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTA1OS1cdFx0fVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDYxLVxuZnMvZXh0NC94YXR0ci5jOjEwNjI6XHRyZXQgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGVhX2lub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQveGF0dHIuYy0xMDYzLVx0aWYgKHJldClcbmZzL2V4dDQveGF0dHIuYzoxMDY0Olx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTA2NS1cdFx0XHRcdCAgIFwmIzM0O2V4dDRfbWFya19pbG9jX2RpcnR5KCkgZmFpbGVkIHJldD0lZFwmIzM0OywgcmV0KTtcbmZzL2V4dDQveGF0dHIuYy0xMDY2LW91dDpcbmZzL2V4dDQveGF0dHIuYzoxMDY3Olx0aW5vZGVfdW5sb2NrKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMDY4LVx0cmV0dXJuIHJldDtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA3MC1cbmZzL2V4dDQveGF0dHIuYzoxMDcxOnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMTA3Mi17XG5mcy9leHQ0L3hhdHRyLmM6MTA3MzpcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgMSk7XG5mcy9leHQ0L3hhdHRyLmMtMTA3NC19XG5mcy9leHQ0L3hhdHRyLmMtMTA3NS1cbmZzL2V4dDQveGF0dHIuYzoxMDc2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMTA3Ny17XG5mcy9leHQ0L3hhdHRyLmM6MTA3ODpcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgLTEpO1xuZnMvZXh0NC94YXR0ci5jLTEwNzktfVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDgxPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA4My17XG5mcy9leHQ0L3hhdHRyLmM6MTA4NDpcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5mcy9leHQ0L3hhdHRyLmMtMTA4NS1cdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA5Ni1cdFx0XHRcdFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfaGFzaCksXG5mcy9leHQ0L3hhdHRyLmM6MTA5NzpcdFx0XHRcdFx0ICAgIFx1MDAyNmVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMDk4LVx0XHRpZiAoZXJyKVxuZnMvZXh0NC94YXR0ci5jLTEwOTktXHRcdFx0Z290byBjbGVhbnVwO1xuZnMvZXh0NC94YXR0ci5jOjExMDA6XHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMTAxLVx0XHRpZiAoZXJyKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTEwMjpcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTEwMzpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDQtXHRcdFx0Z290byBjbGVhbnVwO1xuZnMvZXh0NC94YXR0ci5jLTExMDUtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxMTA2Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDctXHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTExMjAtXHRcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShlbnRyeS1cdTAwM2VlX2hhc2gpLFxuZnMvZXh0NC94YXR0ci5jOjExMjE6XHRcdFx0XHRcdCAgICBcdTAwMjZlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTEyMi1cdFx0aWYgKGVycikge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTI3LVx0XHR9XG5mcy9leHQ0L3hhdHRyLmM6MTEyODpcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMjktXHRcdGlmIChlcnIpXG5mcy9leHQ0L3hhdHRyLmM6MTEzMDpcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwmIzM0OyxcbmZzL2V4dDQveGF0dHIuYy0xMTMxLVx0XHRcdFx0XHQgICBlcnIpO1xuZnMvZXh0NC94YXR0ci5jOjExMzI6XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTEzMy1cdH1cbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTE1Nj1leHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTYwLXtcbmZzL2V4dDQveGF0dHIuYzoxMTYxOlx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbmZzL2V4dDQveGF0dHIuYy0xMTYyLVx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTgwLVxuZnMvZXh0NC94YXR0ci5jOjExODE6XHQvKiBPbmUgY3JlZGl0IGZvciBkZWMgcmVmIG9uIGVhX2lub2RlLCBvbmUgZm9yIG9ycGhhbiBsaXN0IGFkZGl0aW9uLCAqL1xuZnMvZXh0NC94YXR0ci5jLTExODItXHRjcmVkaXRzID0gMiAmIzQzOyBleHRyYV9jcmVkaXRzO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTkwLVx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSxcbmZzL2V4dDQveGF0dHIuYzoxMTkxOlx0XHRcdFx0XHQgICAgXHUwMDI2ZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExOTItXHRcdGlmIChlcnIpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTExOTktXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbmZzL2V4dDQveGF0dHIuYzoxMjAwOlx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jLTEyMDEtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIwMjpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMDMtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMDgtXHRcdFx0aWYgKGVycikge1xuZnMvZXh0NC94YXR0ci5jOjEyMDk6XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTIxMC1cdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbmZzL2V4dDQveGF0dHIuYy0xMjExLVx0XHRcdFx0XHRcdGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIxMjpcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTIxMy1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMjE2LVxuZnMvZXh0NC94YXR0ci5jOjEyMTc6XHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMjE4LVx0XHRpZiAoZXJyKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTIxOTpcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2VhX2lub2RlIGRlYyByZWYgZXJyPSVkXCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMjItXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMjUtXHRcdGlmICghc2tpcF9xdW90YSlcbmZzL2V4dDQveGF0dHIuYzoxMjI2Olx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShwYXJlbnQsIGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEyMjctXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMjI5LVx0XHQvKlxuZnMvZXh0NC94YXR0ci5jOjEyMzA6XHRcdCAqIEZvcmdldCBhYm91dCBlYV9pbm9kZSB3aXRoaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhhdFxuZnMvZXh0NC94YXR0ci5jLTEyMzEtXHRcdCAqIGRlY3JlbWVudHMgdGhlIHJlZiBjb3VudC4gVGhpcyBhdm9pZHMgZHVwbGljYXRlIGRlY3JlbWVudHMgaW5cbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTIzNy1cbmZzL2V4dDQveGF0dHIuYzoxMjM4Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMzktXHRcdGRpcnR5ID0gdHJ1ZTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTI2Mz1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTMwMS1cbmZzL2V4dDQveGF0dHIuYzoxMzAyOlx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKSlcbmZzL2V4dDQveGF0dHIuYy0xMzAzLVx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEzNTg9c3RhdGljIHNpemVfdCBleHQ0X3hhdHRyX2ZyZWVfc3BhY2Uoc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmxhc3QsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEzNzUtICovXG5mcy9leHQ0L3hhdHRyLmM6MTM3NjpzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICplYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0xMzc3LVx0XHRcdFx0ICBjb25zdCB2b2lkICpidWYsIGludCBidWZzaXplKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMzgwLVx0dW5zaWduZWQgbG9uZyBibG9jayA9IDA7XG5mcy9leHQ0L3hhdHRyLmM6MTM4MTpcdGludCBibG9ja3NpemUgPSBlYV9pbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuZnMvZXh0NC94YXR0ci5jOjEzODI6XHRpbnQgbWF4X2Jsb2NrcyA9IChidWZzaXplICYjNDM7IGJsb2Nrc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBlYV9pbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG5mcy9leHQ0L3hhdHRyLmMtMTM4My1cdGludCBjc2l6ZSwgd3NpemUgPSAwO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMzkyLVxuZnMvZXh0NC94YXR0ci5jOjEzOTM6XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGVhX2lub2RlLCBcdTAwMjZtYXAsXG5mcy9leHQ0L3hhdHRyLmMtMTM5NC1cdFx0XHRcdCAgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuZnMvZXh0NC94YXR0ci5jLTEzOTUtXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTM5NjpcdFx0XHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTM5Ny1cdFx0XHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L3hhdHRyLmM6MTM5ODpcdFx0XHQgICAgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoZWFfaW5vZGUtXHUwMDNlaV9zYiwgXHUwMDI2cmV0cmllcykpIHtcbmZzL2V4dDQveGF0dHIuYy0xMzk5LVx0XHRcdFx0cmV0ID0gMDtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTQxMy1cdFx0XHRcdFx0XHRcdFx0YnVmc2l6ZSAtIHdzaXplO1xuZnMvZXh0NC94YXR0ci5jOjE0MTQ6XHRcdGJoID0gZXh0NF9nZXRibGsoaGFuZGxlLCBlYV9pbm9kZSwgYmxvY2ssIDApO1xuZnMvZXh0NC94YXR0ci5jLTE0MTUtXHRcdGlmIChJU19FUlIoYmgpKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNDE4LVx0XHRcdFdBUk5fT05fT05DRSgxKTtcbmZzL2V4dDQveGF0dHIuYzoxNDE5Olx0XHRcdEVYVDRfRVJST1JfSU5PREUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTQyMC1cdFx0XHRcdFx0IFwmIzM0O2V4dDRfZ2V0YmxrKCkgcmV0dXJuIGJoID0gTlVMTFwmIzM0Oyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE0MjItXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxNDIzOlx0XHRyZXQgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGVhX2lub2RlLVx1MDAzZWlfc2IsIGJoLFxuZnMvZXh0NC94YXR0ci5jLTE0MjQtXHRcdFx0XHRcdFx0ICAgRVhUNF9KVFJfTk9ORSk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE0MzUtXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuZnMvZXh0NC94YXR0ci5jOjE0MzY6XHRcdGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZWFfaW5vZGUsIGJoKTtcbmZzL2V4dDQveGF0dHIuYy0xNDM3LVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNDQyLVxuZnMvZXh0NC94YXR0ci5jOjE0NDM6XHRpbm9kZV9sb2NrKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYzoxNDQ0Olx0aV9zaXplX3dyaXRlKGVhX2lub2RlLCB3c2l6ZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTQ0NTpcdGV4dDRfdXBkYXRlX2lfZGlza3NpemUoZWFfaW5vZGUsIHdzaXplKTtcbmZzL2V4dDQveGF0dHIuYzoxNDQ2Olx0aW5vZGVfdW5sb2NrKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xNDQ3LVxuZnMvZXh0NC94YXR0ci5jOjE0NDg6XHRyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE0NDktXHRpZiAodW5saWtlbHkocmV0MiBcdTAwMjZcdTAwMjYgIXJldCkpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE0NjE9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTQ2My17XG5mcy9leHQ0L3hhdHRyLmM6MTQ2NDpcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jLTE0NjUtXHR1aWRfdCBvd25lclsyXSA9IHsgaV91aWRfcmVhZChpbm9kZSksIGlfZ2lkX3JlYWQoaW5vZGUpIH07XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE0NzgtXHQgKi9cbmZzL2V4dDQveGF0dHIuYzoxNDc5Olx0ZWFfaW5vZGUgPSBleHQ0X25ld19pbm9kZShoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19yb290LVx1MDAzZWRfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTQ4MC1cdFx0XHRcdCAgU19JRlJFRyB8IDA2MDAsIE5VTEwsIGlub2RlLVx1MDAzZWlfaW5vICYjNDM7IDEsIG93bmVyLFxuZnMvZXh0NC94YXR0ci5jLTE0ODEtXHRcdFx0XHQgIEVYVDRfRUFfSU5PREVfRkwpO1xuZnMvZXh0NC94YXR0ci5jOjE0ODI6XHRpZiAoIUlTX0VSUihlYV9pbm9kZSkpIHtcbmZzL2V4dDQveGF0dHIuYzoxNDgzOlx0XHRlYV9pbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2ZXh0NF9maWxlX2lub2RlX29wZXJhdGlvbnM7XG5mcy9leHQ0L3hhdHRyLmM6MTQ4NDpcdFx0ZWFfaW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZleHQ0X2ZpbGVfb3BlcmF0aW9ucztcbmZzL2V4dDQveGF0dHIuYzoxNDg1Olx0XHRleHQ0X3NldF9hb3BzKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYzoxNDg2Olx0XHRleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTQ4NzpcdFx0dW5sb2NrX25ld19pbm9kZShlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTQ4ODpcdFx0ZXh0NF94YXR0cl9pbm9kZV9zZXRfcmVmKGVhX2lub2RlLCAxKTtcbmZzL2V4dDQveGF0dHIuYzoxNDg5Olx0XHRleHQ0X3hhdHRyX2lub2RlX3NldF9oYXNoKGVhX2lub2RlLCBoYXNoKTtcbmZzL2V4dDQveGF0dHIuYzoxNDkwOlx0XHRlcnIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTQ5MS1cdFx0aWYgKCFlcnIpXG5mcy9leHQ0L3hhdHRyLmM6MTQ5MjpcdFx0XHRlcnIgPSBleHQ0X2lub2RlX2F0dGFjaF9qaW5vZGUoZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE0OTMtXHRcdGlmIChlcnIpIHtcbmZzL2V4dDQveGF0dHIuYzoxNDk0Olx0XHRcdGlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmM6MTQ5NTpcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYxMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBlYV9pbm9kZWAgRmVhdHVyZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVhX2lub2RlYCB0aGluZy4gSXMgaXQgYSBjb25maWd1cmFibGUgb3B0aW9uPyBJIGZlZWwgbGlrZSBJJiMzOTt2ZSBlbmNvdW50ZXJlZCB0aGlzIGJlZm9yZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBFeHQ0IEtjb25maWcgZmlsZSBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VhX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3OTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyBlYV9pbm9kZSBhbmQgRVhUNCoqCgpSaWdodCwgc28gKmVhX2lub2RlKiBpc24mIzM5O3Qgc29tZXRoaW5nIEkgbmVlZCB0byB3cmFuZ2xlIHdpdGggYXQgY29tcGlsZSB0aW1lLiBJdCYjMzk7cyBhIGZpbGVzeXN0ZW0gZmVhdHVyZSwgd2hpY2ggaXMgbXVjaCBtb3JlIG1hbmFnZWFibGUsIGluIG15IGV4cGVyaWVuY2UuIEkgd2FzIGluaXRpYWxseSB3b3JyaWVkIEkmIzM5O2QgaGF2ZSB0byB0d2VhayBzb21lIG9ic2N1cmUgY29uZmlndXJhdGlvbiBmbGFnLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIFRoZSBjcnVjaWFsIHRoaW5nLCB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uLCBpcyBgRVhUNF9GU2AuIFRoYXQmIzM5O3MgZ29vZCBuZXdzLCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGV4dDRfcHV0X2VhX2lub2RlYCBhbmQgYGV4dDRfZWFfaW5vZGVfd29ya2AuIFRob3NlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkLCBzbyB1bmRlcnN0YW5kaW5nIHRob3NlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYGVhX2lub2RlYCBhY3R1YWxseSAqd29ya3MqIHdpdGhpbiBFWFQ0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfcHV0X2VhX2lub2RlfGV4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz01MjU9ZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuLS1cbmZzL2V4dDQveGF0dHIuYy01NjUtb3V0OlxuZnMvZXh0NC94YXR0ci5jOjU2NjpcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy01NjctXHRyZXR1cm4gZXJyO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDgxPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTEwMi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTEwMzpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDQtXHRcdFx0Z290byBjbGVhbnVwO1xuZnMvZXh0NC94YXR0ci5jLTExMDUtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxMTA2Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDctXHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTExMzEtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTEzMjpcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMTMzLVx0fVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMTU2PWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMDEtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIwMjpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMDMtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMTEtXHRcdFx0XHRcdFx0ZXJyKTtcbmZzL2V4dDQveGF0dHIuYzoxMjEyOlx0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMjEzLVx0XHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMjItXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMzctXG5mcy9leHQ0L3hhdHRyLmM6MTIzODpcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMjM5LVx0XHRkaXJ0eSA9IHRydWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTE0NjE9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTQ5Ni1cdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuZnMvZXh0NC94YXR0ci5jOjE0OTc6XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE0OTgtXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTUxNj1leHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE1NTUtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxNTU2Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTU1Ny1cdG5leHRfZW50cnk6XG4tLVxuZnMvZXh0NC94YXR0ci5jPTE1Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE2MDYtb3V0X2VycjpcbmZzL2V4dDQveGF0dHIuYzoxNjA3Olx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE2MDgtXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MTg9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xODM5LW91dDpcbmZzL2V4dDQveGF0dHIuYzoxODQwOlx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xODQxLVx0cmV0dXJuIHJldDtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTg4OD1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDAxLVx0XHRcdH1cbmZzL2V4dDQveGF0dHIuYzoyMDAyOlx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIHRtcF9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMjAwMy1cbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE0MS1cdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbmZzL2V4dDQveGF0dHIuYzoyMTQyOlx0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTIxNDMtXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTIxOTAtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoyMTkxOlx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMjE5Mi1cdH1cbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjIzOT1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI3Mi1cdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbmZzL2V4dDQveGF0dHIuYzoyMjczOlx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0yMjc0LVx0XHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTIyODQtXHR9XG5mcy9leHQ0L3hhdHRyLmM6MjI4NTpcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0yMjg2LVx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI5MzEtXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuZnMvZXh0NC94YXR0ci5jOjI5MzI6XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMjkzMy1cdFx0XHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI5NjItICovXG5mcy9leHQ0L3hhdHRyLmM6Mjk2MzpzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvZXh0NC94YXR0ci5jLTI5NjQte1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTkxLSAqL1xuZnMvZXh0NC94YXR0ci5jOjI5OTI6dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC94YXR0ci5jLTI5OTMte1xuLS1cbmZzL2V4dDQveGF0dHIuYz0zMDA4PXZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zMDEwLVx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuZnMvZXh0NC94YXR0ci5jOjMwMTE6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xuZnMvZXh0NC94YXR0ci5jLTMwMTItfVxuLS1cbmZzL2V4dDQveGF0dHIuaD0xODY9ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbmZzL2V4dDQveGF0dHIuaDoxODc6ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmgtMTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRXh0ZW5kZWQgQXR0cmlidXRlcyBpbiBleHQ0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgb2J2aW91c2x5IGFkZGluZyBzb21lIG5ldyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyAoRUFzKSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTGV0JiMzOTtzIHNlZSwgdGhlIGNvcmUgZnVuY3Rpb25zIGludHJvZHVjZWQgYXBwZWFyIHRvIGJlIGBleHQ0X3B1dF9lYV9pbm9kZWAgYW5kIGBleHQ0X2VhX2lub2RlX3dvcmtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdGFyZ2V0IHRoZXNlIGZvciBmdXp6aW5nLgoKQnV0IHdhaXQsIGxvb2tpbmcgY2xvc2VyLCBgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrYCBpcyBhbHNvIHJlbGV2YW50LCBldmVuIHRob3VnaCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljIGlubGluZWAgaW4gYGZzL2V4dDQveGF0dHIuaGAuICBUaGF0IG1lYW5zIHdlIGNhbiYjMzk7dCBkaXJlY3RseSBmdXp6IGl0IGFzIGEgc3ltYm9sLCBidXQgd2Ugc2hvdWxkIGNvbnNpZGVyIGZ1enppbmcgaXRzIGNhbGxlcnMsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBrZWVwIGl0IGluIG1pbmQuIEJleW9uZCB0aGF0IEkgc2hvdWxkIGFsc28gdGFyZ2V0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGFuZCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBhcyBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuCgpPa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIG9mIGBleHQ0X2VhX2lub2RlX3dvcmtgLiBZZXMsIGl0JiMzOTtzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtZWFucyB3ZSBjYW4mIzM5O3QgZnV6eiBgZXh0NF9lYV9pbm9kZV93b3JrYCBkaXJlY3RseSBlaXRoZXIuICBTbywgd2UgY2FuIHByb2JhYmx5IHN1bW1hcml6ZSBvdXIgZnV6emluZyB0YXJnZXRzIGFzOgoKLSBgZXh0NF9wdXRfZWFfaW5vZGVgIChub24tc3RhdGljKQotIGBleHQ0X2VhX2lub2RlX3dvcmtgIChzdGF0aWMsIGNvbnNpZGVyIGNhbGxlcnMpCi0gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCAobm9uLXN0YXRpYykKLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgKG5vbi1zdGF0aWMpCgpSaWdodCwgbm93LCB3aGF0IGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBzZXR0aW5ncyBlbmFibGVkIHRvIGV2ZW4gdGVzdCB0aGVzZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBFWFQ0X0ZTYC4gVGltZSB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc3CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtLiBgRVhUNF9GU2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYEVYVDRfRlNfWEFUVFJgIGlzbiYjMzk7dCBkZWZpbmVkIG9uIGl0cyBvd24uIE5vcGUsIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucz8gTm8sIGl0JiMzOTtzIG5vdCBsb29raW5nIGxpa2UgaXQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgaXB1dF9pZl9ub3RfbGFzdGAgaW4gYGluY2x1ZGUvbGludXgvZnMuaGAuIFRoYXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBUaGF0IHRlbGxzIG1lIHdoYXQgdG8gZXhwZWN0LgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoqICAgYGV4dDRfcHV0X2VhX2lub2RlYAoqICAgYGV4dDRfZWFfaW5vZGVfd29ya2AKKiAgIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAKKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYAoqICAgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AKCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gdmVyaWZ5IHRoYXQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgIGFuZCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBhcmUgc3RhdGljLCB0aG91Z2guIFRoYXQmIzM5O3MgYWx3YXlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGx8ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0xMTU1PXN0YXRpYyB2b2lkXG5mcy9leHQ0L3hhdHRyLmM6MTE1NjpleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuZnMvZXh0NC94YXR0ci5jLTExNTctXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMjYyPXN0YXRpYyB2b2lkXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0xMjY0LVx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMzAyLVx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKSlcbmZzL2V4dDQveGF0dHIuYzoxMzAzOlx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXG5mcy9leHQ0L3hhdHRyLmMtMTMwNC1cdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuZnMvZXh0NC94YXR0ci5jLTIxNzUtXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODk1LVx0XHRpZiAoaGVhZGVyLVx1MDAzZWhfbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpXG5mcy9leHQ0L3hhdHRyLmM6Mjg5NjpcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjg5Ny1cdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTM2LVxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTI1CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMsIGJ1dCB0aGUgY29yZSB0aG91Z2h0cyByZW1haW4gc3RhdGljLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhlIHBhdGNoIGlzICpyZW1vdmluZyogdGhlIGBlYV9pbm9kZV9hcnJheWAgYXJndW1lbnQsIHdoaWNoIHJlYWxseSBjYXRjaGVzIG15IGV5ZS4gVGhhdCBhbG9uZSBtYWtlcyB0aGVtIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmF0aW9uYWxlOiB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2Rlcy4gSXQmIzM5O3MgZGVmZXJyaW5nIHRoZSBgaXB1dGAgb3BlcmF0aW9uIOKAkyB3aGljaCBpcyBhIHByZXR0eSBjcnVjaWFsIHJlbGVhc2Ug4oCTIHRvIGEgd29ya3F1ZXVlIHRvIGRvZGdlIHBvdGVudGlhbCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZXh0NCBsb2dpYywgYW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgYSB1c2VyIGNhbiB0cmlnZ2VyIGZyb20gdXNlcnNwYWNlIGp1c3QgYnkgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4gVGhhdOKAmXMgYSBnb29kIHNpZ24sIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBpdCBhbGxvd3MgdXMgdG8gZWFzaWx5IGludGVyYWN0IHdpdGggdGhlIGxvZ2ljLgoKU28sIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnkgb2YgbXkgZmluZGluZ3M6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyB3YXJyYW50cyBhdHRlbnRpb24uCiogICAqKkZvY3VzU3ltYm9scyoqOiBNeSBpbW1lZGlhdGUgdGFyZ2V0cyBhcmUgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYW5kIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIEVBIGlub2RlIGhhbmRsaW5nIGFuZCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBjb21wb25lbnRzIG9mIHRoZSBtb2RpZmllZCBsb2dpYy4KKiAgICoqRW5hYmxlQ29uZmlncyoqOiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgRVhUNF9GU2AgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaCB0byBoYXZlIGFuIGVmZmVjdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBvdGhlciBjb25maWcgZmxhZ3MgYXQgdGhpcyB0aW1lLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdGhlIGZ1enppbmcgcHJvY2VzcyByb2xsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBkZWZlcnJpbmcgdGhlaXIgaXB1dCB0byBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgZXh0NCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNjoyOC42NjMzNTQwNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM3NDM4Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjI4LjY2MzM2MjIxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyODkzMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDlkNDhjZTVkMjBmNTFiYWM3MGQ4NTZhZDUzZTQ3M2UxOTEyN2FlMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAwOToyNjoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTA3MCw4ICsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xcbiBcXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcXG4gXFx0ICogRUFzLlxcbitcXHQgKlxcbitcXHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXFxuK1xcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbiBcXHQgKi9cXG4tXFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xcbitcXHR9O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbiBcXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xcbiBcXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcXG4rXFxuK1xcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xcbitcXG4gXFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4gXFxuIFxcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcXG4gXFx0ICovXFxuIFxcdGludCBleHRyYV9jcmVkaXRzID0gNjtcXG4tXFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4gXFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XFxuIFxcbiBcXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcXG5AQCAtMjgxLDggKzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cXG4tXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRcXHQgICAgICBleHRyYV9jcmVkaXRzKTtcXG4rXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZXh0NF93YXJuaW5nKGlub2RlLVxcdTAwM2VpX3NiLCBcXFwieGF0dHIgZGVsZXRlIChlcnIgJWQpXFxcIiwgZXJyKTtcXG4gc3RvcF9oYW5kbGU6XFxuQEAgLTI5MCw3ICsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcXG4gXFx0XFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdFxcdGdvdG8gbm9fZGVsZXRlO1xcbiBcXHR9XFxuIFxcbkBAIC0zMjAsNyArMzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIFxcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxcbiBcXHRcXHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHRyZXR1cm47XFxuIG5vX2RlbGV0ZTpcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjk3ZjBlN2MxYjI1NGY3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xcbkBAIC0xMzAzLDYgKzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRcXHRcXHQgXFx1MDAyNnNiLVxcdTAwM2VzX3V1aWQpO1xcbiBcXG4gXFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXFxuK1xcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gXFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRtZW1zZXQoXFx1MDAyNmVpLVxcdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXFx1MDAzZWlfZHF1b3QpKTtcXG4gI2VuZGlmXFxuIFxcdGVpLVxcdTAwM2VqaW5vZGUgPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcXG4rXFx0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxcbitcXHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXFxuK1xcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cXG4rXFx0ICovXFxuK1xcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZlaS1cXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XFxuIFxcdGVpLVxcdTAwM2VpX3N5bmNfdGlkID0gMDtcXG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfb3JwaGFuKTtcXG4tXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gXFx0aW5vZGVfaW5pdF9vbmNlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4gXFx0ZXh0NF9mY19pbml0X2lub2RlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG5AQCAtNTUwOCw2ICs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdCAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJ3QgdHJ5XFxuIFxcdCAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCFcXG4gXFx0ICovXFxuK1xcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XFxuK1xcbiBcXHRpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbChzYikpIHtcXG4gXFx0XFx0ZXJyID0gZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc2IsIGVzLCBjdHgpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbkBAIC01NzQ3LDYgKzU3NTcsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmYWlsZWRfbW91bnQ5OlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbkBAIC01NzY3LDYgKzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRpZiAoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxcbiBcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbiBmYWlsZWRfbW91bnRfd3E6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xcbiBcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbiBcXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuIFxcdH1cXG4gZmFpbGVkX21vdW50M2E6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbiBmYWlsZWRfbW91bnQzOlxcbiBcXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXFxuKysrIGIvZnMvZXh0NC94YXR0ci5jXFxuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XFxuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXFx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxcXFxuIFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm8pLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxcbiBcXG4tc3RhdGljIGludFxcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuIHtcXG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0fVxcbiBvdXQ6XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xMTA0LDEwICsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImluYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMTMzLDcgKzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gc2F2ZWRfZXJyO1xcbiB9XFxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcXG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxcbiBcXHRcXHRcXHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVxcdTAwM2VpX3NiLCAxKSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcXG5AQCAtMTIxMiw2ICsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuQEAgLTEyMjEsNiArMTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZXJyKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtMTIyOSw2ICsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTI0NSw2ICsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xcbiBcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI3MSw3ICsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi1cXHRcXHRcXHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0IGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XFxuQEAgLTEzMTMsNyArMTMwMyw2IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJGSVJTVChiaCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBiaCwgMCwgMSxcXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4gXFx0XFx0XFx0a3ZmcmVlKGVhX2RhdGEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZWFfaW5vZGU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdG5leHRfZW50cnk6XFxuIFxcdFxcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XFxuIFxcdH1cXG5AQCAtMTYxNSw3ICsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVhX2lub2RlLVxcdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XFxuIFxcdHJldHVybiBlYV9pbm9kZTtcXG4gb3V0X2VycjpcXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbkBAIC0xODQ4LDcgKzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuLVxcdGlwdXQob2xkX2VhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIG9sZF9lYV9pbm9kZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUpO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlwdXQodG1wX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIHRtcF9pbm9kZSk7XFxuIFxcbiBcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xcbiBcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xcbkBAIC0yMTUwLDcgKzIxMzksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJkZWMgcmVmIGVycm9yPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXJyb3IpO1xcbi1cXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIFxcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xcbiBcXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4tXFxuIFxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cXHUwMDNlYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi1cXHRcXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHR9XFxuIFxcdGVycm9yID0gMDtcXG4gXFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdGlmIChjZSlcXG4gXFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XFxuQEAgLTIyODUsNyArMjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0fVxcbkBAIC0yMjk3LDcgKzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0aGVhZGVyLVxcdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XFxuIFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xcbiBcXHR9XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxcbi1cXG4tLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXFxuLSAqL1xcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCA9IDA7XFxuLVxcdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCBcXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xcbi1cXHRcXHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXFxuLVxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xcbi1cXG4tXFx0XFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCArIEVJQV9JTkNSLFxcbi1cXHRcXHRcXHRcXHRcXHQgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAobmV3X2FycmF5ID09IE5VTEwpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0ICAgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50KSk7XFxuLVxcdFxcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XFxuLVxcdFxcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcXG4tXFx0fVxcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQrKztcXG4tXFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWlub2Rlc1soKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLypcXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxcbiAgKlxcbkBAIC0yOTEzLDcgKzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXFxuICAqL1xcbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG5AQCAtMjk1Miw3ICsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRklSU1QoaGVhZGVyKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7XFxuIFxcdH1cXG5AQCAtMjk4NiwxMiArMjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUpKTtcXG4tXFx0XFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXFxuK1xcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcXG4gXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXFxuQEAgLTMwMTMsMTYgKzI5NTYsNTkgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxcbisvKlxcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4tXFx0aW50IGlkeDtcXG4rXFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c19lYV9pbm9kZV93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpuZXh0O1xcbiBcXG4tXFx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXFxuK1xcdHdoaWxlIChub2RlKSB7XFxuK1xcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIGlfZWFfaXB1dF9ub2RlKTtcXG4rXFx0XFx0bmV4dCA9IG5vZGUtXFx1MDAzZW5leHQ7XFxuK1xcdFxcdGlwdXQoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbitcXHRcXHRub2RlID0gbmV4dDtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcXG4rICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXFxuKyAqL1xcbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xcbitcXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VhX2lwdXRfbm9kZSxcXG4rXFx0XFx0ICBcXHUwMDI2RVhUNF9TQihzYiktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxcbitcXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cXHUwMDNlY291bnQ7ICsraWR4KVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlX2FycmF5LVxcdTAwM2Vpbm9kZXNbaWR4XSk7XFxuLVxcdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuK3tcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjgyMTRhMzFmZTAwMThkIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIH07XFxuIFxcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xcbi19O1xcbi1cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XFxuQEAgLTE4Nyw5ICsxODIsMjEgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBpc19jcmVhdGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XFxuLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFxuKy8qXFxuKyAqIERyYWluIGFsbCBwZW5kaW5nIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlXFxuKyAqIGZyZWVpbmcgcmVzb3VyY2VzIHRoYXQgZXZpY3Rpb24gZGVwZW5kcyBvbiAocXVvdGEsIGJsb2NrIGFsbG9jYXRvcikuXFxuKyAqIExvb3BzIGJlY2F1c2Ugd29ya2VyIGlwdXQgbWF5IHRyaWdnZXIgZXZpY3Rpb24gdGhhdCByZS1xdWV1ZXMuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4re1xcbitcXHR3aGlsZSAoZmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaykgfHxcXG4rXFx0ICAgICAgICFsbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpKVxcbitcXHRcXHQ7XFxuK31cXG4gXFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5pbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuQEAgLTI0MTgsNiArMjQxOCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XFxuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xcbitcXG4rLyoqXFxuKyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcXG4rICpcXG4rICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xcbit9XFxuK1xcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjI5LjM5NzAxOThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjQwNzAzODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGV4dDQgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgZGVmZXJyaW5nIHRoZWlyIGlwdXQgdG8gYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGV4dDQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwOWQ0OGNlNWQyMGY1MWJhYzcwZDg1NmFkNTNlNDczZTE5MTI3YWUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDk6MjY6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4rXHQgKlxuK1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuK1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbitcbitcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4rXG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbitcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcIiwgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyArMjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgKzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4rXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuK1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuK1x0ICogaGF2ZSBvdmVyd3JpdHRlbiB0aGUgc2VtYXBob3JlIHdoZW4gdGhlIHNsYWIgb2JqZWN0IHdhc1xuK1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuK1x0ICovXG4rXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX2xpc3QpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XG4gXHRlaS1cdTAwM2VpX3N5bmNfdGlkID0gMDtcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NTA4LDYgKzU1MTYsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdCAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJ3QgdHJ5XG4gXHQgKiByb290IGZpcnN0OiBpdCBtYXkgYmUgbW9kaWZpZWQgaW4gdGhlIGpvdXJuYWwhXG4gXHQgKi9cbitcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4rXG4gXHRpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSB7XG4gXHRcdGVyciA9IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHNiLCBlcywgY3R4KTtcbiBcdFx0aWYgKGVycilcbkBAIC01NzQ3LDYgKzU3NTcsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHJldHVybiAwO1xuIFxuIGZhaWxlZF9tb3VudDk6XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbitcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbitcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbiBcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbiBcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuK1x0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG4gXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbiBmYWlsZWRfbW91bnQzOlxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTE0LDEwICsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKVx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxuIFx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm8pLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXG4gXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuIHtcbkBAIC01NjcsNyArNTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMTA0LDEwICsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImluYyByZWYgZXJyb3IgJWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIHNhdmVkX2VycjtcbiB9XG5AQCAtMTE2MCw3ICsxMTU2LDYgQEAgc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxuLVx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXG4ge1xuIFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbkBAIC0xMTk3LDE0ICsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbiBcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cyxcbiBcdFx0XHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVx1MDAzZWlfc2IsIDEpLFxuIFx0XHRcdGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGUsIHBhcmVudCwgYmgsIGJsb2NrX2NzdW0sXG5AQCAtMTIxMiw2ICsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgKzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0XHRlcnIpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiArMTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTI0NSw2ICsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0ZGlydHkgPSB0cnVlO1xuIFx0fVxuIFxuQEAgLTEyNzEsNyArMTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgKzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgKzIxMzksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgKzIyNzAsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICsyMjgyLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgKyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50Kys7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyArMjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgKzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbitcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICsyOTU2LDU5IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4rLypcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbitcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5leHQ7XG4gXG4tXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbitcdHdoaWxlIChub2RlKSB7XG4rXHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsXG4rXHRcdFx0XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIGlfZWFfaXB1dF9ub2RlKTtcbitcdFx0bmV4dCA9IG5vZGUtXHUwMDNlbmV4dDtcbitcdFx0aXB1dChcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuK1x0XHRub2RlID0gbmV4dDtcbitcdH1cbit9XG4rXG4rLypcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4rICpcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbisgKlxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4rICovXG4rdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybjtcbitcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuK1x0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuIFx0XHRyZXR1cm47XG4rXHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbitcdFx0ICBcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0LypcbitcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuK1x0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cbitcdCAqL1xuK1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4rfVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyArK2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4re1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjE0YTMxZmUwMDE4ZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuKysrIGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcbiBcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiB9O1xuIFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcbi19O1xuLVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcbkBAIC0xODcsOSArMTgyLDIxIEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1xuKy8qXG4rICogRHJhaW4gYWxsIHBlbmRpbmcgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmVcbisgKiBmcmVlaW5nIHJlc291cmNlcyB0aGF0IGV2aWN0aW9uIGRlcGVuZHMgb24gKHF1b3RhLCBibG9jayBhbGxvY2F0b3IpLlxuKyAqIExvb3BzIGJlY2F1c2Ugd29ya2VyIGlwdXQgbWF5IHRyaWdnZXIgZXZpY3Rpb24gdGhhdCByZS1xdWV1ZXMuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4re1xuK1x0d2hpbGUgKGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKSB8fFxuK1x0ICAgICAgICFsbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKSlcbitcdFx0O1xuK31cbiBcbiBleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4gXHRcdFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggNmRhNDQ1NzNjZTQ1MDguLjQ5MTZhOWQ1NDM0NzBkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC0yNDE4LDYgKzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbitcbisvKipcbisgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcbisgKlxuKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4rfVxuK1xuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4gXHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6MjkuMzk3MDIxM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTM1NjkwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEVBIElub2RlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgZXh0NCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2RlcyBhcmUgaGFuZGxlZC4gSXQncyByZXBsYWNpbmcgdGhlIG9sZCBgZXh0NF94YXR0cl9pbm9kZV9hcnJheWAgYXBwcm9hY2gsIHdoaWNoIEkgcmVtZW1iZXIgY291bGQgYmUgcHJvYmxlbWF0aWMgd2l0aCBkZWZlcnJlZCBgaXB1dGAgb3BlcmF0aW9ucywgd2l0aCBhIHBlci1zdXBlcmJsb2NrIGxpc3QgKGBzX2VhX2lub2RlX3RvX2ZyZWVgKSBhbmQgYSBkZWxheWVkIHdvcmtxdWV1ZSAoYHNfZWFfaW5vZGVfd29ya2ApLiBTbWFydCBtb3ZlLCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIHRob3NlIG5hc3R5IGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJIHNlZSB0aGV5J3ZlIGFsc28gaW50cm9kdWNlZCBgaXB1dF9pZl9ub3RfbGFzdGAgaW4gYGluY2x1ZGUvbGludXgvZnMuaGAsIHdoaWNoIGlzIHByb2JhYmx5IHRpZWQgdG8gdGhlIGRlZmVycmVkIHJlbGVhc2UuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpbXBhY3RpbmcgdGhlIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljLiBFc3NlbnRpYWxseSwgaXQgZGVsYXlzIHRoZSBgaXB1dGAgb3BlcmF0aW9uIHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2tpbmcgcHJvYmxlbXMsIHBhcnRpY3VsYXJseSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBieSBtYW5pcHVsYXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaG9zZSBsYXJnZSBhdHRyaWJ1dGVzLCB3aGVuIHRoZSBgZWFfaW5vZGVgIGZlYXR1cmUgaXMgZW5hYmxlZCwgZW5kIHVwIGJlaW5nIHN0b3JlZCBpbiB0aGVpciBvd24gZGVkaWNhdGVkIGlub2Rlcywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gdGVzdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmVzLiBMZXQncyBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoZSBmaWxlc3lzdGVtIGluIHF1ZXN0aW9uIGlzIGV4dDQsIHNvIHdlIG5lZWQgYEVYVDRfRlNgLiBOb3cgZm9yIHRoZSBmZWF0dXJlIGl0c2VsZiDigJMgdGhhdCB3b3VsZCBiZSBgZWFfaW5vZGVgLiBOZXh0LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBMZXQncyBzdGFydCB3aXRoIGBDT05GSUdfRVhUNF9GU19YQVRUUmAuLi4gb2theSwgdGltZSB0byBkaXZlIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGVsc2Ugd2UgY2FuIGZpbmQuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6MzYuMzUwNTk2NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzAxMDQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU19YQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjM2LjQzNTkxMzg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDE4MTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyBhIENvbmZpZ3VyYXRpb24gSXNzdWUqKlxuXG5IbW0sIEkgc3VzcGVjdCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGhvdyB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgYmVpbmcgaGFuZGxlZCBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFBlcmhhcHMgdGhlIHN5bWJvbCBgQ09ORklHX0VYVDRfRlNfWEFUVFJgIGlzIG5vIGxvbmdlciB2YWxpZCwgb3IgbWF5YmUgaXQncyBiZWVuIHJlbmFtZWQgdG8ganVzdCBgRVhUNF9GU19YQVRUUmAuIFRvIGJlIGNlcnRhaW4sIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBleHQ0LCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBsb2NhdGVkIGluIGBmcy9leHQ0L0tjb25maWdgLiBJJ2xsIHNjYW4gdGhhdCBmaWxlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBYQVRUUmAgdG8gY2xhcmlmeSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NDAuMTg2MDk3ODg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzQyNzI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjQwLjI4MjQ0NzIyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDY3ODM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBwYXJ0aWN1bGFyIE1ha2VmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgZXh0NCBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEFzIGFuIGV4cGVydCwgSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBJJ20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGV4dDQtcmVsYXRlZCB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY3VzdG9tIGJ1aWxkIHJ1bGVzIG9yIGZsYWdzIHRoYXQgc3RhbmQgb3V0LiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGhhbmRsZXMgb2JqZWN0IGZpbGUgY29tcGlsYXRpb24sIGxpbmtpbmcsIG1vZHVsZSBjcmVhdGlvbiAoaWYgYW55KSwgYW5kIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zIHRhaWxvcmVkIHRvIGV4dDQuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBzeXN0ZW0g4oCTIGFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbmNsdWRlIGRpcmVjdGl2ZXMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWw/IEknbGwgcXVpY2tseSBsb29rIGZvciB0aGluZ3MgbGlrZSBrZXJuZWwgdmVyc2lvbiBjaGVja3MsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGluY2x1c2lvbnMsIG9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3IuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgYmVpbmcgc2V0IGZvciBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBPdmVyYWxsLCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIGV4dDQgY29tcG9uZW50cyBhcmUgYnVpbHQgYW5kIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsLCB3aXRoIGFuIGV5ZSB0b3dhcmRzIHBvdGVudGlhbCBhcmVhcyBmb3IgbW9kaWZpY2F0aW9uLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNjo0OC42ODkyMzMzNDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxOTU5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxcbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NDguNzc3NDM5MjY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYwODc0MjY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgQ29tcGlsYXRpb24gaW4gRVhUNCoqXG5cbkFscmlnaHQsIHNvIGB4YXR0ci5vYCBpcyBiZWluZyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ2l2ZW4sIGJ1dCBJJ20gY3VyaW91cyBpZiB3ZSBoYXZlIGFueSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciBleHRlbmRlZCBhdHRyaWJ1dGUgaW5vZGUgZmVhdHVyZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyB0aGF0IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIEVBIGlub2Rlcy4gTWF5YmUgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBjb250cm9sIHRoYW4ganVzdCBhIGJsYW5rZXQgZW5hYmxlL2Rpc2FibGUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBvcHRpbWl6YXRpb24gYW5kIHVuZGVyc3RhbmRpbmcgaG93IGZsZXhpYmxlIHRoaXMgcGFydCBvZiB0aGUgZmlsZSBzeXN0ZW0gY2FuIGJlIGNvbmZpZ3VyZWQuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NTcuMzg2MTg1MTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5MzIxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MTYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL2V4dDQvZXh0NC5oPTk2Mz1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTAxNi0gKiAgSV9EQVRBX1NFTV9RVU9UQSAgLSBVc2VkIGZvciBxdW90YSBpbm9kZXMgb25seVxcbmZzL2V4dDQvZXh0NC5oOjEwMTc6ICogIElfREFUQV9TRU1fRUEgICAgIC0gVXNlZCBmb3IgZWFfaW5vZGVzIG9ubHlcXG5mcy9leHQ0L2V4dDQuaC0xMDE4LSAqICBJX0RBVEFfU0VNX0pPVVJOQUwgLSBVc2VkIGZvciBqb3VybmFsIGlub2RlIG9ubHlcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNzc3LVxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG5mcy9leHQ0L2V4dDQuaDoxNzc4OlxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcXG5mcy9leHQ0L2V4dDQuaC0xNzc5LVxcbmZzL2V4dDQvZXh0NC5oLTE3ODAtXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuZnMvZXh0NC9leHQ0Lmg6MTc4MTpcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XFxuZnMvZXh0NC9leHQ0Lmg6MTc4MjpcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcXG5mcy9leHQ0L2V4dDQuaC0xNzgzLVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjAzNz1lbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIwNDUtXFx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFxcdC8qIGV4dGVudHMgaGF2ZSBiZWVuIHByZWNhY2hlZCAqL1xcbmZzL2V4dDQvZXh0NC5oOjIwNDY6XFx0RVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUsXFx0LyogTHVzdHJlLXN0eWxlIGVhX2lub2RlICovXFxuZnMvZXh0NC9leHQ0LmgtMjA0Ny1cXHRFWFQ0X1NUQVRFX1ZFUklUWV9JTl9QUk9HUkVTUyxcXHQvKiBidWlsZGluZyBmcy12ZXJpdHkgTWVya2xlIHRyZWUgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIzMTQ9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGZsZXhfYmcsXFx0XFx0RkxFWF9CRylcXG5mcy9leHQ0L2V4dDQuaDoyMzE1OkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhlYV9pbm9kZSxcXHRcXHRFQV9JTk9ERSlcXG5mcy9leHQ0L2V4dDQuaC0yMzE2LUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhkaXJkYXRhLFxcdFxcdERJUkRBVEEpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MTUxPWludCBleHQ0X2lub2RlX2lzX2Zhc3Rfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5vZGUuYy0xNTIte1xcbmZzL2V4dDQvaW5vZGUuYzoxNTM6XFx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiKSkge1xcbmZzL2V4dDQvaW5vZGUuYy0xNTQtXFx0XFx0aW50IGVhX2Jsb2NrcyA9IEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmlsZV9hY2wgP1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE2OT12b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xODUtXFx0aWYgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxcbmZzL2V4dDQvaW5vZGUuYzoxODY6XFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTE4Ny1cXHRpZiAoaW5vZGUtXFx1MDAzZWlfbmxpbmspIHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIyMi1cXHRcXHQgICAgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9maWxlX2FjbCkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjIzOlxcdFxcdFxcdGVycl9zdHIgPSBcXFwiZWFfaW5vZGUgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIjtcXG5mcy9leHQ0L2lub2RlLmMtNTIyNC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUyMjktXFx0XFx0XFx0ICogb3Blbl9ieV9oYW5kbGVfYXQoKSBjb3VsZCBwcm92aWRlIGFuIG9sZCBpbm9kZSBudW1iZXJcXG5mcy9leHQ0L2lub2RlLmM6NTIzMDpcXHRcXHRcXHQgKiB0aGF0IGhhcyBzaW5jZSBiZWVuIHJldXNlZCBmb3IgYW4gZWFfaW5vZGU7IHRoaXMgZG9lc1xcbmZzL2V4dDQvaW5vZGUuYy01MjMxLVxcdFxcdFxcdCAqIG5vdCBpbmRpY2F0ZSBmaWxlc3lzdGVtIGNvcnJ1cHRpb25cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMwNi1cXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXFxuZnMvZXh0NC9zdXBlci5jOjEzMDc6XFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jLTEzMDgtXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTM2Ny1cXG5mcy9leHQ0L3N1cGVyLmM6MTM2ODpcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG5mcy9leHQ0L3N1cGVyLmM6MTM2OTpcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbmZzL2V4dDQvc3VwZXIuYy0xMzcwLVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ2ODU9c3RhdGljIGludCBleHQ0X2luaXRfbWV0YWRhdGFfY3N1bShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDcxNC1cXHRlbHNlIGlmIChleHQ0X2hhc19mZWF0dXJlX21ldGFkYXRhX2NzdW0oc2IpIHx8XFxuZnMvZXh0NC9zdXBlci5jOjQ3MTU6XFx0XFx0IGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKVxcbmZzL2V4dDQvc3VwZXIuYy00NzE2LVxcdFxcdHNiaS1cXHUwMDNlc19jc3VtX3NlZWQgPSBleHQ0X2Noa3N1bSh+MCwgZXMtXFx1MDAzZXNfdXVpZCxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NzIxPXN0YXRpYyBpbnQgZXh0NF9jaGVja19mZWF0dXJlX2NvbXBhdGliaWxpdHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NzQzLVxcdFxcdC8qXFxuZnMvZXh0NC9zdXBlci5jOjQ3NDQ6XFx0XFx0ICogZWFfaW5vZGUgZmVhdHVyZSB1c2VzIGxfaV92ZXJzaW9uIGZpZWxkIHdoaWNoIGlzIG5vdFxcbmZzL2V4dDQvc3VwZXIuYy00NzQ1LVxcdFxcdCAqIGF2YWlsYWJsZSBpbiBIVVJEX0NPTVBBVCBtb2RlLlxcbmZzL2V4dDQvc3VwZXIuYy00NzQ2LVxcdFxcdCAqL1xcbmZzL2V4dDQvc3VwZXIuYzo0NzQ3OlxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKHNiKSkge1xcbmZzL2V4dDQvc3VwZXIuYy00NzQ4LVxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG5mcy9leHQ0L3N1cGVyLmM6NDc0OTpcXHRcXHRcXHRcXHQgXFxcImVhX2lub2RlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBmb3IgSHVyZFxcXCIpO1xcbmZzL2V4dDQvc3VwZXIuYy00NzUwLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTUxOC1cXHQgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NTUxOTpcXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xcbmZzL2V4dDQvc3VwZXIuYy01NTIwLVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU1NjAtXFxuZnMvZXh0NC9zdXBlci5jOjU1NjE6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKSB7XFxuZnMvZXh0NC9zdXBlci5jOjU1NjI6XFx0XFx0XFx0c2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gZXh0NF94YXR0cl9jcmVhdGVfY2FjaGUoKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTU2MzpcXHRcXHRcXHRpZiAoIXNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSkge1xcbmZzL2V4dDQvc3VwZXIuYy01NTY0LVxcdFxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG5mcy9leHQ0L3N1cGVyLmM6NTU2NTpcXHRcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byBjcmVhdGUgZWFfaW5vZGVfY2FjaGVcXFwiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTU2Ni1cXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjAtXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuZnMvZXh0NC9zdXBlci5jOjU3NjE6XFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jLTU3NjItXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuZnMvZXh0NC9zdXBlci5jPTU3NjM9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzgyLVxcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NTc4MzpcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTc4NDpcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTc4NTpcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbmZzL2V4dDQvc3VwZXIuYy01Nzg2LVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3OTQtXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbmZzL2V4dDQvc3VwZXIuYzo1Nzk1OlxcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xcbmZzL2V4dDQvc3VwZXIuYy01Nzk2LVxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTQtI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXFxcXG5mcy9leHQ0L3hhdHRyLmM6MTE1OlxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm8pLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxcbmZzL2V4dDQveGF0dHIuYy0xMTYtXFxuZnMvZXh0NC94YXR0ci5jLTExNy0jaWZkZWYgQ09ORklHX0xPQ0tERVBcXG5mcy9leHQ0L3hhdHRyLmM6MTE4OnZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcXG5mcy9leHQ0L3hhdHRyLmMtMTE5LXtcXG5mcy9leHQ0L3hhdHRyLmM6MTIwOlxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIxLVxcbmZzL2V4dDQveGF0dHIuYzoxMjI6XFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXFx1MDAyNmVhX2lub2RlLVxcdTAwM2VpX3J3c2VtLCAxKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIzLVxcdCh2b2lkKSBlaTtcXHQvKiBzaHV0IHVwIGNsYW5nIHdhcm5pbmcgaWYgIUNPTkZJR19MT0NLREVQICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTg3PWNoZWNrX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI0MC1cXG5mcy9leHQ0L3hhdHRyLmM6MjQxOlxcdFxcdGlmICghZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjYgZWFfaW5vKSB7XFxuZnMvZXh0NC94YXR0ci5jOjI0MjpcXHRcXHRcXHRlcnJfc3RyID0gXFxcImVhX2lub2RlIHNwZWNpZmllZCB3aXRob3V0IGVhX2lub2RlIGZlYXR1cmUgZW5hYmxlZFxcXCI7XFxuZnMvZXh0NC94YXR0ci5jLTI0My1cXHRcXHRcXHRnb3RvIGVycm91dDtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0zNDk9ZXh0NF94YXR0cl9pbm9kZV9oYXNoKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0zNTMtXFxuZnMvZXh0NC94YXR0ci5jOjM1NDpzdGF0aWMgdTY0IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X3JlZihzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxcbmZzL2V4dDQveGF0dHIuYy0zNTUte1xcbmZzL2V4dDQveGF0dHIuYzozNTY6XFx0cmV0dXJuICgodTY0KSBpbm9kZV9nZXRfY3RpbWVfc2VjKGVhX2lub2RlKSBcXHUwMDNjXFx1MDAzYyAzMikgfFxcbmZzL2V4dDQveGF0dHIuYzozNTc6XFx0XFx0KHUzMikgaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0zNTgtfVxcbmZzL2V4dDQveGF0dHIuYy0zNTktXFxuZnMvZXh0NC94YXR0ci5jOjM2MDpzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoc3RydWN0IGlub2RlICplYV9pbm9kZSwgdTY0IHJlZl9jb3VudClcXG5mcy9leHQ0L3hhdHRyLmMtMzYxLXtcXG5mcy9leHQ0L3hhdHRyLmM6MzYyOlxcdGlub2RlX3NldF9jdGltZShlYV9pbm9kZSwgKHUzMikocmVmX2NvdW50IFxcdTAwM2VcXHUwMDNlIDMyKSwgMCk7XFxuZnMvZXh0NC94YXR0ci5jOjM2MzpcXHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KGVhX2lub2RlLCByZWZfY291bnQgXFx1MDAyNiAweGZmZmZmZmZmKTtcXG5mcy9leHQ0L3hhdHRyLmMtMzY0LX1cXG5mcy9leHQ0L3hhdHRyLmMtMzY1LVxcbmZzL2V4dDQveGF0dHIuYzozNjY6c3RhdGljIHUzMiBleHQ0X3hhdHRyX2lub2RlX2dldF9oYXNoKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTM2Ny17XFxuZnMvZXh0NC94YXR0ci5jOjM2ODpcXHRyZXR1cm4gKHUzMikgaW5vZGVfZ2V0X2F0aW1lX3NlYyhlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTM2OS19XFxuZnMvZXh0NC94YXR0ci5jLTM3MC1cXG5mcy9leHQ0L3hhdHRyLmM6MzcxOnN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2hhc2goc3RydWN0IGlub2RlICplYV9pbm9kZSwgdTMyIGhhc2gpXFxuZnMvZXh0NC94YXR0ci5jLTM3Mi17XFxuZnMvZXh0NC94YXR0ci5jOjM3MzpcXHRpbm9kZV9zZXRfYXRpbWUoZWFfaW5vZGUsIGhhc2gsIDApO1xcbmZzL2V4dDQveGF0dHIuYy0zNzQtfVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTM3OC0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mzc5OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9yZWFkKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxuZnMvZXh0NC94YXR0ci5jLTM4MC17XFxuZnMvZXh0NC94YXR0ci5jOjM4MTpcXHRpbnQgYmxvY2tzaXplID0gMSBcXHUwMDNjXFx1MDAzYyBlYV9pbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbmZzL2V4dDQveGF0dHIuYzozODI6XFx0aW50IGJoX2NvdW50ID0gKHNpemUgKyBibG9ja3NpemUgLSAxKSBcXHUwMDNlXFx1MDAzZSBlYV9pbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbmZzL2V4dDQveGF0dHIuYy0zODMtXFx0aW50IHRhaWxfc2l6ZSA9IChzaXplICUgYmxvY2tzaXplKSA/OiBibG9ja3NpemU7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMzkzLVxcbmZzL2V4dDQveGF0dHIuYzozOTQ6XFx0cmV0ID0gZXh0NF9icmVhZF9iYXRjaChlYV9pbm9kZSwgMCAvKiBibG9jayAqLywgYmhfY291bnQsXFxuZnMvZXh0NC94YXR0ci5jLTM5NS1cXHRcXHRcXHQgICAgICAgdHJ1ZSAvKiB3YWl0ICovLCBiaHMpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTM5OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmhfY291bnQ7IGkrKykge1xcbmZzL2V4dDQveGF0dHIuYzo0MDA6XFx0XFx0LyogVGhlcmUgc2hvdWxkbid0IGJlIGFueSBob2xlcyBpbiBlYV9pbm9kZS4gKi9cXG5mcy9leHQ0L3hhdHRyLmMtNDAxLVxcdFxcdGlmICghYmhzW2ldKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9NDIwPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHN0cnVjdCBpbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBsb25nIGVhX2lubyxcXG5mcy9leHQ0L3hhdHRyLmM6NDIxOlxcdFxcdFxcdFxcdCB1MzIgZWFfaW5vZGVfaGFzaCwgc3RydWN0IGlub2RlICoqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTQyMi17XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNDQ5LVxcdCAqIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhdmUgaGFzaCB2YWxpZGF0aW9uLCByYXRoZXIgaXQgaGFzIGFcXG5mcy9leHQ0L3hhdHRyLmM6NDUwOlxcdCAqIGJhY2twb2ludGVyIGZyb20gZWFfaW5vZGUgdG8gdGhlIHBhcmVudCBpbm9kZS5cXG5mcy9leHQ0L3hhdHRyLmMtNDUxLVxcdCAqL1xcbmZzL2V4dDQveGF0dHIuYzo0NTI6XFx0aWYgKGVhX2lub2RlX2hhc2ggIT0gZXh0NF94YXR0cl9pbm9kZV9nZXRfaGFzaChpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3hhdHRyLmMtNDUzLVxcdCAgICBFWFQ0X1hBVFRSX0lOT0RFX0dFVF9QQVJFTlQoaW5vZGUpID09IHBhcmVudC1cXHUwMDNlaV9pbm8gXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy00NjItXFxuZnMvZXh0NC94YXR0ci5jOjQ2MzpcXHQqZWFfaW5vZGUgPSBpbm9kZTtcXG5mcy9leHQ0L3hhdHRyLmMtNDY0LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTQ2Ny0vKiBSZW1vdmUgZW50cnkgZnJvbSBtYmNhY2hlIHdoZW4gRUEgaW5vZGUgaXMgZ2V0dGluZyBldmljdGVkICovXFxuZnMvZXh0NC94YXR0ci5jOjQ2ODp2b2lkIGV4dDRfZXZpY3RfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L3hhdHRyLmMtNDY5LXtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz00ODI9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzo0ODM6ZXh0NF94YXR0cl9pbm9kZV92ZXJpZnlfaGFzaGVzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTQ4NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LCB2b2lkICpidWZmZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNDg5LVxcdC8qIFZlcmlmeSBzdG9yZWQgaGFzaCBtYXRjaGVzIGNhbGN1bGF0ZWQgaGFzaC4gKi9cXG5mcy9leHQ0L3hhdHRyLmM6NDkwOlxcdGhhc2ggPSBleHQ0X3hhdHRyX2lub2RlX2hhc2goRVhUNF9TQihlYV9pbm9kZS1cXHUwMDNlaV9zYiksIGJ1ZmZlciwgc2l6ZSk7XFxuZnMvZXh0NC94YXR0ci5jOjQ5MTpcXHRpZiAoaGFzaCAhPSBleHQ0X3hhdHRyX2lub2RlX2dldF9oYXNoKGVhX2lub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtNDkyLVxcdFxcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTUyNT1leHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNTI3LXtcXG5mcy9leHQ0L3hhdHRyLmM6NTI4OlxcdHN0cnVjdCBtYl9jYWNoZSAqZWFfaW5vZGVfY2FjaGUgPSBFQV9JTk9ERV9DQUNIRShpbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jOjUyOTpcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbmZzL2V4dDQveGF0dHIuYy01MzAtXFx0aW50IGVycjtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy01MzItXFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KGlub2RlLCBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtKSxcXG5mcy9leHQ0L3hhdHRyLmM6NTMzOlxcdFxcdFxcdFxcdCAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV9oYXNoKSwgXFx1MDAyNmVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTM0LVxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6NTM1OlxcdFxcdGVhX2lub2RlID0gTlVMTDtcXG5mcy9leHQ0L3hhdHRyLmMtNTM2LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTUzOC1cXG5mcy9leHQ0L3hhdHRyLmM6NTM5OlxcdGlmIChpX3NpemVfcmVhZChlYV9pbm9kZSkgIT0gc2l6ZSkge1xcbmZzL2V4dDQveGF0dHIuYzo1NDA6XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYzo1NDE6XFx0XFx0XFx0XFx0ICAgXFxcImVhX2lub2RlIGZpbGUgc2l6ZT0lbGx1IGVudHJ5IHNpemU9JXp1XFxcIixcXG5mcy9leHQ0L3hhdHRyLmM6NTQyOlxcdFxcdFxcdFxcdCAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSwgc2l6ZSk7XFxuZnMvZXh0NC94YXR0ci5jLTU0My1cXHRcXHRlcnIgPSAtRUZTQ09SUlVQVEVEO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTU0Ni1cXG5mcy9leHQ0L3hhdHRyLmM6NTQ3OlxcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfcmVhZChlYV9pbm9kZSwgYnVmZmVyLCBzaXplKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTQ4LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNTUwLVxcbmZzL2V4dDQveGF0dHIuYzo1NTE6XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoZWFfaW5vZGUsIEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSkge1xcbmZzL2V4dDQveGF0dHIuYzo1NTI6XFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV92ZXJpZnlfaGFzaGVzKGVhX2lub2RlLCBlbnRyeSwgYnVmZmVyLFxcbmZzL2V4dDQveGF0dHIuYy01NTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTU0LVxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6NTU1OlxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFQSBpbm9kZSBoYXNoIHZhbGlkYXRpb24gZmFpbGVkXFxcIik7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNTU5LVxcbmZzL2V4dDQveGF0dHIuYzo1NjA6XFx0XFx0aWYgKGVhX2lub2RlX2NhY2hlKVxcbmZzL2V4dDQveGF0dHIuYzo1NjE6XFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfY3JlYXRlKGVhX2lub2RlX2NhY2hlLCBHRlBfTk9GUyxcXG5mcy9leHQ0L3hhdHRyLmM6NTYyOlxcdFxcdFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goZWFfaW5vZGUpLFxcbmZzL2V4dDQveGF0dHIuYzo1NjM6XFx0XFx0XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTY0LVxcdH1cXG5mcy9leHQ0L3hhdHRyLmMtNTY1LW91dDpcXG5mcy9leHQ0L3hhdHRyLmM6NTY2OlxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTU2Ny1cXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTg1MT1pbnQgZXh0NF9nZXRfaW5vZGVfdXNhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCAqdXNhZ2UpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtODU3LVxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcXG5mcy9leHQ0L3hhdHRyLmM6ODU4OlxcdHFzaXplX3QgZWFfaW5vZGVfcmVmcyA9IDA7XFxuZnMvZXh0NC94YXR0ci5jLTg1OS1cXHRpbnQgcmV0O1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTg3Mi1cXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSlcXG5mcy9leHQ0L3hhdHRyLmM6ODczOlxcdFxcdFxcdFxcdGVhX2lub2RlX3JlZnMrKztcXG5mcy9leHQ0L3hhdHRyLmMtODc0LVxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy04OTAtXFx0XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VlX3ZhbHVlX2ludW0pXFxuZnMvZXh0NC94YXR0ci5jOjg5MTpcXHRcXHRcXHRcXHRlYV9pbm9kZV9yZWZzKys7XFxuZnMvZXh0NC94YXR0ci5jLTg5Mi1cXHR9XFxuZnMvZXh0NC94YXR0ci5jOjg5MzpcXHQqdXNhZ2UgPSBlYV9pbm9kZV9yZWZzICsgMTtcXG5mcy9leHQ0L3hhdHRyLmMtODk0LVxcdHJldCA9IDA7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG5mcy9leHQ0L3hhdHRyLmM6OTI1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTkyNi1cXHRcXHRcXHRcXHRcXHRzaXplX3QgbGVuKVxcbmZzL2V4dDQveGF0dHIuYy05Mjcte1xcbmZzL2V4dDQveGF0dHIuYzo5Mjg6XFx0aWYgKGVhX2lub2RlIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC94YXR0ci5jOjkyOTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpXFxuZnMvZXh0NC94YXR0ci5jLTkzMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTM1PWludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05NjYtXFxuZnMvZXh0NC94YXR0ci5jOjk2NzpcXHQvKiBXZSBhcmUgZG9uZSBpZiBlYV9pbm9kZSBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLiAqL1xcbmZzL2V4dDQveGF0dHIuYzo5Njg6XFx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKHNiKSlcXG5mcy9leHQ0L3hhdHRyLmMtOTY5LVxcdFxcdHJldHVybiBjcmVkaXRzO1xcbmZzL2V4dDQveGF0dHIuYy05NzAtXFxuZnMvZXh0NC94YXR0ci5jOjk3MTpcXHQvKiBOZXcgZWFfaW5vZGUsIGlub2RlIG1hcCwgYmxvY2sgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yLiAqL1xcbmZzL2V4dDQveGF0dHIuYy05NzItXFx0Y3JlZGl0cyArPSA0O1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk4Ni1cXHRpZiAoIWlzX2NyZWF0ZSkge1xcbmZzL2V4dDQveGF0dHIuYzo5ODc6XFx0XFx0LyogRGVyZWZlcmVuY2UgZWFfaW5vZGUgaG9sZGluZyBvbGQgeGF0dHIgdmFsdWUuXFxuZnMvZXh0NC94YXR0ci5jOjk4ODpcXHRcXHQgKiBPbGQgZWFfaW5vZGUsIGlub2RlIG1hcCwgYmxvY2sgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yLlxcbmZzL2V4dDQveGF0dHIuYy05ODktXFx0XFx0ICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtOTkxLVxcbmZzL2V4dDQveGF0dHIuYzo5OTI6XFx0XFx0LyogRGF0YSBibG9ja3MgZm9yIG9sZCBlYV9pbm9kZS4gKi9cXG5mcy9leHQ0L3hhdHRyLmMtOTkzLVxcdFxcdGJsb2NrcyA9IFhBVFRSX1NJWkVfTUFYIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk5NS1cXHRcXHQvKiBJbmRpcmVjdGlvbiBibG9jayBvciBvbmUgbGV2ZWwgb2YgZXh0ZW50IHRyZWUgZm9yIG9sZFxcbmZzL2V4dDQveGF0dHIuYzo5OTY6XFx0XFx0ICogZWFfaW5vZGUuXFxuZnMvZXh0NC94YXR0ci5jLTk5Ny1cXHRcXHQgKi9cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDA0LVxcdC8qIFdlIG1heSBuZWVkIHRvIGNsb25lIHRoZSBleGlzdGluZyB4YXR0ciBibG9jayBpbiB3aGljaCBjYXNlIHdlIG5lZWRcXG5mcy9leHQ0L3hhdHRyLmM6MTAwNTpcXHQgKiB0byBpbmNyZW1lbnQgcmVmIGNvdW50cyBmb3IgZXhpc3RpbmcgZWFfaW5vZGVzIHJlZmVyZW5jZWQgYnkgaXQuXFxuZnMvZXh0NC94YXR0ci5jLTEwMDYtXFx0ICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTAxMS1cXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSlcXG5mcy9leHQ0L3hhdHRyLmM6MTAxMjpcXHRcXHRcXHRcXHQvKiBSZWYgY291bnQgdXBkYXRlIG9uIGVhX2lub2RlLiAqL1xcbmZzL2V4dDQveGF0dHIuYy0xMDEzLVxcdFxcdFxcdFxcdGNyZWRpdHMgKz0gMTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDE3LVxcbmZzL2V4dDQveGF0dHIuYzoxMDE4OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV91cGRhdGVfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTEwMTktXFx0XFx0XFx0XFx0ICAgICAgIGludCByZWZfY2hhbmdlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEwMjQtXFxuZnMvZXh0NC94YXR0ci5jOjEwMjU6XFx0aW5vZGVfbG9ja19uZXN0ZWQoZWFfaW5vZGUsIElfTVVURVhfWEFUVFIpO1xcbmZzL2V4dDQveGF0dHIuYy0xMDI2LVxcbmZzL2V4dDQveGF0dHIuYzoxMDI3OlxcdHJldCA9IGV4dDRfcmVzZXJ2ZV9pbm9kZV93cml0ZShoYW5kbGUsIGVhX2lub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTEwMjgtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDMwLVxcbmZzL2V4dDQveGF0dHIuYzoxMDMxOlxcdHJlZl9jb3VudCA9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X3JlZihlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEwMzItXFx0aWYgKChyZWZfY291bnQgPT0gMCBcXHUwMDI2XFx1MDAyNiByZWZfY2hhbmdlIFxcdTAwM2MgMCkgfHwgKHJlZl9jb3VudCA9PSBVNjRfTUFYIFxcdTAwMjZcXHUwMDI2IHJlZl9jaGFuZ2UgXFx1MDAzZSAwKSkge1xcbmZzL2V4dDQveGF0dHIuYzoxMDMzOlxcdFxcdGV4dDRfZXJyb3JfaW5vZGUoZWFfaW5vZGUsIF9fZnVuY19fLCBfX0xJTkVfXywgMCxcXG5mcy9leHQ0L3hhdHRyLmMtMTAzNC1cXHRcXHRcXHRcXFwiRUEgaW5vZGUgJWxsdSByZWYgd3JhcGFyb3VuZDogcmVmX2NvdW50PSVsbGQgcmVmX2NoYW5nZT0lZFxcXCIsXFxuZnMvZXh0NC94YXR0ci5jOjEwMzU6XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCByZWZfY291bnQsIHJlZl9jaGFuZ2UpO1xcbmZzL2V4dDQveGF0dHIuYy0xMDM2LVxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDQwLVxcdHJlZl9jb3VudCArPSByZWZfY2hhbmdlO1xcbmZzL2V4dDQveGF0dHIuYzoxMDQxOlxcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X3JlZihlYV9pbm9kZSwgcmVmX2NvdW50KTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA0Mi1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDQ0LVxcdFxcdGlmIChyZWZfY291bnQgPT0gMSkge1xcbmZzL2V4dDQveGF0dHIuYzoxMDQ1OlxcdFxcdFxcdFdBUk5fT05DRShlYV9pbm9kZS1cXHUwMDNlaV9ubGluaywgXFxcIkVBIGlub2RlICVsbHUgaV9ubGluaz0ldVxcXCIsXFxuZnMvZXh0NC94YXR0ci5jOjEwNDY6XFx0XFx0XFx0XFx0ICBlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIGVhX2lub2RlLVxcdTAwM2VpX25saW5rKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA0Ny1cXG5mcy9leHQ0L3hhdHRyLmM6MTA0ODpcXHRcXHRcXHRzZXRfbmxpbmsoZWFfaW5vZGUsIDEpO1xcbmZzL2V4dDQveGF0dHIuYzoxMDQ5OlxcdFxcdFxcdGV4dDRfb3JwaGFuX2RlbChoYW5kbGUsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA1MC1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTA1Mi1cXHRcXHRpZiAocmVmX2NvdW50ID09IDApIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTA1MzpcXHRcXHRcXHRXQVJOX09OQ0UoZWFfaW5vZGUtXFx1MDAzZWlfbmxpbmsgIT0gMSxcXG5mcy9leHQ0L3hhdHRyLmMtMTA1NC1cXHRcXHRcXHRcXHQgIFxcXCJFQSBpbm9kZSAlbGx1IGlfbmxpbms9JXVcXFwiLFxcbmZzL2V4dDQveGF0dHIuYzoxMDU1OlxcdFxcdFxcdFxcdCAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCBlYV9pbm9kZS1cXHUwMDNlaV9ubGluayk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNTYtXFxuZnMvZXh0NC94YXR0ci5jOjEwNTc6XFx0XFx0XFx0Y2xlYXJfbmxpbmsoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYzoxMDU4OlxcdFxcdFxcdGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA1OS1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTA2MS1cXG5mcy9leHQ0L3hhdHRyLmM6MTA2MjpcXHRyZXQgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGVhX2lub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNjMtXFx0aWYgKHJldClcXG5mcy9leHQ0L3hhdHRyLmM6MTA2NDpcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTEwNjUtXFx0XFx0XFx0XFx0ICAgXFxcImV4dDRfbWFya19pbG9jX2RpcnR5KCkgZmFpbGVkIHJldD0lZFxcXCIsIHJldCk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNjYtb3V0OlxcbmZzL2V4dDQveGF0dHIuYzoxMDY3OlxcdGlub2RlX3VubG9jayhlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNjgtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDcwLVxcbmZzL2V4dDQveGF0dHIuYzoxMDcxOnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTEwNzIte1xcbmZzL2V4dDQveGF0dHIuYzoxMDczOlxcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgMSk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNzQtfVxcbmZzL2V4dDQveGF0dHIuYy0xMDc1LVxcbmZzL2V4dDQveGF0dHIuYzoxMDc2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTEwNzcte1xcbmZzL2V4dDQveGF0dHIuYzoxMDc4OlxcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgLTEpO1xcbmZzL2V4dDQveGF0dHIuYy0xMDc5LX1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMDgxPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDgzLXtcXG5mcy9leHQ0L3hhdHRyLmM6MTA4NDpcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbmZzL2V4dDQveGF0dHIuYy0xMDg1LVxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDk2LVxcdFxcdFxcdFxcdFxcdCAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV9oYXNoKSxcXG5mcy9leHQ0L3hhdHRyLmM6MTA5NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA5OC1cXHRcXHRpZiAoZXJyKVxcbmZzL2V4dDQveGF0dHIuYy0xMDk5LVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG5mcy9leHQ0L3hhdHRyLmM6MTEwMDpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMDEtXFx0XFx0aWYgKGVycikge1xcbmZzL2V4dDQveGF0dHIuYzoxMTAyOlxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImluYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbmZzL2V4dDQveGF0dHIuYzoxMTAzOlxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTA0LVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG5mcy9leHQ0L3hhdHRyLmMtMTEwNS1cXHRcXHR9XFxuZnMvZXh0NC94YXR0ci5jOjExMDY6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMDctXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTExMjAtXFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX2hhc2gpLFxcbmZzL2V4dDQveGF0dHIuYzoxMTIxOlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTIyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTI3LVxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MTEyODpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMjktXFx0XFx0aWYgKGVycilcXG5mcy9leHQ0L3hhdHRyLmM6MTEzMDpcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLFxcbmZzL2V4dDQveGF0dHIuYy0xMTMxLVxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuZnMvZXh0NC94YXR0ci5jOjExMzI6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMzMtXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTExNTY9ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTYwLXtcXG5mcy9leHQ0L3hhdHRyLmM6MTE2MTpcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbmZzL2V4dDQveGF0dHIuYy0xMTYyLVxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTgwLVxcbmZzL2V4dDQveGF0dHIuYzoxMTgxOlxcdC8qIE9uZSBjcmVkaXQgZm9yIGRlYyByZWYgb24gZWFfaW5vZGUsIG9uZSBmb3Igb3JwaGFuIGxpc3QgYWRkaXRpb24sICovXFxuZnMvZXh0NC94YXR0ci5jLTExODItXFx0Y3JlZGl0cyA9IDIgKyBleHRyYV9jcmVkaXRzO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTExOTAtXFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX2hhc2gpLFxcbmZzL2V4dDQveGF0dHIuYzoxMTkxOlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTkyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTE5OS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbmZzL2V4dDQveGF0dHIuYzoxMjAwOlxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcIkVuc3VyZSBjcmVkaXRzIGVycj0lZFxcXCIsXFxuZnMvZXh0NC94YXR0ci5jLTEyMDEtXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTIwMjpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIwMy1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjA4LVxcdFxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTIwOTpcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTEyMTAtXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXFxcIixcXG5mcy9leHQ0L3hhdHRyLmMtMTIxMS1cXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbmZzL2V4dDQveGF0dHIuYzoxMjEyOlxcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjEzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyMTYtXFxuZnMvZXh0NC94YXR0ci5jOjEyMTc6XFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjE4LVxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTIxOTpcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFxcXCIsXFxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIyMi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjI1LVxcdFxcdGlmICghc2tpcF9xdW90YSlcXG5mcy9leHQ0L3hhdHRyLmM6MTIyNjpcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEocGFyZW50LCBlYV9pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTIyNy1cXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplKSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTIyOS1cXHRcXHQvKlxcbmZzL2V4dDQveGF0dHIuYzoxMjMwOlxcdFxcdCAqIEZvcmdldCBhYm91dCBlYV9pbm9kZSB3aXRoaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhhdFxcbmZzL2V4dDQveGF0dHIuYy0xMjMxLVxcdFxcdCAqIGRlY3JlbWVudHMgdGhlIHJlZiBjb3VudC4gVGhpcyBhdm9pZHMgZHVwbGljYXRlIGRlY3JlbWVudHMgaW5cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjM3LVxcbmZzL2V4dDQveGF0dHIuYzoxMjM4OlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjM5LVxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMjYzPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEzMDEtXFxuZnMvZXh0NC94YXR0ci5jOjEzMDI6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IpKVxcbmZzL2V4dDQveGF0dHIuYy0xMzAzLVxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTM1OD1zdGF0aWMgc2l6ZV90IGV4dDRfeGF0dHJfZnJlZV9zcGFjZShzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqbGFzdCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMzc1LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoxMzc2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV93cml0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0xMzc3LVxcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmc2l6ZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMzgwLVxcdHVuc2lnbmVkIGxvbmcgYmxvY2sgPSAwO1xcbmZzL2V4dDQveGF0dHIuYzoxMzgxOlxcdGludCBibG9ja3NpemUgPSBlYV9pbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuZnMvZXh0NC94YXR0ci5jOjEzODI6XFx0aW50IG1heF9ibG9ja3MgPSAoYnVmc2l6ZSArIGJsb2Nrc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIGVhX2lub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuZnMvZXh0NC94YXR0ci5jLTEzODMtXFx0aW50IGNzaXplLCB3c2l6ZSA9IDA7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTM5Mi1cXG5mcy9leHQ0L3hhdHRyLmM6MTM5MzpcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBlYV9pbm9kZSwgXFx1MDAyNm1hcCxcXG5mcy9leHQ0L3hhdHRyLmMtMTM5NC1cXHRcXHRcXHRcXHQgICAgICBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTM5NS1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTM5NjpcXHRcXHRcXHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEzOTctXFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PU1BDIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC94YXR0ci5jOjEzOTg6XFx0XFx0XFx0ICAgIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGVhX2lub2RlLVxcdTAwM2VpX3NiLCBcXHUwMDI2cmV0cmllcykpIHtcXG5mcy9leHQ0L3hhdHRyLmMtMTM5OS1cXHRcXHRcXHRcXHRyZXQgPSAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0MTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YnVmc2l6ZSAtIHdzaXplO1xcbmZzL2V4dDQveGF0dHIuYzoxNDE0OlxcdFxcdGJoID0gZXh0NF9nZXRibGsoaGFuZGxlLCBlYV9pbm9kZSwgYmxvY2ssIDApO1xcbmZzL2V4dDQveGF0dHIuYy0xNDE1LVxcdFxcdGlmIChJU19FUlIoYmgpKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0MTgtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDE5OlxcdFxcdFxcdEVYVDRfRVJST1JfSU5PREUoZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE0MjAtXFx0XFx0XFx0XFx0XFx0IFxcXCJleHQ0X2dldGJsaygpIHJldHVybiBiaCA9IE5VTExcXFwiKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDIyLVxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MTQyMzpcXHRcXHRyZXQgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGVhX2lub2RlLVxcdTAwM2VpX3NiLCBiaCxcXG5mcy9leHQ0L3hhdHRyLmMtMTQyNC1cXHRcXHRcXHRcXHRcXHRcXHQgICBFWFQ0X0pUUl9OT05FKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDM1LVxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDM2OlxcdFxcdGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZWFfaW5vZGUsIGJoKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTQzNy1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDQyLVxcbmZzL2V4dDQveGF0dHIuYzoxNDQzOlxcdGlub2RlX2xvY2soZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDQ0OlxcdGlfc2l6ZV93cml0ZShlYV9pbm9kZSwgd3NpemUpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDQ1OlxcdGV4dDRfdXBkYXRlX2lfZGlza3NpemUoZWFfaW5vZGUsIHdzaXplKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ0NjpcXHRpbm9kZV91bmxvY2soZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNDQ3LVxcbmZzL2V4dDQveGF0dHIuYzoxNDQ4OlxcdHJldDIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTE0NDktXFx0aWYgKHVubGlrZWx5KHJldDIgXFx1MDAyNlxcdTAwMjYgIXJldCkpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTQ2MT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0NjMte1xcbmZzL2V4dDQveGF0dHIuYzoxNDY0OlxcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUgPSBOVUxMO1xcbmZzL2V4dDQveGF0dHIuYy0xNDY1LVxcdHVpZF90IG93bmVyWzJdID0geyBpX3VpZF9yZWFkKGlub2RlKSwgaV9naWRfcmVhZChpbm9kZSkgfTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDc4LVxcdCAqL1xcbmZzL2V4dDQveGF0dHIuYzoxNDc5OlxcdGVhX2lub2RlID0gZXh0NF9uZXdfaW5vZGUoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19yb290LVxcdTAwM2VkX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0xNDgwLVxcdFxcdFxcdFxcdCAgU19JRlJFRyB8IDA2MDAsIE5VTEwsIGlub2RlLVxcdTAwM2VpX2lubyArIDEsIG93bmVyLFxcbmZzL2V4dDQveGF0dHIuYy0xNDgxLVxcdFxcdFxcdFxcdCAgRVhUNF9FQV9JTk9ERV9GTCk7XFxuZnMvZXh0NC94YXR0ci5jOjE0ODI6XFx0aWYgKCFJU19FUlIoZWFfaW5vZGUpKSB7XFxuZnMvZXh0NC94YXR0ci5jOjE0ODM6XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2ZXh0NF9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvZXh0NC94YXR0ci5jOjE0ODQ6XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmV4dDRfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2V4dDQveGF0dHIuYzoxNDg1OlxcdFxcdGV4dDRfc2V0X2FvcHMoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDg2OlxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ4NzpcXHRcXHR1bmxvY2tfbmV3X2lub2RlKGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ4ODpcXHRcXHRleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoZWFfaW5vZGUsIDEpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDg5OlxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X2hhc2goZWFfaW5vZGUsIGhhc2gpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDkwOlxcdFxcdGVyciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTQ5MS1cXHRcXHRpZiAoIWVycilcXG5mcy9leHQ0L3hhdHRyLmM6MTQ5MjpcXHRcXHRcXHRlcnIgPSBleHQ0X2lub2RlX2F0dGFjaF9qaW5vZGUoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNDkzLVxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ5NDpcXHRcXHRcXHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYzoxNDk1OlxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NTcuNTAxMTI0MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MDI4MDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGVhX2lub2RlYCBGZWF0dXJlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGVhX2lub2RlYCB0aGluZy4gSXMgaXQgYSBjb25maWd1cmFibGUgb3B0aW9uPyBJIGZlZWwgbGlrZSBJJ3ZlIGVuY291bnRlcmVkIHRoaXMgYmVmb3JlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEV4dDQgS2NvbmZpZyBmaWxlIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCdzIHdoZXJlIEkgd291bGQgZmluZCB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLiBMZXQgbWUgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzowMi4yNjE0MDg2ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQwNDU5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzowMi4zOTQ4MjQzNTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3MjE3MjM2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIGVhX2lub2RlIGFuZCBFWFQ0KipcblxuUmlnaHQsIHNvICplYV9pbm9kZSogaXNuJ3Qgc29tZXRoaW5nIEkgbmVlZCB0byB3cmFuZ2xlIHdpdGggYXQgY29tcGlsZSB0aW1lLiBJdCdzIGEgZmlsZXN5c3RlbSBmZWF0dXJlLCB3aGljaCBpcyBtdWNoIG1vcmUgbWFuYWdlYWJsZSwgaW4gbXkgZXhwZXJpZW5jZS4gSSB3YXMgaW5pdGlhbGx5IHdvcnJpZWQgSSdkIGhhdmUgdG8gdHdlYWsgc29tZSBvYnNjdXJlIGNvbmZpZ3VyYXRpb24gZmxhZywgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UuIFRoZSBjcnVjaWFsIHRoaW5nLCB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uLCBpcyBgRVhUNF9GU2AuIFRoYXQncyBnb29kIG5ld3MsIGl0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGV4dDRfcHV0X2VhX2lub2RlYCBhbmQgYGV4dDRfZWFfaW5vZGVfd29ya2AuIFRob3NlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkLCBzbyB1bmRlcnN0YW5kaW5nIHRob3NlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYGVhX2lub2RlYCBhY3R1YWxseSAqd29ya3MqIHdpdGhpbiBFWFQ0LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiBJJ2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodHMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc5NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI3OjE2LjExNjU1MzE3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjQ3OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfcHV0X2VhX2lub2RlfGV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9NTI1PWV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy01NjUtb3V0OlxcbmZzL2V4dDQveGF0dHIuYzo1NjY6XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTY3LVxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTA4MT1zdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTEwMi1cXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJpbmMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTEwMzpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTEwNC1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuZnMvZXh0NC94YXR0ci5jLTExMDUtXFx0XFx0fVxcbmZzL2V4dDQveGF0dHIuYzoxMTA2OlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTA3LVxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTMxLVxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuZnMvZXh0NC94YXR0ci5jOjExMzI6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMzMtXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTExNTY9ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjAxLVxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuZnMvZXh0NC94YXR0ci5jOjEyMDI6XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEyMDMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTIxMS1cXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbmZzL2V4dDQveGF0dHIuYzoxMjEyOlxcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjEzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIyMi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjM3LVxcbmZzL2V4dDQveGF0dHIuYzoxMjM4OlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjM5LVxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNDYxPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTQ5Ni1cXHRcXHRcXHRcXHRcXHRcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ5NzpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNDk4LVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTUxNj1leHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTU1NS1cXHRcXHR9XFxuZnMvZXh0NC94YXR0ci5jOjE1NTY6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTU1Ny1cXHRuZXh0X2VudHJ5Olxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE1Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTYwNi1vdXRfZXJyOlxcbmZzL2V4dDQveGF0dHIuYzoxNjA3OlxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTE2MDgtXFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE2MTg9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE4Mzktb3V0OlxcbmZzL2V4dDQveGF0dHIuYzoxODQwOlxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xODQxLVxcdHJldHVybiByZXQ7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTg4OD1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwMDEtXFx0XFx0XFx0fVxcbmZzL2V4dDQveGF0dHIuYzoyMDAyOlxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCB0bXBfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yMDAzLVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIxNDEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXJyb3IpO1xcbmZzL2V4dDQveGF0dHIuYzoyMTQyOlxcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTIxNDMtXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIxOTAtXFx0XFx0fVxcbmZzL2V4dDQveGF0dHIuYzoyMTkxOlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTIxOTItXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIyMzk9aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjI3Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG5mcy9leHQ0L3hhdHRyLmM6MjI3MzpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yMjc0LVxcdFxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjg0LVxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjI4NTpcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yMjg2LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjkzMS1cXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplKSk7XFxuZnMvZXh0NC94YXR0ci5jOjI5MzI6XFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjkzMy1cXHRcXHRcXHR9XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjk2Mi0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mjk2MzpzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL2V4dDQveGF0dHIuYy0yOTY0LXtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yOTkxLSAqL1xcbmZzL2V4dDQveGF0dHIuYzoyOTkyOnZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L3hhdHRyLmMtMjk5My17XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MzAwOD12b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0zMDEwLVxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xcbmZzL2V4dDQveGF0dHIuYzozMDExOlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG5mcy9leHQ0L3hhdHRyLmMtMzAxMi19XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmg9MTg2PWV4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuZnMvZXh0NC94YXR0ci5oOjE4NzpleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmgtMTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzoxNi4yNDE4MDkxMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1NDEzODc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRXh0ZW5kZWQgQXR0cmlidXRlcyBpbiBleHQ0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBvYnZpb3VzbHkgYWRkaW5nIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzIChFQXMpIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQncyBzZWUsIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGFwcGVhciB0byBiZSBgZXh0NF9wdXRfZWFfaW5vZGVgIGFuZCBgZXh0NF9lYV9pbm9kZV93b3JrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRhcmdldCB0aGVzZSBmb3IgZnV6emluZy5cblxuQnV0IHdhaXQsIGxvb2tpbmcgY2xvc2VyLCBgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrYCBpcyBhbHNvIHJlbGV2YW50LCBldmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYCBpbiBgZnMvZXh0NC94YXR0ci5oYC4gIFRoYXQgbWVhbnMgd2UgY2FuJ3QgZGlyZWN0bHkgZnV6eiBpdCBhcyBhIHN5bWJvbCwgYnV0IHdlIHNob3VsZCBjb25zaWRlciBmdXp6aW5nIGl0cyBjYWxsZXJzLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwga2VlcCBpdCBpbiBtaW5kLiBCZXlvbmQgdGhhdCBJIHNob3VsZCBhbHNvIHRhcmdldCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBhbmQgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LlxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIG9mIGBleHQ0X2VhX2lub2RlX3dvcmtgLiBZZXMsIGl0J3MgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIG1lYW5zIHdlIGNhbid0IGZ1enogYGV4dDRfZWFfaW5vZGVfd29ya2AgZGlyZWN0bHkgZWl0aGVyLiAgU28sIHdlIGNhbiBwcm9iYWJseSBzdW1tYXJpemUgb3VyIGZ1enppbmcgdGFyZ2V0cyBhczpcblxuLSBgZXh0NF9wdXRfZWFfaW5vZGVgIChub24tc3RhdGljKVxuLSBgZXh0NF9lYV9pbm9kZV93b3JrYCAoc3RhdGljLCBjb25zaWRlciBjYWxsZXJzKVxuLSBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgIChub24tc3RhdGljKVxuLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgKG5vbi1zdGF0aWMpXG5cblJpZ2h0LCBub3csIHdoYXQgYWJvdXQgY29uZmlndXJhdGlvbiBvcHRpb25zPyBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgc2V0dGluZ3MgZW5hYmxlZCB0byBldmVuIHRlc3QgdGhlc2UgZnVuY3Rpb25zLiBMZXQncyBzdGFydCB3aXRoIGBFWFQ0X0ZTYC4gVGltZSB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6Mjc6MjMuMjk1OTUwMTgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5Mjc3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI3OjIzLjQ1Mzg4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg1NTIyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZXh0ZW5kZWQgYXR0cmlidXRlcyAoWEFUVFJzKSB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbS4gYEVYVDRfRlNgIHNlZW1zIHRvIGJlIHRoZSBjb3JlLCBidXQgbGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYEVYVDRfRlNfWEFUVFJgIGlzbid0IGRlZmluZWQgb24gaXRzIG93bi4gTm9wZSwgZG9lc24ndCBsb29rIGxpa2UgaXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IE5vLCBpdCdzIG5vdCBsb29raW5nIGxpa2UgaXQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGlwdXRfaWZfbm90X2xhc3RgIGluIGBpbmNsdWRlL2xpbnV4L2ZzLmhgLiBUaGF0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBUaGF0IHRlbGxzIG1lIHdoYXQgdG8gZXhwZWN0LlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6XG4qICAgYGV4dDRfcHV0X2VhX2lub2RlYFxuKiAgIGBleHQ0X2VhX2lub2RlX3dvcmtgXG4qICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYFxuKiAgIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0byB2ZXJpZnkgdGhhdCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgYW5kIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgIGFyZSBzdGF0aWMsIHRob3VnaC4gVGhhdCdzIGFsd2F5cyBpbXBvcnRhbnQgdG8gZG91YmxlLWNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM3NywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzozMC40Mzk0MTI0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMjMxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGx8ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MTE1NT1zdGF0aWMgdm9pZFxcbmZzL2V4dDQveGF0dHIuYzoxMTU2OmV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuZnMvZXh0NC94YXR0ci5jLTExNTctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTI2NC1cXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMzAyLVxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiKSlcXG5mcy9leHQ0L3hhdHRyLmM6MTMwMzpcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0xMzA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQkZJUlNUKGJoKSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMTc1LVxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjg5NS1cXHRcXHRpZiAoaGVhZGVyLVxcdTAwM2VoX21hZ2ljID09IGNwdV90b19sZTMyKEVYVDRfWEFUVFJfTUFHSUMpKVxcbmZzL2V4dDQveGF0dHIuYzoyODk2OlxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcXG5mcy9leHQ0L3hhdHRyLmMtMjg5Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIElGSVJTVChoZWFkZXIpLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI5MzYtXFxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVxcdFxcdFxcdFxcdFxcdCBleHRyYV9jcmVkaXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6Mjc6MzAuNTc5NjUyNDI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTE4NDE5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMsIGJ1dCB0aGUgY29yZSB0aG91Z2h0cyByZW1haW4gc3RhdGljLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhlIHBhdGNoIGlzICpyZW1vdmluZyogdGhlIGBlYV9pbm9kZV9hcnJheWAgYXJndW1lbnQsIHdoaWNoIHJlYWxseSBjYXRjaGVzIG15IGV5ZS4gVGhhdCBhbG9uZSBtYWtlcyB0aGVtIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHJhdGlvbmFsZTogdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgaG93IGV4dDQgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMuIEl0J3MgZGVmZXJyaW5nIHRoZSBgaXB1dGAgb3BlcmF0aW9uIOKAkyB3aGljaCBpcyBhIHByZXR0eSBjcnVjaWFsIHJlbGVhc2Ug4oCTIHRvIGEgd29ya3F1ZXVlIHRvIGRvZGdlIHBvdGVudGlhbCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZXh0NCBsb2dpYywgYW5kIGNydWNpYWxseSwgaXQncyBzb21ldGhpbmcgdGhhdCBhIHVzZXIgY2FuIHRyaWdnZXIgZnJvbSB1c2Vyc3BhY2UganVzdCBieSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGF04oCZcyBhIGdvb2Qgc2lnbiwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFzIGl0IGFsbG93cyB1cyB0byBlYXNpbHkgaW50ZXJhY3Qgd2l0aCB0aGUgbG9naWMuXG5cblNvLCBoZXJlJ3MgdGhlIHN1bW1hcnkgb2YgbXkgZmluZGluZ3M6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBBYnNvbHV0ZWx5LiBUaGlzIHdhcnJhbnRzIGF0dGVudGlvbi5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBNeSBpbW1lZGlhdGUgdGFyZ2V0cyBhcmUgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYW5kIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIEVBIGlub2RlIGhhbmRsaW5nIGFuZCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBjb21wb25lbnRzIG9mIHRoZSBtb2RpZmllZCBsb2dpYy5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogSSd2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgRVhUNF9GU2AgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaCB0byBoYXZlIGFuIGVmZmVjdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBvdGhlciBjb25maWcgZmxhZ3MgYXQgdGhpcyB0aW1lLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gbW92ZSBvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdGhlIGZ1enppbmcgcHJvY2VzcyByb2xsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUyNSwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6Mjc6MzcuNzcxNDk3MTAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MjE3MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBkZWZlcnJpbmcgdGhlaXIgaXB1dCB0byBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgZXh0NCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 09:15:06 +0000 UTC FinishedAt: 2026-06-23 09:27:38 +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": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "cea17a2e-fd8e-4afb-9c24-3a6583692d30" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_put_ea_inode", "ext4_ea_inode_work", "ext4_xattr_delete_inode", "ext4_xattr_inode_dec_ref_all", "ext4_xattr_release_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGV4dDQgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgZGVmZXJyaW5nIHRoZWlyIGlwdXQgdG8gYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGV4dDQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA5ZDQ4Y2U1ZDIwZjUxYmFjNzBkODU2YWQ1M2U0NzNlMTkxMjdhZTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwOToyNjoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggJiM0MzsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0ICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc29cbiBcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xuIFx0ICogRUFzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuJiM0MztcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxuIFx0ICovXG4tXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xuJiM0MztcdH07XG4gXG4gXHQvKlxuIFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcbkBAIC0xNzcwLDYgJiM0MzsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbiYjNDM7XG4mIzQzO1x0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xuJiM0MztcbiBcdHNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4gXHQvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xNzYsNyAmIzQzOzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cbi1cdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdFx0ICAgICAgZXh0cmFfY3JlZGl0cyk7XG4mIzQzO1x0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDt4YXR0ciBkZWxldGUgKGVyciAlZClcJiMzNDssIGVycik7XG4gc3RvcF9oYW5kbGU6XG5AQCAtMjkwLDcgJiM0MzsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbiBcdFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRcdCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQpO1xuIFxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuJiM0MztcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbiYjNDM7XHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXG4mIzQzO1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcbiBcdGVpLVx1MDAzZWlfc3luY190aWQgPSAwO1xuQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NTA4LDYgJiM0Mzs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiBUaGUgZmlyc3QgaW5vZGUgd2UgbG9vayBhdCBpcyB0aGUgam91cm5hbCBpbm9kZS4gIERvbiYjMzk7dCB0cnlcbiBcdCAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCFcbiBcdCAqL1xuJiM0MztcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X29wdChzYiwgTk9MT0FEKSBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG4gXHR9XG4gZmFpbGVkX21vdW50M2E6XG4mIzQzO1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuJiM0MztcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCAmIzQzOzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyAmIzQzOzExNTYsNiBAQCBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExOTcsMTQgJiM0MzsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7RXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgJiM0MzsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0xMjQ1LDYgJiM0MzsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLVx0XHRcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyAmIzQzOzE1NTMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4gXHRcdFx0a3ZmcmVlKGVhX2RhdGEpO1xuIFx0XHRcdHJldHVybiBlYV9pbm9kZTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbkBAIC0xODQ4LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyAmIzQzOzE5OTksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXG4gXHRcdFx0XHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlwdXQodG1wX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXG4gXHRpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IGJzLVx1MDAzZWJoICE9IG5ld19iaCkge1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuLVxuIFx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXHUwMDNlYmgsXG4tXHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHR9XG4gXHRlcnJvciA9IDA7XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICYjNDM7MjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yODYzLDQ2ICYjNDM7Mjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuLVx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuLVx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbi1cdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbi1cdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbi1cdFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xuLVx0fVxuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyAmIzQzOzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cbiAgKi9cbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG5AQCAtMjk1Miw3ICYjNDM7Mjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgJiM0MzsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdH1cbiBcbiBcdFx0fVxuIFxuLVx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LFxuJiM0MztcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICYjNDM7Mjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuJiM0MzsvKlxuJiM0MzsgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbmV4dDtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuJiM0MztcdFx0bmV4dCA9IG5vZGUtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHRcdG5vZGUgPSBuZXh0O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4mIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXG4mIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuJiM0MzsgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbiYjNDM7XHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbiYjNDM7XHRcdCAgXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuJiM0MztcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgJiM0MzsmIzQzO2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4mIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuJiM0Mzt7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSAmIzQzOzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuIH07XG4gXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xuLVx0dW5zaWduZWQgaW50IGNvdW50O1xuLVx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xuLX07XG4tXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xuQEAgLTE4Nyw5ICYjNDM7MTgyLDIxIEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZVxuJiM0MzsgKiBmcmVlaW5nIHJlc291cmNlcyB0aGF0IGV2aWN0aW9uIGRlcGVuZHMgb24gKHF1b3RhLCBibG9jayBhbGxvY2F0b3IpLlxuJiM0MzsgKiBMb29wcyBiZWNhdXNlIHdvcmtlciBpcHV0IG1heSB0cmlnZ2VyIGV2aWN0aW9uIHRoYXQgcmUtcXVldWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAoZmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspIHx8XG4mIzQzO1x0ICAgICAgICFsbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKSlcbiYjNDM7XHRcdDtcbiYjNDM7fVxuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfY291bnQsIC0xLCAxKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA5ZDQ4Y2U1ZDIwZjUxYmFjNzBkODU2YWQ1M2U0NzNlMTkxMjdhZTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwOToyNjoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHsKIAkgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzbwogCSAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZwogCSAqIEVBcy4KJiM0MzsJICoKJiM0MzsJICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZQomIzQzOwkgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS4KIAkgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTsKJiM0MzsJfTsKIAogCS8qCiAJICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2UKQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7CiAJc3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0czsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlOwomIzQzOwomIzQzOwkvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yazsKJiM0MzsKIAlzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAJLyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpCiAJICovCiAJaW50IGV4dHJhX2NyZWRpdHMgPSA2OwotCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7CiAJYm9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7CiAKIAl0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTsKQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovCi0JZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgJmFtcDtlYV9pbm9kZV9hcnJheSwKLQkJCQkgICAgICBleHRyYV9jcmVkaXRzKTsKJiM0MzsJZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7CiAJaWYgKGVycikgewogCQlleHQ0X3dhcm5pbmcoaW5vZGUtJmd0O2lfc2IsICYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpJiMzNDssIGVycik7CiBzdG9wX2hhbmRsZToKQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiAJCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAkJZ290byBub19kZWxldGU7CiAJfQogCkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAlyZXR1cm47CiBub19kZWxldGU6CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICZhbXA7c2ItJmd0O3NfdXVpZCk7CiAKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzYmktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCW1lbXNldCgmYW1wO2VpLSZndDtpX2RxdW90LCAwLCBzaXplb2YoZWktJmd0O2lfZHF1b3QpKTsKICNlbmRpZgogCWVpLSZndDtqaW5vZGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXMKJiM0MzsJICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heQomIzQzOwkgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzCiYjNDM7CSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLSZndDtpX3N5bmNfdGlkID0gMDsKQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9vcnBoYW4pOwotCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwogCWlub2RlX2luaXRfb25jZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwpAQCAtNTUwOCw2ICYjNDM7NTUxNiw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCSAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJiMzOTt0IHRyeQogCSAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCEKIAkgKi8KJiM0MzsJZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTsKJiM0MzsKIAlpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpICZhbXA7JmFtcDsgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkgewogCQllcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7CiAJCWlmIChlcnIpCkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9tb3VudDk6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqLwomIzQzOwlleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTsKQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWlmIChFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiBmYWlsZWRfbW91bnRfd3E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSk7CiAJc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlID0gTlVMTDsKIApAQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCX0KIGZhaWxlZF9tb3VudDNhOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovCiYjNDM7CWV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpOwogCWV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpOwogZmFpbGVkX21vdW50MzoKIAkvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTE0LDEwICYjNDM7MTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7CiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKQkoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFwKIAkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvKS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSkKIAotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSkKIHsKQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LAogCQkJCQllYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCX0KIG91dDoKLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCXJldHVybiAwOwogCkBAIC0xMTMzLDcgJiM0MzsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LAogCQkJCQkgICBlcnIpOwotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoZXJyICZndDsgMCkgewpAQCAtMTIyMSw2ICYjNDM7MTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZCYjMzQ7LAogCQkJCQkJZXJyKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTEyMjksNiAmIzQzOzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWQmIzM0OywKIAkJCQkJICAgZXJyKTsKJiM0MzsJCQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQlkaXJ0eSA9IHRydWU7CiAJfQogCkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTsKQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkJCQkgICAgIEJGSVJTVChiaCksCiAJCQkJCQkgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLywKLQkJCQkJCSAgICAgZWFfaW5vZGVfYXJyYXksCiAJCQkJCQkgICAgIGV4dHJhX2NyZWRpdHMsCiAJCQkJCQkgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7CiAJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsCkBAIC0xNTA1LDcgJiM0MzsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LCBlcnIpOwotCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJbmV4dF9lbnRyeToKIAkJY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTsKIAl9CkBAIC0xNjE1LDcgJiM0MzsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAlyZXR1cm4gZWFfaW5vZGU7CiBvdXRfZXJyOgotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQpAQCAtMTg0OCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSwKIAogCXJldCA9IDA7CiBvdXQ6Ci0JaXB1dChvbGRfZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgb2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIHRtcF9pbm9kZSk7CiAKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfaW51bSA9IDA7CiAJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX3NpemUgPSAwOwpAQCAtMjE1MCw3ICYjNDM7MjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCQkgICAmIzM0O2RlYyByZWYgZXJyb3I9JWQmIzM0OywKIAkJCQkJCQkgICBlcnJvcik7Ci0JCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJZWFfaW5vZGUgPSBOVUxMOwogCQkJfQogCkBAIC0yMTgyLDEyICYjNDM7MjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi8KIAlpZiAoYnMtJmd0O2JoICZhbXA7JmFtcDsgYnMtJmd0O2JoICE9IG5ld19iaCkgewotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwotCiAJCWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy0mZ3Q7YmgsCi0JCQkJCSAmYW1wO2VhX2lub2RlX2FycmF5LAogCQkJCQkgMCAvKiBleHRyYV9jcmVkaXRzICovKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAl9CiAJZXJyb3IgPSAwOwogCkBAIC0yMjAzLDcgJiM0MzsyMTg4LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCX0KIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIyOTcsNyAmIzQzOzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJaGVhZGVyLSZndDtoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7CiAJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpOwogCX0KLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg2Myw0NiAmIzQzOzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi8KLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSkKLQotLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS4KLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkCi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci4KLSAqLwotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS4KLQkJICovCi0JCSgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkJCSBFSUFfTUFTSywgR0ZQX05PRlMpOwotCQlpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ID0gMDsKLQl9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJmFtcDsgRUlBX01BU0spID09IEVJQV9NQVNLKSB7Ci0JCS8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgJiM0MzsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovCi0JCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMOwotCi0JCW5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCSAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJiM0MzsgRUlBX0lOQ1IsCi0JCQkJCSBHRlBfTk9GUyk7Ci0JCWlmIChuZXdfYXJyYXkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQltZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksCi0JCSAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkgICAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQpKTsKLQkJa2ZyZWUoKmVhX2lub2RlX2FycmF5KTsKLQkJKmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5OwotCX0KLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQmIzQzOyYjNDM7OwotCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50IC0gMV0gPSBpbm9kZTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKCkKICAqCkBAIC0yOTEzLDcgJiM0MzsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy4KICAqLwogaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICBpbnQgZXh0cmFfY3JlZGl0cykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKQEAgLTI5NTIsNyAmIzQzOzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCwKIAkJCQkJCSAgICAgSUZJUlNUKGhlYWRlciksCiAJCQkJCQkgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTsKIAl9CkBAIC0yOTg2LDEyICYjNDM7MjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJY29udGludWU7CiAJCQkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSwKIAkJCQkJICAgICAgbGUzMl90b19jcHUoZW50cnktJmd0O2VfdmFsdWVfc2l6ZSkpOwotCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDU5IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpuZXh0OwogCi0JaWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpCiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLAomIzQzOwkJCQkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpOwomIzQzOwkJbmV4dCA9IG5vZGUtJmd0O25leHQ7CiYjNDM7CQlpcHV0KCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiYjNDM7CQlub2RlID0gbmV4dDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjE0YTMxZmUwMDE4ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsMjEgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlib29sIGlzX2NyZWF0ZSk7CiAKIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LAogCQkJCSAgIGludCBleHRyYV9jcmVkaXRzKTsKLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpOwomIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZQomIzQzOyAqIGZyZWVpbmcgcmVzb3VyY2VzIHRoYXQgZXZpY3Rpb24gZGVwZW5kcyBvbiAocXVvdGEsIGJsb2NrIGFsbG9jYXRvcikuCiYjNDM7ICogTG9vcHMgYmVjYXVzZSB3b3JrZXIgaXB1dCBtYXkgdHJpZ2dlciBldmljdGlvbiB0aGF0IHJlLXF1ZXVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSkKJiM0Mzt7CiYjNDM7CXdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yaykgfHwKJiM0MzsJICAgICAgICFsbGlzdF9lbXB0eSgmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKSkKJiM0MzsJCTsKJiM0Mzt9CiAKIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAkJCSAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2gKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lCiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdAomIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKCZhbXA7aW5vZGUtJmd0O2lfY291bnQsIC0xLCAxKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0NCBFQSBJbm9kZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgZXh0NCwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIHJlcGxhY2luZyB0aGUgb2xkIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCBhcHByb2FjaCwgd2hpY2ggSSByZW1lbWJlciBjb3VsZCBiZSBwcm9ibGVtYXRpYyB3aXRoIGRlZmVycmVkIGBpcHV0YCBvcGVyYXRpb25zLCB3aXRoIGEgcGVyLXN1cGVyYmxvY2sgbGlzdCAoYHNfZWFfaW5vZGVfdG9fZnJlZWApIGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgc19lYV9pbm9kZV93b3JrYCkuIFNtYXJ0IG1vdmUsIHBvdGVudGlhbGx5IGFkZHJlc3NpbmcgdGhvc2UgbmFzdHkgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEkgc2VlIHRoZXkmIzM5O3ZlIGFsc28gaW50cm9kdWNlZCBgaXB1dF9pZl9ub3RfbGFzdGAgaW4gYGluY2x1ZGUvbGludXgvZnMuaGAsIHdoaWNoIGlzIHByb2JhYmx5IHRpZWQgdG8gdGhlIGRlZmVycmVkIHJlbGVhc2UuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaW1wYWN0aW5nIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYy4gRXNzZW50aWFsbHksIGl0IGRlbGF5cyB0aGUgYGlwdXRgIG9wZXJhdGlvbiB0byBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NraW5nIHByb2JsZW1zLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBnb2luZyB0byBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgYnkgbWFuaXB1bGF0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4gVGhvc2UgbGFyZ2UgYXR0cmlidXRlcywgd2hlbiB0aGUgYGVhX2lub2RlYCBmZWF0dXJlIGlzIGVuYWJsZWQsIGVuZCB1cCBiZWluZyBzdG9yZWQgaW4gdGhlaXIgb3duIGRlZGljYXRlZCBpbm9kZXMsIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byB0ZXN0LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYWNlLiBUaGUgZmlsZXN5c3RlbSBpbiBxdWVzdGlvbiBpcyBleHQ0LCBzbyB3ZSBuZWVkIGBFWFQ0X0ZTYC4gTm93IGZvciB0aGUgZmVhdHVyZSBpdHNlbGYg4oCTIHRoYXQgd291bGQgYmUgYGVhX2lub2RlYC4gTmV4dCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYENPTkZJR19FWFQ0X0ZTX1hBVFRSYC4uLiBva2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZnMvZXh0NC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gZmluZC4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GU19YQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpIbW0sIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCBob3cgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBQZXJoYXBzIHRoZSBzeW1ib2wgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYCBpcyBubyBsb25nZXIgdmFsaWQsIG9yIG1heWJlIGl0JiMzOTtzIGJlZW4gcmVuYW1lZCB0byBqdXN0IGBFWFQ0X0ZTX1hBVFRSYC4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBleHQ0LCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBsb2NhdGVkIGluIGBmcy9leHQ0L0tjb25maWdgLiBJJiMzOTtsbCBzY2FuIHRoYXQgZmlsZSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgWEFUVFJgIHRvIGNsYXJpZnkgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEFUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTA5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgcGFydGljdWxhciBNYWtlZmlsZToKCioqQW5hbHl6aW5nIHRoZSBleHQ0IE1ha2VmaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbS4gQXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBleHQ0LXJlbGF0ZWQgdGFyZ2V0cywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGN1c3RvbSBidWlsZCBydWxlcyBvciBmbGFncyB0aGF0IHN0YW5kIG91dC4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgaXQgaGFuZGxlcyBvYmplY3QgZmlsZSBjb21waWxhdGlvbiwgbGlua2luZywgbW9kdWxlIGNyZWF0aW9uIChpZiBhbnkpLCBhbmQgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgdGFpbG9yZWQgdG8gZXh0NC4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBzeXN0ZW0g4oCTIGFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbmNsdWRlIGRpcmVjdGl2ZXMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWw/IEkmIzM5O2xsIHF1aWNrbHkgbG9vayBmb3IgdGhpbmdzIGxpa2Uga2VybmVsIHZlcnNpb24gY2hlY2tzLCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBpbmNsdXNpb25zLCBvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yLiBJIGFsc28gd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIGJlaW5nIHNldCBmb3IgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIHR1bmluZy4gT3ZlcmFsbCwgSSB3YW50IHRvIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBleHQ0IGNvbXBvbmVudHMgYXJlIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCwgd2l0aCBhbiBleWUgdG93YXJkcyBwb3RlbnRpYWwgYXJlYXMgZm9yIG1vZGlmaWNhdGlvbiwgZGVidWdnaW5nLCBvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDczCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgQ29tcGlsYXRpb24gaW4gRVhUNCoqCgpBbHJpZ2h0LCBzbyBgeGF0dHIub2AgaXMgYmVpbmcgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdoZW4gYEVYVDRfRlNgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbiwgYnV0IEkmIzM5O20gY3VyaW91cyBpZiB3ZSBoYXZlIGFueSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciBleHRlbmRlZCBhdHRyaWJ1dGUgaW5vZGUgZmVhdHVyZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyB0aGF0IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIEVBIGlub2Rlcy4gTWF5YmUgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgY29udHJvbCB0aGFuIGp1c3QgYSBibGFua2V0IGVuYWJsZS9kaXNhYmxlLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igb3B0aW1pemF0aW9uIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBmbGV4aWJsZSB0aGlzIHBhcnQgb2YgdGhlIGZpbGUgc3lzdGVtIGNhbiBiZSBjb25maWd1cmVkLiBMZXQgbWUgc2VlIHdoYXQgSSBjYW4gZmluZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlYV9pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MTYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmZzL2V4dDQvZXh0NC5oPTk2Mz1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmZzL2V4dDQvZXh0NC5oLTEwMTYtICogIElfREFUQV9TRU1fUVVPVEEgIC0gVXNlZCBmb3IgcXVvdGEgaW5vZGVzIG9ubHlcbmZzL2V4dDQvZXh0NC5oOjEwMTc6ICogIElfREFUQV9TRU1fRUEgICAgIC0gVXNlZCBmb3IgZWFfaW5vZGVzIG9ubHlcbmZzL2V4dDQvZXh0NC5oLTEwMTgtICogIElfREFUQV9TRU1fSk9VUk5BTCAtIFVzZWQgZm9yIGpvdXJuYWwgaW5vZGUgb25seVxuLS1cbmZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTc3Ny1cdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbmZzL2V4dDQvZXh0NC5oOjE3Nzg6XHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG5mcy9leHQ0L2V4dDQuaC0xNzc5LVxuZnMvZXh0NC9leHQ0LmgtMTc4MC1cdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuZnMvZXh0NC9leHQ0Lmg6MTc4MTpcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbmZzL2V4dDQvZXh0NC5oOjE3ODI6XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbmZzL2V4dDQvZXh0NC5oLTE3ODMtXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjAzNz1lbnVtIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMDQ1LVx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFx0LyogZXh0ZW50cyBoYXZlIGJlZW4gcHJlY2FjaGVkICovXG5mcy9leHQ0L2V4dDQuaDoyMDQ2Olx0RVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUsXHQvKiBMdXN0cmUtc3R5bGUgZWFfaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oLTIwNDctXHRFWFQ0X1NUQVRFX1ZFUklUWV9JTl9QUk9HUkVTUyxcdC8qIGJ1aWxkaW5nIGZzLXZlcml0eSBNZXJrbGUgdHJlZSAqL1xuLS1cbmZzL2V4dDQvZXh0NC5oPTIzMTQ9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGZsZXhfYmcsXHRcdEZMRVhfQkcpXG5mcy9leHQ0L2V4dDQuaDoyMzE1OkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhlYV9pbm9kZSxcdFx0RUFfSU5PREUpXG5mcy9leHQ0L2V4dDQuaC0yMzE2LUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhkaXJkYXRhLFx0XHRESVJEQVRBKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNTE9aW50IGV4dDRfaW5vZGVfaXNfZmFzdF9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lub2RlLmMtMTUyLXtcbmZzL2V4dDQvaW5vZGUuYzoxNTM6XHRpZiAoIWV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYikpIHtcbmZzL2V4dDQvaW5vZGUuYy0xNTQtXHRcdGludCBlYV9ibG9ja3MgPSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wgP1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4NS1cdGlmIChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpXG5mcy9leHQ0L2lub2RlLmM6MTg2Olx0XHRleHQ0X2V2aWN0X2VhX2lub2RlKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy0xODctXHRpZiAoaW5vZGUtXHUwMDNlaV9ubGluaykge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMjItXHRcdCAgICBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmlsZV9hY2wpIHtcbmZzL2V4dDQvaW5vZGUuYzo1MjIzOlx0XHRcdGVycl9zdHIgPSBcJiMzNDtlYV9pbm9kZSB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDs7XG5mcy9leHQ0L2lub2RlLmMtNTIyNC1cdFx0XHRnb3RvIGVycm9yO1xuLS1cbmZzL2V4dDQvaW5vZGUuYy01MjI5LVx0XHRcdCAqIG9wZW5fYnlfaGFuZGxlX2F0KCkgY291bGQgcHJvdmlkZSBhbiBvbGQgaW5vZGUgbnVtYmVyXG5mcy9leHQ0L2lub2RlLmM6NTIzMDpcdFx0XHQgKiB0aGF0IGhhcyBzaW5jZSBiZWVuIHJldXNlZCBmb3IgYW4gZWFfaW5vZGU7IHRoaXMgZG9lc1xuZnMvZXh0NC9pbm9kZS5jLTUyMzEtXHRcdFx0ICogbm90IGluZGljYXRlIGZpbGVzeXN0ZW0gY29ycnVwdGlvblxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMDYtXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG5mcy9leHQ0L3N1cGVyLmM6MTMwNzpcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuZnMvZXh0NC9zdXBlci5jLTEzMDgtXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTM2Ny1cbmZzL2V4dDQvc3VwZXIuYzoxMzY4Olx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbmZzL2V4dDQvc3VwZXIuYzoxMzY5Olx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuZnMvZXh0NC9zdXBlci5jLTEzNzAtXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ2ODU9c3RhdGljIGludCBleHQ0X2luaXRfbWV0YWRhdGFfY3N1bShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ3MTQtXHRlbHNlIGlmIChleHQ0X2hhc19mZWF0dXJlX21ldGFkYXRhX2NzdW0oc2IpIHx8XG5mcy9leHQ0L3N1cGVyLmM6NDcxNTpcdFx0IGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKVxuZnMvZXh0NC9zdXBlci5jLTQ3MTYtXHRcdHNiaS1cdTAwM2VzX2NzdW1fc2VlZCA9IGV4dDRfY2hrc3VtKH4wLCBlcy1cdTAwM2VzX3V1aWQsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ3MjE9c3RhdGljIGludCBleHQ0X2NoZWNrX2ZlYXR1cmVfY29tcGF0aWJpbGl0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00NzQzLVx0XHQvKlxuZnMvZXh0NC9zdXBlci5jOjQ3NDQ6XHRcdCAqIGVhX2lub2RlIGZlYXR1cmUgdXNlcyBsX2lfdmVyc2lvbiBmaWVsZCB3aGljaCBpcyBub3RcbmZzL2V4dDQvc3VwZXIuYy00NzQ1LVx0XHQgKiBhdmFpbGFibGUgaW4gSFVSRF9DT01QQVQgbW9kZS5cbmZzL2V4dDQvc3VwZXIuYy00NzQ2LVx0XHQgKi9cbmZzL2V4dDQvc3VwZXIuYzo0NzQ3Olx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShzYikpIHtcbmZzL2V4dDQvc3VwZXIuYy00NzQ4LVx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbmZzL2V4dDQvc3VwZXIuYzo0NzQ5Olx0XHRcdFx0IFwmIzM0O2VhX2lub2RlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBmb3IgSHVyZFwmIzM0Oyk7XG5mcy9leHQ0L3N1cGVyLmMtNDc1MC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTM0Nj1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTUxOC1cdCAqL1xuZnMvZXh0NC9zdXBlci5jOjU1MTk6XHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuZnMvZXh0NC9zdXBlci5jLTU1MjAtXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1NjAtXG5mcy9leHQ0L3N1cGVyLmM6NTU2MTpcdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKSB7XG5mcy9leHQ0L3N1cGVyLmM6NTU2MjpcdFx0XHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IGV4dDRfeGF0dHJfY3JlYXRlX2NhY2hlKCk7XG5mcy9leHQ0L3N1cGVyLmM6NTU2MzpcdFx0XHRpZiAoIXNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKSB7XG5mcy9leHQ0L3N1cGVyLmMtNTU2NC1cdFx0XHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcbmZzL2V4dDQvc3VwZXIuYzo1NTY1Olx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBlYV9pbm9kZV9jYWNoZVwmIzM0Oyk7XG5mcy9leHQ0L3N1cGVyLmMtNTU2Ni1cdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTU3NjAtXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbmZzL2V4dDQvc3VwZXIuYzo1NzYxOlx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG5mcy9leHQ0L3N1cGVyLmMtNTc2Mi1cdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuZnMvZXh0NC9zdXBlci5jPTU3NjM9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTc4Mi1cdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbmZzL2V4dDQvc3VwZXIuYzo1NzgzOlx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG5mcy9leHQ0L3N1cGVyLmM6NTc4NDpcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG5mcy9leHQ0L3N1cGVyLmM6NTc4NTpcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbmZzL2V4dDQvc3VwZXIuYy01Nzg2LVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01Nzk0LVx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuZnMvZXh0NC9zdXBlci5jOjU3OTU6XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbmZzL2V4dDQvc3VwZXIuYy01Nzk2LVx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTE0LSNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG5mcy9leHQ0L3hhdHRyLmM6MTE1Olx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm8pLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXG5mcy9leHQ0L3hhdHRyLmMtMTE2LVxuZnMvZXh0NC94YXR0ci5jLTExNy0jaWZkZWYgQ09ORklHX0xPQ0tERVBcbmZzL2V4dDQveGF0dHIuYzoxMTg6dm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuZnMvZXh0NC94YXR0ci5jLTExOS17XG5mcy9leHQ0L3hhdHRyLmM6MTIwOlx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMS1cbmZzL2V4dDQveGF0dHIuYzoxMjI6XHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcdTAwMjZlYV9pbm9kZS1cdTAwM2VpX3J3c2VtLCAxKTtcbmZzL2V4dDQveGF0dHIuYy0xMjMtXHQodm9pZCkgZWk7XHQvKiBzaHV0IHVwIGNsYW5nIHdhcm5pbmcgaWYgIUNPTkZJR19MT0NLREVQICovXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4Nz1jaGVja194YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjQwLVxuZnMvZXh0NC94YXR0ci5jOjI0MTpcdFx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNiBlYV9pbm8pIHtcbmZzL2V4dDQveGF0dHIuYzoyNDI6XHRcdFx0ZXJyX3N0ciA9IFwmIzM0O2VhX2lub2RlIHNwZWNpZmllZCB3aXRob3V0IGVhX2lub2RlIGZlYXR1cmUgZW5hYmxlZFwmIzM0OztcbmZzL2V4dDQveGF0dHIuYy0yNDMtXHRcdFx0Z290byBlcnJvdXQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTM0OT1leHQ0X3hhdHRyX2lub2RlX2hhc2goc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zNTMtXG5mcy9leHQ0L3hhdHRyLmM6MzU0OnN0YXRpYyB1NjQgZXh0NF94YXR0cl9pbm9kZV9nZXRfcmVmKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMzU1LXtcbmZzL2V4dDQveGF0dHIuYzozNTY6XHRyZXR1cm4gKCh1NjQpIGlub2RlX2dldF9jdGltZV9zZWMoZWFfaW5vZGUpIFx1MDAzY1x1MDAzYyAzMikgfFxuZnMvZXh0NC94YXR0ci5jOjM1NzpcdFx0KHUzMikgaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTM1OC19XG5mcy9leHQ0L3hhdHRyLmMtMzU5LVxuZnMvZXh0NC94YXR0ci5jOjM2MDpzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoc3RydWN0IGlub2RlICplYV9pbm9kZSwgdTY0IHJlZl9jb3VudClcbmZzL2V4dDQveGF0dHIuYy0zNjEte1xuZnMvZXh0NC94YXR0ci5jOjM2MjpcdGlub2RlX3NldF9jdGltZShlYV9pbm9kZSwgKHUzMikocmVmX2NvdW50IFx1MDAzZVx1MDAzZSAzMiksIDApO1xuZnMvZXh0NC94YXR0ci5jOjM2MzpcdGlub2RlX3NldF9pdmVyc2lvbl9yYXcoZWFfaW5vZGUsIHJlZl9jb3VudCBcdTAwMjYgMHhmZmZmZmZmZik7XG5mcy9leHQ0L3hhdHRyLmMtMzY0LX1cbmZzL2V4dDQveGF0dHIuYy0zNjUtXG5mcy9leHQ0L3hhdHRyLmM6MzY2OnN0YXRpYyB1MzIgZXh0NF94YXR0cl9pbm9kZV9nZXRfaGFzaChzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuZnMvZXh0NC94YXR0ci5jLTM2Ny17XG5mcy9leHQ0L3hhdHRyLmM6MzY4Olx0cmV0dXJuICh1MzIpIGlub2RlX2dldF9hdGltZV9zZWMoZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTM2OS19XG5mcy9leHQ0L3hhdHRyLmMtMzcwLVxuZnMvZXh0NC94YXR0ci5jOjM3MTpzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9oYXNoKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsIHUzMiBoYXNoKVxuZnMvZXh0NC94YXR0ci5jLTM3Mi17XG5mcy9leHQ0L3hhdHRyLmM6MzczOlx0aW5vZGVfc2V0X2F0aW1lKGVhX2lub2RlLCBoYXNoLCAwKTtcbmZzL2V4dDQveGF0dHIuYy0zNzQtfVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zNzgtICovXG5mcy9leHQ0L3hhdHRyLmM6Mzc5OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9yZWFkKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXG5mcy9leHQ0L3hhdHRyLmMtMzgwLXtcbmZzL2V4dDQveGF0dHIuYzozODE6XHRpbnQgYmxvY2tzaXplID0gMSBcdTAwM2NcdTAwM2MgZWFfaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuZnMvZXh0NC94YXR0ci5jOjM4MjpcdGludCBiaF9jb3VudCA9IChzaXplICYjNDM7IGJsb2Nrc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBlYV9pbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG5mcy9leHQ0L3hhdHRyLmMtMzgzLVx0aW50IHRhaWxfc2l6ZSA9IChzaXplICUgYmxvY2tzaXplKSA/OiBibG9ja3NpemU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTM5My1cbmZzL2V4dDQveGF0dHIuYzozOTQ6XHRyZXQgPSBleHQ0X2JyZWFkX2JhdGNoKGVhX2lub2RlLCAwIC8qIGJsb2NrICovLCBiaF9jb3VudCxcbmZzL2V4dDQveGF0dHIuYy0zOTUtXHRcdFx0ICAgICAgIHRydWUgLyogd2FpdCAqLywgYmhzKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMzk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmhfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG5mcy9leHQ0L3hhdHRyLmM6NDAwOlx0XHQvKiBUaGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBob2xlcyBpbiBlYV9pbm9kZS4gKi9cbmZzL2V4dDQveGF0dHIuYy00MDEtXHRcdGlmICghYmhzW2ldKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTQyMD1zdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaWdldChzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgdW5zaWduZWQgbG9uZyBlYV9pbm8sXG5mcy9leHQ0L3hhdHRyLmM6NDIxOlx0XHRcdFx0IHUzMiBlYV9pbm9kZV9oYXNoLCBzdHJ1Y3QgaW5vZGUgKiplYV9pbm9kZSlcbmZzL2V4dDQveGF0dHIuYy00MjIte1xuLS1cbmZzL2V4dDQveGF0dHIuYy00NDktXHQgKiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIGhhc2ggdmFsaWRhdGlvbiwgcmF0aGVyIGl0IGhhcyBhXG5mcy9leHQ0L3hhdHRyLmM6NDUwOlx0ICogYmFja3BvaW50ZXIgZnJvbSBlYV9pbm9kZSB0byB0aGUgcGFyZW50IGlub2RlLlxuZnMvZXh0NC94YXR0ci5jLTQ1MS1cdCAqL1xuZnMvZXh0NC94YXR0ci5jOjQ1MjpcdGlmIChlYV9pbm9kZV9oYXNoICE9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC94YXR0ci5jLTQ1My1cdCAgICBFWFQ0X1hBVFRSX0lOT0RFX0dFVF9QQVJFTlQoaW5vZGUpID09IHBhcmVudC1cdTAwM2VpX2lubyBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNDYyLVxuZnMvZXh0NC94YXR0ci5jOjQ2MzpcdCplYV9pbm9kZSA9IGlub2RlO1xuZnMvZXh0NC94YXR0ci5jLTQ2NC1cdHJldHVybiAwO1xuLS1cbmZzL2V4dDQveGF0dHIuYy00NjctLyogUmVtb3ZlIGVudHJ5IGZyb20gbWJjYWNoZSB3aGVuIEVBIGlub2RlIGlzIGdldHRpbmcgZXZpY3RlZCAqL1xuZnMvZXh0NC94YXR0ci5jOjQ2ODp2b2lkIGV4dDRfZXZpY3RfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQveGF0dHIuYy00Njkte1xuLS1cbmZzL2V4dDQveGF0dHIuYz00ODI9c3RhdGljIGludFxuZnMvZXh0NC94YXR0ci5jOjQ4MzpleHQ0X3hhdHRyX2lub2RlX3ZlcmlmeV9oYXNoZXMoc3RydWN0IGlub2RlICplYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy00ODQtXHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSwgdm9pZCAqYnVmZmVyLFxuLS1cbmZzL2V4dDQveGF0dHIuYy00ODktXHQvKiBWZXJpZnkgc3RvcmVkIGhhc2ggbWF0Y2hlcyBjYWxjdWxhdGVkIGhhc2guICovXG5mcy9leHQ0L3hhdHRyLmM6NDkwOlx0aGFzaCA9IGV4dDRfeGF0dHJfaW5vZGVfaGFzaChFWFQ0X1NCKGVhX2lub2RlLVx1MDAzZWlfc2IpLCBidWZmZXIsIHNpemUpO1xuZnMvZXh0NC94YXR0ci5jOjQ5MTpcdGlmIChoYXNoICE9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goZWFfaW5vZGUpKVxuZnMvZXh0NC94YXR0ci5jLTQ5Mi1cdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTUyNT1leHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4tLVxuZnMvZXh0NC94YXR0ci5jLTUyNy17XG5mcy9leHQ0L3hhdHRyLmM6NTI4Olx0c3RydWN0IG1iX2NhY2hlICplYV9pbm9kZV9jYWNoZSA9IEVBX0lOT0RFX0NBQ0hFKGlub2RlKTtcbmZzL2V4dDQveGF0dHIuYzo1Mjk6XHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuZnMvZXh0NC94YXR0ci5jLTUzMC1cdGludCBlcnI7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTUzMi1cdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaWdldChpbm9kZSwgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtKSxcbmZzL2V4dDQveGF0dHIuYzo1MzM6XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSwgXHUwMDI2ZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTUzNC1cdGlmIChlcnIpIHtcbmZzL2V4dDQveGF0dHIuYzo1MzU6XHRcdGVhX2lub2RlID0gTlVMTDtcbmZzL2V4dDQveGF0dHIuYy01MzYtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2V4dDQveGF0dHIuYy01MzgtXG5mcy9leHQ0L3hhdHRyLmM6NTM5Olx0aWYgKGlfc2l6ZV9yZWFkKGVhX2lub2RlKSAhPSBzaXplKSB7XG5mcy9leHQ0L3hhdHRyLmM6NTQwOlx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmM6NTQxOlx0XHRcdFx0ICAgXCYjMzQ7ZWFfaW5vZGUgZmlsZSBzaXplPSVsbHUgZW50cnkgc2l6ZT0lenVcJiMzNDssXG5mcy9leHQ0L3hhdHRyLmM6NTQyOlx0XHRcdFx0ICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpLCBzaXplKTtcbmZzL2V4dDQveGF0dHIuYy01NDMtXHRcdGVyciA9IC1FRlNDT1JSVVBURUQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTU0Ni1cbmZzL2V4dDQveGF0dHIuYzo1NDc6XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX3JlYWQoZWFfaW5vZGUsIGJ1ZmZlciwgc2l6ZSk7XG5mcy9leHQ0L3hhdHRyLmMtNTQ4LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNTUwLVxuZnMvZXh0NC94YXR0ci5jOjU1MTpcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpIHtcbmZzL2V4dDQveGF0dHIuYzo1NTI6XHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfdmVyaWZ5X2hhc2hlcyhlYV9pbm9kZSwgZW50cnksIGJ1ZmZlcixcbmZzL2V4dDQveGF0dHIuYy01NTMtXHRcdFx0XHRcdFx0ICAgICBzaXplKTtcbmZzL2V4dDQveGF0dHIuYy01NTQtXHRcdGlmIChlcnIpIHtcbmZzL2V4dDQveGF0dHIuYzo1NTU6XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTU1Ni1cdFx0XHRcdFx0ICAgXCYjMzQ7RUEgaW5vZGUgaGFzaCB2YWxpZGF0aW9uIGZhaWxlZFwmIzM0Oyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTU1OS1cbmZzL2V4dDQveGF0dHIuYzo1NjA6XHRcdGlmIChlYV9pbm9kZV9jYWNoZSlcbmZzL2V4dDQveGF0dHIuYzo1NjE6XHRcdFx0bWJfY2FjaGVfZW50cnlfY3JlYXRlKGVhX2lub2RlX2NhY2hlLCBHRlBfTk9GUyxcbmZzL2V4dDQveGF0dHIuYzo1NjI6XHRcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goZWFfaW5vZGUpLFxuZnMvZXh0NC94YXR0ci5jOjU2MzpcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuZnMvZXh0NC94YXR0ci5jLTU2NC1cdH1cbmZzL2V4dDQveGF0dHIuYy01NjUtb3V0OlxuZnMvZXh0NC94YXR0ci5jOjU2NjpcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy01NjctXHRyZXR1cm4gZXJyO1xuLS1cbmZzL2V4dDQveGF0dHIuYz04NTE9aW50IGV4dDRfZ2V0X2lub2RlX3VzYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgKnVzYWdlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy04NTctXHRzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnk7XG5mcy9leHQ0L3hhdHRyLmM6ODU4Olx0cXNpemVfdCBlYV9pbm9kZV9yZWZzID0gMDtcbmZzL2V4dDQveGF0dHIuYy04NTktXHRpbnQgcmV0O1xuLS1cbmZzL2V4dDQveGF0dHIuYy04NzItXHRcdFx0aWYgKGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSlcbmZzL2V4dDQveGF0dHIuYzo4NzM6XHRcdFx0XHRlYV9pbm9kZV9yZWZzJiM0MzsmIzQzOztcbmZzL2V4dDQveGF0dHIuYy04NzQtXHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTg5MC1cdFx0XHRpZiAoZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtKVxuZnMvZXh0NC94YXR0ci5jOjg5MTpcdFx0XHRcdGVhX2lub2RlX3JlZnMmIzQzOyYjNDM7O1xuZnMvZXh0NC94YXR0ci5jLTg5Mi1cdH1cbmZzL2V4dDQveGF0dHIuYzo4OTM6XHQqdXNhZ2UgPSBlYV9pbm9kZV9yZWZzICYjNDM7IDE7XG5mcy9leHQ0L3hhdHRyLmMtODk0LVx0cmV0ID0gMDtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbmZzL2V4dDQveGF0dHIuYzo5MjU6XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtOTI2LVx0XHRcdFx0XHRzaXplX3QgbGVuKVxuZnMvZXh0NC94YXR0ci5jLTkyNy17XG5mcy9leHQ0L3hhdHRyLmM6OTI4Olx0aWYgKGVhX2lub2RlIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC94YXR0ci5jOjkyOTpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoZWFfaW5vZGUsIEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSlcbmZzL2V4dDQveGF0dHIuYy05MzAtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9OTM1PWludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTY2LVxuZnMvZXh0NC94YXR0ci5jOjk2NzpcdC8qIFdlIGFyZSBkb25lIGlmIGVhX2lub2RlIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQuICovXG5mcy9leHQ0L3hhdHRyLmM6OTY4Olx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKHNiKSlcbmZzL2V4dDQveGF0dHIuYy05NjktXHRcdHJldHVybiBjcmVkaXRzO1xuZnMvZXh0NC94YXR0ci5jLTk3MC1cbmZzL2V4dDQveGF0dHIuYzo5NzE6XHQvKiBOZXcgZWFfaW5vZGUsIGlub2RlIG1hcCwgYmxvY2sgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yLiAqL1xuZnMvZXh0NC94YXR0ci5jLTk3Mi1cdGNyZWRpdHMgJiM0Mzs9IDQ7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTk4Ni1cdGlmICghaXNfY3JlYXRlKSB7XG5mcy9leHQ0L3hhdHRyLmM6OTg3Olx0XHQvKiBEZXJlZmVyZW5jZSBlYV9pbm9kZSBob2xkaW5nIG9sZCB4YXR0ciB2YWx1ZS5cbmZzL2V4dDQveGF0dHIuYzo5ODg6XHRcdCAqIE9sZCBlYV9pbm9kZSwgaW5vZGUgbWFwLCBibG9jayBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IuXG5mcy9leHQ0L3hhdHRyLmMtOTg5LVx0XHQgKi9cbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTkxLVxuZnMvZXh0NC94YXR0ci5jOjk5MjpcdFx0LyogRGF0YSBibG9ja3MgZm9yIG9sZCBlYV9pbm9kZS4gKi9cbmZzL2V4dDQveGF0dHIuYy05OTMtXHRcdGJsb2NrcyA9IFhBVFRSX1NJWkVfTUFYIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuLS1cbmZzL2V4dDQveGF0dHIuYy05OTUtXHRcdC8qIEluZGlyZWN0aW9uIGJsb2NrIG9yIG9uZSBsZXZlbCBvZiBleHRlbnQgdHJlZSBmb3Igb2xkXG5mcy9leHQ0L3hhdHRyLmM6OTk2Olx0XHQgKiBlYV9pbm9kZS5cbmZzL2V4dDQveGF0dHIuYy05OTctXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDA0LVx0LyogV2UgbWF5IG5lZWQgdG8gY2xvbmUgdGhlIGV4aXN0aW5nIHhhdHRyIGJsb2NrIGluIHdoaWNoIGNhc2Ugd2UgbmVlZFxuZnMvZXh0NC94YXR0ci5jOjEwMDU6XHQgKiB0byBpbmNyZW1lbnQgcmVmIGNvdW50cyBmb3IgZXhpc3RpbmcgZWFfaW5vZGVzIHJlZmVyZW5jZWQgYnkgaXQuXG5mcy9leHQ0L3hhdHRyLmMtMTAwNi1cdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDExLVx0XHRcdGlmIChlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0pXG5mcy9leHQ0L3hhdHRyLmM6MTAxMjpcdFx0XHRcdC8qIFJlZiBjb3VudCB1cGRhdGUgb24gZWFfaW5vZGUuICovXG5mcy9leHQ0L3hhdHRyLmMtMTAxMy1cdFx0XHRcdGNyZWRpdHMgJiM0Mzs9IDE7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMTctXG5mcy9leHQ0L3hhdHRyLmM6MTAxODpzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfdXBkYXRlX3JlZihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEwMTktXHRcdFx0XHQgICAgICAgaW50IHJlZl9jaGFuZ2UpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMjQtXG5mcy9leHQ0L3hhdHRyLmM6MTAyNTpcdGlub2RlX2xvY2tfbmVzdGVkKGVhX2lub2RlLCBJX01VVEVYX1hBVFRSKTtcbmZzL2V4dDQveGF0dHIuYy0xMDI2LVxuZnMvZXh0NC94YXR0ci5jOjEwMjc6XHRyZXQgPSBleHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlLCBlYV9pbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L3hhdHRyLmMtMTAyOC1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwMzAtXG5mcy9leHQ0L3hhdHRyLmM6MTAzMTpcdHJlZl9jb3VudCA9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X3JlZihlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTAzMi1cdGlmICgocmVmX2NvdW50ID09IDAgXHUwMDI2XHUwMDI2IHJlZl9jaGFuZ2UgXHUwMDNjIDApIHx8IChyZWZfY291bnQgPT0gVTY0X01BWCBcdTAwMjZcdTAwMjYgcmVmX2NoYW5nZSBcdTAwM2UgMCkpIHtcbmZzL2V4dDQveGF0dHIuYzoxMDMzOlx0XHRleHQ0X2Vycm9yX2lub2RlKGVhX2lub2RlLCBfX2Z1bmNfXywgX19MSU5FX18sIDAsXG5mcy9leHQ0L3hhdHRyLmMtMTAzNC1cdFx0XHRcJiMzNDtFQSBpbm9kZSAlbGx1IHJlZiB3cmFwYXJvdW5kOiByZWZfY291bnQ9JWxsZCByZWZfY2hhbmdlPSVkXCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jOjEwMzU6XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHJlZl9jb3VudCwgcmVmX2NoYW5nZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTAzNi1cdFx0YnJlbHNlKGlsb2MuYmgpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDQwLVx0cmVmX2NvdW50ICYjNDM7PSByZWZfY2hhbmdlO1xuZnMvZXh0NC94YXR0ci5jOjEwNDE6XHRleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoZWFfaW5vZGUsIHJlZl9jb3VudCk7XG5mcy9leHQ0L3hhdHRyLmMtMTA0Mi1cbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA0NC1cdFx0aWYgKHJlZl9jb3VudCA9PSAxKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTA0NTpcdFx0XHRXQVJOX09OQ0UoZWFfaW5vZGUtXHUwMDNlaV9ubGluaywgXCYjMzQ7RUEgaW5vZGUgJWxsdSBpX25saW5rPSV1XCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jOjEwNDY6XHRcdFx0XHQgIGVhX2lub2RlLVx1MDAzZWlfaW5vLCBlYV9pbm9kZS1cdTAwM2VpX25saW5rKTtcbmZzL2V4dDQveGF0dHIuYy0xMDQ3LVxuZnMvZXh0NC94YXR0ci5jOjEwNDg6XHRcdFx0c2V0X25saW5rKGVhX2lub2RlLCAxKTtcbmZzL2V4dDQveGF0dHIuYzoxMDQ5Olx0XHRcdGV4dDRfb3JwaGFuX2RlbChoYW5kbGUsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMDUwLVx0XHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEwNTItXHRcdGlmIChyZWZfY291bnQgPT0gMCkge1xuZnMvZXh0NC94YXR0ci5jOjEwNTM6XHRcdFx0V0FSTl9PTkNFKGVhX2lub2RlLVx1MDAzZWlfbmxpbmsgIT0gMSxcbmZzL2V4dDQveGF0dHIuYy0xMDU0LVx0XHRcdFx0ICBcJiMzNDtFQSBpbm9kZSAlbGx1IGlfbmxpbms9JXVcJiMzNDssXG5mcy9leHQ0L3hhdHRyLmM6MTA1NTpcdFx0XHRcdCAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIGVhX2lub2RlLVx1MDAzZWlfbmxpbmspO1xuZnMvZXh0NC94YXR0ci5jLTEwNTYtXG5mcy9leHQ0L3hhdHRyLmM6MTA1NzpcdFx0XHRjbGVhcl9ubGluayhlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTA1ODpcdFx0XHRleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTA1OS1cdFx0fVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMDYxLVxuZnMvZXh0NC94YXR0ci5jOjEwNjI6XHRyZXQgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGVhX2lub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQveGF0dHIuYy0xMDYzLVx0aWYgKHJldClcbmZzL2V4dDQveGF0dHIuYzoxMDY0Olx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTA2NS1cdFx0XHRcdCAgIFwmIzM0O2V4dDRfbWFya19pbG9jX2RpcnR5KCkgZmFpbGVkIHJldD0lZFwmIzM0OywgcmV0KTtcbmZzL2V4dDQveGF0dHIuYy0xMDY2LW91dDpcbmZzL2V4dDQveGF0dHIuYzoxMDY3Olx0aW5vZGVfdW5sb2NrKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMDY4LVx0cmV0dXJuIHJldDtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA3MC1cbmZzL2V4dDQveGF0dHIuYzoxMDcxOnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMTA3Mi17XG5mcy9leHQ0L3hhdHRyLmM6MTA3MzpcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgMSk7XG5mcy9leHQ0L3hhdHRyLmMtMTA3NC19XG5mcy9leHQ0L3hhdHRyLmMtMTA3NS1cbmZzL2V4dDQveGF0dHIuYzoxMDc2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG5mcy9leHQ0L3hhdHRyLmMtMTA3Ny17XG5mcy9leHQ0L3hhdHRyLmM6MTA3ODpcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgLTEpO1xuZnMvZXh0NC94YXR0ci5jLTEwNzktfVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDgxPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA4My17XG5mcy9leHQ0L3hhdHRyLmM6MTA4NDpcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5mcy9leHQ0L3hhdHRyLmMtMTA4NS1cdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTA5Ni1cdFx0XHRcdFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfaGFzaCksXG5mcy9leHQ0L3hhdHRyLmM6MTA5NzpcdFx0XHRcdFx0ICAgIFx1MDAyNmVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMDk4LVx0XHRpZiAoZXJyKVxuZnMvZXh0NC94YXR0ci5jLTEwOTktXHRcdFx0Z290byBjbGVhbnVwO1xuZnMvZXh0NC94YXR0ci5jOjExMDA6XHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMTAxLVx0XHRpZiAoZXJyKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTEwMjpcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTEwMzpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDQtXHRcdFx0Z290byBjbGVhbnVwO1xuZnMvZXh0NC94YXR0ci5jLTExMDUtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxMTA2Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDctXHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTExMjAtXHRcdFx0XHRcdCAgICBsZTMyX3RvX2NwdShlbnRyeS1cdTAwM2VlX2hhc2gpLFxuZnMvZXh0NC94YXR0ci5jOjExMjE6XHRcdFx0XHRcdCAgICBcdTAwMjZlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTEyMi1cdFx0aWYgKGVycikge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTI3LVx0XHR9XG5mcy9leHQ0L3hhdHRyLmM6MTEyODpcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMjktXHRcdGlmIChlcnIpXG5mcy9leHQ0L3hhdHRyLmM6MTEzMDpcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwmIzM0OyxcbmZzL2V4dDQveGF0dHIuYy0xMTMxLVx0XHRcdFx0XHQgICBlcnIpO1xuZnMvZXh0NC94YXR0ci5jOjExMzI6XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTEzMy1cdH1cbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTE1Nj1leHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTYwLXtcbmZzL2V4dDQveGF0dHIuYzoxMTYxOlx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbmZzL2V4dDQveGF0dHIuYy0xMTYyLVx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5O1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTgwLVxuZnMvZXh0NC94YXR0ci5jOjExODE6XHQvKiBPbmUgY3JlZGl0IGZvciBkZWMgcmVmIG9uIGVhX2lub2RlLCBvbmUgZm9yIG9ycGhhbiBsaXN0IGFkZGl0aW9uLCAqL1xuZnMvZXh0NC94YXR0ci5jLTExODItXHRjcmVkaXRzID0gMiAmIzQzOyBleHRyYV9jcmVkaXRzO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMTkwLVx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSxcbmZzL2V4dDQveGF0dHIuYzoxMTkxOlx0XHRcdFx0XHQgICAgXHUwMDI2ZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExOTItXHRcdGlmIChlcnIpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTExOTktXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbmZzL2V4dDQveGF0dHIuYzoxMjAwOlx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jLTEyMDEtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIwMjpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMDMtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMDgtXHRcdFx0aWYgKGVycikge1xuZnMvZXh0NC94YXR0ci5jOjEyMDk6XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTIxMC1cdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbmZzL2V4dDQveGF0dHIuYy0xMjExLVx0XHRcdFx0XHRcdGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIxMjpcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTIxMy1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMjE2LVxuZnMvZXh0NC94YXR0ci5jOjEyMTc6XHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMjE4LVx0XHRpZiAoZXJyKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTIxOTpcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2VhX2lub2RlIGRlYyByZWYgZXJyPSVkXCYjMzQ7LFxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMjItXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMjUtXHRcdGlmICghc2tpcF9xdW90YSlcbmZzL2V4dDQveGF0dHIuYzoxMjI2Olx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShwYXJlbnQsIGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEyMjctXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMjI5LVx0XHQvKlxuZnMvZXh0NC94YXR0ci5jOjEyMzA6XHRcdCAqIEZvcmdldCBhYm91dCBlYV9pbm9kZSB3aXRoaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhhdFxuZnMvZXh0NC94YXR0ci5jLTEyMzEtXHRcdCAqIGRlY3JlbWVudHMgdGhlIHJlZiBjb3VudC4gVGhpcyBhdm9pZHMgZHVwbGljYXRlIGRlY3JlbWVudHMgaW5cbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTIzNy1cbmZzL2V4dDQveGF0dHIuYzoxMjM4Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMzktXHRcdGRpcnR5ID0gdHJ1ZTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTI2Mz1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTMwMS1cbmZzL2V4dDQveGF0dHIuYzoxMzAyOlx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKSlcbmZzL2V4dDQveGF0dHIuYy0xMzAzLVx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEzNTg9c3RhdGljIHNpemVfdCBleHQ0X3hhdHRyX2ZyZWVfc3BhY2Uoc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmxhc3QsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEzNzUtICovXG5mcy9leHQ0L3hhdHRyLmM6MTM3NjpzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICplYV9pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0xMzc3LVx0XHRcdFx0ICBjb25zdCB2b2lkICpidWYsIGludCBidWZzaXplKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMzgwLVx0dW5zaWduZWQgbG9uZyBibG9jayA9IDA7XG5mcy9leHQ0L3hhdHRyLmM6MTM4MTpcdGludCBibG9ja3NpemUgPSBlYV9pbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuZnMvZXh0NC94YXR0ci5jOjEzODI6XHRpbnQgbWF4X2Jsb2NrcyA9IChidWZzaXplICYjNDM7IGJsb2Nrc2l6ZSAtIDEpIFx1MDAzZVx1MDAzZSBlYV9pbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG5mcy9leHQ0L3hhdHRyLmMtMTM4My1cdGludCBjc2l6ZSwgd3NpemUgPSAwO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0xMzkyLVxuZnMvZXh0NC94YXR0ci5jOjEzOTM6XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGVhX2lub2RlLCBcdTAwMjZtYXAsXG5mcy9leHQ0L3hhdHRyLmMtMTM5NC1cdFx0XHRcdCAgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuZnMvZXh0NC94YXR0ci5jLTEzOTUtXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG5mcy9leHQ0L3hhdHRyLmM6MTM5NjpcdFx0XHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTM5Ny1cdFx0XHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L3hhdHRyLmM6MTM5ODpcdFx0XHQgICAgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoZWFfaW5vZGUtXHUwMDNlaV9zYiwgXHUwMDI2cmV0cmllcykpIHtcbmZzL2V4dDQveGF0dHIuYy0xMzk5LVx0XHRcdFx0cmV0ID0gMDtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTQxMy1cdFx0XHRcdFx0XHRcdFx0YnVmc2l6ZSAtIHdzaXplO1xuZnMvZXh0NC94YXR0ci5jOjE0MTQ6XHRcdGJoID0gZXh0NF9nZXRibGsoaGFuZGxlLCBlYV9pbm9kZSwgYmxvY2ssIDApO1xuZnMvZXh0NC94YXR0ci5jLTE0MTUtXHRcdGlmIChJU19FUlIoYmgpKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNDE4LVx0XHRcdFdBUk5fT05fT05DRSgxKTtcbmZzL2V4dDQveGF0dHIuYzoxNDE5Olx0XHRcdEVYVDRfRVJST1JfSU5PREUoZWFfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTQyMC1cdFx0XHRcdFx0IFwmIzM0O2V4dDRfZ2V0YmxrKCkgcmV0dXJuIGJoID0gTlVMTFwmIzM0Oyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE0MjItXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxNDIzOlx0XHRyZXQgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGVhX2lub2RlLVx1MDAzZWlfc2IsIGJoLFxuZnMvZXh0NC94YXR0ci5jLTE0MjQtXHRcdFx0XHRcdFx0ICAgRVhUNF9KVFJfTk9ORSk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE0MzUtXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuZnMvZXh0NC94YXR0ci5jOjE0MzY6XHRcdGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZWFfaW5vZGUsIGJoKTtcbmZzL2V4dDQveGF0dHIuYy0xNDM3LVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNDQyLVxuZnMvZXh0NC94YXR0ci5jOjE0NDM6XHRpbm9kZV9sb2NrKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYzoxNDQ0Olx0aV9zaXplX3dyaXRlKGVhX2lub2RlLCB3c2l6ZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTQ0NTpcdGV4dDRfdXBkYXRlX2lfZGlza3NpemUoZWFfaW5vZGUsIHdzaXplKTtcbmZzL2V4dDQveGF0dHIuYzoxNDQ2Olx0aW5vZGVfdW5sb2NrKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xNDQ3LVxuZnMvZXh0NC94YXR0ci5jOjE0NDg6XHRyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE0NDktXHRpZiAodW5saWtlbHkocmV0MiBcdTAwMjZcdTAwMjYgIXJldCkpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE0NjE9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTQ2My17XG5mcy9leHQ0L3hhdHRyLmM6MTQ2NDpcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jLTE0NjUtXHR1aWRfdCBvd25lclsyXSA9IHsgaV91aWRfcmVhZChpbm9kZSksIGlfZ2lkX3JlYWQoaW5vZGUpIH07XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE0NzgtXHQgKi9cbmZzL2V4dDQveGF0dHIuYzoxNDc5Olx0ZWFfaW5vZGUgPSBleHQ0X25ld19pbm9kZShoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19yb290LVx1MDAzZWRfaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTQ4MC1cdFx0XHRcdCAgU19JRlJFRyB8IDA2MDAsIE5VTEwsIGlub2RlLVx1MDAzZWlfaW5vICYjNDM7IDEsIG93bmVyLFxuZnMvZXh0NC94YXR0ci5jLTE0ODEtXHRcdFx0XHQgIEVYVDRfRUFfSU5PREVfRkwpO1xuZnMvZXh0NC94YXR0ci5jOjE0ODI6XHRpZiAoIUlTX0VSUihlYV9pbm9kZSkpIHtcbmZzL2V4dDQveGF0dHIuYzoxNDgzOlx0XHRlYV9pbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2ZXh0NF9maWxlX2lub2RlX29wZXJhdGlvbnM7XG5mcy9leHQ0L3hhdHRyLmM6MTQ4NDpcdFx0ZWFfaW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZleHQ0X2ZpbGVfb3BlcmF0aW9ucztcbmZzL2V4dDQveGF0dHIuYzoxNDg1Olx0XHRleHQ0X3NldF9hb3BzKGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYzoxNDg2Olx0XHRleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTQ4NzpcdFx0dW5sb2NrX25ld19pbm9kZShlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmM6MTQ4ODpcdFx0ZXh0NF94YXR0cl9pbm9kZV9zZXRfcmVmKGVhX2lub2RlLCAxKTtcbmZzL2V4dDQveGF0dHIuYzoxNDg5Olx0XHRleHQ0X3hhdHRyX2lub2RlX3NldF9oYXNoKGVhX2lub2RlLCBoYXNoKTtcbmZzL2V4dDQveGF0dHIuYzoxNDkwOlx0XHRlcnIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTQ5MS1cdFx0aWYgKCFlcnIpXG5mcy9leHQ0L3hhdHRyLmM6MTQ5MjpcdFx0XHRlcnIgPSBleHQ0X2lub2RlX2F0dGFjaF9qaW5vZGUoZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE0OTMtXHRcdGlmIChlcnIpIHtcbmZzL2V4dDQveGF0dHIuYzoxNDk0Olx0XHRcdGlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmM6MTQ5NTpcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYxMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBlYV9pbm9kZWAgRmVhdHVyZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVhX2lub2RlYCB0aGluZy4gSXMgaXQgYSBjb25maWd1cmFibGUgb3B0aW9uPyBJIGZlZWwgbGlrZSBJJiMzOTt2ZSBlbmNvdW50ZXJlZCB0aGlzIGJlZm9yZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBFeHQ0IEtjb25maWcgZmlsZSBhZ2FpbiwganVzdCB0byBiZSBzdXJlLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VhX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3OTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyBlYV9pbm9kZSBhbmQgRVhUNCoqCgpSaWdodCwgc28gKmVhX2lub2RlKiBpc24mIzM5O3Qgc29tZXRoaW5nIEkgbmVlZCB0byB3cmFuZ2xlIHdpdGggYXQgY29tcGlsZSB0aW1lLiBJdCYjMzk7cyBhIGZpbGVzeXN0ZW0gZmVhdHVyZSwgd2hpY2ggaXMgbXVjaCBtb3JlIG1hbmFnZWFibGUsIGluIG15IGV4cGVyaWVuY2UuIEkgd2FzIGluaXRpYWxseSB3b3JyaWVkIEkmIzM5O2QgaGF2ZSB0byB0d2VhayBzb21lIG9ic2N1cmUgY29uZmlndXJhdGlvbiBmbGFnLCBidXQgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIFRoZSBjcnVjaWFsIHRoaW5nLCB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uLCBpcyBgRVhUNF9GU2AuIFRoYXQmIzM5O3MgZ29vZCBuZXdzLCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGV4dDRfcHV0X2VhX2lub2RlYCBhbmQgYGV4dDRfZWFfaW5vZGVfd29ya2AuIFRob3NlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkLCBzbyB1bmRlcnN0YW5kaW5nIHRob3NlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYGVhX2lub2RlYCBhY3R1YWxseSAqd29ya3MqIHdpdGhpbiBFWFQ0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbnNpZ2h0cyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfcHV0X2VhX2lub2RlfGV4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz01MjU9ZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuLS1cbmZzL2V4dDQveGF0dHIuYy01NjUtb3V0OlxuZnMvZXh0NC94YXR0ci5jOjU2NjpcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy01NjctXHRyZXR1cm4gZXJyO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDgxPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTEwMi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTEwMzpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDQtXHRcdFx0Z290byBjbGVhbnVwO1xuZnMvZXh0NC94YXR0ci5jLTExMDUtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxMTA2Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTExMDctXHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTExMzEtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTEzMjpcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMTMzLVx0fVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMTU2PWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMDEtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIwMjpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMDMtXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMTEtXHRcdFx0XHRcdFx0ZXJyKTtcbmZzL2V4dDQveGF0dHIuYzoxMjEyOlx0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMjEzLVx0XHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXHRcdFx0XHRcdCAgIGVycik7XG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTEyMjItXHRcdFx0Y29udGludWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTEyMzctXG5mcy9leHQ0L3hhdHRyLmM6MTIzODpcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xMjM5LVx0XHRkaXJ0eSA9IHRydWU7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTE0NjE9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTQ5Ni1cdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuZnMvZXh0NC94YXR0ci5jOjE0OTc6XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE0OTgtXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTUxNj1leHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE1NTUtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoxNTU2Olx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTU1Ny1cdG5leHRfZW50cnk6XG4tLVxuZnMvZXh0NC94YXR0ci5jPTE1Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE2MDYtb3V0X2VycjpcbmZzL2V4dDQveGF0dHIuYzoxNjA3Olx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTE2MDgtXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MTg9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xODM5LW91dDpcbmZzL2V4dDQveGF0dHIuYzoxODQwOlx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0xODQxLVx0cmV0dXJuIHJldDtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTg4OD1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDAxLVx0XHRcdH1cbmZzL2V4dDQveGF0dHIuYzoyMDAyOlx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIHRtcF9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMjAwMy1cbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE0MS1cdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbmZzL2V4dDQveGF0dHIuYzoyMTQyOlx0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuZnMvZXh0NC94YXR0ci5jLTIxNDMtXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTIxOTAtXHRcdH1cbmZzL2V4dDQveGF0dHIuYzoyMTkxOlx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMjE5Mi1cdH1cbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjIzOT1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI3Mi1cdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbmZzL2V4dDQveGF0dHIuYzoyMjczOlx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0yMjc0LVx0XHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTIyODQtXHR9XG5mcy9leHQ0L3hhdHRyLmM6MjI4NTpcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbmZzL2V4dDQveGF0dHIuYy0yMjg2LVx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI5MzEtXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuZnMvZXh0NC94YXR0ci5jOjI5MzI6XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMjkzMy1cdFx0XHR9XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI5NjItICovXG5mcy9leHQ0L3hhdHRyLmM6Mjk2MzpzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvZXh0NC94YXR0ci5jLTI5NjQte1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTkxLSAqL1xuZnMvZXh0NC94YXR0ci5jOjI5OTI6dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC94YXR0ci5jLTI5OTMte1xuLS1cbmZzL2V4dDQveGF0dHIuYz0zMDA4PXZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zMDEwLVx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuZnMvZXh0NC94YXR0ci5jOjMwMTE6XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xuZnMvZXh0NC94YXR0ci5jLTMwMTItfVxuLS1cbmZzL2V4dDQveGF0dHIuaD0xODY9ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbmZzL2V4dDQveGF0dHIuaDoxODc6ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmgtMTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM1NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRXh0ZW5kZWQgQXR0cmlidXRlcyBpbiBleHQ0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgb2J2aW91c2x5IGFkZGluZyBzb21lIG5ldyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyAoRUFzKSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTGV0JiMzOTtzIHNlZSwgdGhlIGNvcmUgZnVuY3Rpb25zIGludHJvZHVjZWQgYXBwZWFyIHRvIGJlIGBleHQ0X3B1dF9lYV9pbm9kZWAgYW5kIGBleHQ0X2VhX2lub2RlX3dvcmtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdGFyZ2V0IHRoZXNlIGZvciBmdXp6aW5nLgoKQnV0IHdhaXQsIGxvb2tpbmcgY2xvc2VyLCBgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrYCBpcyBhbHNvIHJlbGV2YW50LCBldmVuIHRob3VnaCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljIGlubGluZWAgaW4gYGZzL2V4dDQveGF0dHIuaGAuICBUaGF0IG1lYW5zIHdlIGNhbiYjMzk7dCBkaXJlY3RseSBmdXp6IGl0IGFzIGEgc3ltYm9sLCBidXQgd2Ugc2hvdWxkIGNvbnNpZGVyIGZ1enppbmcgaXRzIGNhbGxlcnMsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBrZWVwIGl0IGluIG1pbmQuIEJleW9uZCB0aGF0IEkgc2hvdWxkIGFsc28gdGFyZ2V0IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGFuZCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBhcyBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuCgpPa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIG9mIGBleHQ0X2VhX2lub2RlX3dvcmtgLiBZZXMsIGl0JiMzOTtzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtZWFucyB3ZSBjYW4mIzM5O3QgZnV6eiBgZXh0NF9lYV9pbm9kZV93b3JrYCBkaXJlY3RseSBlaXRoZXIuICBTbywgd2UgY2FuIHByb2JhYmx5IHN1bW1hcml6ZSBvdXIgZnV6emluZyB0YXJnZXRzIGFzOgoKLSBgZXh0NF9wdXRfZWFfaW5vZGVgIChub24tc3RhdGljKQotIGBleHQ0X2VhX2lub2RlX3dvcmtgIChzdGF0aWMsIGNvbnNpZGVyIGNhbGxlcnMpCi0gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCAobm9uLXN0YXRpYykKLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgKG5vbi1zdGF0aWMpCgpSaWdodCwgbm93LCB3aGF0IGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBzZXR0aW5ncyBlbmFibGVkIHRvIGV2ZW4gdGVzdCB0aGVzZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBFWFQ0X0ZTYC4gVGltZSB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc3CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIChYQVRUUnMpIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtLiBgRVhUNF9GU2Agc2VlbXMgdG8gYmUgdGhlIGNvcmUsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYEVYVDRfRlNfWEFUVFJgIGlzbiYjMzk7dCBkZWZpbmVkIG9uIGl0cyBvd24uIE5vcGUsIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucz8gTm8sIGl0JiMzOTtzIG5vdCBsb29raW5nIGxpa2UgaXQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgaXB1dF9pZl9ub3RfbGFzdGAgaW4gYGluY2x1ZGUvbGludXgvZnMuaGAuIFRoYXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBUaGF0IHRlbGxzIG1lIHdoYXQgdG8gZXhwZWN0LgoKR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoqICAgYGV4dDRfcHV0X2VhX2lub2RlYAoqICAgYGV4dDRfZWFfaW5vZGVfd29ya2AKKiAgIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAKKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYAoqICAgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AKCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdG8gdmVyaWZ5IHRoYXQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgIGFuZCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBhcmUgc3RhdGljLCB0aG91Z2guIFRoYXQmIzM5O3MgYWx3YXlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGx8ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0xMTU1PXN0YXRpYyB2b2lkXG5mcy9leHQ0L3hhdHRyLmM6MTE1NjpleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuZnMvZXh0NC94YXR0ci5jLTExNTctXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMjYyPXN0YXRpYyB2b2lkXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0xMjY0LVx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMzAyLVx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKSlcbmZzL2V4dDQveGF0dHIuYzoxMzAzOlx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXG5mcy9leHQ0L3hhdHRyLmMtMTMwNC1cdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuZnMvZXh0NC94YXR0ci5jLTIxNzUtXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODk1LVx0XHRpZiAoaGVhZGVyLVx1MDAzZWhfbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpXG5mcy9leHQ0L3hhdHRyLmM6Mjg5NjpcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjg5Ny1cdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTM2LVxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTI1CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMsIGJ1dCB0aGUgY29yZSB0aG91Z2h0cyByZW1haW4gc3RhdGljLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhlIHBhdGNoIGlzICpyZW1vdmluZyogdGhlIGBlYV9pbm9kZV9hcnJheWAgYXJndW1lbnQsIHdoaWNoIHJlYWxseSBjYXRjaGVzIG15IGV5ZS4gVGhhdCBhbG9uZSBtYWtlcyB0aGVtIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmF0aW9uYWxlOiB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2Rlcy4gSXQmIzM5O3MgZGVmZXJyaW5nIHRoZSBgaXB1dGAgb3BlcmF0aW9uIOKAkyB3aGljaCBpcyBhIHByZXR0eSBjcnVjaWFsIHJlbGVhc2Ug4oCTIHRvIGEgd29ya3F1ZXVlIHRvIGRvZGdlIHBvdGVudGlhbCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZXh0NCBsb2dpYywgYW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgYSB1c2VyIGNhbiB0cmlnZ2VyIGZyb20gdXNlcnNwYWNlIGp1c3QgYnkgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4gVGhhdOKAmXMgYSBnb29kIHNpZ24sIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBpdCBhbGxvd3MgdXMgdG8gZWFzaWx5IGludGVyYWN0IHdpdGggdGhlIGxvZ2ljLgoKU28sIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnkgb2YgbXkgZmluZGluZ3M6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyB3YXJyYW50cyBhdHRlbnRpb24uCiogICAqKkZvY3VzU3ltYm9scyoqOiBNeSBpbW1lZGlhdGUgdGFyZ2V0cyBhcmUgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYW5kIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIEVBIGlub2RlIGhhbmRsaW5nIGFuZCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBjb21wb25lbnRzIG9mIHRoZSBtb2RpZmllZCBsb2dpYy4KKiAgICoqRW5hYmxlQ29uZmlncyoqOiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgRVhUNF9GU2AgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaCB0byBoYXZlIGFuIGVmZmVjdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBvdGhlciBjb25maWcgZmxhZ3MgYXQgdGhpcyB0aW1lLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdGhlIGZ1enppbmcgcHJvY2VzcyByb2xsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBkZWZlcnJpbmcgdGhlaXIgaXB1dCB0byBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgZXh0NCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNjoyOC42NjMzNTQwNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM3NDM4Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjI4LjY2MzM2MjIxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyODkzMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDlkNDhjZTVkMjBmNTFiYWM3MGQ4NTZhZDUzZTQ3M2UxOTEyN2FlMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAwOToyNjoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTA3MCw4ICsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xcbiBcXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcXG4gXFx0ICogRUFzLlxcbitcXHQgKlxcbitcXHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXFxuK1xcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbiBcXHQgKi9cXG4tXFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xcbitcXHR9O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbiBcXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xcbiBcXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcXG4rXFxuK1xcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xcbitcXG4gXFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4gXFxuIFxcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcXG4gXFx0ICovXFxuIFxcdGludCBleHRyYV9jcmVkaXRzID0gNjtcXG4tXFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4gXFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XFxuIFxcbiBcXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcXG5AQCAtMjgxLDggKzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cXG4tXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRcXHQgICAgICBleHRyYV9jcmVkaXRzKTtcXG4rXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZXh0NF93YXJuaW5nKGlub2RlLVxcdTAwM2VpX3NiLCBcXFwieGF0dHIgZGVsZXRlIChlcnIgJWQpXFxcIiwgZXJyKTtcXG4gc3RvcF9oYW5kbGU6XFxuQEAgLTI5MCw3ICsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcXG4gXFx0XFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdFxcdGdvdG8gbm9fZGVsZXRlO1xcbiBcXHR9XFxuIFxcbkBAIC0zMjAsNyArMzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIFxcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxcbiBcXHRcXHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHRyZXR1cm47XFxuIG5vX2RlbGV0ZTpcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjk3ZjBlN2MxYjI1NGY3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xcbkBAIC0xMzAzLDYgKzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRcXHRcXHQgXFx1MDAyNnNiLVxcdTAwM2VzX3V1aWQpO1xcbiBcXG4gXFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXFxuK1xcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gXFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRtZW1zZXQoXFx1MDAyNmVpLVxcdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXFx1MDAzZWlfZHF1b3QpKTtcXG4gI2VuZGlmXFxuIFxcdGVpLVxcdTAwM2VqaW5vZGUgPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcXG4rXFx0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxcbitcXHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXFxuK1xcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cXG4rXFx0ICovXFxuK1xcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZlaS1cXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XFxuIFxcdGVpLVxcdTAwM2VpX3N5bmNfdGlkID0gMDtcXG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfb3JwaGFuKTtcXG4tXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gXFx0aW5vZGVfaW5pdF9vbmNlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4gXFx0ZXh0NF9mY19pbml0X2lub2RlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG5AQCAtNTUwOCw2ICs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdCAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJ3QgdHJ5XFxuIFxcdCAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCFcXG4gXFx0ICovXFxuK1xcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XFxuK1xcbiBcXHRpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbChzYikpIHtcXG4gXFx0XFx0ZXJyID0gZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc2IsIGVzLCBjdHgpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbkBAIC01NzQ3LDYgKzU3NTcsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBmYWlsZWRfbW91bnQ5OlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xcbkBAIC01NzY3LDYgKzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRpZiAoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxcbiBcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbiBmYWlsZWRfbW91bnRfd3E6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xcbiBcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbiBcXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0XFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXFx1MDAzZXNfam91cm5hbCk7XFxuIFxcdH1cXG4gZmFpbGVkX21vdW50M2E6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbiBmYWlsZWRfbW91bnQzOlxcbiBcXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXFxuKysrIGIvZnMvZXh0NC94YXR0ci5jXFxuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XFxuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXFx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxcXFxuIFxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm8pLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxcbiBcXG4tc3RhdGljIGludFxcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuIHtcXG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0fVxcbiBvdXQ6XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xMTA0LDEwICsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImluYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMTMzLDcgKzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gc2F2ZWRfZXJyO1xcbiB9XFxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcXG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxcbiBcXHRcXHRcXHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVxcdTAwM2VpX3NiLCAxKSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcXG5AQCAtMTIxMiw2ICsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKSB7XFxuQEAgLTEyMjEsNiArMTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZXJyKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtMTIyOSw2ICsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTI0NSw2ICsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xcbiBcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtMTI3MSw3ICsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi1cXHRcXHRcXHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0IGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XFxuQEAgLTEzMTMsNyArMTMwMyw2IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJGSVJTVChiaCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBiaCwgMCwgMSxcXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4gXFx0XFx0XFx0a3ZmcmVlKGVhX2RhdGEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZWFfaW5vZGU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdG5leHRfZW50cnk6XFxuIFxcdFxcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XFxuIFxcdH1cXG5AQCAtMTYxNSw3ICsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVhX2lub2RlLVxcdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XFxuIFxcdHJldHVybiBlYV9pbm9kZTtcXG4gb3V0X2VycjpcXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbkBAIC0xODQ4LDcgKzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXFxuIFxcbiBcXHRyZXQgPSAwO1xcbiBvdXQ6XFxuLVxcdGlwdXQob2xkX2VhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIG9sZF9lYV9pbm9kZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUpO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlwdXQodG1wX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIHRtcF9pbm9kZSk7XFxuIFxcbiBcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xcbiBcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xcbkBAIC0yMTUwLDcgKzIxMzksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJkZWMgcmVmIGVycm9yPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXJyb3IpO1xcbi1cXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuIFxcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIFxcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xcbiBcXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4tXFxuIFxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cXHUwMDNlYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi1cXHRcXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHR9XFxuIFxcdGVycm9yID0gMDtcXG4gXFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdGlmIChjZSlcXG4gXFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XFxuQEAgLTIyODUsNyArMjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0fVxcbkBAIC0yMjk3LDcgKzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0aGVhZGVyLVxcdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XFxuIFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xcbiBcXHR9XFxuLVxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxcbi1cXG4tLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXFxuLSAqL1xcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLXtcXG4tXFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCA9IDA7XFxuLVxcdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCBcXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xcbi1cXHRcXHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXFxuLVxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xcbi1cXG4tXFx0XFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCArIEVJQV9JTkNSLFxcbi1cXHRcXHRcXHRcXHRcXHQgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAobmV3X2FycmF5ID09IE5VTEwpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcyxcXG4tXFx0XFx0XFx0XFx0ICAgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50KSk7XFxuLVxcdFxcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XFxuLVxcdFxcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcXG4tXFx0fVxcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQrKztcXG4tXFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWlub2Rlc1soKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLypcXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxcbiAgKlxcbkBAIC0yOTEzLDcgKzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXFxuICAqL1xcbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG5AQCAtMjk1Miw3ICsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRklSU1QoaGVhZGVyKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dHJhX2NyZWRpdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7XFxuIFxcdH1cXG5AQCAtMjk4NiwxMiArMjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUpKTtcXG4tXFx0XFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXFxuK1xcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcXG4gXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXFxuQEAgLTMwMTMsMTYgKzI5NTYsNTkgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxcbisvKlxcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4tXFx0aW50IGlkeDtcXG4rXFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c19lYV9pbm9kZV93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpuZXh0O1xcbiBcXG4tXFx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXFxuK1xcdHdoaWxlIChub2RlKSB7XFxuK1xcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIGlfZWFfaXB1dF9ub2RlKTtcXG4rXFx0XFx0bmV4dCA9IG5vZGUtXFx1MDAzZW5leHQ7XFxuK1xcdFxcdGlwdXQoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbitcXHRcXHRub2RlID0gbmV4dDtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcXG4rICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXFxuKyAqL1xcbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xcbitcXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VhX2lwdXRfbm9kZSxcXG4rXFx0XFx0ICBcXHUwMDI2RVhUNF9TQihzYiktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxcbitcXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cXHUwMDNlY291bnQ7ICsraWR4KVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlX2FycmF5LVxcdTAwM2Vpbm9kZXNbaWR4XSk7XFxuLVxcdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuK3tcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjgyMTRhMzFmZTAwMThkIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIH07XFxuIFxcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xcbi19O1xcbi1cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XFxuQEAgLTE4Nyw5ICsxODIsMjEgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBpc19jcmVhdGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XFxuLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFxuKy8qXFxuKyAqIERyYWluIGFsbCBwZW5kaW5nIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlXFxuKyAqIGZyZWVpbmcgcmVzb3VyY2VzIHRoYXQgZXZpY3Rpb24gZGVwZW5kcyBvbiAocXVvdGEsIGJsb2NrIGFsbG9jYXRvcikuXFxuKyAqIExvb3BzIGJlY2F1c2Ugd29ya2VyIGlwdXQgbWF5IHRyaWdnZXIgZXZpY3Rpb24gdGhhdCByZS1xdWV1ZXMuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4re1xcbitcXHR3aGlsZSAoZmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaykgfHxcXG4rXFx0ICAgICAgICFsbGlzdF9lbXB0eShcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpKVxcbitcXHRcXHQ7XFxuK31cXG4gXFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5pbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuQEAgLTI0MTgsNiArMjQxOCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XFxuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xcbitcXG4rLyoqXFxuKyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcXG4rICpcXG4rICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xcbit9XFxuK1xcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjI5LjM5NzAxOThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjQwNzAzODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGV4dDQgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgZGVmZXJyaW5nIHRoZWlyIGlwdXQgdG8gYSB3b3JrcXVldWUgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGV4dDQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGZpbGVzIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwOWQ0OGNlNWQyMGY1MWJhYzcwZDg1NmFkNTNlNDczZTE5MTI3YWUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDk6MjY6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4rXHQgKlxuK1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuK1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbitcbitcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4rXG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbitcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcIiwgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyArMjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgKzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4rXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuK1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuK1x0ICogaGF2ZSBvdmVyd3JpdHRlbiB0aGUgc2VtYXBob3JlIHdoZW4gdGhlIHNsYWIgb2JqZWN0IHdhc1xuK1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuK1x0ICovXG4rXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX3Jzdl9jb252ZXJzaW9uX2xpc3QpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZWktXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XG4gXHRlaS1cdTAwM2VpX3N5bmNfdGlkID0gMDtcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NTA4LDYgKzU1MTYsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdCAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJ3QgdHJ5XG4gXHQgKiByb290IGZpcnN0OiBpdCBtYXkgYmUgbW9kaWZpZWQgaW4gdGhlIGpvdXJuYWwhXG4gXHQgKi9cbitcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4rXG4gXHRpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSB7XG4gXHRcdGVyciA9IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHNiLCBlcywgY3R4KTtcbiBcdFx0aWYgKGVycilcbkBAIC01NzQ3LDYgKzU3NTcsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHJldHVybiAwO1xuIFxuIGZhaWxlZF9tb3VudDk6XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbitcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbitcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbiBcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbiBcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuK1x0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG4gXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbiBmYWlsZWRfbW91bnQzOlxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTE0LDEwICsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKVx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxuIFx0XHRcdFx0aW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2ZzX2luZm8pLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXG4gXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4tXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuIHtcbkBAIC01NjcsNyArNTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMTA0LDEwICsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImluYyByZWYgZXJyb3IgJWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIHNhdmVkX2VycjtcbiB9XG5AQCAtMTE2MCw3ICsxMTU2LDYgQEAgc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbiBcdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxuLVx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXG4ge1xuIFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbkBAIC0xMTk3LDE0ICsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbiBcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cyxcbiBcdFx0XHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVx1MDAzZWlfc2IsIDEpLFxuIFx0XHRcdGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGUsIHBhcmVudCwgYmgsIGJsb2NrX2NzdW0sXG5AQCAtMTIxMiw2ICsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgKzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0XHRlcnIpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiArMTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTI0NSw2ICsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0ZGlydHkgPSB0cnVlO1xuIFx0fVxuIFxuQEAgLTEyNzEsNyArMTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgKzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgKzIxMzksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyArMjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgKzIyNzAsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICsyMjgyLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiArMjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgKyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50Kys7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyArMjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgKzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbitcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICsyOTU2LDU5IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4rLypcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbitcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5leHQ7XG4gXG4tXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbitcdHdoaWxlIChub2RlKSB7XG4rXHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsXG4rXHRcdFx0XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIGlfZWFfaXB1dF9ub2RlKTtcbitcdFx0bmV4dCA9IG5vZGUtXHUwMDNlbmV4dDtcbitcdFx0aXB1dChcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuK1x0XHRub2RlID0gbmV4dDtcbitcdH1cbit9XG4rXG4rLypcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4rICpcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbisgKlxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4rICovXG4rdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybjtcbitcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuK1x0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuIFx0XHRyZXR1cm47XG4rXHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbitcdFx0ICBcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0LypcbitcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuK1x0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cbitcdCAqL1xuK1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4rfVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyArK2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4re1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjE0YTMxZmUwMDE4ZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuKysrIGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcbiBcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcbiB9O1xuIFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcbi19O1xuLVxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcbkBAIC0xODcsOSArMTgyLDIxIEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1xuKy8qXG4rICogRHJhaW4gYWxsIHBlbmRpbmcgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmVcbisgKiBmcmVlaW5nIHJlc291cmNlcyB0aGF0IGV2aWN0aW9uIGRlcGVuZHMgb24gKHF1b3RhLCBibG9jayBhbGxvY2F0b3IpLlxuKyAqIExvb3BzIGJlY2F1c2Ugd29ya2VyIGlwdXQgbWF5IHRyaWdnZXIgZXZpY3Rpb24gdGhhdCByZS1xdWV1ZXMuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4re1xuK1x0d2hpbGUgKGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKSB8fFxuK1x0ICAgICAgICFsbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKSlcbitcdFx0O1xuK31cbiBcbiBleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4gXHRcdFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggNmRhNDQ1NzNjZTQ1MDguLjQ5MTZhOWQ1NDM0NzBkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC0yNDE4LDYgKzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbitcbisvKipcbisgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcbisgKlxuKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4rfVxuK1xuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4gXHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6MjkuMzk3MDIxM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTM1NjkwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEVBIElub2RlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgZXh0NCwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2RlcyBhcmUgaGFuZGxlZC4gSXQncyByZXBsYWNpbmcgdGhlIG9sZCBgZXh0NF94YXR0cl9pbm9kZV9hcnJheWAgYXBwcm9hY2gsIHdoaWNoIEkgcmVtZW1iZXIgY291bGQgYmUgcHJvYmxlbWF0aWMgd2l0aCBkZWZlcnJlZCBgaXB1dGAgb3BlcmF0aW9ucywgd2l0aCBhIHBlci1zdXBlcmJsb2NrIGxpc3QgKGBzX2VhX2lub2RlX3RvX2ZyZWVgKSBhbmQgYSBkZWxheWVkIHdvcmtxdWV1ZSAoYHNfZWFfaW5vZGVfd29ya2ApLiBTbWFydCBtb3ZlLCBwb3RlbnRpYWxseSBhZGRyZXNzaW5nIHRob3NlIG5hc3R5IGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJIHNlZSB0aGV5J3ZlIGFsc28gaW50cm9kdWNlZCBgaXB1dF9pZl9ub3RfbGFzdGAgaW4gYGluY2x1ZGUvbGludXgvZnMuaGAsIHdoaWNoIGlzIHByb2JhYmx5IHRpZWQgdG8gdGhlIGRlZmVycmVkIHJlbGVhc2UuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpbXBhY3RpbmcgdGhlIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljLiBFc3NlbnRpYWxseSwgaXQgZGVsYXlzIHRoZSBgaXB1dGAgb3BlcmF0aW9uIHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2tpbmcgcHJvYmxlbXMsIHBhcnRpY3VsYXJseSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSBieSBtYW5pcHVsYXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaG9zZSBsYXJnZSBhdHRyaWJ1dGVzLCB3aGVuIHRoZSBgZWFfaW5vZGVgIGZlYXR1cmUgaXMgZW5hYmxlZCwgZW5kIHVwIGJlaW5nIHN0b3JlZCBpbiB0aGVpciBvd24gZGVkaWNhdGVkIGlub2Rlcywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gdGVzdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmVzLiBMZXQncyBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIFRoZSBmaWxlc3lzdGVtIGluIHF1ZXN0aW9uIGlzIGV4dDQsIHNvIHdlIG5lZWQgYEVYVDRfRlNgLiBOb3cgZm9yIHRoZSBmZWF0dXJlIGl0c2VsZiDigJMgdGhhdCB3b3VsZCBiZSBgZWFfaW5vZGVgLiBOZXh0LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBMZXQncyBzdGFydCB3aXRoIGBDT05GSUdfRVhUNF9GU19YQVRUUmAuLi4gb2theSwgdGltZSB0byBkaXZlIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGVsc2Ugd2UgY2FuIGZpbmQuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6MzYuMzUwNTk2NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzAxMDQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU19YQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjM2LjQzNTkxMzg4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDE4MTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyBhIENvbmZpZ3VyYXRpb24gSXNzdWUqKlxuXG5IbW0sIEkgc3VzcGVjdCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGhvdyB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgYmVpbmcgaGFuZGxlZCBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFBlcmhhcHMgdGhlIHN5bWJvbCBgQ09ORklHX0VYVDRfRlNfWEFUVFJgIGlzIG5vIGxvbmdlciB2YWxpZCwgb3IgbWF5YmUgaXQncyBiZWVuIHJlbmFtZWQgdG8ganVzdCBgRVhUNF9GU19YQVRUUmAuIFRvIGJlIGNlcnRhaW4sIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBleHQ0LCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBsb2NhdGVkIGluIGBmcy9leHQ0L0tjb25maWdgLiBJJ2xsIHNjYW4gdGhhdCBmaWxlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBYQVRUUmAgdG8gY2xhcmlmeSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NDAuMTg2MDk3ODg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzQyNzI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJYQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI2OjQwLjI4MjQ0NzIyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MDY3ODM0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBwYXJ0aWN1bGFyIE1ha2VmaWxlOlxuXG4qKkFuYWx5emluZyB0aGUgZXh0NCBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEFzIGFuIGV4cGVydCwgSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBJJ20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGV4dDQtcmVsYXRlZCB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY3VzdG9tIGJ1aWxkIHJ1bGVzIG9yIGZsYWdzIHRoYXQgc3RhbmQgb3V0LiBJJ2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGhhbmRsZXMgb2JqZWN0IGZpbGUgY29tcGlsYXRpb24sIGxpbmtpbmcsIG1vZHVsZSBjcmVhdGlvbiAoaWYgYW55KSwgYW5kIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zIHRhaWxvcmVkIHRvIGV4dDQuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBzeXN0ZW0g4oCTIGFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbmNsdWRlIGRpcmVjdGl2ZXMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWw/IEknbGwgcXVpY2tseSBsb29rIGZvciB0aGluZ3MgbGlrZSBrZXJuZWwgdmVyc2lvbiBjaGVja3MsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGluY2x1c2lvbnMsIG9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3IuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgYmVpbmcgc2V0IGZvciBkZWJ1Z2dpbmcgb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBPdmVyYWxsLCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIGV4dDQgY29tcG9uZW50cyBhcmUgYnVpbHQgYW5kIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsLCB3aXRoIGFuIGV5ZSB0b3dhcmRzIHBvdGVudGlhbCBhcmVhcyBmb3IgbW9kaWZpY2F0aW9uLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNjo0OC42ODkyMzMzNDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxOTU5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxcbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NDguNzc3NDM5MjY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYwODc0MjY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFeHRlbmRlZCBBdHRyaWJ1dGUgQ29tcGlsYXRpb24gaW4gRVhUNCoqXG5cbkFscmlnaHQsIHNvIGB4YXR0ci5vYCBpcyBiZWluZyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ2l2ZW4sIGJ1dCBJJ20gY3VyaW91cyBpZiB3ZSBoYXZlIGFueSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciBleHRlbmRlZCBhdHRyaWJ1dGUgaW5vZGUgZmVhdHVyZXMuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyB0aGF0IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIEVBIGlub2Rlcy4gTWF5YmUgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBjb250cm9sIHRoYW4ganVzdCBhIGJsYW5rZXQgZW5hYmxlL2Rpc2FibGUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBvcHRpbWl6YXRpb24gYW5kIHVuZGVyc3RhbmRpbmcgaG93IGZsZXhpYmxlIHRoaXMgcGFydCBvZiB0aGUgZmlsZSBzeXN0ZW0gY2FuIGJlIGNvbmZpZ3VyZWQuIExldCBtZSBzZWUgd2hhdCBJIGNhbiBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NTcuMzg2MTg1MTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5MzIxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MTYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL2V4dDQvZXh0NC5oPTk2Mz1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTAxNi0gKiAgSV9EQVRBX1NFTV9RVU9UQSAgLSBVc2VkIGZvciBxdW90YSBpbm9kZXMgb25seVxcbmZzL2V4dDQvZXh0NC5oOjEwMTc6ICogIElfREFUQV9TRU1fRUEgICAgIC0gVXNlZCBmb3IgZWFfaW5vZGVzIG9ubHlcXG5mcy9leHQ0L2V4dDQuaC0xMDE4LSAqICBJX0RBVEFfU0VNX0pPVVJOQUwgLSBVc2VkIGZvciBqb3VybmFsIGlub2RlIG9ubHlcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1OTI9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNzc3LVxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG5mcy9leHQ0L2V4dDQuaDoxNzc4OlxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcXG5mcy9leHQ0L2V4dDQuaC0xNzc5LVxcbmZzL2V4dDQvZXh0NC5oLTE3ODAtXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuZnMvZXh0NC9leHQ0Lmg6MTc4MTpcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XFxuZnMvZXh0NC9leHQ0Lmg6MTc4MjpcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcXG5mcy9leHQ0L2V4dDQuaC0xNzgzLVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjAzNz1lbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIwNDUtXFx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFxcdC8qIGV4dGVudHMgaGF2ZSBiZWVuIHByZWNhY2hlZCAqL1xcbmZzL2V4dDQvZXh0NC5oOjIwNDY6XFx0RVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUsXFx0LyogTHVzdHJlLXN0eWxlIGVhX2lub2RlICovXFxuZnMvZXh0NC9leHQ0LmgtMjA0Ny1cXHRFWFQ0X1NUQVRFX1ZFUklUWV9JTl9QUk9HUkVTUyxcXHQvKiBidWlsZGluZyBmcy12ZXJpdHkgTWVya2xlIHRyZWUgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIzMTQ9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGZsZXhfYmcsXFx0XFx0RkxFWF9CRylcXG5mcy9leHQ0L2V4dDQuaDoyMzE1OkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhlYV9pbm9kZSxcXHRcXHRFQV9JTk9ERSlcXG5mcy9leHQ0L2V4dDQuaC0yMzE2LUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhkaXJkYXRhLFxcdFxcdERJUkRBVEEpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MTUxPWludCBleHQ0X2lub2RlX2lzX2Zhc3Rfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5vZGUuYy0xNTIte1xcbmZzL2V4dDQvaW5vZGUuYzoxNTM6XFx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiKSkge1xcbmZzL2V4dDQvaW5vZGUuYy0xNTQtXFx0XFx0aW50IGVhX2Jsb2NrcyA9IEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmlsZV9hY2wgP1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE2OT12b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xODUtXFx0aWYgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxcbmZzL2V4dDQvaW5vZGUuYzoxODY6XFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTE4Ny1cXHRpZiAoaW5vZGUtXFx1MDAzZWlfbmxpbmspIHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIyMi1cXHRcXHQgICAgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9maWxlX2FjbCkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjIzOlxcdFxcdFxcdGVycl9zdHIgPSBcXFwiZWFfaW5vZGUgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIjtcXG5mcy9leHQ0L2lub2RlLmMtNTIyNC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUyMjktXFx0XFx0XFx0ICogb3Blbl9ieV9oYW5kbGVfYXQoKSBjb3VsZCBwcm92aWRlIGFuIG9sZCBpbm9kZSBudW1iZXJcXG5mcy9leHQ0L2lub2RlLmM6NTIzMDpcXHRcXHRcXHQgKiB0aGF0IGhhcyBzaW5jZSBiZWVuIHJldXNlZCBmb3IgYW4gZWFfaW5vZGU7IHRoaXMgZG9lc1xcbmZzL2V4dDQvaW5vZGUuYy01MjMxLVxcdFxcdFxcdCAqIG5vdCBpbmRpY2F0ZSBmaWxlc3lzdGVtIGNvcnJ1cHRpb25cXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMjgyPXN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMwNi1cXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXFxuZnMvZXh0NC9zdXBlci5jOjEzMDc6XFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jLTEzMDgtXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTM2Ny1cXG5mcy9leHQ0L3N1cGVyLmM6MTM2ODpcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG5mcy9leHQ0L3N1cGVyLmM6MTM2OTpcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbmZzL2V4dDQvc3VwZXIuYy0xMzcwLVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ2ODU9c3RhdGljIGludCBleHQ0X2luaXRfbWV0YWRhdGFfY3N1bShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDcxNC1cXHRlbHNlIGlmIChleHQ0X2hhc19mZWF0dXJlX21ldGFkYXRhX2NzdW0oc2IpIHx8XFxuZnMvZXh0NC9zdXBlci5jOjQ3MTU6XFx0XFx0IGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKVxcbmZzL2V4dDQvc3VwZXIuYy00NzE2LVxcdFxcdHNiaS1cXHUwMDNlc19jc3VtX3NlZWQgPSBleHQ0X2Noa3N1bSh+MCwgZXMtXFx1MDAzZXNfdXVpZCxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00NzIxPXN0YXRpYyBpbnQgZXh0NF9jaGVja19mZWF0dXJlX2NvbXBhdGliaWxpdHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00NzQzLVxcdFxcdC8qXFxuZnMvZXh0NC9zdXBlci5jOjQ3NDQ6XFx0XFx0ICogZWFfaW5vZGUgZmVhdHVyZSB1c2VzIGxfaV92ZXJzaW9uIGZpZWxkIHdoaWNoIGlzIG5vdFxcbmZzL2V4dDQvc3VwZXIuYy00NzQ1LVxcdFxcdCAqIGF2YWlsYWJsZSBpbiBIVVJEX0NPTVBBVCBtb2RlLlxcbmZzL2V4dDQvc3VwZXIuYy00NzQ2LVxcdFxcdCAqL1xcbmZzL2V4dDQvc3VwZXIuYzo0NzQ3OlxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKHNiKSkge1xcbmZzL2V4dDQvc3VwZXIuYy00NzQ4LVxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG5mcy9leHQ0L3N1cGVyLmM6NDc0OTpcXHRcXHRcXHRcXHQgXFxcImVhX2lub2RlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBmb3IgSHVyZFxcXCIpO1xcbmZzL2V4dDQvc3VwZXIuYy00NzUwLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTUzNDY9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTUxOC1cXHQgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NTUxOTpcXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xcbmZzL2V4dDQvc3VwZXIuYy01NTIwLVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU1NjAtXFxuZnMvZXh0NC9zdXBlci5jOjU1NjE6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoc2IpKSB7XFxuZnMvZXh0NC9zdXBlci5jOjU1NjI6XFx0XFx0XFx0c2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gZXh0NF94YXR0cl9jcmVhdGVfY2FjaGUoKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTU2MzpcXHRcXHRcXHRpZiAoIXNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSkge1xcbmZzL2V4dDQvc3VwZXIuYy01NTY0LVxcdFxcdFxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG5mcy9leHQ0L3N1cGVyLmM6NTU2NTpcXHRcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byBjcmVhdGUgZWFfaW5vZGVfY2FjaGVcXFwiKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTU2Ni1cXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3NjAtXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuZnMvZXh0NC9zdXBlci5jOjU3NjE6XFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuZnMvZXh0NC9zdXBlci5jLTU3NjItXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuZnMvZXh0NC9zdXBlci5jPTU3NjM9ZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NzgyLVxcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cXG5mcy9leHQ0L3N1cGVyLmM6NTc4MzpcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTc4NDpcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG5mcy9leHQ0L3N1cGVyLmM6NTc4NTpcXHRzYmktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xcbmZzL2V4dDQvc3VwZXIuYy01Nzg2LVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU3OTQtXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbmZzL2V4dDQvc3VwZXIuYzo1Nzk1OlxcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xcbmZzL2V4dDQvc3VwZXIuYy01Nzk2LVxcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTQtI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXFxcXG5mcy9leHQ0L3hhdHRyLmM6MTE1OlxcdFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2ZzX2luZm8pLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxcbmZzL2V4dDQveGF0dHIuYy0xMTYtXFxuZnMvZXh0NC94YXR0ci5jLTExNy0jaWZkZWYgQ09ORklHX0xPQ0tERVBcXG5mcy9leHQ0L3hhdHRyLmM6MTE4OnZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcXG5mcy9leHQ0L3hhdHRyLmMtMTE5LXtcXG5mcy9leHQ0L3hhdHRyLmM6MTIwOlxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIxLVxcbmZzL2V4dDQveGF0dHIuYzoxMjI6XFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXFx1MDAyNmVhX2lub2RlLVxcdTAwM2VpX3J3c2VtLCAxKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIzLVxcdCh2b2lkKSBlaTtcXHQvKiBzaHV0IHVwIGNsYW5nIHdhcm5pbmcgaWYgIUNPTkZJR19MT0NLREVQICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTg3PWNoZWNrX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI0MC1cXG5mcy9leHQ0L3hhdHRyLmM6MjQxOlxcdFxcdGlmICghZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjYgZWFfaW5vKSB7XFxuZnMvZXh0NC94YXR0ci5jOjI0MjpcXHRcXHRcXHRlcnJfc3RyID0gXFxcImVhX2lub2RlIHNwZWNpZmllZCB3aXRob3V0IGVhX2lub2RlIGZlYXR1cmUgZW5hYmxlZFxcXCI7XFxuZnMvZXh0NC94YXR0ci5jLTI0My1cXHRcXHRcXHRnb3RvIGVycm91dDtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0zNDk9ZXh0NF94YXR0cl9pbm9kZV9oYXNoKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0zNTMtXFxuZnMvZXh0NC94YXR0ci5jOjM1NDpzdGF0aWMgdTY0IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X3JlZihzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxcbmZzL2V4dDQveGF0dHIuYy0zNTUte1xcbmZzL2V4dDQveGF0dHIuYzozNTY6XFx0cmV0dXJuICgodTY0KSBpbm9kZV9nZXRfY3RpbWVfc2VjKGVhX2lub2RlKSBcXHUwMDNjXFx1MDAzYyAzMikgfFxcbmZzL2V4dDQveGF0dHIuYzozNTc6XFx0XFx0KHUzMikgaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0zNTgtfVxcbmZzL2V4dDQveGF0dHIuYy0zNTktXFxuZnMvZXh0NC94YXR0ci5jOjM2MDpzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoc3RydWN0IGlub2RlICplYV9pbm9kZSwgdTY0IHJlZl9jb3VudClcXG5mcy9leHQ0L3hhdHRyLmMtMzYxLXtcXG5mcy9leHQ0L3hhdHRyLmM6MzYyOlxcdGlub2RlX3NldF9jdGltZShlYV9pbm9kZSwgKHUzMikocmVmX2NvdW50IFxcdTAwM2VcXHUwMDNlIDMyKSwgMCk7XFxuZnMvZXh0NC94YXR0ci5jOjM2MzpcXHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KGVhX2lub2RlLCByZWZfY291bnQgXFx1MDAyNiAweGZmZmZmZmZmKTtcXG5mcy9leHQ0L3hhdHRyLmMtMzY0LX1cXG5mcy9leHQ0L3hhdHRyLmMtMzY1LVxcbmZzL2V4dDQveGF0dHIuYzozNjY6c3RhdGljIHUzMiBleHQ0X3hhdHRyX2lub2RlX2dldF9oYXNoKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTM2Ny17XFxuZnMvZXh0NC94YXR0ci5jOjM2ODpcXHRyZXR1cm4gKHUzMikgaW5vZGVfZ2V0X2F0aW1lX3NlYyhlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTM2OS19XFxuZnMvZXh0NC94YXR0ci5jLTM3MC1cXG5mcy9leHQ0L3hhdHRyLmM6MzcxOnN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2hhc2goc3RydWN0IGlub2RlICplYV9pbm9kZSwgdTMyIGhhc2gpXFxuZnMvZXh0NC94YXR0ci5jLTM3Mi17XFxuZnMvZXh0NC94YXR0ci5jOjM3MzpcXHRpbm9kZV9zZXRfYXRpbWUoZWFfaW5vZGUsIGhhc2gsIDApO1xcbmZzL2V4dDQveGF0dHIuYy0zNzQtfVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTM3OC0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mzc5OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9yZWFkKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxuZnMvZXh0NC94YXR0ci5jLTM4MC17XFxuZnMvZXh0NC94YXR0ci5jOjM4MTpcXHRpbnQgYmxvY2tzaXplID0gMSBcXHUwMDNjXFx1MDAzYyBlYV9pbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbmZzL2V4dDQveGF0dHIuYzozODI6XFx0aW50IGJoX2NvdW50ID0gKHNpemUgKyBibG9ja3NpemUgLSAxKSBcXHUwMDNlXFx1MDAzZSBlYV9pbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbmZzL2V4dDQveGF0dHIuYy0zODMtXFx0aW50IHRhaWxfc2l6ZSA9IChzaXplICUgYmxvY2tzaXplKSA/OiBibG9ja3NpemU7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMzkzLVxcbmZzL2V4dDQveGF0dHIuYzozOTQ6XFx0cmV0ID0gZXh0NF9icmVhZF9iYXRjaChlYV9pbm9kZSwgMCAvKiBibG9jayAqLywgYmhfY291bnQsXFxuZnMvZXh0NC94YXR0ci5jLTM5NS1cXHRcXHRcXHQgICAgICAgdHJ1ZSAvKiB3YWl0ICovLCBiaHMpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTM5OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmhfY291bnQ7IGkrKykge1xcbmZzL2V4dDQveGF0dHIuYzo0MDA6XFx0XFx0LyogVGhlcmUgc2hvdWxkbid0IGJlIGFueSBob2xlcyBpbiBlYV9pbm9kZS4gKi9cXG5mcy9leHQ0L3hhdHRyLmMtNDAxLVxcdFxcdGlmICghYmhzW2ldKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9NDIwPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHN0cnVjdCBpbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBsb25nIGVhX2lubyxcXG5mcy9leHQ0L3hhdHRyLmM6NDIxOlxcdFxcdFxcdFxcdCB1MzIgZWFfaW5vZGVfaGFzaCwgc3RydWN0IGlub2RlICoqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTQyMi17XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNDQ5LVxcdCAqIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhdmUgaGFzaCB2YWxpZGF0aW9uLCByYXRoZXIgaXQgaGFzIGFcXG5mcy9leHQ0L3hhdHRyLmM6NDUwOlxcdCAqIGJhY2twb2ludGVyIGZyb20gZWFfaW5vZGUgdG8gdGhlIHBhcmVudCBpbm9kZS5cXG5mcy9leHQ0L3hhdHRyLmMtNDUxLVxcdCAqL1xcbmZzL2V4dDQveGF0dHIuYzo0NTI6XFx0aWYgKGVhX2lub2RlX2hhc2ggIT0gZXh0NF94YXR0cl9pbm9kZV9nZXRfaGFzaChpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3hhdHRyLmMtNDUzLVxcdCAgICBFWFQ0X1hBVFRSX0lOT0RFX0dFVF9QQVJFTlQoaW5vZGUpID09IHBhcmVudC1cXHUwMDNlaV9pbm8gXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy00NjItXFxuZnMvZXh0NC94YXR0ci5jOjQ2MzpcXHQqZWFfaW5vZGUgPSBpbm9kZTtcXG5mcy9leHQ0L3hhdHRyLmMtNDY0LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTQ2Ny0vKiBSZW1vdmUgZW50cnkgZnJvbSBtYmNhY2hlIHdoZW4gRUEgaW5vZGUgaXMgZ2V0dGluZyBldmljdGVkICovXFxuZnMvZXh0NC94YXR0ci5jOjQ2ODp2b2lkIGV4dDRfZXZpY3RfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L3hhdHRyLmMtNDY5LXtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz00ODI9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzo0ODM6ZXh0NF94YXR0cl9pbm9kZV92ZXJpZnlfaGFzaGVzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTQ4NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LCB2b2lkICpidWZmZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNDg5LVxcdC8qIFZlcmlmeSBzdG9yZWQgaGFzaCBtYXRjaGVzIGNhbGN1bGF0ZWQgaGFzaC4gKi9cXG5mcy9leHQ0L3hhdHRyLmM6NDkwOlxcdGhhc2ggPSBleHQ0X3hhdHRyX2lub2RlX2hhc2goRVhUNF9TQihlYV9pbm9kZS1cXHUwMDNlaV9zYiksIGJ1ZmZlciwgc2l6ZSk7XFxuZnMvZXh0NC94YXR0ci5jOjQ5MTpcXHRpZiAoaGFzaCAhPSBleHQ0X3hhdHRyX2lub2RlX2dldF9oYXNoKGVhX2lub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtNDkyLVxcdFxcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTUyNT1leHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNTI3LXtcXG5mcy9leHQ0L3hhdHRyLmM6NTI4OlxcdHN0cnVjdCBtYl9jYWNoZSAqZWFfaW5vZGVfY2FjaGUgPSBFQV9JTk9ERV9DQUNIRShpbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jOjUyOTpcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbmZzL2V4dDQveGF0dHIuYy01MzAtXFx0aW50IGVycjtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy01MzItXFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KGlub2RlLCBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtKSxcXG5mcy9leHQ0L3hhdHRyLmM6NTMzOlxcdFxcdFxcdFxcdCAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV9oYXNoKSwgXFx1MDAyNmVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTM0LVxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6NTM1OlxcdFxcdGVhX2lub2RlID0gTlVMTDtcXG5mcy9leHQ0L3hhdHRyLmMtNTM2LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTUzOC1cXG5mcy9leHQ0L3hhdHRyLmM6NTM5OlxcdGlmIChpX3NpemVfcmVhZChlYV9pbm9kZSkgIT0gc2l6ZSkge1xcbmZzL2V4dDQveGF0dHIuYzo1NDA6XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYzo1NDE6XFx0XFx0XFx0XFx0ICAgXFxcImVhX2lub2RlIGZpbGUgc2l6ZT0lbGx1IGVudHJ5IHNpemU9JXp1XFxcIixcXG5mcy9leHQ0L3hhdHRyLmM6NTQyOlxcdFxcdFxcdFxcdCAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSwgc2l6ZSk7XFxuZnMvZXh0NC94YXR0ci5jLTU0My1cXHRcXHRlcnIgPSAtRUZTQ09SUlVQVEVEO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTU0Ni1cXG5mcy9leHQ0L3hhdHRyLmM6NTQ3OlxcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfcmVhZChlYV9pbm9kZSwgYnVmZmVyLCBzaXplKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTQ4LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNTUwLVxcbmZzL2V4dDQveGF0dHIuYzo1NTE6XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoZWFfaW5vZGUsIEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSkge1xcbmZzL2V4dDQveGF0dHIuYzo1NTI6XFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV92ZXJpZnlfaGFzaGVzKGVhX2lub2RlLCBlbnRyeSwgYnVmZmVyLFxcbmZzL2V4dDQveGF0dHIuYy01NTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTU0LVxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6NTU1OlxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFQSBpbm9kZSBoYXNoIHZhbGlkYXRpb24gZmFpbGVkXFxcIik7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNTU5LVxcbmZzL2V4dDQveGF0dHIuYzo1NjA6XFx0XFx0aWYgKGVhX2lub2RlX2NhY2hlKVxcbmZzL2V4dDQveGF0dHIuYzo1NjE6XFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfY3JlYXRlKGVhX2lub2RlX2NhY2hlLCBHRlBfTk9GUyxcXG5mcy9leHQ0L3hhdHRyLmM6NTYyOlxcdFxcdFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goZWFfaW5vZGUpLFxcbmZzL2V4dDQveGF0dHIuYzo1NjM6XFx0XFx0XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTY0LVxcdH1cXG5mcy9leHQ0L3hhdHRyLmMtNTY1LW91dDpcXG5mcy9leHQ0L3hhdHRyLmM6NTY2OlxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTU2Ny1cXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTg1MT1pbnQgZXh0NF9nZXRfaW5vZGVfdXNhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCAqdXNhZ2UpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtODU3LVxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcXG5mcy9leHQ0L3hhdHRyLmM6ODU4OlxcdHFzaXplX3QgZWFfaW5vZGVfcmVmcyA9IDA7XFxuZnMvZXh0NC94YXR0ci5jLTg1OS1cXHRpbnQgcmV0O1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTg3Mi1cXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSlcXG5mcy9leHQ0L3hhdHRyLmM6ODczOlxcdFxcdFxcdFxcdGVhX2lub2RlX3JlZnMrKztcXG5mcy9leHQ0L3hhdHRyLmMtODc0LVxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy04OTAtXFx0XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VlX3ZhbHVlX2ludW0pXFxuZnMvZXh0NC94YXR0ci5jOjg5MTpcXHRcXHRcXHRcXHRlYV9pbm9kZV9yZWZzKys7XFxuZnMvZXh0NC94YXR0ci5jLTg5Mi1cXHR9XFxuZnMvZXh0NC94YXR0ci5jOjg5MzpcXHQqdXNhZ2UgPSBlYV9pbm9kZV9yZWZzICsgMTtcXG5mcy9leHQ0L3hhdHRyLmMtODk0LVxcdHJldCA9IDA7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG5mcy9leHQ0L3hhdHRyLmM6OTI1OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTkyNi1cXHRcXHRcXHRcXHRcXHRzaXplX3QgbGVuKVxcbmZzL2V4dDQveGF0dHIuYy05Mjcte1xcbmZzL2V4dDQveGF0dHIuYzo5Mjg6XFx0aWYgKGVhX2lub2RlIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC94YXR0ci5jOjkyOTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpXFxuZnMvZXh0NC94YXR0ci5jLTkzMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTM1PWludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05NjYtXFxuZnMvZXh0NC94YXR0ci5jOjk2NzpcXHQvKiBXZSBhcmUgZG9uZSBpZiBlYV9pbm9kZSBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLiAqL1xcbmZzL2V4dDQveGF0dHIuYzo5Njg6XFx0aWYgKCFleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKHNiKSlcXG5mcy9leHQ0L3hhdHRyLmMtOTY5LVxcdFxcdHJldHVybiBjcmVkaXRzO1xcbmZzL2V4dDQveGF0dHIuYy05NzAtXFxuZnMvZXh0NC94YXR0ci5jOjk3MTpcXHQvKiBOZXcgZWFfaW5vZGUsIGlub2RlIG1hcCwgYmxvY2sgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yLiAqL1xcbmZzL2V4dDQveGF0dHIuYy05NzItXFx0Y3JlZGl0cyArPSA0O1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk4Ni1cXHRpZiAoIWlzX2NyZWF0ZSkge1xcbmZzL2V4dDQveGF0dHIuYzo5ODc6XFx0XFx0LyogRGVyZWZlcmVuY2UgZWFfaW5vZGUgaG9sZGluZyBvbGQgeGF0dHIgdmFsdWUuXFxuZnMvZXh0NC94YXR0ci5jOjk4ODpcXHRcXHQgKiBPbGQgZWFfaW5vZGUsIGlub2RlIG1hcCwgYmxvY2sgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yLlxcbmZzL2V4dDQveGF0dHIuYy05ODktXFx0XFx0ICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtOTkxLVxcbmZzL2V4dDQveGF0dHIuYzo5OTI6XFx0XFx0LyogRGF0YSBibG9ja3MgZm9yIG9sZCBlYV9pbm9kZS4gKi9cXG5mcy9leHQ0L3hhdHRyLmMtOTkzLVxcdFxcdGJsb2NrcyA9IFhBVFRSX1NJWkVfTUFYIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk5NS1cXHRcXHQvKiBJbmRpcmVjdGlvbiBibG9jayBvciBvbmUgbGV2ZWwgb2YgZXh0ZW50IHRyZWUgZm9yIG9sZFxcbmZzL2V4dDQveGF0dHIuYzo5OTY6XFx0XFx0ICogZWFfaW5vZGUuXFxuZnMvZXh0NC94YXR0ci5jLTk5Ny1cXHRcXHQgKi9cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDA0LVxcdC8qIFdlIG1heSBuZWVkIHRvIGNsb25lIHRoZSBleGlzdGluZyB4YXR0ciBibG9jayBpbiB3aGljaCBjYXNlIHdlIG5lZWRcXG5mcy9leHQ0L3hhdHRyLmM6MTAwNTpcXHQgKiB0byBpbmNyZW1lbnQgcmVmIGNvdW50cyBmb3IgZXhpc3RpbmcgZWFfaW5vZGVzIHJlZmVyZW5jZWQgYnkgaXQuXFxuZnMvZXh0NC94YXR0ci5jLTEwMDYtXFx0ICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTAxMS1cXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSlcXG5mcy9leHQ0L3hhdHRyLmM6MTAxMjpcXHRcXHRcXHRcXHQvKiBSZWYgY291bnQgdXBkYXRlIG9uIGVhX2lub2RlLiAqL1xcbmZzL2V4dDQveGF0dHIuYy0xMDEzLVxcdFxcdFxcdFxcdGNyZWRpdHMgKz0gMTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDE3LVxcbmZzL2V4dDQveGF0dHIuYzoxMDE4OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV91cGRhdGVfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTEwMTktXFx0XFx0XFx0XFx0ICAgICAgIGludCByZWZfY2hhbmdlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEwMjQtXFxuZnMvZXh0NC94YXR0ci5jOjEwMjU6XFx0aW5vZGVfbG9ja19uZXN0ZWQoZWFfaW5vZGUsIElfTVVURVhfWEFUVFIpO1xcbmZzL2V4dDQveGF0dHIuYy0xMDI2LVxcbmZzL2V4dDQveGF0dHIuYzoxMDI3OlxcdHJldCA9IGV4dDRfcmVzZXJ2ZV9pbm9kZV93cml0ZShoYW5kbGUsIGVhX2lub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTEwMjgtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDMwLVxcbmZzL2V4dDQveGF0dHIuYzoxMDMxOlxcdHJlZl9jb3VudCA9IGV4dDRfeGF0dHJfaW5vZGVfZ2V0X3JlZihlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEwMzItXFx0aWYgKChyZWZfY291bnQgPT0gMCBcXHUwMDI2XFx1MDAyNiByZWZfY2hhbmdlIFxcdTAwM2MgMCkgfHwgKHJlZl9jb3VudCA9PSBVNjRfTUFYIFxcdTAwMjZcXHUwMDI2IHJlZl9jaGFuZ2UgXFx1MDAzZSAwKSkge1xcbmZzL2V4dDQveGF0dHIuYzoxMDMzOlxcdFxcdGV4dDRfZXJyb3JfaW5vZGUoZWFfaW5vZGUsIF9fZnVuY19fLCBfX0xJTkVfXywgMCxcXG5mcy9leHQ0L3hhdHRyLmMtMTAzNC1cXHRcXHRcXHRcXFwiRUEgaW5vZGUgJWxsdSByZWYgd3JhcGFyb3VuZDogcmVmX2NvdW50PSVsbGQgcmVmX2NoYW5nZT0lZFxcXCIsXFxuZnMvZXh0NC94YXR0ci5jOjEwMzU6XFx0XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCByZWZfY291bnQsIHJlZl9jaGFuZ2UpO1xcbmZzL2V4dDQveGF0dHIuYy0xMDM2LVxcdFxcdGJyZWxzZShpbG9jLmJoKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDQwLVxcdHJlZl9jb3VudCArPSByZWZfY2hhbmdlO1xcbmZzL2V4dDQveGF0dHIuYzoxMDQxOlxcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X3JlZihlYV9pbm9kZSwgcmVmX2NvdW50KTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA0Mi1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDQ0LVxcdFxcdGlmIChyZWZfY291bnQgPT0gMSkge1xcbmZzL2V4dDQveGF0dHIuYzoxMDQ1OlxcdFxcdFxcdFdBUk5fT05DRShlYV9pbm9kZS1cXHUwMDNlaV9ubGluaywgXFxcIkVBIGlub2RlICVsbHUgaV9ubGluaz0ldVxcXCIsXFxuZnMvZXh0NC94YXR0ci5jOjEwNDY6XFx0XFx0XFx0XFx0ICBlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIGVhX2lub2RlLVxcdTAwM2VpX25saW5rKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA0Ny1cXG5mcy9leHQ0L3hhdHRyLmM6MTA0ODpcXHRcXHRcXHRzZXRfbmxpbmsoZWFfaW5vZGUsIDEpO1xcbmZzL2V4dDQveGF0dHIuYzoxMDQ5OlxcdFxcdFxcdGV4dDRfb3JwaGFuX2RlbChoYW5kbGUsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA1MC1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTA1Mi1cXHRcXHRpZiAocmVmX2NvdW50ID09IDApIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTA1MzpcXHRcXHRcXHRXQVJOX09OQ0UoZWFfaW5vZGUtXFx1MDAzZWlfbmxpbmsgIT0gMSxcXG5mcy9leHQ0L3hhdHRyLmMtMTA1NC1cXHRcXHRcXHRcXHQgIFxcXCJFQSBpbm9kZSAlbGx1IGlfbmxpbms9JXVcXFwiLFxcbmZzL2V4dDQveGF0dHIuYzoxMDU1OlxcdFxcdFxcdFxcdCAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCBlYV9pbm9kZS1cXHUwMDNlaV9ubGluayk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNTYtXFxuZnMvZXh0NC94YXR0ci5jOjEwNTc6XFx0XFx0XFx0Y2xlYXJfbmxpbmsoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYzoxMDU4OlxcdFxcdFxcdGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA1OS1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTA2MS1cXG5mcy9leHQ0L3hhdHRyLmM6MTA2MjpcXHRyZXQgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGVhX2lub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNjMtXFx0aWYgKHJldClcXG5mcy9leHQ0L3hhdHRyLmM6MTA2NDpcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTEwNjUtXFx0XFx0XFx0XFx0ICAgXFxcImV4dDRfbWFya19pbG9jX2RpcnR5KCkgZmFpbGVkIHJldD0lZFxcXCIsIHJldCk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNjYtb3V0OlxcbmZzL2V4dDQveGF0dHIuYzoxMDY3OlxcdGlub2RlX3VubG9jayhlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNjgtXFx0cmV0dXJuIHJldDtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDcwLVxcbmZzL2V4dDQveGF0dHIuYzoxMDcxOnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTEwNzIte1xcbmZzL2V4dDQveGF0dHIuYzoxMDczOlxcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgMSk7XFxuZnMvZXh0NC94YXR0ci5jLTEwNzQtfVxcbmZzL2V4dDQveGF0dHIuYy0xMDc1LVxcbmZzL2V4dDQveGF0dHIuYzoxMDc2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuZnMvZXh0NC94YXR0ci5jLTEwNzcte1xcbmZzL2V4dDQveGF0dHIuYzoxMDc4OlxcdHJldHVybiBleHQ0X3hhdHRyX2lub2RlX3VwZGF0ZV9yZWYoaGFuZGxlLCBlYV9pbm9kZSwgLTEpO1xcbmZzL2V4dDQveGF0dHIuYy0xMDc5LX1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMDgxPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDgzLXtcXG5mcy9leHQ0L3hhdHRyLmM6MTA4NDpcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbmZzL2V4dDQveGF0dHIuYy0xMDg1LVxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDk2LVxcdFxcdFxcdFxcdFxcdCAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV9oYXNoKSxcXG5mcy9leHQ0L3hhdHRyLmM6MTA5NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTA5OC1cXHRcXHRpZiAoZXJyKVxcbmZzL2V4dDQveGF0dHIuYy0xMDk5LVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG5mcy9leHQ0L3hhdHRyLmM6MTEwMDpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMDEtXFx0XFx0aWYgKGVycikge1xcbmZzL2V4dDQveGF0dHIuYzoxMTAyOlxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImluYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbmZzL2V4dDQveGF0dHIuYzoxMTAzOlxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTA0LVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG5mcy9leHQ0L3hhdHRyLmMtMTEwNS1cXHRcXHR9XFxuZnMvZXh0NC94YXR0ci5jOjExMDY6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMDctXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTExMjAtXFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX2hhc2gpLFxcbmZzL2V4dDQveGF0dHIuYzoxMTIxOlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTIyLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTI3LVxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MTEyODpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMjktXFx0XFx0aWYgKGVycilcXG5mcy9leHQ0L3hhdHRyLmM6MTEzMDpcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLFxcbmZzL2V4dDQveGF0dHIuYy0xMTMxLVxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuZnMvZXh0NC94YXR0ci5jOjExMzI6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMzMtXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTExNTY9ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTYwLXtcXG5mcy9leHQ0L3hhdHRyLmM6MTE2MTpcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbmZzL2V4dDQveGF0dHIuYy0xMTYyLVxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTgwLVxcbmZzL2V4dDQveGF0dHIuYzoxMTgxOlxcdC8qIE9uZSBjcmVkaXQgZm9yIGRlYyByZWYgb24gZWFfaW5vZGUsIG9uZSBmb3Igb3JwaGFuIGxpc3QgYWRkaXRpb24sICovXFxuZnMvZXh0NC94YXR0ci5jLTExODItXFx0Y3JlZGl0cyA9IDIgKyBleHRyYV9jcmVkaXRzO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTExOTAtXFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX2hhc2gpLFxcbmZzL2V4dDQveGF0dHIuYzoxMTkxOlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTkyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTE5OS1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbmZzL2V4dDQveGF0dHIuYzoxMjAwOlxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcIkVuc3VyZSBjcmVkaXRzIGVycj0lZFxcXCIsXFxuZnMvZXh0NC94YXR0ci5jLTEyMDEtXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTIwMjpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIwMy1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjA4LVxcdFxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTIwOTpcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTEyMTAtXFx0XFx0XFx0XFx0XFx0XFx0XFxcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXFxcIixcXG5mcy9leHQ0L3hhdHRyLmMtMTIxMS1cXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbmZzL2V4dDQveGF0dHIuYzoxMjEyOlxcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjEzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyMTYtXFxuZnMvZXh0NC94YXR0ci5jOjEyMTc6XFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjE4LVxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTIxOTpcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFxcXCIsXFxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIyMi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjI1LVxcdFxcdGlmICghc2tpcF9xdW90YSlcXG5mcy9leHQ0L3hhdHRyLmM6MTIyNjpcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEocGFyZW50LCBlYV9pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTIyNy1cXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplKSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTIyOS1cXHRcXHQvKlxcbmZzL2V4dDQveGF0dHIuYzoxMjMwOlxcdFxcdCAqIEZvcmdldCBhYm91dCBlYV9pbm9kZSB3aXRoaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhhdFxcbmZzL2V4dDQveGF0dHIuYy0xMjMxLVxcdFxcdCAqIGRlY3JlbWVudHMgdGhlIHJlZiBjb3VudC4gVGhpcyBhdm9pZHMgZHVwbGljYXRlIGRlY3JlbWVudHMgaW5cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjM3LVxcbmZzL2V4dDQveGF0dHIuYzoxMjM4OlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjM5LVxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMjYzPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEzMDEtXFxuZnMvZXh0NC94YXR0ci5jOjEzMDI6XFx0XFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IpKVxcbmZzL2V4dDQveGF0dHIuYy0xMzAzLVxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTM1OD1zdGF0aWMgc2l6ZV90IGV4dDRfeGF0dHJfZnJlZV9zcGFjZShzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqbGFzdCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMzc1LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoxMzc2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV93cml0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0xMzc3LVxcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmc2l6ZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMzgwLVxcdHVuc2lnbmVkIGxvbmcgYmxvY2sgPSAwO1xcbmZzL2V4dDQveGF0dHIuYzoxMzgxOlxcdGludCBibG9ja3NpemUgPSBlYV9pbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuZnMvZXh0NC94YXR0ci5jOjEzODI6XFx0aW50IG1heF9ibG9ja3MgPSAoYnVmc2l6ZSArIGJsb2Nrc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIGVhX2lub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuZnMvZXh0NC94YXR0ci5jLTEzODMtXFx0aW50IGNzaXplLCB3c2l6ZSA9IDA7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTM5Mi1cXG5mcy9leHQ0L3hhdHRyLmM6MTM5MzpcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBlYV9pbm9kZSwgXFx1MDAyNm1hcCxcXG5mcy9leHQ0L3hhdHRyLmMtMTM5NC1cXHRcXHRcXHRcXHQgICAgICBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTM5NS1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTM5NjpcXHRcXHRcXHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEzOTctXFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PU1BDIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC94YXR0ci5jOjEzOTg6XFx0XFx0XFx0ICAgIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGVhX2lub2RlLVxcdTAwM2VpX3NiLCBcXHUwMDI2cmV0cmllcykpIHtcXG5mcy9leHQ0L3hhdHRyLmMtMTM5OS1cXHRcXHRcXHRcXHRyZXQgPSAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0MTMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YnVmc2l6ZSAtIHdzaXplO1xcbmZzL2V4dDQveGF0dHIuYzoxNDE0OlxcdFxcdGJoID0gZXh0NF9nZXRibGsoaGFuZGxlLCBlYV9pbm9kZSwgYmxvY2ssIDApO1xcbmZzL2V4dDQveGF0dHIuYy0xNDE1LVxcdFxcdGlmIChJU19FUlIoYmgpKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0MTgtXFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDE5OlxcdFxcdFxcdEVYVDRfRVJST1JfSU5PREUoZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE0MjAtXFx0XFx0XFx0XFx0XFx0IFxcXCJleHQ0X2dldGJsaygpIHJldHVybiBiaCA9IE5VTExcXFwiKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDIyLVxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MTQyMzpcXHRcXHRyZXQgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGVhX2lub2RlLVxcdTAwM2VpX3NiLCBiaCxcXG5mcy9leHQ0L3hhdHRyLmMtMTQyNC1cXHRcXHRcXHRcXHRcXHRcXHQgICBFWFQ0X0pUUl9OT05FKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDM1LVxcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDM2OlxcdFxcdGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgZWFfaW5vZGUsIGJoKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTQzNy1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDQyLVxcbmZzL2V4dDQveGF0dHIuYzoxNDQzOlxcdGlub2RlX2xvY2soZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDQ0OlxcdGlfc2l6ZV93cml0ZShlYV9pbm9kZSwgd3NpemUpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDQ1OlxcdGV4dDRfdXBkYXRlX2lfZGlza3NpemUoZWFfaW5vZGUsIHdzaXplKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ0NjpcXHRpbm9kZV91bmxvY2soZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNDQ3LVxcbmZzL2V4dDQveGF0dHIuYzoxNDQ4OlxcdHJldDIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTE0NDktXFx0aWYgKHVubGlrZWx5KHJldDIgXFx1MDAyNlxcdTAwMjYgIXJldCkpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTQ2MT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0NjMte1xcbmZzL2V4dDQveGF0dHIuYzoxNDY0OlxcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUgPSBOVUxMO1xcbmZzL2V4dDQveGF0dHIuYy0xNDY1LVxcdHVpZF90IG93bmVyWzJdID0geyBpX3VpZF9yZWFkKGlub2RlKSwgaV9naWRfcmVhZChpbm9kZSkgfTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNDc4LVxcdCAqL1xcbmZzL2V4dDQveGF0dHIuYzoxNDc5OlxcdGVhX2lub2RlID0gZXh0NF9uZXdfaW5vZGUoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19yb290LVxcdTAwM2VkX2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0xNDgwLVxcdFxcdFxcdFxcdCAgU19JRlJFRyB8IDA2MDAsIE5VTEwsIGlub2RlLVxcdTAwM2VpX2lubyArIDEsIG93bmVyLFxcbmZzL2V4dDQveGF0dHIuYy0xNDgxLVxcdFxcdFxcdFxcdCAgRVhUNF9FQV9JTk9ERV9GTCk7XFxuZnMvZXh0NC94YXR0ci5jOjE0ODI6XFx0aWYgKCFJU19FUlIoZWFfaW5vZGUpKSB7XFxuZnMvZXh0NC94YXR0ci5jOjE0ODM6XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2ZXh0NF9maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvZXh0NC94YXR0ci5jOjE0ODQ6XFx0XFx0ZWFfaW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmV4dDRfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2V4dDQveGF0dHIuYzoxNDg1OlxcdFxcdGV4dDRfc2V0X2FvcHMoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDg2OlxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ4NzpcXHRcXHR1bmxvY2tfbmV3X2lub2RlKGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ4ODpcXHRcXHRleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoZWFfaW5vZGUsIDEpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDg5OlxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X2hhc2goZWFfaW5vZGUsIGhhc2gpO1xcbmZzL2V4dDQveGF0dHIuYzoxNDkwOlxcdFxcdGVyciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTQ5MS1cXHRcXHRpZiAoIWVycilcXG5mcy9leHQ0L3hhdHRyLmM6MTQ5MjpcXHRcXHRcXHRlcnIgPSBleHQ0X2lub2RlX2F0dGFjaF9qaW5vZGUoZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNDkzLVxcdFxcdGlmIChlcnIpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ5NDpcXHRcXHRcXHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxcbmZzL2V4dDQveGF0dHIuYzoxNDk1OlxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6MjY6NTcuNTAxMTI0MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MDI4MDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGVhX2lub2RlYCBGZWF0dXJlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGVhX2lub2RlYCB0aGluZy4gSXMgaXQgYSBjb25maWd1cmFibGUgb3B0aW9uPyBJIGZlZWwgbGlrZSBJJ3ZlIGVuY291bnRlcmVkIHRoaXMgYmVmb3JlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEV4dDQgS2NvbmZpZyBmaWxlIGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCdzIHdoZXJlIEkgd291bGQgZmluZCB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLiBMZXQgbWUgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzowMi4yNjE0MDg2ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQwNDU5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzowMi4zOTQ4MjQzNTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3MjE3MjM2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIGVhX2lub2RlIGFuZCBFWFQ0KipcblxuUmlnaHQsIHNvICplYV9pbm9kZSogaXNuJ3Qgc29tZXRoaW5nIEkgbmVlZCB0byB3cmFuZ2xlIHdpdGggYXQgY29tcGlsZSB0aW1lLiBJdCdzIGEgZmlsZXN5c3RlbSBmZWF0dXJlLCB3aGljaCBpcyBtdWNoIG1vcmUgbWFuYWdlYWJsZSwgaW4gbXkgZXhwZXJpZW5jZS4gSSB3YXMgaW5pdGlhbGx5IHdvcnJpZWQgSSdkIGhhdmUgdG8gdHdlYWsgc29tZSBvYnNjdXJlIGNvbmZpZ3VyYXRpb24gZmxhZywgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UuIFRoZSBjcnVjaWFsIHRoaW5nLCB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uLCBpcyBgRVhUNF9GU2AuIFRoYXQncyBnb29kIG5ld3MsIGl0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgc2hvdWxkIHJlYWxseSBjaGVjayBvdXQgYGV4dDRfcHV0X2VhX2lub2RlYCBhbmQgYGV4dDRfZWFfaW5vZGVfd29ya2AuIFRob3NlIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkLCBzbyB1bmRlcnN0YW5kaW5nIHRob3NlIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgYGVhX2lub2RlYCBhY3R1YWxseSAqd29ya3MqIHdpdGhpbiBFWFQ0LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiBJJ2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5zaWdodHMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc5NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI3OjE2LjExNjU1MzE3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjQ3OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfcHV0X2VhX2lub2RlfGV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9NTI1PWV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy01NjUtb3V0OlxcbmZzL2V4dDQveGF0dHIuYzo1NjY6XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtNTY3LVxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTA4MT1zdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTEwMi1cXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJpbmMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTEwMzpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTEwNC1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuZnMvZXh0NC94YXR0ci5jLTExMDUtXFx0XFx0fVxcbmZzL2V4dDQveGF0dHIuYzoxMTA2OlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMTA3LVxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMTMxLVxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuZnMvZXh0NC94YXR0ci5jOjExMzI6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTExMzMtXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTExNTY9ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjAxLVxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuZnMvZXh0NC94YXR0ci5jOjEyMDI6XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTEyMDMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTIxMS1cXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbmZzL2V4dDQveGF0dHIuYzoxMjEyOlxcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjEzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyMjAtXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTIyMTpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTIyMi1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMjM3LVxcbmZzL2V4dDQveGF0dHIuYzoxMjM4OlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xMjM5LVxcdFxcdGRpcnR5ID0gdHJ1ZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNDYxPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTQ5Ni1cXHRcXHRcXHRcXHRcXHRcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIiwgZXJyKTtcXG5mcy9leHQ0L3hhdHRyLmM6MTQ5NzpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xNDk4LVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTUxNj1leHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTU1NS1cXHRcXHR9XFxuZnMvZXh0NC94YXR0ci5jOjE1NTY6XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTU1Ny1cXHRuZXh0X2VudHJ5Olxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE1Njc9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTYwNi1vdXRfZXJyOlxcbmZzL2V4dDQveGF0dHIuYzoxNjA3OlxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTE2MDgtXFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE2MTg9c3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE4Mzktb3V0OlxcbmZzL2V4dDQveGF0dHIuYzoxODQwOlxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0xODQxLVxcdHJldHVybiByZXQ7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTg4OD1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwMDEtXFx0XFx0XFx0fVxcbmZzL2V4dDQveGF0dHIuYzoyMDAyOlxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCB0bXBfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yMDAzLVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIxNDEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZXJyb3IpO1xcbmZzL2V4dDQveGF0dHIuYzoyMTQyOlxcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTIxNDMtXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIxOTAtXFx0XFx0fVxcbmZzL2V4dDQveGF0dHIuYzoyMTkxOlxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuZnMvZXh0NC94YXR0ci5jLTIxOTItXFx0fVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIyMzk9aW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjI3Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG5mcy9leHQ0L3hhdHRyLmM6MjI3MzpcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yMjc0LVxcdFxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjg0LVxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjI4NTpcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy0yMjg2LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjkzMS1cXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplKSk7XFxuZnMvZXh0NC94YXR0ci5jOjI5MzI6XFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjkzMy1cXHRcXHRcXHR9XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjk2Mi0gKi9cXG5mcy9leHQ0L3hhdHRyLmM6Mjk2MzpzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL2V4dDQveGF0dHIuYy0yOTY0LXtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yOTkxLSAqL1xcbmZzL2V4dDQveGF0dHIuYzoyOTkyOnZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L3hhdHRyLmMtMjk5My17XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MzAwOD12b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0zMDEwLVxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xcbmZzL2V4dDQveGF0dHIuYzozMDExOlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG5mcy9leHQ0L3hhdHRyLmMtMzAxMi19XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmg9MTg2PWV4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuZnMvZXh0NC94YXR0ci5oOjE4NzpleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmgtMTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzoxNi4yNDE4MDkxMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1NDEzODc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogRXh0ZW5kZWQgQXR0cmlidXRlcyBpbiBleHQ0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBvYnZpb3VzbHkgYWRkaW5nIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzIChFQXMpIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQncyBzZWUsIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGFwcGVhciB0byBiZSBgZXh0NF9wdXRfZWFfaW5vZGVgIGFuZCBgZXh0NF9lYV9pbm9kZV93b3JrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRhcmdldCB0aGVzZSBmb3IgZnV6emluZy5cblxuQnV0IHdhaXQsIGxvb2tpbmcgY2xvc2VyLCBgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrYCBpcyBhbHNvIHJlbGV2YW50LCBldmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYCBpbiBgZnMvZXh0NC94YXR0ci5oYC4gIFRoYXQgbWVhbnMgd2UgY2FuJ3QgZGlyZWN0bHkgZnV6eiBpdCBhcyBhIHN5bWJvbCwgYnV0IHdlIHNob3VsZCBjb25zaWRlciBmdXp6aW5nIGl0cyBjYWxsZXJzLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwga2VlcCBpdCBpbiBtaW5kLiBCZXlvbmQgdGhhdCBJIHNob3VsZCBhbHNvIHRhcmdldCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBhbmQgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LlxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIG9mIGBleHQ0X2VhX2lub2RlX3dvcmtgLiBZZXMsIGl0J3MgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIG1lYW5zIHdlIGNhbid0IGZ1enogYGV4dDRfZWFfaW5vZGVfd29ya2AgZGlyZWN0bHkgZWl0aGVyLiAgU28sIHdlIGNhbiBwcm9iYWJseSBzdW1tYXJpemUgb3VyIGZ1enppbmcgdGFyZ2V0cyBhczpcblxuLSBgZXh0NF9wdXRfZWFfaW5vZGVgIChub24tc3RhdGljKVxuLSBgZXh0NF9lYV9pbm9kZV93b3JrYCAoc3RhdGljLCBjb25zaWRlciBjYWxsZXJzKVxuLSBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgIChub24tc3RhdGljKVxuLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgKG5vbi1zdGF0aWMpXG5cblJpZ2h0LCBub3csIHdoYXQgYWJvdXQgY29uZmlndXJhdGlvbiBvcHRpb25zPyBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgc2V0dGluZ3MgZW5hYmxlZCB0byBldmVuIHRlc3QgdGhlc2UgZnVuY3Rpb25zLiBMZXQncyBzdGFydCB3aXRoIGBFWFQ0X0ZTYC4gVGltZSB0byBkb3VibGUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6Mjc6MjMuMjk1OTUwMTgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc5Mjc3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA5OjI3OjIzLjQ1Mzg4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg1NTIyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZXh0ZW5kZWQgYXR0cmlidXRlcyAoWEFUVFJzKSB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbS4gYEVYVDRfRlNgIHNlZW1zIHRvIGJlIHRoZSBjb3JlLCBidXQgbGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYEVYVDRfRlNfWEFUVFJgIGlzbid0IGRlZmluZWQgb24gaXRzIG93bi4gTm9wZSwgZG9lc24ndCBsb29rIGxpa2UgaXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IE5vLCBpdCdzIG5vdCBsb29raW5nIGxpa2UgaXQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGlwdXRfaWZfbm90X2xhc3RgIGluIGBpbmNsdWRlL2xpbnV4L2ZzLmhgLiBUaGF0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBUaGF0IHRlbGxzIG1lIHdoYXQgdG8gZXhwZWN0LlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6XG4qICAgYGV4dDRfcHV0X2VhX2lub2RlYFxuKiAgIGBleHQ0X2VhX2lub2RlX3dvcmtgXG4qICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYFxuKiAgIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0byB2ZXJpZnkgdGhhdCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgYW5kIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgIGFyZSBzdGF0aWMsIHRob3VnaC4gVGhhdCdzIGFsd2F5cyBpbXBvcnRhbnQgdG8gZG91YmxlLWNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM3NywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwOToyNzozMC40Mzk0MTI0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMjMxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGx8ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MTE1NT1zdGF0aWMgdm9pZFxcbmZzL2V4dDQveGF0dHIuYzoxMTU2OmV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuZnMvZXh0NC94YXR0ci5jLTExNTctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTI2NC1cXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMzAyLVxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiKSlcXG5mcy9leHQ0L3hhdHRyLmM6MTMwMzpcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0xMzA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQkZJUlNUKGJoKSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMTc1LVxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjg5NS1cXHRcXHRpZiAoaGVhZGVyLVxcdTAwM2VoX21hZ2ljID09IGNwdV90b19sZTMyKEVYVDRfWEFUVFJfTUFHSUMpKVxcbmZzL2V4dDQveGF0dHIuYzoyODk2OlxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcXG5mcy9leHQ0L3hhdHRyLmMtMjg5Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIElGSVJTVChoZWFkZXIpLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI5MzYtXFxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVxcdFxcdFxcdFxcdFxcdCBleHRyYV9jcmVkaXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6Mjc6MzAuNTc5NjUyNDI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTE4NDE5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMsIGJ1dCB0aGUgY29yZSB0aG91Z2h0cyByZW1haW4gc3RhdGljLiBUaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhlIHBhdGNoIGlzICpyZW1vdmluZyogdGhlIGBlYV9pbm9kZV9hcnJheWAgYXJndW1lbnQsIHdoaWNoIHJlYWxseSBjYXRjaGVzIG15IGV5ZS4gVGhhdCBhbG9uZSBtYWtlcyB0aGVtIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZWVwZXIgc2NydXRpbnkuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIHJhdGlvbmFsZTogdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgaG93IGV4dDQgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZXMuIEl0J3MgZGVmZXJyaW5nIHRoZSBgaXB1dGAgb3BlcmF0aW9uIOKAkyB3aGljaCBpcyBhIHByZXR0eSBjcnVjaWFsIHJlbGVhc2Ug4oCTIHRvIGEgd29ya3F1ZXVlIHRvIGRvZGdlIHBvdGVudGlhbCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIGNvcmUgZXh0NCBsb2dpYywgYW5kIGNydWNpYWxseSwgaXQncyBzb21ldGhpbmcgdGhhdCBhIHVzZXIgY2FuIHRyaWdnZXIgZnJvbSB1c2Vyc3BhY2UganVzdCBieSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGF04oCZcyBhIGdvb2Qgc2lnbiwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFzIGl0IGFsbG93cyB1cyB0byBlYXNpbHkgaW50ZXJhY3Qgd2l0aCB0aGUgbG9naWMuXG5cblNvLCBoZXJlJ3MgdGhlIHN1bW1hcnkgb2YgbXkgZmluZGluZ3M6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBBYnNvbHV0ZWx5LiBUaGlzIHdhcnJhbnRzIGF0dGVudGlvbi5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBNeSBpbW1lZGlhdGUgdGFyZ2V0cyBhcmUgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYW5kIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIEVBIGlub2RlIGhhbmRsaW5nIGFuZCBhcmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBjb21wb25lbnRzIG9mIHRoZSBtb2RpZmllZCBsb2dpYy5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogSSd2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgRVhUNF9GU2AgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaCB0byBoYXZlIGFuIGVmZmVjdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBvdGhlciBjb25maWcgZmxhZ3MgYXQgdGhpcyB0aW1lLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gbW92ZSBvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdGhlIGZ1enppbmcgcHJvY2VzcyByb2xsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUyNSwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDk6Mjc6MzcuNzcxNDk3MTAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MjE3MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBleHQ0IGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGRlZmVycmluZyB0aGVpciBpcHV0IHRvIGEgd29ya3F1ZXVlIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBleHQ0IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNyZWF0aW5nIGFuZCBkZWxldGluZyBmaWxlcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBkZWZlcnJpbmcgdGhlaXIgaXB1dCB0byBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgZXh0NCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZmlsZXMgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[1] Phase: Succeeded StartedAt: 2026-06-23 09:28:18 +0000 UTC FinishedAt: 2026-06-23 09:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 09:28:18 +0000 UTC FinishedAt: 2026-06-23 09:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2] Phase: Succeeded StartedAt: 2026-06-23 09:28:18 +0000 UTC FinishedAt: 2026-06-23 13:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 09:28:18 +0000 UTC FinishedAt: 2026-06-23 13:51:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 09:28:18 +0000 UTC FinishedAt: 2026-06-23 09:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 09:28:18 +0000 UTC FinishedAt: 2026-06-23 09:28:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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-workflowtv9d9/series-workflowtv9d9-convert-artifact-164069013/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 09:28:51 +0000 UTC FinishedAt: 2026-06-23 10:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 09:28:51 +0000 UTC FinishedAt: 2026-06-23 10:05:22 +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:*314d9b82-e854-4a51-ac7f-a3cac191fd90,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-workflowtv9d9/series-workflowtv9d9-convert-artifact-164069013/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": "3caf4bb1-298a-4969-bf7a-ee1e763ccd53", "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-workflowtv9d9/series-workflowtv9d9-build-action-1116198651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 09:28:51 +0000 UTC FinishedAt: 2026-06-23 10:05:00 +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:*314d9b82-e854-4a51-ac7f-a3cac191fd90,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-workflowtv9d9/series-workflowtv9d9-convert-artifact-164069013/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": "3caf4bb1-298a-4969-bf7a-ee1e763ccd53", "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-workflowtv9d9/series-workflowtv9d9-build-action-1116198651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 10:05:22 +0000 UTC FinishedAt: 2026-06-23 10:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 10:05:22 +0000 UTC FinishedAt: 2026-06-23 10:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 10:05:22 +0000 UTC FinishedAt: 2026-06-23 10:05:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 10:05:22 +0000 UTC FinishedAt: 2026-06-23 10:05:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","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-workflowtv9d9/series-workflowtv9d9-convert-artifact-1182195824/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 10:05:51 +0000 UTC FinishedAt: 2026-06-23 10:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 10:05:51 +0000 UTC FinishedAt: 2026-06-23 10:07:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3caf4bb1-298a-4969-bf7a-ee1e763ccd53,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-workflowtv9d9/series-workflowtv9d9-build-action-1116198651/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-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 10:07:40 +0000 UTC FinishedAt: 2026-06-23 10:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 10:07:40 +0000 UTC FinishedAt: 2026-06-23 10:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 10:07:40 +0000 UTC FinishedAt: 2026-06-23 10:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 10:07:40 +0000 UTC FinishedAt: 2026-06-23 10:43:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*314d9b82-e854-4a51-ac7f-a3cac191fd90,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-workflowtv9d9/series-workflowtv9d9-convert-artifact-1182195824/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": "4e0f013f-686c-4e04-bce5-aa62d168ed30", "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-workflowtv9d9/series-workflowtv9d9-build-action-3607183724/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 10:07:40 +0000 UTC FinishedAt: 2026-06-23 10:43: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:*314d9b82-e854-4a51-ac7f-a3cac191fd90,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-workflowtv9d9/series-workflowtv9d9-convert-artifact-1182195824/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": "4e0f013f-686c-4e04-bce5-aa62d168ed30", "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-workflowtv9d9/series-workflowtv9d9-build-action-3607183724/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 10:43:55 +0000 UTC FinishedAt: 2026-06-23 10:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 10:43:55 +0000 UTC FinishedAt: 2026-06-23 10:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 10:43:55 +0000 UTC FinishedAt: 2026-06-23 10:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 10:43:55 +0000 UTC FinishedAt: 2026-06-23 10:45:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e0f013f-686c-4e04-bce5-aa62d168ed30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtv9d9/series-workflowtv9d9-build-action-3607183724/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-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 10:45:48 +0000 UTC FinishedAt: 2026-06-23 13:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 10:45:48 +0000 UTC FinishedAt: 2026-06-23 13:51:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3caf4bb1-298a-4969-bf7a-ee1e763ccd53,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e0f013f-686c-4e04-bce5-aa62d168ed30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtv9d9/series-workflowtv9d9-build-action-1116198651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtv9d9/series-workflowtv9d9-build-action-3607183724/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 10:45:48 +0000 UTC FinishedAt: 2026-06-23 10:46:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 10:45:48 +0000 UTC FinishedAt: 2026-06-23 10:46:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtv9d9/series-workflowtv9d9-convert-artifact-3886664681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 10:45:48 +0000 UTC FinishedAt: 2026-06-23 10:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 10:45:48 +0000 UTC FinishedAt: 2026-06-23 10:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 10:45:48 +0000 UTC FinishedAt: 2026-06-23 10:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 10:46:20 +0000 UTC FinishedAt: 2026-06-23 13:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtv9d9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_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":["ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_release_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"cea17a2e-fd8e-4afb-9c24-3a6583692d30","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 10:46:20 +0000 UTC FinishedAt: 2026-06-23 13:51:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3caf4bb1-298a-4969-bf7a-ee1e763ccd53,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e0f013f-686c-4e04-bce5-aa62d168ed30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtv9d9/series-workflowtv9d9-build-action-1116198651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtv9d9/series-workflowtv9d9-build-action-3607183724/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtv9d9/series-workflowtv9d9-convert-artifact-3886664681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}