Name: series-workflowc22ph Phase: Succeeded StartedAt: 2026-08-14 02:34:36 +0000 UTC FinishedAt: 2026-08-14 06:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[0] Phase: Succeeded StartedAt: 2026-08-14 02:34:36 +0000 UTC FinishedAt: 2026-08-14 03:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 02:34:36 +0000 UTC FinishedAt: 2026-08-14 03:01:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS", "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS", "HFSPLUS_FS" ], "series_id": "ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfs_btree_open", "hfs_bmap_alloc", "hfsplus_bmap_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7LAogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2J0cmVlX29wZW4mIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMmIzQzOyBCLXRyZWUgaW1wbGVtZW50YXRpb25zIHRvIGRldGVjdCBiaXRtYXAgY29ycnVwdGlvbiAoc3BlY2lmaWNhbGx5LCBlbnN1cmluZyB0aGF0IG5vZGUgaW5kZXggMCwgdGhlIGhlYWRlciBub2RlLCBpcyBtYXJrZWQgYXMgdXNlZCkuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3ZlcndyaXRpbmcgdGhlIGhlYWRlciBub2RlIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzKSBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUyYjNDM7IGZpbGVzeXN0ZW1zIGR1cmluZyBCLXRyZWUgbm9kZSBhbGxvY2F0aW9uIGFuZCBCLXRyZWUgb3BlbmluZy4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBjb3JydXB0ZWQgaW1hZ2VzIHdpdGhvdXQgY3Jhc2hpbmcgb3IgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWY3NjI1MDI2N2Y3MDg0ZGE0MDhkZmU4ODRkOTRkN2ZiYTUwNWQwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDAyOjU5OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmNcbmluZGV4IDJlYjM3YTJmNjRlODYuLjliMGI3NDE4ZGRiZDUgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSwxMiAmIzQzOzE1LDU5IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YnRyZWUuaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHJlY19pZHgsIG9mZiwgbGVuO1xuJiM0MztcdHUzMiBieXRlX29mZnNldDtcbiYjNDM7XHR1OCBieXRlLCBtYXNrO1xuJiM0MztcbiYjNDM7XHRpZiAobm9kZS1cdTAwM2V0aGlzID09IDApIHtcbiYjNDM7XHRcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSEVBREVSKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNfaWR4ID0gMjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9NQVApIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2hmczogaW52YWxpZCBidHJlZSBtYXAgbm9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlY19pZHggPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsIFx1MDAyNm9mZik7XG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGJ5dGVfb2Zmc2V0ID0gbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURTtcbiYjNDM7XHRpZiAoYnl0ZV9vZmZzZXQgXHUwMDNlPSBsZW4pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGJ5dGUgPSBoZnNfYm5vZGVfcmVhZF91OChub2RlLCBvZmYgJiM0MzsgYnl0ZV9vZmZzZXQpO1xuJiM0MztcdG1hc2sgPSAxIFx1MDAzY1x1MDAzYyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBieXRlIFx1MDAyNiBtYXNrO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGNuaWQpIHtcbiYjNDM7XHRjYXNlIEhGU19FWFRfQ05JRDpcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtFeHRlbnRzIE92ZXJmbG93IEZpbGVcJiMzNDs7XG4mIzQzO1x0Y2FzZSBIRlNfQ0FUX0NOSUQ6XG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7Q2F0YWxvZyBGaWxlXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7VW5rbm93biBCLXRyZWVcJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xuIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcbiB7XG4gXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xuIFx0c3RydWN0IGhmc19idHJlZV9oZWFkZXJfcmVjICpoZWFkO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4mIzQzO1x0c3RydWN0IGhmc19ibm9kZSAqbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTU1LDYgJiM0MzsyMDIsMTkgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcbiBcdGt1bm1hcF9sb2NhbChoZWFkKTtcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihub2RlKSlcbiYjNDM7XHRcdGdvdG8gZnJlZV9pbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCAwKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c2ItXHUwMDNlc19pZCwgaGZzX2J0cmVlX25hbWUoaWQpLCBpZCk7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1J1biBmc2NrLmhmcyB0byByZXBhaXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGZzX2Jub2RlX3B1dChub2RlKTtcbiBcdHJldHVybiB0cmVlO1xuIFxuIGZhaWxfZm9saW86XG5AQCAtMzE2LDYgJiM0MzszNzYsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4mIzQzO1x0XHRcdFx0XHRcdGlmICh1bmxpa2VseSghKGlkeCAmIzQzOyBpKSkpIHtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwcl93YXJuKFwmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0aGZzX2J0cmVlX25hbWUodHJlZS1cdTAwM2VjbmlkKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlY25pZCk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cHJfd2FybihcJiMzNDtSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiYjNDM7XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdGlkeCAmIzQzOz0gaTtcbiBcdFx0XHRcdFx0XHRkYXRhW29mZl0gfD0gbTtcbiBcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eSgqcGFnZXApO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuY1xuaW5kZXggMzk0NTQyYTQ3ZTYwMC4uM2VlOTIyNDhiMjQwOSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9idHJlZS5jXG5AQCAtNTYxLDYgJiM0Mzs1NjEsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4mIzQzO1x0XHRcdFx0XHRcdGlmICh1bmxpa2VseSghKGlkeCAmIzQzOyBpKSkpIHtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwcl93YXJuKFwmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0aGZzX2J0cmVlX25hbWUodHJlZS1cdTAwM2VjbmlkKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlY25pZCk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cHJfd2FybihcJiMzNDtSdW4gZnNjay5oZnNwbHVzIHRvIHJlcGFpci5cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlc2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuJiM0MztcdFx0XHRcdFx0XHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4mIzQzO1x0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZHggJiM0Mzs9IGk7XG4gXHRcdFx0XHRcdFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xuIFx0XHRcdFx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OywKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfYm1hcF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcyBpbiB0aGUgSEZTIGFuZCBIRlMmIzQzOyBmaWxlc3lzdGVtcyBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgQi10cmVlIG9wZW5pbmcuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgY29ycnVwdGVkIGltYWdlcyB3aXRob3V0IGNyYXNoaW5nIG9yIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlmNzYyNTAyNjdmNzA4NGRhNDA4ZGZlODg0ZDk0ZDdmYmE1MDVkMDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjo1OTozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmMKaW5kZXggMmViMzdhMmY2NGU4Ni4uOWIwYjc0MThkZGJkNSAxMDA2NDQKLS0tIGEvZnMvaGZzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmMKQEAgLTE1LDEyICYjNDM7MTUsNTkgQEAKIAogI2luY2x1ZGUgJiMzNDtidHJlZS5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpCiYjNDM7ewomIzQzOwl1MTYgcmVjX2lkeCwgb2ZmLCBsZW47CiYjNDM7CXUzMiBieXRlX29mZnNldDsKJiM0MzsJdTggYnl0ZSwgbWFzazsKJiM0MzsKJiM0MzsJaWYgKG5vZGUtJmd0O3RoaXMgPT0gMCkgewomIzQzOwkJaWYgKG5vZGUtJmd0O3R5cGUgIT0gSEZTX05PREVfSEVBREVSKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIGhlYWRlciBub2RlXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwkJcmVjX2lkeCA9IDI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9NQVApIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQlyZWNfaWR4ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgJmFtcDtvZmYpOwomIzQzOwlpZiAoIWxlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJYnl0ZV9vZmZzZXQgPSBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFOwomIzQzOwlpZiAoYnl0ZV9vZmZzZXQgJmd0Oz0gbGVuKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlieXRlID0gaGZzX2Jub2RlX3JlYWRfdTgobm9kZSwgb2ZmICYjNDM7IGJ5dGVfb2Zmc2V0KTsKJiM0MzsJbWFzayA9IDEgJmx0OyZsdDsgKDcgLSAobm9kZV9iaXRfaWR4ICUgQklUU19QRVJfQllURSkpOwomIzQzOwomIzQzOwlyZXR1cm4gYnl0ZSAmYW1wOyBtYXNrOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNuaWQpIHsKJiM0MzsJY2FzZSBIRlNfRVhUX0NOSUQ6CiYjNDM7CQlyZXR1cm4gJiMzNDtFeHRlbnRzIE92ZXJmbG93IEZpbGUmIzM0OzsKJiM0MzsJY2FzZSBIRlNfQ0FUX0NOSUQ6CiYjNDM7CQlyZXR1cm4gJiMzNDtDYXRhbG9nIEZpbGUmIzM0OzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAmIzM0O1Vua25vd24gQi10cmVlJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi8KIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcCkKIHsKIAlzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlOwogCXN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyAqaGVhZDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKJiM0MzsJc3RydWN0IGhmc19ibm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xNTUsNiAmIzQzOzIwMiwxOSBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZQogCWt1bm1hcF9sb2NhbChoZWFkKTsKIAlmb2xpb191bmxvY2soZm9saW8pOwogCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CiYjNDM7CW5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihub2RlKSkKJiM0MzsJCWdvdG8gZnJlZV9pbm9kZTsKJiM0MzsKJiM0MzsJaWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCAwKSkgewomIzQzOwkJcHJfd2FybigmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXG4mIzM0OywKJiM0MzsJCQlzYi0mZ3Q7c19pZCwgaGZzX2J0cmVlX25hbWUoaWQpLCBpZCk7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UnVuIGZzY2suaGZzIHRvIHJlcGFpci5cbiYjMzQ7KTsKJiM0MzsJCXNiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKJiM0MzsJfQomIzQzOwomIzQzOwloZnNfYm5vZGVfcHV0KG5vZGUpOwogCXJldHVybiB0cmVlOwogCiBmYWlsX2ZvbGlvOgpAQCAtMzE2LDYgJiM0MzszNzYsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIAkJCWlmIChieXRlICE9IDB4ZmYpIHsKIAkJCQlmb3IgKG0gPSAweDgwLCBpID0gMDsgaSAmbHQ7IDg7IG0gJmd0OyZndDs9IDEsIGkmIzQzOyYjNDM7KSB7CiAJCQkJCWlmICghKGJ5dGUgJmFtcDsgbSkpIHsKJiM0MzsJCQkJCQlpZiAodW5saWtlbHkoIShpZHggJiM0MzsgaSkpKSB7CiYjNDM7CQkJCQkJCXByX3dhcm4oJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxuJiMzNDssCiYjNDM7CQkJCQkJCQl0cmVlLSZndDtzYi0mZ3Q7c19pZCwKJiM0MzsJCQkJCQkJCWhmc19idHJlZV9uYW1lKHRyZWUtJmd0O2NuaWQpLAomIzQzOwkJCQkJCQkJdHJlZS0mZ3Q7Y25pZCk7CiYjNDM7CQkJCQkJCXByX3dhcm4oJiMzNDtSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxuJiMzNDspOwomIzQzOwkJCQkJCQl0cmVlLSZndDtzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CQkJCQkJCWt1bm1hcF9sb2NhbChkYXRhKTsKJiM0MzsJCQkJCQkJaGZzX2Jub2RlX3B1dChub2RlKTsKJiM0MzsJCQkJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiYjNDM7CQkJCQkJfQogCQkJCQkJaWR4ICYjNDM7PSBpOwogCQkJCQkJZGF0YVtvZmZdIHw9IG07CiAJCQkJCQlzZXRfcGFnZV9kaXJ0eSgqcGFnZXApOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9idHJlZS5jIGIvZnMvaGZzcGx1cy9idHJlZS5jCmluZGV4IDM5NDU0MmE0N2U2MDAuLjNlZTkyMjQ4YjI0MDkgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2J0cmVlLmMKQEAgLTU2MSw2ICYjNDM7NTYxLDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpCiAJCQlpZiAoYnl0ZSAhPSAweGZmKSB7CiAJCQkJZm9yIChtID0gMHg4MCwgaSA9IDA7IGkgJmx0OyA4OyBtICZndDsmZ3Q7PSAxLCBpJiM0MzsmIzQzOykgewogCQkJCQlpZiAoIShieXRlICZhbXA7IG0pKSB7CiYjNDM7CQkJCQkJaWYgKHVubGlrZWx5KCEoaWR4ICYjNDM7IGkpKSkgewomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7KCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cbiYjMzQ7LAomIzQzOwkJCQkJCQkJdHJlZS0mZ3Q7c2ItJmd0O3NfaWQsCiYjNDM7CQkJCQkJCQloZnNfYnRyZWVfbmFtZSh0cmVlLSZndDtjbmlkKSwKJiM0MzsJCQkJCQkJCXRyZWUtJmd0O2NuaWQpOwomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7UnVuIGZzY2suaGZzcGx1cyB0byByZXBhaXIuXG4mIzM0Oyk7CiYjNDM7CQkJCQkJCXRyZWUtJmd0O3NiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKJiM0MzsJCQkJCQkJa3VubWFwX2xvY2FsKGRhdGEpOwomIzQzOwkJCQkJCQloZnNfYm5vZGVfcHV0KG5vZGUpOwomIzQzOwkJCQkJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKJiM0MzsJCQkJCQl9CiAJCQkJCQlpZHggJiM0Mzs9IGk7CiAJCQkJCQlkYXRhW2N0eC5vZmZdIHw9IG07CiAJCQkJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhGUy9IRlMmIzQzOyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2hmcy9idHJlZS5jYCBhbmQgYGZzL2hmc3BsdXMvYnRyZWUuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY29yZSBCLXRyZWUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlc2UgZmlsZXN5c3RlbXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBgaGZzX2JtYXBfdGVzdF9iaXRgIGNoZWNrIHdpdGhpbiBgaGZzX2J0cmVlX29wZW5gIGluIHRoZSBIRlMgY29kZSwgYW5kIGFub3RoZXIgb25lIHdpdGhpbiBgaGZzX2JtYXBfYWxsb2NgIGluICpib3RoKiBIRlMgYW5kIEhGUyYjNDM7LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgaWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgaXQmIzM5O3MgZ29pbmcgdG8gZm9yY2UgdGhlIGZpbGVzeXN0ZW0gaW50byByZWFkLW9ubHkgbW9kZSwgd2hpY2ggbWFrZXMgdG90YWwgc2Vuc2UgZnJvbSBhIGRhdGEgaW50ZWdyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcHJvYWN0aXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZGF0YSBsb3NzLiBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgc29tZXRoaW5nIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIFRodXMsIEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgdGhlIHNjb3BlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBgQ09ORklHX0hGU19GU2AgYW5kIGBDT05GSUdfSEZTUExVU19GU2AsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhvc2UgaW4gdGhlIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBmaWxlcyBpbiBgZnMvaGZzL0tjb25maWdgIGFuZCBgZnMvaGZzcGx1cy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0IGlzIHdvcnRoIGNoZWNraW5nIHdoYXQgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGVzZSBLY29uZmlnIGZpbGVzIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvaGZzL0tjb25maWc6Mjpjb25maWcgSEZTX0ZTXG5mcy9oZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXAgaW50byBIRlMmIzQzOyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBIRlMmIzQzOyBoZXJlLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgY2hhbGxlbmdlcyBvZiBpdHMgZGVzaWduLiBUaGUgY2xhc3NpYyBoaWVyYXJjaGljYWwgZmlsZSBzeXN0ZW0sIGEgY29ybmVyc3RvbmUgb2YgbWFjT1MgZm9yIHllYXJzLiBJIGZpbmQgbXlzZWxmIGNvbnNpZGVyaW5nIGl0cyBzdHJ1Y3R1cmUg4oCTIHRoZSBCLXRyZWUgbWV0YWRhdGEsIHRoZSB2b2x1bWUgaGVhZGVyLCB0aGUgYWxsb2NhdGlvbiBibG9ja3MsIGFuZCBhbGwgdGhlIGludHJpY2FjaWVzIG9mIG1hbmFnaW5nIGJvdGggZGF0YSBhbmQgbWV0YWRhdGEgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24gdW5pdC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXRzIGxpbWl0YXRpb25zLiBUaGUgMiBHQiBmaWxlIHNpemUgbGltaXQgaW4gZWFybGllciBpdGVyYXRpb25zLiBUaGUgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgb24gbGFyZ2VyIGRyaXZlcywgd2hpY2ggYWx3YXlzIGxlZCB0byBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gVGhlIGluaGVyZW50IGZyYWdpbGl0eSBvZiB0aGUgY2F0YWxvZyBmaWxlLiBJJiMzOTttIHJlY2FsbGluZyB0aGUgY2xldmVyIHdvcmthcm91bmRzIEFwcGxlIGVtcGxveWVkIHRvIG1pdGlnYXRlIHNvbWUgb2YgdGhlc2UgcHJvYmxlbXMsIHN1Y2ggYXMgdGhlIGV4dGVudCBvdmVyZmxvdyBmaWxlLiBJJiMzOTttIHdvbmRlcmluZyBob3cgdGhvc2UgdGVjaG5pcXVlcyBwZXJmb3JtZWQgaW4gcmVhbCB3b3JsZCBzY2VuYXJpb3MuCgpBbmQgdGhlbiB0aGUgam91cm5hbGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBqb3VybmFsaW5nIHdhcyBhIGh1Z2Ugc3RlcCwgYnV0IEkmIzM5O20gcmVtZW1iZXJpbmcgdGhlIGRlYmF0ZXMgYWJvdXQgaXRzIGltcGxlbWVudGF0aW9uLiBUaGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eSwgdGhlIHBvdGVudGlhbCBmb3IgZGF0YSBsb3NzIGluIHRoZSBldmVudCBvZiBjYXRhc3Ryb3BoaWMgZmFpbHVyZXMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLCB3b25kZXJpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCBjb25zaXN0ZW5jeSBtb2RlcyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBJJiMzOTttIHF1ZXN0aW9uaW5nIGhvdyBIRlMmIzQzOyB3YXMgYWJsZSB0byBzY2FsZSBhbmQgcGVyZm9ybSBpbiBkaWZmZXJlbnQgY29uZGl0aW9ucyBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGltZS4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIEl0IHdhcyBhIGdvb2QgZGVzaWduLCBidXQgY2VydGFpbmx5IG5vdCB3aXRob3V0IGl0cyBpc3N1ZXMgd2hlbiBtb3ZpbmcgZmlsZXMgYmV0d2VlbiBzeXN0ZW1zLiBJIGFtIHJ1bm5pbmcgdGhyb3VnaCB2YXJpb3VzIGRlc2lnbiBjaG9pY2VzLCBzdWNoIGFzIHRoZSB1c2Ugb2YgcmVzb3VyY2UgZm9ya3MsIGFuZCBob3cgdGhvc2Ugd2VyZSBlaXRoZXIgZW1icmFjZWQgb3IgcHJvYmxlbWF0aWMuCgpGaW5hbGx5LCBJJiMzOTttIHJlZmxlY3Rpbmcgb24gaXRzIGxlZ2FjeS4gVGhlIHBhdGggdG8gQVBGUyDigJMgdGhlIGV2b2x1dGlvbmFyeSBzdGVwcyB0aGF0IHdlcmUgdGFrZW4sIHRoZSBsZXNzb25zIGxlYXJuZWQgZnJvbSBIRlMmIzQzOy4gSG93IEFQRlMgYWRkcmVzc2VkIGl0cyBwcmVkZWNlc3NvcnMmIzM5OyBzaG9ydGNvbWluZ3MuIEkgYW0gYXdhcmUgb2YgdGhlIGNvbnRpbnVlZCBwcmVzZW5jZSBvZiBIRlMmIzQzOyBvbiBvbGRlciBzeXN0ZW1zLCBhbmQgSSBoYXZlIHRvIGFzayBteXNlbGYsICYjMzQ7RG9lcyBIRlMmIzQzOyBzdGlsbCBob2xkIHZhbHVlPyYjMzQ7CgpVbHRpbWF0ZWx5LCBJIHJlYWxpemUgdGhhdCBIRlMmIzQzOyB3YXMgYSBjb21wbGV4IHBpZWNlIG9mIGVuZ2luZWVyaW5nLCByZWZsZWN0aW5nIHRoZSBjb25zdHJhaW50cyBvZiBpdHMgdGltZS4gSXQgd2FzIGEgZ29vZCBkZXNpZ24sIGJ1dCBhIHJlbGljIGluIHRoZSBtb2Rlcm4gd29ybGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhGU1BMVVNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xuZnMvaGZzcGx1cy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25mbGljdHMgaW4gSEZTL0hGUyYjNDM7IEItVHJlZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIHNwZWNpZmljYWxseSBpbiB0aGUgSEZTIGFuZCBIRlMmIzQzOyBmaWxlIHN5c3RlbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVkIGFzIGBzdGF0aWNgIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGZpbGVzPyBJZiB0aGV5IGFyZSwgdGhlbiB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRob3NlIGZpbGVzIGFuZCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBleHRlcm5hbCBsaW5rYWdlIGlzc3Vlcy4gSWYgbm90Li4uIHdlbGwsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgSSBuZWVkIHRvIGRlbHZlIGRlZXBlci4KCkkgc2VlIHRoZSBkZWNsYXJhdGlvbnM6IGBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApYCBhbmQgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYCBpbiBgZnMvaGZzL2J0cmVlLmNgLCBhbG9uZyB3aXRoIGEgcmVwZWF0IG9mIGBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKWAgaW4gYGZzL2hmc3BsdXMvYnRyZWUuY2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGNhbiB0ZWxsIHRoZXNlIGFyZW4mIzM5O3Qgc3RhdGljIGRlY2xhcmF0aW9ucyBiZWNhdXNlIHRoZXkmIzM5O3JlIGJlaW5nIGV4cG9ydGVkLCBhdCBsZWFzdCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2Ugb2YgdGhhdCBrZXl3b3JkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGZvciBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBiZXR3ZWVuIHRoZSBIRlMgYW5kIEhGUyYjNDM7IGltcGxlbWVudGF0aW9ucyBvZiBgaGZzX2JtYXBfYWxsb2NgLiBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBgZnMvaGZzL2J0cmVlLmNgIGZpbGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYnRyZWVfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcy9idHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmcy9idHJlZS5jPTUyPXN0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcbi0tXG5mcy9oZnMvYnRyZWUuYy02NC0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbmZzL2hmcy9idHJlZS5jOjY1OnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcbmZzL2hmcy9idHJlZS5jLTY2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEItdHJlZSBBbGxvY2F0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSEZTJiM0MzsgYm1hcCBhbGxvY2F0b3Igd29ya3MuIFRoYXQgc3VnZ2VzdHMgYSBkZWVwIGRpdmUgaW50byB0aGUgYGZzL2hmcy9idHJlZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgYmxvY2tzIHdpdGhpbiB0aGUgSEZTJiM0MzsgQi10cmVlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBmaWxlIHN5c3RlbSBzdHJ1Y3R1cmUgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIGZyZWUgc3BhY2UsIGhhbmRsZXMgZnJhZ21lbnRhdGlvbiAob3IgYXR0ZW1wdHMgdG8gbWl0aWdhdGUgaXQpLCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIG1ldGFkYXRhLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gbG93ZXItbGV2ZWwgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZSBwaHlzaWNhbCBkaXNrIGFjY2Vzcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MpIG9mIEhGUyYjNDM7IGxpZXMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBmb3IgdGhlIGFsbG9jYXRpb24gYWxnb3JpdGhtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMvYnRyZWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYnRyZWUuYz0zMjI9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXG4tLVxuZnMvaGZzL2J0cmVlLmMtMzQ0LVxuZnMvaGZzL2J0cmVlLmM6MzQ1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG5mcy9oZnMvYnRyZWUuYy0zNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgSEZTJiM0MzsgQi1UcmVlIEFsbG9jYXRpb24gTWVjaGFuaXNtKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSEZTJiM0MzsgZmlsZSBzeXN0ZW0gYWxsb2NhdGVzIHNwYWNlIHZpYSBpdHMgQi1UcmVlIHN0cnVjdHVyZS4gU2luY2UgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBmcy9oZnNwbHVzL2J0cmVlLmNgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEItVHJlZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgSEZTJiM0MzsgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBJIG5lZWQgdG8gcGlucG9pbnQgd291bGQgYmUgYGhmc19ibWFwX2FsbG9jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHNjcmVhbXMgJiMzNDtibG9jayBtYXAgYWxsb2NhdGlvbiYjMzQ7IHRvIG1lLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCBJIG5lZWQgdG8gZXhwbG9yZS4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBIRlMmIzQzOyBmaWxlIHN5c3RlbSBtYW5hZ2VzIGRpc2sgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9idHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYnRyZWUuYz00OTk9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTUyNy1cbmZzL2hmc3BsdXMvYnRyZWUuYzo1Mjg6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbmZzL2hmc3BsdXMvYnRyZWUuYy01Mjkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlN5bWJvbCBSZXNvbHV0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gYWRkaW5nIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgdG8gRm9jdXNTeW1ib2xzLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEkganVzdCByZW1lbWJlcmVkIHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpcyBkZWZpbmVkIGluIGJvdGggYGhmc2AgYW5kIGBoZnNwbHVzYC4gTm93LCBTeXprYWxsZXIgKm1pZ2h0KiBjaG9rZSBvbiB0aGF0IGlmIHRoZXJlJiMzOTtzIGEgbmFtZSBjb2xsaXNpb24sIGV2ZW4gdGhvdWdoIEkmIzM5O20gcHJldHR5IHN1cmUgdGhlc2UgYXJlIGNvbXBpbGVkIGludG8gc2VwYXJhdGUgbW9kdWxlcy4gU3RpbGwsIEkgc2hvdWxkIGNvbmZpcm0gdGhleSYjMzk7cmUgYWN0dWFsbHkgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm90IGp1c3Qgbm9uLXN0YXRpYyBsb2NhbCBmdW5jdGlvbnMuIExldCBtZSBkb3VibGUtY2hlY2suCgpBaCwgcmlnaHQuIEluIGBoZnNwbHVzYCwgdGhlIGZ1bmN0aW9uJiMzOTtzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGlzIGBoZnNfYm1hcF9hbGxvY2AsIG5vdCBqdXN0IGBibWFwX2FsbG9jYC4gT2theSwgbm93LCBkb2VzIGBoZnNwbHVzYCBldmVuICp1c2UqIHRoaXMgdmVyc2lvbiwgb3IgaXMgdGhlcmUgYW5vdGhlciBvbmU/IFllcyEgSXQgaXMgaW5kZWVkIGRlZmluZWQgaW4gYGZzL2hmc3BsdXMvYnRyZWUuY2AuIE9rYXksIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXQgbWlnaHQgYmUgd29ydGggdmVyaWZ5aW5nIHRoaXMuIExldCBtZSBsb29rIGluIGBmcy9oZnNwbHVzL2J0cmVlLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZC4gSSBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2JyZWMuYz0yMzU9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjQ3LVx0bm9kZSA9IGZkLVx1MDAzZWJub2RlO1xuZnMvaGZzcGx1cy9icmVjLmM6MjQ4Olx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTI0OS1cdGlmIChJU19FUlIobmV3X25vZGUpKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTQ3MD1zdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtNDgyLVx0fVxuZnMvaGZzcGx1cy9icmVjLmM6NDgzOlx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTQ4NC1cdGlmIChJU19FUlIobmV3X25vZGUpKSB7XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTQ5OT1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcylcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI3LVxuZnMvaGZzcGx1cy9idHJlZS5jOjUyODpzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuZnMvaGZzcGx1cy9idHJlZS5jLTUyOS17XG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4OS0jZGVmaW5lIGhmc19ibWFwX3Jlc2VydmUgaGZzcGx1c19ibWFwX3Jlc2VydmVcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjI5MDojZGVmaW5lIGhmc19ibWFwX2FsbG9jIGhmc3BsdXNfYm1hcF9hbGxvY1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjkxLSNkZWZpbmUgaGZzX2JtYXBfZnJlZSBoZnNwbHVzX2JtYXBfZnJlZVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM2Nj1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcyk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozNjc6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zNjgtdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIHRoZSBIRlMmIzQzOyBCbWFwIEFsbG9jYXRpb24gRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyBhYm91dCB0aGUgSEZTJiM0MzsgYm1hcCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBgaGZzX2JtYXBfYWxsb2NgIHNvbWV3aGVyZSwgYnV0IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyBqdXN0IGEgbWFjcm8uIFJpZ2h0LCBsb29raW5nIGluIGBmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaGAsIGl0JiMzOTtzIGNsZWFyOiBgaGZzX2JtYXBfYWxsb2NgIGlzIGluZGVlZCBqdXN0IGEgbWFjcm8gZGVmaW5pdGlvbiBmb3IgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbiBgaGZzcGx1c2AsIHdoaWNoIGlzIGBoZnNwbHVzX2JtYXBfYWxsb2NgLiBKdXN0IHdhbnQgdG8gbG9jayB0aGF0IGRvd24gaW4gbXkgaGVhZCBhbmQga2VlcCB0aGF0IHN0cmFpZ2h0LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gdXNlIGBoZnNwbHVzX2JtYXBfYWxsb2NgIHdoZW4gSSYjMzk7bSBhY3R1YWxseSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGJlIHN1cmUuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGV4dHJhIGNhcmVmdWwsIGVzcGVjaWFsbHkgd2l0aCBzb21ldGhpbmcgZnVuZGFtZW50YWwgbGlrZSBibG9jayBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNwbHVzX2JtYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjg5LSNkZWZpbmUgaGZzX2JtYXBfcmVzZXJ2ZSBoZnNwbHVzX2JtYXBfcmVzZXJ2ZVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MjkwOiNkZWZpbmUgaGZzX2JtYXBfYWxsb2MgaGZzcGx1c19ibWFwX2FsbG9jXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yOTEtI2RlZmluZSBoZnNfYm1hcF9mcmVlIGhmc3BsdXNfYm1hcF9mcmVlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIRlMmIzQzOyBCLXRyZWUgQWxsb2NhdGlvbiBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgYXMgYGhmc3BsdXNfYm1hcF9hbGxvY2AuIFNvLCBvbiB0aGUgc3VyZmFjZSwgdGhlIGNvbXBpbGVyIGlzIGdvaW5nIHRvIHNlZSBgaGZzcGx1c19ibWFwX2FsbG9jYCB3aGVuIGl0IGNvbXBpbGVzLiBCdXQgd2FpdCwgaW4gYGZzL2hmc3BsdXMvYnRyZWUuY2AsIGl0JiMzOTtzIGFjdHVhbGx5IGRlZmluZWQgYXMgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYC4gTm93LCB3aHkgdGhlIG5hbWUgZGlzY3JlcGFuY3k/IEFoLCBJIHNlZSwgYmVjYXVzZSBgYnRyZWUuY2AgaW5jbHVkZXMgYGhmc3BsdXNfZnMuaGAsIHRoZSBwcmVwcm9jZXNzb3IgaXMgaGFuZGxpbmcgdGhlIGNoYW5nZS4gSXQmIzM5O3MgbWFjcm8taW5nIGBoZnNfYm1hcF9hbGxvY2AgdG8gYmUgYGhmc3BsdXNfYm1hcF9hbGxvY2AgYmVmb3JlIHRoZSBjb21waWxlciBldmVuIGdldHMgaXRzIGhhbmRzIG9uIHRoZSBjb2RlLiBUaGlzIGlzIGxpa2VseSBkb25lIHRvIGtlZXAgdGhlIGNvZGViYXNlIGNsZWFuZXIgb3IgbWFuYWdlIHNvbWUgc29ydCBvZiB2ZXJzaW9uaW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgaGZzX2J0cmVlX29wZW5gIGlzIHRyZWF0ZWQgc2ltaWxhcmx5IHdpdGhpbiBgaGZzcGx1c2AuLi4gSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG5hbWUgbWFwcGluZyBhcHByb2FjaCB3aXRoaW4gdGhpcyBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9idHJlZS5jPTI1Mz1zdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTI2Ny0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbmZzL2hmc3BsdXMvYnRyZWUuYzoyNjg6c3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkKVxuZnMvaGZzcGx1cy9idHJlZS5jLTI2OS17XG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4NS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjI4NjojZGVmaW5lIGhmc19idHJlZV9vcGVuIGhmc3BsdXNfYnRyZWVfb3BlblxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjg3LSNkZWZpbmUgaGZzX2J0cmVlX2Nsb3NlIGhmc3BsdXNfYnRyZWVfY2xvc2Vcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zNjE9dTMyIGhmc3BsdXNfY2FsY19idHJlZV9jbHVtcF9zaXplKHUzMiBibG9ja19zaXplLCB1MzIgbm9kZV9zaXplLCB1NjQgc2VjdG9ycyxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM2Mi1cdFx0XHRcdCAgaW50IGZpbGVfaWQpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzYzOnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zNjQtdm9pZCBoZnNfYnRyZWVfY2xvc2Uoc3RydWN0IGhmc19idHJlZSAqdHJlZSk7XG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jPTQ1Mj1zdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTU0NS1cdC8qIExvYWQgbWV0YWRhdGEgb2JqZWN0cyAoQipUcmVlcykgKi9cbmZzL2hmc3BsdXMvc3VwZXIuYzo1NDY6XHRzYmktXHUwMDNlZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19FWFRfQ05JRCk7XG5mcy9oZnNwbHVzL3N1cGVyLmMtNTQ3LVx0aWYgKCFzYmktXHUwMDNlZXh0X3RyZWUpIHtcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtNTUwLVx0fVxuZnMvaGZzcGx1cy9zdXBlci5jOjU1MTpcdHNiaS1cdTAwM2VjYXRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0NBVF9DTklEKTtcbmZzL2hmc3BsdXMvc3VwZXIuYy01NTItXHRpZiAoIXNiaS1cdTAwM2VjYXRfdHJlZSkge1xuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy01NTctXHRpZiAodmhkci1cdTAwM2VhdHRyX2ZpbGUudG90YWxfYmxvY2tzICE9IDApIHtcbmZzL2hmc3BsdXMvc3VwZXIuYzo1NTg6XHRcdHNiaS1cdTAwM2VhdHRyX3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19BVFRSX0NOSUQpO1xuZnMvaGZzcGx1cy9zdXBlci5jLTU1OS1cdFx0aWYgKCFzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy0zMjEtXG5mcy9oZnNwbHVzL3hhdHRyLmM6MzIyOlx0c2JpLVx1MDAzZWF0dHJfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0FUVFJfQ05JRCk7XG5mcy9oZnNwbHVzL3hhdHRyLmMtMzIzLVx0aWYgKCFzYmktXHUwMDNlYXR0cl90cmVlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEhGUyBCLVRyZWUgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5IHRob3VnaHQgaXQgd2FzIHRvdWNoaW5nIHRoZSBgaGZzcGx1c2Agc2lkZSBvZiB0aGluZ3MsIGJ1dCBJJiMzOTttIG5vdyBjZXJ0YWluIEkgbmVlZCB0byByZS1ldmFsdWF0ZS4gSXQgYXBwZWFycyB0aGUgY29kZSBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGhmc19idHJlZV9vcGVuYCB3aXRoaW4gdGhlIGBmcy9oZnMvYnRyZWUuY2AgZmlsZSBhbmQgbm90IHRoZSBgaGZzcGx1c2AgdmVyc2lvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYWdhaW4gYnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgZGlmZjoKCmBgYGRpZmYKLS0tIGEvZnMvaGZzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmMKQEAgLTE1LDEyICYjNDM7MTUsNTkgQEAKIAogI2luY2x1ZGUgJiMzNDtidHJlZS5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpCi4uLgogc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2V5Y21wKQouLi4KQEAgLTMxNiw2ICYjNDM7Mzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpCi4uLgotLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9idHJlZS5jCkBAIC01NjEsNiAmIzQzOzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKQpgYGAKClJpZ2h0LCBjb25maXJtZWQuIEl0JiMzOTtzIHRoZSBgaGZzYCB2ZXJzaW9uIHRoYXQmIzM5O3MgYmVpbmcgdG91Y2hlZC4gVGhhdCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGhmc2Agc2lkZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgaGZzX2J0cmVlX29wZW5gLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBoZnNfYm1hcF9hbGxvY2Agb24gdGhlIGBoZnNgIHNpZGUgYW5kIGBoZnNwbHVzX2JtYXBfYWxsb2NgIG9uIHRoZSBgaGZzcGx1c2Agc2lkZS4KCk5vdywgbGV0IG1lIGNoZWNrIGlmIGBoZnNfYnRyZWVfb3BlbmAgaW4gYGhmc2AgaXMgZXhwb3J0ZWQgb3IgaWYgaXQmIzM5O3MgaW50ZXJuYWwuIFNpbmNlIGl0IGlzbiYjMzk7dCBzdGF0aWMsIGl0JiMzOTtzIHByZXN1bWFibHkgZXhwb3J0ZWQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBmcy9oZnMvYnRyZWUuaGAgb3IgcmVsYXRlZCBoZWFkZXJzIHRvIHNlZSBpZiBpdCYjMzk7cyBiZWluZyBtYWNyb2VkIGFueXdoZXJlLCBqdXN0IGluIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYnRyZWUuYz01Mj1zdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4tLVxuZnMvaGZzL2J0cmVlLmMtNjQtLyogR2V0IGEgcmVmZXJlbmNlIHRvIGEgQipUcmVlIGFuZCBkbyBzb21lIGluaXRpYWwgY2hlY2tzICovXG5mcy9oZnMvYnRyZWUuYzo2NTpzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG5mcy9oZnMvYnRyZWUuYy02Ni17XG4tLVxuZnMvaGZzL2J0cmVlLmg9Nzc9c3RydWN0IGhmc19maW5kX2RhdGEge1xuLS1cbmZzL2hmcy9idHJlZS5oLTg4LS8qIGJ0cmVlLmMgKi9cbmZzL2hmcy9idHJlZS5oOjg5OmV4dGVybiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsXG5mcy9oZnMvYnRyZWUuaC05MC1cdFx0XHRcdFx0YnRyZWVfa2V5Y21wIGtleWNtcCk7XG4tLVxuZnMvaGZzL21kYi5jPTk0PWludCBoZnNfbWRiX2dldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmcy9tZGIuYy0yMjctXG5mcy9oZnMvbWRiLmM6MjI4Olx0SEZTX1NCKHNiKS1cdTAwM2VleHRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNfRVhUX0NOSUQsIGhmc19leHRfa2V5Y21wKTtcbmZzL2hmcy9tZGIuYy0yMjktXHRpZiAoIUhGU19TQihzYiktXHUwMDNlZXh0X3RyZWUpIHtcbi0tXG5mcy9oZnMvbWRiLmMtMjMyLVx0fVxuZnMvaGZzL21kYi5jOjIzMzpcdEhGU19TQihzYiktXHUwMDNlY2F0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTX0NBVF9DTklELCBoZnNfY2F0X2tleWNtcCk7XG5mcy9oZnMvbWRiLmMtMjM0LVx0aWYgKCFIRlNfU0Ioc2IpLVx1MDAzZWNhdF90cmVlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBIRlMgQi1UcmVlIEFsbG9jYXRpb24gUm91dGluZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgSEZTIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBCLXRyZWUgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIEZpcnN0IG9ic2VydmF0aW9uOiB0aGVzZSByb3V0aW5lcyBhcmVuJiMzOTt0IG1hY3JvZWQuIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzZWFyY2gg4oCTIG5vIGhpZGRlbiBjb21wbGV4aXR5IHRoZXJlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYGhmc19idHJlZV9vcGVuYCwgYGhmc19ibWFwX2FsbG9jYCwgYW5kIGBoZnNwbHVzX2JtYXBfYWxsb2NgLgoKSG9sZCBvbi4uLiBJJiMzOTttIGp1c3QgZG91YmxlIGNoZWNraW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpbiBgZnMvaGZzL2J0cmVlLmNgICphbHNvKiBpc24mIzM5O3QgbWFjcm9lZCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNhdyBpdCB3YXMgbm90IGJ1dCBJIG11c3QgZG91YmxlIGNoZWNrISBPa2F5LCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYnJlYy5jPTI1MD1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnMvYnJlYy5jLTI1OS1cdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbmZzL2hmcy9icmVjLmM6MjYwOlx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcbmZzL2hmcy9icmVjLmMtMjYxLVx0aWYgKElTX0VSUihuZXdfbm9kZSkpXG4tLVxuZnMvaGZzL2JyZWMuYz00Nzc9c3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuLS1cbmZzL2hmcy9icmVjLmMtNDg5LVx0fVxuZnMvaGZzL2JyZWMuYzo0OTA6XHRuZXdfbm9kZSA9IGhmc19ibWFwX2FsbG9jKHRyZWUpO1xuZnMvaGZzL2JyZWMuYy00OTEtXHRpZiAoSVNfRVJSKG5ld19ub2RlKSkge1xuLS1cbmZzL2hmcy9idHJlZS5jPTMyMj1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcylcbi0tXG5mcy9oZnMvYnRyZWUuYy0zNDQtXG5mcy9oZnMvYnRyZWUuYzozNDU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbmZzL2hmcy9idHJlZS5jLTM0Ni17XG4tLVxuZnMvaGZzL2J0cmVlLmg9OTM9ZXh0ZXJuIGludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKTtcbmZzL2hmcy9idHJlZS5oOjk0OmV4dGVybiBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcbmZzL2hmcy9idHJlZS5oLTk1LWV4dGVybiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTA0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIRlMvSEZTJiM0MzsgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIHJhdyBzeW1ib2xzIGhlcmUsIG5vdGhpbmcgbWFjcm9lZC4gVGhlIG9uZXMgSSYjMzk7bSBzZWVpbmcgYXJlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzcGx1c19ibWFwX2FsbG9jYC4KCk5vdywgSSB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGBoZnNwbHVzX2JtYXBfYWxsb2NgIGlzIHRoZSBjb3JyZWN0IG5hbWUgd2l0aGluIHRoZSBgaGZzcGx1c2AgY29udGV4dC4gQSBxdWljayBwZWVrIGF0IGBmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaGAgY29uZmlybXMgaXQ6IGAjZGVmaW5lIGhmc19ibWFwX2FsbG9jIGhmc3BsdXNfYm1hcF9hbGxvY2AuIFNvLCB0aGUgYWN0dWFsIGZ1bmN0aW9uIGRlZmluZWQgYXMgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYCBpbiBgZnMvaGZzcGx1cy9idHJlZS5jYCBpcywgdW5kZXIgdGhlIGhvb2QsIGBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNwbHVzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlgLiBFeGNlbGxlbnQuIFRoYXQgY2xlYXJzIHRoYXQgdXAuCgpNb3Zpbmcgb24sIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgSEZTX0ZTYCBhbmQgYEhGU1BMVVNfRlNgLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBoZXJlLiBBIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXM6IEJvdGggYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYCBkZXBlbmQgb24gYEJMT0NLYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayBgZnMvaGZzL0tjb25maWdgIGFuZCBgZnMvaGZzcGx1cy9LY29uZmlnYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgTWFjaW50b3NoLWZvcm1hdHRlZFxuICAxMDpcdFx0ICBmbG9wcHkgZGlza3MgYW5kIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDExOlx0XHQgIFBsZWFzZSByZWFkIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XHUwMDNlIHRvIGxlYXJuIGFib3V0XG4gIDEyOlx0XHQgIHRoZSBhdmFpbGFibGUgbW91bnQgb3B0aW9ucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBIRlNfS1VOSVRfVEVTVFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIEhGUyBmaWxlc3lzdGVtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMTk6XHRcdGRlcGVuZHMgb24gSEZTX0ZTIFx1MDAyNlx1MDAyNiBLVU5JVFxuICAyMDpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgRmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLkkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGZzL2hmc3BsdXMvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHN1cHBvcnQgaXMgYmVpbmcgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gcGxhbm5pbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgZW5oYW5jZW1lbnRzIHRvIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIE1hYy1mb3JtYXR0ZWQgZHJpdmVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIEtjb25maWcgZmlsZXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQtdGltZSBhbmQgcnVuLXRpbWUgYXNwZWN0cyBvZiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSEZTUExVU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IE5MU19VVEY4XG4gICA4Olx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcbiAgMTE6XHRcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxuICAxMjpcdFxuICAxMzpcdFx0ICBUaGlzIGZpbGUgc3lzdGVtIGlzIG9mdGVuIGNhbGxlZCBIRlMmIzQzOyBhbmQgd2FzIGludHJvZHVjZWQgd2l0aFxuICAxNDpcdFx0ICBNYWNPUyA4LiBJdCBpbmNsdWRlcyBhbGwgTWFjIHNwZWNpZmljIGZpbGVzeXN0ZW0gZGF0YSBzdWNoIGFzXG4gIDE1Olx0XHQgIGRhdGEgZm9ya3MgYW5kIGNyZWF0b3IgY29kZXMsIGJ1dCBpdCBhbHNvIGhhcyBzZXZlcmFsIFVOSVhcbiAgMTY6XHRcdCAgc3R5bGUgZmVhdHVyZXMgc3VjaCBhcyBmaWxlIG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMuXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIEhGUyYjNDM7IGZpbGVzeXN0ZW1cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBIRlNQTFVTX0ZTIFx1MDAyNlx1MDAyNiBLVU5JVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxOQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTL0hGUyYjNDM7IEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHR3byByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlOiBgSEZTX0ZTYCBhbmQgYEhGU1BMVVNfRlNgLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBjb3JydXB0aW9uIGNoZWNrcyB3aXRoaW4gdGhlIEhGUyBhbmQgSEZTJiM0MzsgZmlsZXN5c3RlbXMsIHNwZWNpZmljYWxseSBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgb3BlbmluZy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBmb3JjZSBhIHJlYWQtb25seSBzdGF0ZSBpZiBjb3JydXB0aW9uIGlzIGlkZW50aWZpZWQsIHByZXZlbnRpbmcgZnVydGhlciBkYXRhIGxvc3MuIFRoaXMgaXMgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0ICpkZW1hbmRzKiBmdXp6aW5nIHRvIGd1YXJhbnRlZSByb2J1c3RuZXNzIHdoZW4gZmFjZWQgd2l0aCBjb3JydXB0ZWQgaW1hZ2VzOyB3ZSB3YW50IHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoZXNlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseSwgd2l0aG91dCBjcmFzaGluZyBvciBpbnRyb2R1Y2luZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMuCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcmx5IGxhaWQgb3V0IGZvciBtZTogYGhmc19idHJlZV9vcGVuYCwgYGhmc19ibWFwX2FsbG9jYCwgYW5kIGBoZnNwbHVzX2JtYXBfYWxsb2NgLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGZvciBpbmNsdXNpb24gb2YgYGhmc19ibWFwX3Rlc3RfYml0YC4gQWgsIHllcywgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdXN1YWxseSBtZWFucyBpdCYjMzk7cyBlaXRoZXIgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgb3IgaXNuJiMzOTt0IGEgZGlzdGluY3Qgc3ltYm9sLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIGhlcmU6IHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTbywgYmFzZWQgb24gdGhhdCwgSSYjMzk7bSBnb2luZyB0byAqZXhjbHVkZSogYGhmc19ibWFwX3Rlc3RfYml0YCBmcm9tIG15IGxpc3QuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTX0ZTJiMzNDssCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNfYnRyZWVfb3BlbiYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2JtYXBfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBiaXRtYXAgY29ycnVwdGlvbiBjaGVja3MgaW4gdGhlIEhGUyBhbmQgSEZTJiM0MzsgZmlsZXN5c3RlbXMgZHVyaW5nIEItdHJlZSBub2RlIGFsbG9jYXRpb24gYW5kIEItdHJlZSBvcGVuaW5nLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGNvcnJ1cHRlZCBpbWFnZXMgd2l0aG91dCBjcmFzaGluZyBvciBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7LAogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2J0cmVlX29wZW4mIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUyYjNDM7IGZpbGVzeXN0ZW1zIGR1cmluZyBCLXRyZWUgbm9kZSBhbGxvY2F0aW9uIGFuZCBCLXRyZWUgb3BlbmluZy4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBjb3JydXB0ZWQgaW1hZ2VzIHdpdGhvdXQgY3Jhc2hpbmcgb3IgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gdGhlIEhGUyBhbmQgSEZTJiM0MzsgQi10cmVlIGltcGxlbWVudGF0aW9ucyB0byBkZXRlY3QgYml0bWFwIGNvcnJ1cHRpb24gKHNwZWNpZmljYWxseSwgZW5zdXJpbmcgdGhhdCBub2RlIGluZGV4IDAsIHRoZSBoZWFkZXIgbm9kZSwgaXMgbWFya2VkIGFzIHVzZWQpLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG92ZXJ3cml0aW5nIHRoZSBoZWFkZXIgbm9kZSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcykgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Zjc2MjUwMjY3ZjcwODRkYTQwOGRmZTg4NGQ5NGQ3ZmJhNTA1ZDA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDI6NTk6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jCmluZGV4IDJlYjM3YTJmNjRlODYuLjliMGI3NDE4ZGRiZDUgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9idHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmcy9idHJlZS5jCkBAIC0xNSwxMiAmIzQzOzE1LDU5IEBACiAKICNpbmNsdWRlICYjMzQ7YnRyZWUuaCYjMzQ7CiAKJiM0MztzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KQomIzQzO3sKJiM0MzsJdTE2IHJlY19pZHgsIG9mZiwgbGVuOwomIzQzOwl1MzIgYnl0ZV9vZmZzZXQ7CiYjNDM7CXU4IGJ5dGUsIG1hc2s7CiYjNDM7CiYjNDM7CWlmIChub2RlLSZndDt0aGlzID09IDApIHsKJiM0MzsJCWlmIChub2RlLSZndDt0eXBlICE9IEhGU19OT0RFX0hFQURFUikgewomIzQzOwkJCXByX2VycigmIzM0O2hmczogaW52YWxpZCBidHJlZSBoZWFkZXIgbm9kZVxuJiMzNDspOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCXJlY19pZHggPSAyOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKG5vZGUtJmd0O3R5cGUgIT0gSEZTX05PREVfTUFQKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIG1hcCBub2RlXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwkJcmVjX2lkeCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsICZhbXA7b2ZmKTsKJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWJ5dGVfb2Zmc2V0ID0gbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURTsKJiM0MzsJaWYgKGJ5dGVfb2Zmc2V0ICZndDs9IGxlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJYnl0ZSA9IGhmc19ibm9kZV9yZWFkX3U4KG5vZGUsIG9mZiAmIzQzOyBieXRlX29mZnNldCk7CiYjNDM7CW1hc2sgPSAxICZsdDsmbHQ7ICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ5dGUgJmFtcDsgbWFzazsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmhmc19idHJlZV9uYW1lKHUzMiBjbmlkKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjbmlkKSB7CiYjNDM7CWNhc2UgSEZTX0VYVF9DTklEOgomIzQzOwkJcmV0dXJuICYjMzQ7RXh0ZW50cyBPdmVyZmxvdyBGaWxlJiMzNDs7CiYjNDM7CWNhc2UgSEZTX0NBVF9DTklEOgomIzQzOwkJcmV0dXJuICYjMzQ7Q2F0YWxvZyBGaWxlJiMzNDs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gJiMzNDtVbmtub3duIEItdHJlZSYjMzQ7OwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogR2V0IGEgcmVmZXJlbmNlIHRvIGEgQipUcmVlIGFuZCBkbyBzb21lIGluaXRpYWwgY2hlY2tzICovCiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApCiB7CiAJc3RydWN0IGhmc19idHJlZSAqdHJlZTsKIAlzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgKmhlYWQ7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiYjNDM7CXN0cnVjdCBoZnNfYm5vZGUgKm5vZGU7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTU1LDYgJiM0MzsyMDIsMTkgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2UKIAlrdW5tYXBfbG9jYWwoaGVhZCk7CiAJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwomIzQzOwomIzQzOwlub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7CiYjNDM7CWlmIChJU19FUlIobm9kZSkpCiYjNDM7CQlnb3RvIGZyZWVfaW5vZGU7CiYjNDM7CiYjNDM7CWlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgMCkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxuJiMzNDssCiYjNDM7CQkJc2ItJmd0O3NfaWQsIGhmc19idHJlZV9uYW1lKGlkKSwgaWQpOwomIzQzOwkJcHJfd2FybigmIzM0O1J1biBmc2NrLmhmcyB0byByZXBhaXIuXG4mIzM0Oyk7CiYjNDM7CQlzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGZzX2Jub2RlX3B1dChub2RlKTsKIAlyZXR1cm4gdHJlZTsKIAogZmFpbF9mb2xpbzoKQEAgLTMxNiw2ICYjNDM7Mzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpCiAJCQlpZiAoYnl0ZSAhPSAweGZmKSB7CiAJCQkJZm9yIChtID0gMHg4MCwgaSA9IDA7IGkgJmx0OyA4OyBtICZndDsmZ3Q7PSAxLCBpJiM0MzsmIzQzOykgewogCQkJCQlpZiAoIShieXRlICZhbXA7IG0pKSB7CiYjNDM7CQkJCQkJaWYgKHVubGlrZWx5KCEoaWR4ICYjNDM7IGkpKSkgewomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7KCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cbiYjMzQ7LAomIzQzOwkJCQkJCQkJdHJlZS0mZ3Q7c2ItJmd0O3NfaWQsCiYjNDM7CQkJCQkJCQloZnNfYnRyZWVfbmFtZSh0cmVlLSZndDtjbmlkKSwKJiM0MzsJCQkJCQkJCXRyZWUtJmd0O2NuaWQpOwomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7UnVuIGZzY2suaGZzIHRvIHJlcGFpci5cbiYjMzQ7KTsKJiM0MzsJCQkJCQkJdHJlZS0mZ3Q7c2ItJmd0O3NfZmxhZ3MgfD0gU0JfUkRPTkxZOwomIzQzOwkJCQkJCQlrdW5tYXBfbG9jYWwoZGF0YSk7CiYjNDM7CQkJCQkJCWhmc19ibm9kZV9wdXQobm9kZSk7CiYjNDM7CQkJCQkJCXJldHVybiBFUlJfUFRSKC1FSU8pOwomIzQzOwkJCQkJCX0KIAkJCQkJCWlkeCAmIzQzOz0gaTsKIAkJCQkJCWRhdGFbb2ZmXSB8PSBtOwogCQkJCQkJc2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuYwppbmRleCAzOTQ1NDJhNDdlNjAwLi4zZWU5MjI0OGIyNDA5IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9idHJlZS5jCkBAIC01NjEsNiAmIzQzOzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKQogCQkJaWYgKGJ5dGUgIT0gMHhmZikgewogCQkJCWZvciAobSA9IDB4ODAsIGkgPSAwOyBpICZsdDsgODsgbSAmZ3Q7Jmd0Oz0gMSwgaSYjNDM7JiM0MzspIHsKIAkJCQkJaWYgKCEoYnl0ZSAmYW1wOyBtKSkgewomIzQzOwkJCQkJCWlmICh1bmxpa2VseSghKGlkeCAmIzQzOyBpKSkpIHsKJiM0MzsJCQkJCQkJcHJfd2FybigmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXG4mIzM0OywKJiM0MzsJCQkJCQkJCXRyZWUtJmd0O3NiLSZndDtzX2lkLAomIzQzOwkJCQkJCQkJaGZzX2J0cmVlX25hbWUodHJlZS0mZ3Q7Y25pZCksCiYjNDM7CQkJCQkJCQl0cmVlLSZndDtjbmlkKTsKJiM0MzsJCQkJCQkJcHJfd2FybigmIzM0O1J1biBmc2NrLmhmc3BsdXMgdG8gcmVwYWlyLlxuJiMzNDspOwomIzQzOwkJCQkJCQl0cmVlLSZndDtzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CQkJCQkJCWt1bm1hcF9sb2NhbChkYXRhKTsKJiM0MzsJCQkJCQkJaGZzX2Jub2RlX3B1dChub2RlKTsKJiM0MzsJCQkJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiYjNDM7CQkJCQkJfQogCQkJCQkJaWR4ICYjNDM7PSBpOwogCQkJCQkJZGF0YVtjdHgub2ZmXSB8PSBtOwogCQkJCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ5CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMvSEZTJiM0MzsgQi10cmVlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2gsIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgZnMvaGZzL2J0cmVlLmNgIGFuZCBgZnMvaGZzcGx1cy9idHJlZS5jYC4gV2hhdCB3ZSBoYXZlIGhlcmUgYXJlIHNhbml0eSBjaGVja3MgZGVzaWduZWQgdG8gZGV0ZWN0IGFuZCBoYW5kbGUgZmlsZXN5c3RlbSBjb3JydXB0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCLXRyZWUgYml0bWFwLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiBlbnN1cmluZyB0aGUgZmlyc3QgYml0IChpbmRleCAwKSBvZiB0aGUgQi10cmVlIG1hcCByZWNvcmQgaXMgc2V0LCBpbmRpY2F0aW5nIHRoYXQgdGhlIGhlYWRlciBub2RlIChub2RlIGluZGV4IDApIGlzIGluIHVzZSDigJMgd2hpY2ggaXQgKmFsd2F5cyogc2hvdWxkIGJlLiBJZiB0aGF0IGJpdCBpcyAqbm90KiBzZXQsIHRoZSBjb2RlIG5vdyB0cmlnZ2VycyBhIHJlYWQtb25seSBtb3VudCwgZWZmZWN0aXZlbHkgbG9ja2luZyBkb3duIHRoZSBmaWxlc3lzdGVtIHRvIHByZXZlbnQgbW9yZSBzZXZlcmUgZGFtYWdlLgoKSSYjMzk7dmUgYWxzbyBub3RpY2VkIHRoYXQgdGhlcmUmIzM5O3MgYSBndWFyZCBpbiBgaGZzX2JtYXBfYWxsb2NgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBvZiBub2RlIGluZGV4IDAuIFRoaXMgaXMgYSBjcnVjaWFsIGRlZmVuc2UsIGFzIGFsbG9jYXRpbmcgdGhlIGhlYWRlciBub2RlIHdvdWxkIGJlIGNhdGFzdHJvcGhpYy4gVGhlIGZvcmNlZCByZWFkLW9ubHkgbW9kZSBhbmQgZXJyb3IgcmV0dXJuIGFyZSB0aGUgY29ycmVjdCByZXNwb25zZXMgdG8gc3VjaCBhbiBhdHRlbXB0LgoKQ3JpdGljYWxseSwgdGhlcmUmIzM5O3Mgbm8gbmV3IGFsbG9jYXRpb24gb2YgbWVtb3J5LCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGFwcGFyZW50IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzLiBUaGUgbWFpbiBwdXJwb3NlIGlzIHRvIGRldGVjdCBhbmQgY29udGFpbiBmaWxlc3lzdGVtIGNvcnJ1cHRpb24uIFRoaXMgaXMgZXhjZWxsZW50IGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KClRoaXMgZml4IGlzLCBlc3NlbnRpYWxseSwgYSByZXNwb25zZSB0byBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgaGVhZGVyIG5vZGUgaXMgdHJlYXRlZCBhcyBhdmFpbGFibGUuIEl0JiMzOTtzIHRoZSBraW5kIG9mIGJ1ZyB0aGF0ICpzaG91bGQqIGJlIGNhdWdodCBieSBLQVNBTiBvciBvdGhlciBrZXJuZWwgYnVnIGRldGVjdG9ycy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIG1vcmUgZ2VuZXJhbGx5LCBmaWxlc3lzdGVtIGNvcnJ1cHRpb24sIGFyZSBhbGwgcG90ZW50aWFsIG91dGNvbWVzIGlmIG5vZGUgMCBpcyBtaXNoYW5kbGVkLgoKTm93LCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYGhmc19ibWFwX3Rlc3RfYml0YCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gT2theSwgdGhlIGZ1bmN0aW9uIGBoZnNfYm5vZGVfcmVhZF91OGAgcmVhZHMgZGF0YSBmcm9tIHRoZSBCLXRyZWUgbm9kZSBwYWdlcy4gVGhlc2UgcGFnZXMgYXJlIHJlYWQgZnJvbSB0aGUgZGlzayBieSB0aGUgYmxvY2sgbGF5ZXIgYW5kLCB0aGVyZWZvcmUsIHRoZXkgYXJlICphbHdheXMqIGluaXRpYWxpemVkIGJ5IHRoZSBibG9jayBsYXllci4gU28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZS4KCkdpdmVuIGFsbCB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIGEgc29saWQsIGRlZmVuc2l2ZSBwYXRjaCBhaW1lZCBhdCBpbXByb3ZpbmcgZmlsZXN5c3RlbSBpbnRlZ3JpdHkgYW5kIHByb3RlY3RpbmcgYWdhaW5zdCBrbm93biBjb3JydXB0aW9uIHNjZW5hcmlvcy4gTmVlZHNLTVNBTiBpcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMmIzQzOyBCLXRyZWUgaW1wbGVtZW50YXRpb25zIHRvIGRldGVjdCBiaXRtYXAgY29ycnVwdGlvbiAoc3BlY2lmaWNhbGx5LCBlbnN1cmluZyB0aGF0IG5vZGUgaW5kZXggMCwgdGhlIGhlYWRlciBub2RlLCBpcyBtYXJrZWQgYXMgdXNlZCkuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3ZlcndyaXRpbmcgdGhlIGhlYWRlciBub2RlIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzKSBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHRoZSBIRlMgYW5kIEhGUyYjNDM7IEItdHJlZSBpbXBsZW1lbnRhdGlvbnMgdG8gZGV0ZWN0IGJpdG1hcCBjb3JydXB0aW9uIChzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoYXQgbm9kZSBpbmRleCAwLCB0aGUgaGVhZGVyIG5vZGUsIGlzIG1hcmtlZCBhcyB1c2VkKS4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBvdmVyd3JpdGluZyB0aGUgaGVhZGVyIG5vZGUgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMpIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6MzguMjkyNjU5NjEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Mjc0MjExNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiLFxuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19idHJlZV9vcGVuXCIsXG4gICAgXCJoZnNfYm1hcF9hbGxvY1wiLFxuICAgIFwiaGZzcGx1c19ibWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHRoZSBIRlMgYW5kIEhGUysgQi10cmVlIGltcGxlbWVudGF0aW9ucyB0byBkZXRlY3QgYml0bWFwIGNvcnJ1cHRpb24gKHNwZWNpZmljYWxseSwgZW5zdXJpbmcgdGhhdCBub2RlIGluZGV4IDAsIHRoZSBoZWFkZXIgbm9kZSwgaXMgbWFya2VkIGFzIHVzZWQpLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG92ZXJ3cml0aW5nIHRoZSBoZWFkZXIgbm9kZSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcykgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUysgZmlsZXN5c3RlbXMgZHVyaW5nIEItdHJlZSBub2RlIGFsbG9jYXRpb24gYW5kIEItdHJlZSBvcGVuaW5nLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGNvcnJ1cHRlZCBpbWFnZXMgd2l0aG91dCBjcmFzaGluZyBvciBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjM4LjI5MjY3MDUyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MjQ0NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWY3NjI1MDI2N2Y3MDg0ZGE0MDhkZmU4ODRkOTRkN2ZiYTUwNWQwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjo1OTozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXFxuaW5kZXggMmViMzdhMmY2NGU4Ni4uOWIwYjc0MThkZGJkNSAxMDA2NDRcXG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xcbisrKyBiL2ZzL2hmcy9idHJlZS5jXFxuQEAgLTE1LDEyICsxNSw1OSBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImJ0cmVlLmhcXFwiXFxuIFxcbitzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxcbit7XFxuK1xcdHUxNiByZWNfaWR4LCBvZmYsIGxlbjtcXG4rXFx0dTMyIGJ5dGVfb2Zmc2V0O1xcbitcXHR1OCBieXRlLCBtYXNrO1xcbitcXG4rXFx0aWYgKG5vZGUtXFx1MDAzZXRoaXMgPT0gMCkge1xcbitcXHRcXHRpZiAobm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmVjX2lkeCA9IDI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChub2RlLVxcdTAwM2V0eXBlICE9IEhGU19OT0RFX01BUCkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcImhmczogaW52YWxpZCBidHJlZSBtYXAgbm9kZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNfaWR4ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsIFxcdTAwMjZvZmYpO1xcbitcXHRpZiAoIWxlbilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Ynl0ZV9vZmZzZXQgPSBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFO1xcbitcXHRpZiAoYnl0ZV9vZmZzZXQgXFx1MDAzZT0gbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRieXRlID0gaGZzX2Jub2RlX3JlYWRfdTgobm9kZSwgb2ZmICsgYnl0ZV9vZmZzZXQpO1xcbitcXHRtYXNrID0gMSBcXHUwMDNjXFx1MDAzYyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7XFxuK1xcbitcXHRyZXR1cm4gYnl0ZSBcXHUwMDI2IG1hc2s7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcXG4re1xcbitcXHRzd2l0Y2ggKGNuaWQpIHtcXG4rXFx0Y2FzZSBIRlNfRVhUX0NOSUQ6XFxuK1xcdFxcdHJldHVybiBcXFwiRXh0ZW50cyBPdmVyZmxvdyBGaWxlXFxcIjtcXG4rXFx0Y2FzZSBIRlNfQ0FUX0NOSUQ6XFxuK1xcdFxcdHJldHVybiBcXFwiQ2F0YWxvZyBGaWxlXFxcIjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFxcXCJVbmtub3duIEItdHJlZVxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogR2V0IGEgcmVmZXJlbmNlIHRvIGEgQipUcmVlIGFuZCBkbyBzb21lIGluaXRpYWwgY2hlY2tzICovXFxuIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcXG4ge1xcbiBcXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xcbiBcXHRzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgKmhlYWQ7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbitcXHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5AQCAtMTU1LDYgKzIwMiwxOSBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxcbiBcXHRrdW5tYXBfbG9jYWwoaGVhZCk7XFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XFxuK1xcdGlmIChJU19FUlIobm9kZSkpXFxuK1xcdFxcdGdvdG8gZnJlZV9pbm9kZTtcXG4rXFxuK1xcdGlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgMCkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNiLVxcdTAwM2VzX2lkLCBoZnNfYnRyZWVfbmFtZShpZCksIGlkKTtcXG4rXFx0XFx0cHJfd2FybihcXFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXFxcblxcXCIpO1xcbitcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuK1xcdH1cXG4rXFxuK1xcdGhmc19ibm9kZV9wdXQobm9kZSk7XFxuIFxcdHJldHVybiB0cmVlO1xcbiBcXG4gZmFpbF9mb2xpbzpcXG5AQCAtMzE2LDYgKzM3NiwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRcXHRcXHRpZiAoYnl0ZSAhPSAweGZmKSB7XFxuIFxcdFxcdFxcdFxcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFxcdTAwM2MgODsgbSBcXHUwMDNlXFx1MDAzZT0gMSwgaSsrKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmICghKGJ5dGUgXFx1MDAyNiBtKSkge1xcbitcXHRcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIShpZHggKyBpKSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZXNiLVxcdTAwM2VzX2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRoZnNfYnRyZWVfbmFtZSh0cmVlLVxcdTAwM2VjbmlkKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dHJlZS1cXHUwMDNlY25pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIlJ1biBmc2NrLmhmcyB0byByZXBhaXIuXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0dHJlZS1cXHUwMDNlc2ItXFx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRrdW5tYXBfbG9jYWwoZGF0YSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGhmc19ibm9kZV9wdXQobm9kZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGlkeCArPSBpO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRkYXRhW29mZl0gfD0gbTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9idHJlZS5jIGIvZnMvaGZzcGx1cy9idHJlZS5jXFxuaW5kZXggMzk0NTQyYTQ3ZTYwMC4uM2VlOTIyNDhiMjQwOSAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmNcXG4rKysgYi9mcy9oZnNwbHVzL2J0cmVlLmNcXG5AQCAtNTYxLDYgKzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRcXHRcXHRpZiAoYnl0ZSAhPSAweGZmKSB7XFxuIFxcdFxcdFxcdFxcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFxcdTAwM2MgODsgbSBcXHUwMDNlXFx1MDAzZT0gMSwgaSsrKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmICghKGJ5dGUgXFx1MDAyNiBtKSkge1xcbitcXHRcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIShpZHggKyBpKSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZXNiLVxcdTAwM2VzX2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRoZnNfYnRyZWVfbmFtZSh0cmVlLVxcdTAwM2VjbmlkKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dHJlZS1cXHUwMDNlY25pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIlJ1biBmc2NrLmhmc3BsdXMgdG8gcmVwYWlyLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZXNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0a3VubWFwX2xvY2FsKGRhdGEpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZHggKz0gaTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6MzguNzQyODU4NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDU2NzE4MDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNfRlNcIixcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnRyZWVfb3BlblwiLFxuICAgIFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgICBcImhmc3BsdXNfYm1hcF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUysgZmlsZXN5c3RlbXMgZHVyaW5nIEItdHJlZSBub2RlIGFsbG9jYXRpb24gYW5kIEItdHJlZSBvcGVuaW5nLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGNvcnJ1cHRlZCBpbWFnZXMgd2l0aG91dCBjcmFzaGluZyBvciBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlmNzYyNTAyNjdmNzA4NGRhNDA4ZGZlODg0ZDk0ZDdmYmE1MDVkMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjo1OTozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmNcbmluZGV4IDJlYjM3YTJmNjRlODYuLjliMGI3NDE4ZGRiZDUgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuKysrIGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSwxMiArMTUsNTkgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuK3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXG4re1xuK1x0dTE2IHJlY19pZHgsIG9mZiwgbGVuO1xuK1x0dTMyIGJ5dGVfb2Zmc2V0O1xuK1x0dTggYnl0ZSwgbWFzaztcbitcbitcdGlmIChub2RlLVx1MDAzZXRoaXMgPT0gMCkge1xuK1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0hFQURFUikge1xuK1x0XHRcdHByX2VycihcImhmczogaW52YWxpZCBidHJlZSBoZWFkZXIgbm9kZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmVjX2lkeCA9IDI7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX01BUCkge1xuK1x0XHRcdHByX2VycihcImhmczogaW52YWxpZCBidHJlZSBtYXAgbm9kZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmVjX2lkeCA9IDA7XG4rXHR9XG4rXG4rXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgXHUwMDI2b2ZmKTtcbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRieXRlX29mZnNldCA9IG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEU7XG4rXHRpZiAoYnl0ZV9vZmZzZXQgXHUwMDNlPSBsZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGJ5dGUgPSBoZnNfYm5vZGVfcmVhZF91OChub2RlLCBvZmYgKyBieXRlX29mZnNldCk7XG4rXHRtYXNrID0gMSBcdTAwM2NcdTAwM2MgKDcgLSAobm9kZV9iaXRfaWR4ICUgQklUU19QRVJfQllURSkpO1xuK1xuK1x0cmV0dXJuIGJ5dGUgXHUwMDI2IG1hc2s7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcbit7XG4rXHRzd2l0Y2ggKGNuaWQpIHtcbitcdGNhc2UgSEZTX0VYVF9DTklEOlxuK1x0XHRyZXR1cm4gXCJFeHRlbnRzIE92ZXJmbG93IEZpbGVcIjtcbitcdGNhc2UgSEZTX0NBVF9DTklEOlxuK1x0XHRyZXR1cm4gXCJDYXRhbG9nIEZpbGVcIjtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBcIlVua25vd24gQi10cmVlXCI7XG4rXHR9XG4rfVxuK1xuIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xuIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcbiB7XG4gXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xuIFx0c3RydWN0IGhmc19idHJlZV9oZWFkZXJfcmVjICpoZWFkO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4rXHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTUsNiArMjAyLDE5IEBAIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtlXG4gXHRrdW5tYXBfbG9jYWwoaGVhZCk7XG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcbitcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCAwKTtcbitcdGlmIChJU19FUlIobm9kZSkpXG4rXHRcdGdvdG8gZnJlZV9pbm9kZTtcbitcbitcdGlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgMCkpIHtcbitcdFx0cHJfd2FybihcIiglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCIsXG4rXHRcdFx0c2ItXHUwMDNlc19pZCwgaGZzX2J0cmVlX25hbWUoaWQpLCBpZCk7XG4rXHRcdHByX3dhcm4oXCJSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxcblwiKTtcbitcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4rXHR9XG4rXG4rXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuIFx0cmV0dXJuIHRyZWU7XG4gXG4gZmFpbF9mb2xpbzpcbkBAIC0zMTYsNiArMzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4gXHRcdFx0aWYgKGJ5dGUgIT0gMHhmZikge1xuIFx0XHRcdFx0Zm9yIChtID0gMHg4MCwgaSA9IDA7IGkgXHUwMDNjIDg7IG0gXHUwMDNlXHUwMDNlPSAxLCBpKyspIHtcbiBcdFx0XHRcdFx0aWYgKCEoYnl0ZSBcdTAwMjYgbSkpIHtcbitcdFx0XHRcdFx0XHRpZiAodW5saWtlbHkoIShpZHggKyBpKSkpIHtcbitcdFx0XHRcdFx0XHRcdHByX3dhcm4oXCIoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxcblwiLFxuK1x0XHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZXNiLVx1MDAzZXNfaWQsXG4rXHRcdFx0XHRcdFx0XHRcdGhmc19idHJlZV9uYW1lKHRyZWUtXHUwMDNlY25pZCksXG4rXHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlY25pZCk7XG4rXHRcdFx0XHRcdFx0XHRwcl93YXJuKFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXG5cIik7XG4rXHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZXNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuK1x0XHRcdFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuK1x0XHRcdFx0XHRcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbitcdFx0XHRcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZHggKz0gaTtcbiBcdFx0XHRcdFx0XHRkYXRhW29mZl0gfD0gbTtcbiBcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eSgqcGFnZXApO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuY1xuaW5kZXggMzk0NTQyYTQ3ZTYwMC4uM2VlOTIyNDhiMjQwOSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuY1xuKysrIGIvZnMvaGZzcGx1cy9idHJlZS5jXG5AQCAtNTYxLDYgKzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0XHRcdGlmIChieXRlICE9IDB4ZmYpIHtcbiBcdFx0XHRcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFx1MDAzYyA4OyBtIFx1MDAzZVx1MDAzZT0gMSwgaSsrKSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4rXHRcdFx0XHRcdFx0aWYgKHVubGlrZWx5KCEoaWR4ICsgaSkpKSB7XG4rXHRcdFx0XHRcdFx0XHRwcl93YXJuKFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXG5cIixcbitcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuK1x0XHRcdFx0XHRcdFx0XHRoZnNfYnRyZWVfbmFtZSh0cmVlLVx1MDAzZWNuaWQpLFxuK1x0XHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZWNuaWQpO1xuK1x0XHRcdFx0XHRcdFx0cHJfd2FybihcIlJ1biBmc2NrLmhmc3BsdXMgdG8gcmVwYWlyLlxcblwiKTtcbitcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlc2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4rXHRcdFx0XHRcdFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4rXHRcdFx0XHRcdFx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuK1x0XHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4rXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdGlkeCArPSBpO1xuIFx0XHRcdFx0XHRcdGRhdGFbY3R4Lm9mZl0gfD0gbTtcbiBcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjM4Ljc0Mjg2NjU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNTQxMzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhGUy9IRlMrIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9oZnMvYnRyZWUuY2AgYW5kIGBmcy9oZnNwbHVzL2J0cmVlLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWUgY29yZSBCLXRyZWUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlc2UgZmlsZXN5c3RlbXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGBoZnNfYm1hcF90ZXN0X2JpdGAgY2hlY2sgd2l0aGluIGBoZnNfYnRyZWVfb3BlbmAgaW4gdGhlIEhGUyBjb2RlLCBhbmQgYW5vdGhlciBvbmUgd2l0aGluIGBoZnNfYm1hcF9hbGxvY2AgaW4gKmJvdGgqIEhGUyBhbmQgSEZTKy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGlmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIGl0J3MgZ29pbmcgdG8gZm9yY2UgdGhlIGZpbGVzeXN0ZW0gaW50byByZWFkLW9ubHkgbW9kZSwgd2hpY2ggbWFrZXMgdG90YWwgc2Vuc2UgZnJvbSBhIGRhdGEgaW50ZWdyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcHJvYWN0aXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZGF0YSBsb3NzLiBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgc29tZXRoaW5nIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIFRodXMsIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSBjYXB0dXJpbmcgdGhlIHNjb3BlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHByZXR0eSBzdXJlIGl0J3MgYENPTkZJR19IRlNfRlNgIGFuZCBgQ09ORklHX0hGU1BMVVNfRlNgLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgaW4gdGhlIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBmaWxlcyBpbiBgZnMvaGZzL0tjb25maWdgIGFuZCBgZnMvaGZzcGx1cy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0IGlzIHdvcnRoIGNoZWNraW5nIHdoYXQgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGVzZSBLY29uZmlnIGZpbGVzIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NDQuMjU4Mjg0MTA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzI5NTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvaGZzL0tjb25maWc6Mjpjb25maWcgSEZTX0ZTXFxuZnMvaGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjQ0LjUzMTU4ODc4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzAyODQ5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEhGUysqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIEhGUysgaGVyZSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNoYWxsZW5nZXMgb2YgaXRzIGRlc2lnbi4gVGhlIGNsYXNzaWMgaGllcmFyY2hpY2FsIGZpbGUgc3lzdGVtLCBhIGNvcm5lcnN0b25lIG9mIG1hY09TIGZvciB5ZWFycy4gSSBmaW5kIG15c2VsZiBjb25zaWRlcmluZyBpdHMgc3RydWN0dXJlIOKAkyB0aGUgQi10cmVlIG1ldGFkYXRhLCB0aGUgdm9sdW1lIGhlYWRlciwgdGhlIGFsbG9jYXRpb24gYmxvY2tzLCBhbmQgYWxsIHRoZSBpbnRyaWNhY2llcyBvZiBtYW5hZ2luZyBib3RoIGRhdGEgYW5kIG1ldGFkYXRhIHdpdGhpbiB0aGUgc2FtZSBhbGxvY2F0aW9uIHVuaXQuXG5cbkknbSB0aGlua2luZyBhYm91dCBpdHMgbGltaXRhdGlvbnMuIFRoZSAyIEdCIGZpbGUgc2l6ZSBsaW1pdCBpbiBlYXJsaWVyIGl0ZXJhdGlvbnMuIFRoZSBmcmFnbWVudGF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBvbiBsYXJnZXIgZHJpdmVzLCB3aGljaCBhbHdheXMgbGVkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBUaGUgaW5oZXJlbnQgZnJhZ2lsaXR5IG9mIHRoZSBjYXRhbG9nIGZpbGUuIEknbSByZWNhbGxpbmcgdGhlIGNsZXZlciB3b3JrYXJvdW5kcyBBcHBsZSBlbXBsb3llZCB0byBtaXRpZ2F0ZSBzb21lIG9mIHRoZXNlIHByb2JsZW1zLCBzdWNoIGFzIHRoZSBleHRlbnQgb3ZlcmZsb3cgZmlsZS4gSSdtIHdvbmRlcmluZyBob3cgdGhvc2UgdGVjaG5pcXVlcyBwZXJmb3JtZWQgaW4gcmVhbCB3b3JsZCBzY2VuYXJpb3MuXG5cbkFuZCB0aGVuIHRoZSBqb3VybmFsaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGpvdXJuYWxpbmcgd2FzIGEgaHVnZSBzdGVwLCBidXQgSSdtIHJlbWVtYmVyaW5nIHRoZSBkZWJhdGVzIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbi4gVGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgZGF0YSBpbnRlZ3JpdHksIHRoZSBwb3RlbnRpYWwgZm9yIGRhdGEgbG9zcyBpbiB0aGUgZXZlbnQgb2YgY2F0YXN0cm9waGljIGZhaWx1cmVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLCB3b25kZXJpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCBjb25zaXN0ZW5jeSBtb2RlcyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBJJ20gcXVlc3Rpb25pbmcgaG93IEhGUysgd2FzIGFibGUgdG8gc2NhbGUgYW5kIHBlcmZvcm0gaW4gZGlmZmVyZW50IGNvbmRpdGlvbnMgb3ZlciB0aGUgY291cnNlIG9mIHRpbWUuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gSXQgd2FzIGEgZ29vZCBkZXNpZ24sIGJ1dCBjZXJ0YWlubHkgbm90IHdpdGhvdXQgaXRzIGlzc3VlcyB3aGVuIG1vdmluZyBmaWxlcyBiZXR3ZWVuIHN5c3RlbXMuIEkgYW0gcnVubmluZyB0aHJvdWdoIHZhcmlvdXMgZGVzaWduIGNob2ljZXMsIHN1Y2ggYXMgdGhlIHVzZSBvZiByZXNvdXJjZSBmb3JrcywgYW5kIGhvdyB0aG9zZSB3ZXJlIGVpdGhlciBlbWJyYWNlZCBvciBwcm9ibGVtYXRpYy5cblxuRmluYWxseSwgSSdtIHJlZmxlY3Rpbmcgb24gaXRzIGxlZ2FjeS4gVGhlIHBhdGggdG8gQVBGUyDigJMgdGhlIGV2b2x1dGlvbmFyeSBzdGVwcyB0aGF0IHdlcmUgdGFrZW4sIHRoZSBsZXNzb25zIGxlYXJuZWQgZnJvbSBIRlMrLiBIb3cgQVBGUyBhZGRyZXNzZWQgaXRzIHByZWRlY2Vzc29ycycgc2hvcnRjb21pbmdzLiBJIGFtIGF3YXJlIG9mIHRoZSBjb250aW51ZWQgcHJlc2VuY2Ugb2YgSEZTKyBvbiBvbGRlciBzeXN0ZW1zLCBhbmQgSSBoYXZlIHRvIGFzayBteXNlbGYsIFwiRG9lcyBIRlMrIHN0aWxsIGhvbGQgdmFsdWU/XCJcblxuVWx0aW1hdGVseSwgSSByZWFsaXplIHRoYXQgSEZTKyB3YXMgYSBjb21wbGV4IHBpZWNlIG9mIGVuZ2luZWVyaW5nLCByZWZsZWN0aW5nIHRoZSBjb25zdHJhaW50cyBvZiBpdHMgdGltZS4gSXQgd2FzIGEgZ29vZCBkZXNpZ24sIGJ1dCBhIHJlbGljIGluIHRoZSBtb2Rlcm4gd29ybGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjQ5LjIwMTg3Njc5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMxODI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcXG5mcy9oZnNwbHVzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjQ5LjI1MjIwNzQ3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjkyMjI1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25mbGljdHMgaW4gSEZTL0hGUysgQi1UcmVlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIHNwZWNpZmljYWxseSBpbiB0aGUgSEZTIGFuZCBIRlMrIGZpbGUgc3lzdGVtcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQgYXMgYHN0YXRpY2Agd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXM/IElmIHRoZXkgYXJlLCB0aGVuIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhvc2UgZmlsZXMgYW5kIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgZXh0ZXJuYWwgbGlua2FnZSBpc3N1ZXMuIElmIG5vdC4uLiB3ZWxsLCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgSSBuZWVkIHRvIGRlbHZlIGRlZXBlci5cblxuSSBzZWUgdGhlIGRlY2xhcmF0aW9uczogYHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClgIGFuZCBgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlgIGluIGBmcy9oZnMvYnRyZWUuY2AsIGFsb25nIHdpdGggYSByZXBlYXQgb2YgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYCBpbiBgZnMvaGZzcGx1cy9idHJlZS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgY2FuIHRlbGwgdGhlc2UgYXJlbid0IHN0YXRpYyBkZWNsYXJhdGlvbnMgYmVjYXVzZSB0aGV5J3JlIGJlaW5nIGV4cG9ydGVkLCBhdCBsZWFzdCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2Ugb2YgdGhhdCBrZXl3b3JkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCBpZiB0aGVyZSdzIGFueSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGJldHdlZW4gdGhlIEhGUyBhbmQgSEZTKyBpbXBsZW1lbnRhdGlvbnMgb2YgYGhmc19ibWFwX2FsbG9jYC4gSSBzaG91bGQgc3RhcnQgYnkgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgYGZzL2hmcy9idHJlZS5jYCBmaWxlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NTQuMjgxNDMzODQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzMzMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19idHJlZV9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmcy9idHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9idHJlZS5jPTUyPXN0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcXG4tLVxcbmZzL2hmcy9idHJlZS5jLTY0LS8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xcbmZzL2hmcy9idHJlZS5jOjY1OnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcXG5mcy9oZnMvYnRyZWUuYy02Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjU0LjMzMjE3MzA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MDc2MTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEItdHJlZSBBbGxvY2F0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBIRlMrIGJtYXAgYWxsb2NhdG9yIHdvcmtzLiBUaGF0IHN1Z2dlc3RzIGEgZGVlcCBkaXZlIGludG8gdGhlIGBmcy9oZnMvYnRyZWUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgYmxvY2tzIHdpdGhpbiB0aGUgSEZTKyBCLXRyZWUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIHN0cnVjdHVyZSBhbmQgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBzZWUgaG93IGl0IG1hbmFnZXMgZnJlZSBzcGFjZSwgaGFuZGxlcyBmcmFnbWVudGF0aW9uIChvciBhdHRlbXB0cyB0byBtaXRpZ2F0ZSBpdCksIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWV0YWRhdGEuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSB0aGUgcGh5c2ljYWwgZGlzayBhY2Nlc3MuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzKSBvZiBIRlMrIGxpZXMsIHNvIEknbGwgYmUgbG9va2luZyBjbG9zZWx5IGZvciB0aGUgYWxsb2NhdGlvbiBhbGdvcml0aG1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NTcuNTEyOTM4NjY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUwOTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm1hcF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnMvYnRyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYnRyZWUuYz0zMjI9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy0zNDQtXFxuZnMvaGZzL2J0cmVlLmM6MzQ1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuZnMvaGZzL2J0cmVlLmMtMzQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NTcuNTYxNDU2NjcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjUyMjgyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSEZTKyBCLVRyZWUgQWxsb2NhdGlvbiBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEhGUysgZmlsZSBzeXN0ZW0gYWxsb2NhdGVzIHNwYWNlIHZpYSBpdHMgQi1UcmVlIHN0cnVjdHVyZS4gU2luY2UgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGFsbG9jYXRpb24gcHJvY2VzcywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGZzL2hmc3BsdXMvYnRyZWUuY2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBCLVRyZWUgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEhGUysgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBJIG5lZWQgdG8gcGlucG9pbnQgd291bGQgYmUgYGhmc19ibWFwX2FsbG9jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHNjcmVhbXMgXCJibG9jayBtYXAgYWxsb2NhdGlvblwiIHRvIG1lLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0IEkgbmVlZCB0byBleHBsb3JlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIEhGUysgZmlsZSBzeXN0ZW0gbWFuYWdlcyBkaXNrIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MDEuNTI2Njg5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0OTM1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9idHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYnRyZWUuYz00OTk9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI3LVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo1Mjg6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MDEuNTc2MTg4MTk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzc3NDg3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU3ltYm9sIFJlc29sdXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gYWRkaW5nIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgdG8gRm9jdXNTeW1ib2xzLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEkganVzdCByZW1lbWJlcmVkIHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpcyBkZWZpbmVkIGluIGJvdGggYGhmc2AgYW5kIGBoZnNwbHVzYC4gTm93LCBTeXprYWxsZXIgKm1pZ2h0KiBjaG9rZSBvbiB0aGF0IGlmIHRoZXJlJ3MgYSBuYW1lIGNvbGxpc2lvbiwgZXZlbiB0aG91Z2ggSSdtIHByZXR0eSBzdXJlIHRoZXNlIGFyZSBjb21waWxlZCBpbnRvIHNlcGFyYXRlIG1vZHVsZXMuIFN0aWxsLCBJIHNob3VsZCBjb25maXJtIHRoZXkncmUgYWN0dWFsbHkgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm90IGp1c3Qgbm9uLXN0YXRpYyBsb2NhbCBmdW5jdGlvbnMuIExldCBtZSBkb3VibGUtY2hlY2suXG5cbkFoLCByaWdodC4gSW4gYGhmc3BsdXNgLCB0aGUgZnVuY3Rpb24ncyBmdWxseSBxdWFsaWZpZWQgbmFtZSBpcyBgaGZzX2JtYXBfYWxsb2NgLCBub3QganVzdCBgYm1hcF9hbGxvY2AuIE9rYXksIG5vdywgZG9lcyBgaGZzcGx1c2AgZXZlbiAqdXNlKiB0aGlzIHZlcnNpb24sIG9yIGlzIHRoZXJlIGFub3RoZXIgb25lPyBZZXMhIEl0IGlzIGluZGVlZCBkZWZpbmVkIGluIGBmcy9oZnNwbHVzL2J0cmVlLmNgLiBPa2F5LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGl0IG1pZ2h0IGJlIHdvcnRoIHZlcmlmeWluZyB0aGlzLiBMZXQgbWUgbG9vayBpbiBgZnMvaGZzcGx1cy9idHJlZS5oYCBvciBzb21ld2hlcmUgc2ltaWxhciB0byBzZWUgaWYgaXQncyBleHBvcnRlZC4gSSBjYW4ndCBiZSB0b28gY2FyZWZ1bCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjA2LjE1Mzk0MTE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5MzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm1hcF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JyZWMuYz0yMzU9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yNDctXFx0bm9kZSA9IGZkLVxcdTAwM2Vibm9kZTtcXG5mcy9oZnNwbHVzL2JyZWMuYzoyNDg6XFx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0yNDktXFx0aWYgKElTX0VSUihuZXdfbm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz00NzA9c3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDgyLVxcdH1cXG5mcy9oZnNwbHVzL2JyZWMuYzo0ODM6XFx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy00ODQtXFx0aWYgKElTX0VSUihuZXdfbm9kZSkpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz00OTk9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI3LVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo1Mjg6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI5LXtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4OS0jZGVmaW5lIGhmc19ibWFwX3Jlc2VydmUgaGZzcGx1c19ibWFwX3Jlc2VydmVcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyOTA6I2RlZmluZSBoZnNfYm1hcF9hbGxvYyBoZnNwbHVzX2JtYXBfYWxsb2NcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yOTEtI2RlZmluZSBoZnNfYm1hcF9mcmVlIGhmc3BsdXNfYm1hcF9mcmVlXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zNjY9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjM2NzpzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zNjgtdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDowNi4yMDI4NTE3NTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTg0ODAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIHRoZSBIRlMrIEJtYXAgQWxsb2NhdGlvbiBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYWJvdXQgdGhlIEhGUysgYm1hcCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBgaGZzX2JtYXBfYWxsb2NgIHNvbWV3aGVyZSwgYnV0IEknbSBwcmV0dHkgc3VyZSB0aGF0J3MganVzdCBhIG1hY3JvLiBSaWdodCwgbG9va2luZyBpbiBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLCBpdCdzIGNsZWFyOiBgaGZzX2JtYXBfYWxsb2NgIGlzIGluZGVlZCBqdXN0IGEgbWFjcm8gZGVmaW5pdGlvbiBmb3IgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbiBgaGZzcGx1c2AsIHdoaWNoIGlzIGBoZnNwbHVzX2JtYXBfYWxsb2NgLiBKdXN0IHdhbnQgdG8gbG9jayB0aGF0IGRvd24gaW4gbXkgaGVhZCBhbmQga2VlcCB0aGF0IHN0cmFpZ2h0LiBJJ2xsIG1ha2Ugc3VyZSB0byB1c2UgYGhmc3BsdXNfYm1hcF9hbGxvY2Agd2hlbiBJJ20gYWN0dWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSB0byBiZSBzdXJlLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIGV4dHJhIGNhcmVmdWwsIGVzcGVjaWFsbHkgd2l0aCBzb21ldGhpbmcgZnVuZGFtZW50YWwgbGlrZSBibG9jayBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MTAuMTA0NzAzMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjgyNDM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNwbHVzX2JtYXBfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjg5LSNkZWZpbmUgaGZzX2JtYXBfcmVzZXJ2ZSBoZnNwbHVzX2JtYXBfcmVzZXJ2ZVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjI5MDojZGVmaW5lIGhmc19ibWFwX2FsbG9jIGhmc3BsdXNfYm1hcF9hbGxvY1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI5MS0jZGVmaW5lIGhmc19ibWFwX2ZyZWUgaGZzcGx1c19ibWFwX2ZyZWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MTAuMjg3NTMzMzk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzYyNDAxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIRlMrIEItdHJlZSBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBhcyBgaGZzcGx1c19ibWFwX2FsbG9jYC4gU28sIG9uIHRoZSBzdXJmYWNlLCB0aGUgY29tcGlsZXIgaXMgZ29pbmcgdG8gc2VlIGBoZnNwbHVzX2JtYXBfYWxsb2NgIHdoZW4gaXQgY29tcGlsZXMuIEJ1dCB3YWl0LCBpbiBgZnMvaGZzcGx1cy9idHJlZS5jYCwgaXQncyBhY3R1YWxseSBkZWZpbmVkIGFzIGBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKWAuIE5vdywgd2h5IHRoZSBuYW1lIGRpc2NyZXBhbmN5PyBBaCwgSSBzZWUsIGJlY2F1c2UgYGJ0cmVlLmNgIGluY2x1ZGVzIGBoZnNwbHVzX2ZzLmhgLCB0aGUgcHJlcHJvY2Vzc29yIGlzIGhhbmRsaW5nIHRoZSBjaGFuZ2UuIEl0J3MgbWFjcm8taW5nIGBoZnNfYm1hcF9hbGxvY2AgdG8gYmUgYGhmc3BsdXNfYm1hcF9hbGxvY2AgYmVmb3JlIHRoZSBjb21waWxlciBldmVuIGdldHMgaXRzIGhhbmRzIG9uIHRoZSBjb2RlLiBUaGlzIGlzIGxpa2VseSBkb25lIHRvIGtlZXAgdGhlIGNvZGViYXNlIGNsZWFuZXIgb3IgbWFuYWdlIHNvbWUgc29ydCBvZiB2ZXJzaW9uaW5nLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIGBoZnNfYnRyZWVfb3BlbmAgaXMgdHJlYXRlZCBzaW1pbGFybHkgd2l0aGluIGBoZnNwbHVzYC4uLiBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbmFtZSBtYXBwaW5nIGFwcHJvYWNoIHdpdGhpbiB0aGlzIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDoxNS4xMjM3NzY0MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjQ0Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19idHJlZV9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYnRyZWUuYz0yNTM9c3RhdGljIGNvbnN0IGNoYXIgKmhmc19idHJlZV9uYW1lKHUzMiBjbmlkKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTI2Ny0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cXG5mcy9oZnNwbHVzL2J0cmVlLmM6MjY4OnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZClcXG5mcy9oZnNwbHVzL2J0cmVlLmMtMjY5LXtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4NS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyODY6I2RlZmluZSBoZnNfYnRyZWVfb3BlbiBoZnNwbHVzX2J0cmVlX29wZW5cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yODctI2RlZmluZSBoZnNfYnRyZWVfY2xvc2UgaGZzcGx1c19idHJlZV9jbG9zZVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MzYxPXUzMiBoZnNwbHVzX2NhbGNfYnRyZWVfY2x1bXBfc2l6ZSh1MzIgYmxvY2tfc2l6ZSwgdTMyIG5vZGVfc2l6ZSwgdTY0IHNlY3RvcnMsXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzYyLVxcdFxcdFxcdFxcdCAgaW50IGZpbGVfaWQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjM2MzpzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM2NC12b2lkIGhmc19idHJlZV9jbG9zZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz00NTI9c3RhdGljIGludCBoZnNwbHVzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTU0NS1cXHQvKiBMb2FkIG1ldGFkYXRhIG9iamVjdHMgKEIqVHJlZXMpICovXFxuZnMvaGZzcGx1cy9zdXBlci5jOjU0NjpcXHRzYmktXFx1MDAzZWV4dF90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU1BMVVNfRVhUX0NOSUQpO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy01NDctXFx0aWYgKCFzYmktXFx1MDAzZWV4dF90cmVlKSB7XFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmMtNTUwLVxcdH1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6NTUxOlxcdHNiaS1cXHUwMDNlY2F0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19DQVRfQ05JRCk7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTU1Mi1cXHRpZiAoIXNiaS1cXHUwMDNlY2F0X3RyZWUpIHtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy01NTctXFx0aWYgKHZoZHItXFx1MDAzZWF0dHJfZmlsZS50b3RhbF9ibG9ja3MgIT0gMCkge1xcbmZzL2hmc3BsdXMvc3VwZXIuYzo1NTg6XFx0XFx0c2JpLVxcdTAwM2VhdHRyX3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19BVFRSX0NOSUQpO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy01NTktXFx0XFx0aWYgKCFzYmktXFx1MDAzZWF0dHJfdHJlZSkge1xcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTMyMS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6MzIyOlxcdHNiaS1cXHUwMDNlYXR0cl90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU1BMVVNfQVRUUl9DTklEKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtMzIzLVxcdGlmICghc2JpLVxcdTAwM2VhdHRyX3RyZWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjE1LjE4MDQzMDIxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTgwNTUwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEhGUyBCLVRyZWUgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGluaXRpYWxseSB0aG91Z2h0IGl0IHdhcyB0b3VjaGluZyB0aGUgYGhmc3BsdXNgIHNpZGUgb2YgdGhpbmdzLCBidXQgSSdtIG5vdyBjZXJ0YWluIEkgbmVlZCB0byByZS1ldmFsdWF0ZS4gSXQgYXBwZWFycyB0aGUgY29kZSBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGhmc19idHJlZV9vcGVuYCB3aXRoaW4gdGhlIGBmcy9oZnMvYnRyZWUuY2AgZmlsZSBhbmQgbm90IHRoZSBgaGZzcGx1c2AgdmVyc2lvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhZ2FpbiBieSBjYXJlZnVsbHkgZXhhbWluaW5nIHRoZSBkaWZmOlxuXG5gYGBkaWZmXG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuKysrIGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSwxMiArMTUsNTkgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuK3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXG4uLi5cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4uLi5cbkBAIC0zMTYsNiArMzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4uLi5cbi0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuY1xuKysrIGIvZnMvaGZzcGx1cy9idHJlZS5jXG5AQCAtNTYxLDYgKzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuYGBgXG5cblJpZ2h0LCBjb25maXJtZWQuIEl0J3MgdGhlIGBoZnNgIHZlcnNpb24gdGhhdCdzIGJlaW5nIHRvdWNoZWQuIFRoYXQgbWVhbnMgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBoZnNgIHNpZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGhmc19idHJlZV9vcGVuYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgaGZzX2JtYXBfYWxsb2NgIG9uIHRoZSBgaGZzYCBzaWRlIGFuZCBgaGZzcGx1c19ibWFwX2FsbG9jYCBvbiB0aGUgYGhmc3BsdXNgIHNpZGUuXG5cbk5vdywgbGV0IG1lIGNoZWNrIGlmIGBoZnNfYnRyZWVfb3BlbmAgaW4gYGhmc2AgaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBpbnRlcm5hbC4gU2luY2UgaXQgaXNuJ3Qgc3RhdGljLCBpdCdzIHByZXN1bWFibHkgZXhwb3J0ZWQuIEknbGwgdGFrZSBhIHF1aWNrIHBlZWsgYXQgYGZzL2hmcy9idHJlZS5oYCBvciByZWxhdGVkIGhlYWRlcnMgdG8gc2VlIGlmIGl0J3MgYmVpbmcgbWFjcm9lZCBhbnl3aGVyZSwganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjIyLjc2MDk4MzMyNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1OTEyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2J0cmVlX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYnRyZWUuYz01Mj1zdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy02NC0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cXG5mcy9oZnMvYnRyZWUuYzo2NTpzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXFxuZnMvaGZzL2J0cmVlLmMtNjYte1xcbi0tXFxuZnMvaGZzL2J0cmVlLmg9Nzc9c3RydWN0IGhmc19maW5kX2RhdGEge1xcbi0tXFxuZnMvaGZzL2J0cmVlLmgtODgtLyogYnRyZWUuYyAqL1xcbmZzL2hmcy9idHJlZS5oOjg5OmV4dGVybiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsXFxuZnMvaGZzL2J0cmVlLmgtOTAtXFx0XFx0XFx0XFx0XFx0YnRyZWVfa2V5Y21wIGtleWNtcCk7XFxuLS1cXG5mcy9oZnMvbWRiLmM9OTQ9aW50IGhmc19tZGJfZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnMvbWRiLmMtMjI3LVxcbmZzL2hmcy9tZGIuYzoyMjg6XFx0SEZTX1NCKHNiKS1cXHUwMDNlZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTX0VYVF9DTklELCBoZnNfZXh0X2tleWNtcCk7XFxuZnMvaGZzL21kYi5jLTIyOS1cXHRpZiAoIUhGU19TQihzYiktXFx1MDAzZWV4dF90cmVlKSB7XFxuLS1cXG5mcy9oZnMvbWRiLmMtMjMyLVxcdH1cXG5mcy9oZnMvbWRiLmM6MjMzOlxcdEhGU19TQihzYiktXFx1MDAzZWNhdF90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU19DQVRfQ05JRCwgaGZzX2NhdF9rZXljbXApO1xcbmZzL2hmcy9tZGIuYy0yMzQtXFx0aWYgKCFIRlNfU0Ioc2IpLVxcdTAwM2VjYXRfdHJlZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDoyMi44MTg1ODQ1MDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3Mzk0NTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBIRlMgQi1UcmVlIEFsbG9jYXRpb24gUm91dGluZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIEhGUyBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgQi10cmVlIGFsbG9jYXRpb24gZnVuY3Rpb25zLiBGaXJzdCBvYnNlcnZhdGlvbjogdGhlc2Ugcm91dGluZXMgYXJlbid0IG1hY3JvZWQuIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzZWFyY2gg4oCTIG5vIGhpZGRlbiBjb21wbGV4aXR5IHRoZXJlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc3BsdXNfYm1hcF9hbGxvY2AuXG5cbkhvbGQgb24uLi4gSSdtIGp1c3QgZG91YmxlIGNoZWNraW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpbiBgZnMvaGZzL2J0cmVlLmNgICphbHNvKiBpc24ndCBtYWNyb2VkLCBJJ20gcHJldHR5IHN1cmUgSSBzYXcgaXQgd2FzIG5vdCBidXQgSSBtdXN0IGRvdWJsZSBjaGVjayEgT2theSwgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjI2LjQ5MjUzNDI3MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzMDU2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYnJlYy5jPTI1MD1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmcy9icmVjLmMtMjU5LVxcdG5vZGUgPSBmZC1cXHUwMDNlYm5vZGU7XFxuZnMvaGZzL2JyZWMuYzoyNjA6XFx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcXG5mcy9oZnMvYnJlYy5jLTI2MS1cXHRpZiAoSVNfRVJSKG5ld19ub2RlKSlcXG4tLVxcbmZzL2hmcy9icmVjLmM9NDc3PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmcy9icmVjLmMtNDg5LVxcdH1cXG5mcy9oZnMvYnJlYy5jOjQ5MDpcXHRuZXdfbm9kZSA9IGhmc19ibWFwX2FsbG9jKHRyZWUpO1xcbmZzL2hmcy9icmVjLmMtNDkxLVxcdGlmIChJU19FUlIobmV3X25vZGUpKSB7XFxuLS1cXG5mcy9oZnMvYnRyZWUuYz0zMjI9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy0zNDQtXFxuZnMvaGZzL2J0cmVlLmM6MzQ1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuZnMvaGZzL2J0cmVlLmMtMzQ2LXtcXG4tLVxcbmZzL2hmcy9idHJlZS5oPTkzPWV4dGVybiBpbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcyk7XFxuZnMvaGZzL2J0cmVlLmg6OTQ6ZXh0ZXJuIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpO1xcbmZzL2hmcy9idHJlZS5oLTk1LWV4dGVybiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjI2LjU0Mzg1MDE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDEyMjkzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhGUy9IRlMrIEFsbG9jYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHRoZSByYXcgc3ltYm9scyBoZXJlLCBub3RoaW5nIG1hY3JvZWQuIFRoZSBvbmVzIEknbSBzZWVpbmcgYXJlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzcGx1c19ibWFwX2FsbG9jYC5cblxuTm93LCBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYGhmc3BsdXNfYm1hcF9hbGxvY2AgaXMgdGhlIGNvcnJlY3QgbmFtZSB3aXRoaW4gdGhlIGBoZnNwbHVzYCBjb250ZXh0LiBBIHF1aWNrIHBlZWsgYXQgYGZzL2hmc3BsdXMvaGZzcGx1c19mcy5oYCBjb25maXJtcyBpdDogYCNkZWZpbmUgaGZzX2JtYXBfYWxsb2MgaGZzcGx1c19ibWFwX2FsbG9jYC4gU28sIHRoZSBhY3R1YWwgZnVuY3Rpb24gZGVmaW5lZCBhcyBgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlgIGluIGBmcy9oZnNwbHVzL2J0cmVlLmNgIGlzLCB1bmRlciB0aGUgaG9vZCwgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc3BsdXNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKWAuIEV4Y2VsbGVudC4gVGhhdCBjbGVhcnMgdGhhdCB1cC5cblxuTW92aW5nIG9uLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBoZXJlLiBBIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXM6IEJvdGggYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYCBkZXBlbmQgb24gYEJMT0NLYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrIGBmcy9oZnMvS2NvbmZpZ2AgYW5kIGBmcy9oZnNwbHVzL0tjb25maWdgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjMzLjM4NTA4MzQxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBNYWNpbnRvc2gtZm9ybWF0dGVkXFxuICAxMDpcXHRcXHQgIGZsb3BweSBkaXNrcyBhbmQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDExOlxcdFxcdCAgUGxlYXNlIHJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XFx1MDAzZSB0byBsZWFybiBhYm91dFxcbiAgMTI6XFx0XFx0ICB0aGUgYXZhaWxhYmxlIG1vdW50IG9wdGlvbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgSEZTX0tVTklUX1RFU1RcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTIGZpbGVzeXN0ZW1cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gSEZTX0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuICAyMDpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDozMy4zODUxNTI0NjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5Njk0MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uSSdtIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBmcy9oZnNwbHVzL0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyB0aGUgSEZTKyBmaWxlc3lzdGVtIHN1cHBvcnQgaXMgYmVpbmcgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhLCBlc3BlY2lhbGx5IGlmIEknbSBwbGFubmluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBlbmhhbmNlbWVudHMgdG8gaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggTWFjLWZvcm1hdHRlZCBkcml2ZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBmaWxlcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGFuZCBydW4tdGltZSBhc3BlY3RzIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MzYuNjgyMDk3NjQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU1BMVVNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5MU19VVEY4XFxuICAgODpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcXG4gIDExOlxcdFxcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUysgYW5kIHdhcyBpbnRyb2R1Y2VkIHdpdGhcXG4gIDE0OlxcdFxcdCAgTWFjT1MgOC4gSXQgaW5jbHVkZXMgYWxsIE1hYyBzcGVjaWZpYyBmaWxlc3lzdGVtIGRhdGEgc3VjaCBhc1xcbiAgMTU6XFx0XFx0ICBkYXRhIGZvcmtzIGFuZCBjcmVhdG9yIGNvZGVzLCBidXQgaXQgYWxzbyBoYXMgc2V2ZXJhbCBVTklYXFxuICAxNjpcXHRcXHQgIHN0eWxlIGZlYXR1cmVzIHN1Y2ggYXMgZmlsZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIEhGUysgZmlsZXN5c3RlbVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBIRlNQTFVTX0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjM2LjY4MjE2NzQyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQwMDQzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUy9IRlMrIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0d28gcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZTogYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgY29ycnVwdGlvbiBjaGVja3Mgd2l0aGluIHRoZSBIRlMgYW5kIEhGUysgZmlsZXN5c3RlbXMsIHNwZWNpZmljYWxseSBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgb3BlbmluZy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBmb3JjZSBhIHJlYWQtb25seSBzdGF0ZSBpZiBjb3JydXB0aW9uIGlzIGlkZW50aWZpZWQsIHByZXZlbnRpbmcgZnVydGhlciBkYXRhIGxvc3MuIFRoaXMgaXMgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0ICpkZW1hbmRzKiBmdXp6aW5nIHRvIGd1YXJhbnRlZSByb2J1c3RuZXNzIHdoZW4gZmFjZWQgd2l0aCBjb3JydXB0ZWQgaW1hZ2VzOyB3ZSB3YW50IHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoZXNlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseSwgd2l0aG91dCBjcmFzaGluZyBvciBpbnRyb2R1Y2luZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHkgbGFpZCBvdXQgZm9yIG1lOiBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc3BsdXNfYm1hcF9hbGxvY2AuXG5cbk5vdywgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGZvciBpbmNsdXNpb24gb2YgYGhmc19ibWFwX3Rlc3RfYml0YC4gQWgsIHllcywgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgZWl0aGVyIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIG9yIGlzbid0IGEgZGlzdGluY3Qgc3ltYm9sLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIGhlcmU6IHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTbywgYmFzZWQgb24gdGhhdCwgSSdtIGdvaW5nIHRvICpleGNsdWRlKiBgaGZzX2JtYXBfdGVzdF9iaXRgIGZyb20gbXkgbGlzdC5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxOSwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDo0My4yMjIyMTQ5ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgxOTMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTX0ZTXCIsXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2J0cmVlX29wZW5cIixcbiAgICBcImhmc19ibWFwX2FsbG9jXCIsXG4gICAgXCJoZnNwbHVzX2JtYXBfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcyBpbiB0aGUgSEZTIGFuZCBIRlMrIGZpbGVzeXN0ZW1zIGR1cmluZyBCLXRyZWUgbm9kZSBhbGxvY2F0aW9uIGFuZCBCLXRyZWUgb3BlbmluZy4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBjb3JydXB0ZWQgaW1hZ2VzIHdpdGhvdXQgY3Jhc2hpbmcgb3IgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiLFxuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19idHJlZV9vcGVuXCIsXG4gICAgXCJoZnNfYm1hcF9hbGxvY1wiLFxuICAgIFwiaGZzcGx1c19ibWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBiaXRtYXAgY29ycnVwdGlvbiBjaGVja3MgaW4gdGhlIEhGUyBhbmQgSEZTKyBmaWxlc3lzdGVtcyBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgQi10cmVlIG9wZW5pbmcuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgY29ycnVwdGVkIGltYWdlcyB3aXRob3V0IGNyYXNoaW5nIG9yIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6NDMuMzEwMDQ0OTkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTI1NjgwODY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjQzLjMxMDY5NTM3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTI1NjE1NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMrIEItdHJlZSBpbXBsZW1lbnRhdGlvbnMgdG8gZGV0ZWN0IGJpdG1hcCBjb3JydXB0aW9uIChzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoYXQgbm9kZSBpbmRleCAwLCB0aGUgaGVhZGVyIG5vZGUsIGlzIG1hcmtlZCBhcyB1c2VkKS4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBvdmVyd3JpdGluZyB0aGUgaGVhZGVyIG5vZGUgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMpIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Zjc2MjUwMjY3ZjcwODRkYTQwOGRmZTg4NGQ5NGQ3ZmJhNTA1ZDA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDI6NTk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXG5pbmRleCAyZWIzN2EyZjY0ZTg2Li45YjBiNzQxOGRkYmQ1IDEwMDY0NFxuLS0tIGEvZnMvaGZzL2J0cmVlLmNcbisrKyBiL2ZzL2hmcy9idHJlZS5jXG5AQCAtMTUsMTIgKzE1LDU5IEBAXG4gXG4gI2luY2x1ZGUgXCJidHJlZS5oXCJcbiBcbitzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuK3tcbitcdHUxNiByZWNfaWR4LCBvZmYsIGxlbjtcbitcdHUzMiBieXRlX29mZnNldDtcbitcdHU4IGJ5dGUsIG1hc2s7XG4rXG4rXHRpZiAobm9kZS1cdTAwM2V0aGlzID09IDApIHtcbitcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcbitcdFx0XHRwcl9lcnIoXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHRcdHJlY19pZHggPSAyO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9NQVApIHtcbitcdFx0XHRwcl9lcnIoXCJoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHRcdHJlY19pZHggPSAwO1xuK1x0fVxuK1xuK1x0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsIFx1MDAyNm9mZik7XG4rXHRpZiAoIWxlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Ynl0ZV9vZmZzZXQgPSBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFO1xuK1x0aWYgKGJ5dGVfb2Zmc2V0IFx1MDAzZT0gbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRieXRlID0gaGZzX2Jub2RlX3JlYWRfdTgobm9kZSwgb2ZmICsgYnl0ZV9vZmZzZXQpO1xuK1x0bWFzayA9IDEgXHUwMDNjXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcbitcbitcdHJldHVybiBieXRlIFx1MDAyNiBtYXNrO1xuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4re1xuK1x0c3dpdGNoIChjbmlkKSB7XG4rXHRjYXNlIEhGU19FWFRfQ05JRDpcbitcdFx0cmV0dXJuIFwiRXh0ZW50cyBPdmVyZmxvdyBGaWxlXCI7XG4rXHRjYXNlIEhGU19DQVRfQ05JRDpcbitcdFx0cmV0dXJuIFwiQ2F0YWxvZyBGaWxlXCI7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gXCJVbmtub3duIEItdHJlZVwiO1xuK1x0fVxuK31cbitcbiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4ge1xuIFx0c3RydWN0IGhmc19idHJlZSAqdHJlZTtcbiBcdHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyAqaGVhZDtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuK1x0c3RydWN0IGhmc19ibm9kZSAqbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTU1LDYgKzIwMiwxOSBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxuIFx0a3VubWFwX2xvY2FsKGhlYWQpO1xuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4rXG4rXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG4rXHRpZiAoSVNfRVJSKG5vZGUpKVxuK1x0XHRnb3RvIGZyZWVfaW5vZGU7XG4rXG4rXHRpZiAoIWhmc19ibWFwX3Rlc3RfYml0KG5vZGUsIDApKSB7XG4rXHRcdHByX3dhcm4oXCIoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxcblwiLFxuK1x0XHRcdHNiLVx1MDAzZXNfaWQsIGhmc19idHJlZV9uYW1lKGlkKSwgaWQpO1xuK1x0XHRwcl93YXJuKFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXG5cIik7XG4rXHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuK1x0fVxuK1xuK1x0aGZzX2Jub2RlX3B1dChub2RlKTtcbiBcdHJldHVybiB0cmVlO1xuIFxuIGZhaWxfZm9saW86XG5AQCAtMzE2LDYgKzM3NiwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0XHRcdGlmIChieXRlICE9IDB4ZmYpIHtcbiBcdFx0XHRcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFx1MDAzYyA4OyBtIFx1MDAzZVx1MDAzZT0gMSwgaSsrKSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4rXHRcdFx0XHRcdFx0aWYgKHVubGlrZWx5KCEoaWR4ICsgaSkpKSB7XG4rXHRcdFx0XHRcdFx0XHRwcl93YXJuKFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXG5cIixcbitcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuK1x0XHRcdFx0XHRcdFx0XHRoZnNfYnRyZWVfbmFtZSh0cmVlLVx1MDAzZWNuaWQpLFxuK1x0XHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZWNuaWQpO1xuK1x0XHRcdFx0XHRcdFx0cHJfd2FybihcIlJ1biBmc2NrLmhmcyB0byByZXBhaXIuXFxuXCIpO1xuK1x0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbitcdFx0XHRcdFx0XHRcdGt1bm1hcF9sb2NhbChkYXRhKTtcbitcdFx0XHRcdFx0XHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4rXHRcdFx0XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbitcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWR4ICs9IGk7XG4gXHRcdFx0XHRcdFx0ZGF0YVtvZmZdIHw9IG07XG4gXHRcdFx0XHRcdFx0c2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTtcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2J0cmVlLmMgYi9mcy9oZnNwbHVzL2J0cmVlLmNcbmluZGV4IDM5NDU0MmE0N2U2MDAuLjNlZTkyMjQ4YjI0MDkgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmNcbisrKyBiL2ZzL2hmc3BsdXMvYnRyZWUuY1xuQEAgLTU2MSw2ICs1NjEsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkrKykge1xuIFx0XHRcdFx0XHRpZiAoIShieXRlIFx1MDAyNiBtKSkge1xuK1x0XHRcdFx0XHRcdGlmICh1bmxpa2VseSghKGlkeCArIGkpKSkge1xuK1x0XHRcdFx0XHRcdFx0cHJfd2FybihcIiglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCIsXG4rXHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlc2ItXHUwMDNlc19pZCxcbitcdFx0XHRcdFx0XHRcdFx0aGZzX2J0cmVlX25hbWUodHJlZS1cdTAwM2VjbmlkKSxcbitcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VjbmlkKTtcbitcdFx0XHRcdFx0XHRcdHByX3dhcm4oXCJSdW4gZnNjay5oZnNwbHVzIHRvIHJlcGFpci5cXG5cIik7XG4rXHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZXNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuK1x0XHRcdFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuK1x0XHRcdFx0XHRcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbitcdFx0XHRcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZHggKz0gaTtcbiBcdFx0XHRcdFx0XHRkYXRhW2N0eC5vZmZdIHw9IG07XG4gXHRcdFx0XHRcdFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDo0My4zMTA2OTY0OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNTYxMzAyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTL0hGUysgQi10cmVlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYGZzL2hmcy9idHJlZS5jYCBhbmQgYGZzL2hmc3BsdXMvYnRyZWUuY2AuIFdoYXQgd2UgaGF2ZSBoZXJlIGFyZSBzYW5pdHkgY2hlY2tzIGRlc2lnbmVkIHRvIGRldGVjdCBhbmQgaGFuZGxlIGZpbGVzeXN0ZW0gY29ycnVwdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQi10cmVlIGJpdG1hcC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlIGZpcnN0IGJpdCAoaW5kZXggMCkgb2YgdGhlIEItdHJlZSBtYXAgcmVjb3JkIGlzIHNldCwgaW5kaWNhdGluZyB0aGF0IHRoZSBoZWFkZXIgbm9kZSAobm9kZSBpbmRleCAwKSBpcyBpbiB1c2Ug4oCTIHdoaWNoIGl0ICphbHdheXMqIHNob3VsZCBiZS4gSWYgdGhhdCBiaXQgaXMgKm5vdCogc2V0LCB0aGUgY29kZSBub3cgdHJpZ2dlcnMgYSByZWFkLW9ubHkgbW91bnQsIGVmZmVjdGl2ZWx5IGxvY2tpbmcgZG93biB0aGUgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG1vcmUgc2V2ZXJlIGRhbWFnZS5cblxuSSd2ZSBhbHNvIG5vdGljZWQgdGhhdCB0aGVyZSdzIGEgZ3VhcmQgaW4gYGhmc19ibWFwX2FsbG9jYCB0byBwcmV2ZW50IGFsbG9jYXRpb24gb2Ygbm9kZSBpbmRleCAwLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZWZlbnNlLCBhcyBhbGxvY2F0aW5nIHRoZSBoZWFkZXIgbm9kZSB3b3VsZCBiZSBjYXRhc3Ryb3BoaWMuIFRoZSBmb3JjZWQgcmVhZC1vbmx5IG1vZGUgYW5kIGVycm9yIHJldHVybiBhcmUgdGhlIGNvcnJlY3QgcmVzcG9uc2VzIHRvIHN1Y2ggYW4gYXR0ZW1wdC5cblxuQ3JpdGljYWxseSwgdGhlcmUncyBubyBuZXcgYWxsb2NhdGlvbiBvZiBtZW1vcnksIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gYXBwYXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMuIFRoZSBtYWluIHB1cnBvc2UgaXMgdG8gZGV0ZWN0IGFuZCBjb250YWluIGZpbGVzeXN0ZW0gY29ycnVwdGlvbi4gVGhpcyBpcyBleGNlbGxlbnQgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5UaGlzIGZpeCBpcywgZXNzZW50aWFsbHksIGEgcmVzcG9uc2UgdG8gYSBzaXR1YXRpb24gd2hlcmUgdGhlIGhlYWRlciBub2RlIGlzIHRyZWF0ZWQgYXMgYXZhaWxhYmxlLiBJdCdzIHRoZSBraW5kIG9mIGJ1ZyB0aGF0ICpzaG91bGQqIGJlIGNhdWdodCBieSBLQVNBTiBvciBvdGhlciBrZXJuZWwgYnVnIGRldGVjdG9ycy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIG1vcmUgZ2VuZXJhbGx5LCBmaWxlc3lzdGVtIGNvcnJ1cHRpb24sIGFyZSBhbGwgcG90ZW50aWFsIG91dGNvbWVzIGlmIG5vZGUgMCBpcyBtaXNoYW5kbGVkLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBoZnNfYm1hcF90ZXN0X2JpdGAgaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gT2theSwgdGhlIGZ1bmN0aW9uIGBoZnNfYm5vZGVfcmVhZF91OGAgcmVhZHMgZGF0YSBmcm9tIHRoZSBCLXRyZWUgbm9kZSBwYWdlcy4gVGhlc2UgcGFnZXMgYXJlIHJlYWQgZnJvbSB0aGUgZGlzayBieSB0aGUgYmxvY2sgbGF5ZXIgYW5kLCB0aGVyZWZvcmUsIHRoZXkgYXJlICphbHdheXMqIGluaXRpYWxpemVkIGJ5IHRoZSBibG9jayBsYXllci4gU28gdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuXG5cbkdpdmVuIGFsbCB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gZG9lc24ndCBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIHRoaXMgY2hhbmdlLiBJdCdzIGEgc29saWQsIGRlZmVuc2l2ZSBwYXRjaCBhaW1lZCBhdCBpbXByb3ZpbmcgZmlsZXN5c3RlbSBpbnRlZ3JpdHkgYW5kIHByb3RlY3RpbmcgYWdhaW5zdCBrbm93biBjb3JydXB0aW9uIHNjZW5hcmlvcy4gTmVlZHNLTVNBTiBpcyBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0OSwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMToyNC41NjY4Mjk0ODZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gdGhlIEhGUyBhbmQgSEZTKyBCLXRyZWUgaW1wbGVtZW50YXRpb25zIHRvIGRldGVjdCBiaXRtYXAgY29ycnVwdGlvbiAoc3BlY2lmaWNhbGx5LCBlbnN1cmluZyB0aGF0IG5vZGUgaW5kZXggMCwgdGhlIGhlYWRlciBub2RlLCBpcyBtYXJrZWQgYXMgdXNlZCkuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3ZlcndyaXRpbmcgdGhlIGhlYWRlciBub2RlIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzKSBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMrIEItdHJlZSBpbXBsZW1lbnRhdGlvbnMgdG8gZGV0ZWN0IGJpdG1hcCBjb3JydXB0aW9uIChzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoYXQgbm9kZSBpbmRleCAwLCB0aGUgaGVhZGVyIG5vZGUsIGlzIG1hcmtlZCBhcyB1c2VkKS4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBvdmVyd3JpdGluZyB0aGUgaGVhZGVyIG5vZGUgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMpIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowc22ph[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 02:34:36 +0000 UTC FinishedAt: 2026-08-14 03:01:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS", "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFS_FS", "HFSPLUS_FS" ], "series_id": "ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfs_btree_open", "hfs_bmap_alloc", "hfsplus_bmap_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7LAogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2J0cmVlX29wZW4mIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMmIzQzOyBCLXRyZWUgaW1wbGVtZW50YXRpb25zIHRvIGRldGVjdCBiaXRtYXAgY29ycnVwdGlvbiAoc3BlY2lmaWNhbGx5LCBlbnN1cmluZyB0aGF0IG5vZGUgaW5kZXggMCwgdGhlIGhlYWRlciBub2RlLCBpcyBtYXJrZWQgYXMgdXNlZCkuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3ZlcndyaXRpbmcgdGhlIGhlYWRlciBub2RlIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzKSBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUyYjNDM7IGZpbGVzeXN0ZW1zIGR1cmluZyBCLXRyZWUgbm9kZSBhbGxvY2F0aW9uIGFuZCBCLXRyZWUgb3BlbmluZy4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBjb3JydXB0ZWQgaW1hZ2VzIHdpdGhvdXQgY3Jhc2hpbmcgb3IgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWY3NjI1MDI2N2Y3MDg0ZGE0MDhkZmU4ODRkOTRkN2ZiYTUwNWQwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDAyOjU5OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmNcbmluZGV4IDJlYjM3YTJmNjRlODYuLjliMGI3NDE4ZGRiZDUgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSwxMiAmIzQzOzE1LDU5IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YnRyZWUuaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHJlY19pZHgsIG9mZiwgbGVuO1xuJiM0MztcdHUzMiBieXRlX29mZnNldDtcbiYjNDM7XHR1OCBieXRlLCBtYXNrO1xuJiM0MztcbiYjNDM7XHRpZiAobm9kZS1cdTAwM2V0aGlzID09IDApIHtcbiYjNDM7XHRcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSEVBREVSKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZWNfaWR4ID0gMjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9NQVApIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O2hmczogaW52YWxpZCBidHJlZSBtYXAgbm9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlY19pZHggPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsIFx1MDAyNm9mZik7XG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGJ5dGVfb2Zmc2V0ID0gbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURTtcbiYjNDM7XHRpZiAoYnl0ZV9vZmZzZXQgXHUwMDNlPSBsZW4pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGJ5dGUgPSBoZnNfYm5vZGVfcmVhZF91OChub2RlLCBvZmYgJiM0MzsgYnl0ZV9vZmZzZXQpO1xuJiM0MztcdG1hc2sgPSAxIFx1MDAzY1x1MDAzYyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBieXRlIFx1MDAyNiBtYXNrO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGNuaWQpIHtcbiYjNDM7XHRjYXNlIEhGU19FWFRfQ05JRDpcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtFeHRlbnRzIE92ZXJmbG93IEZpbGVcJiMzNDs7XG4mIzQzO1x0Y2FzZSBIRlNfQ0FUX0NOSUQ6XG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7Q2F0YWxvZyBGaWxlXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7VW5rbm93biBCLXRyZWVcJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xuIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcbiB7XG4gXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xuIFx0c3RydWN0IGhmc19idHJlZV9oZWFkZXJfcmVjICpoZWFkO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4mIzQzO1x0c3RydWN0IGhmc19ibm9kZSAqbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTU1LDYgJiM0MzsyMDIsMTkgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2VcbiBcdGt1bm1hcF9sb2NhbChoZWFkKTtcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihub2RlKSlcbiYjNDM7XHRcdGdvdG8gZnJlZV9pbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCAwKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c2ItXHUwMDNlc19pZCwgaGZzX2J0cmVlX25hbWUoaWQpLCBpZCk7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1J1biBmc2NrLmhmcyB0byByZXBhaXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGZzX2Jub2RlX3B1dChub2RlKTtcbiBcdHJldHVybiB0cmVlO1xuIFxuIGZhaWxfZm9saW86XG5AQCAtMzE2LDYgJiM0MzszNzYsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4mIzQzO1x0XHRcdFx0XHRcdGlmICh1bmxpa2VseSghKGlkeCAmIzQzOyBpKSkpIHtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwcl93YXJuKFwmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0aGZzX2J0cmVlX25hbWUodHJlZS1cdTAwM2VjbmlkKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlY25pZCk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cHJfd2FybihcJiMzNDtSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiYjNDM7XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdGlkeCAmIzQzOz0gaTtcbiBcdFx0XHRcdFx0XHRkYXRhW29mZl0gfD0gbTtcbiBcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eSgqcGFnZXApO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuY1xuaW5kZXggMzk0NTQyYTQ3ZTYwMC4uM2VlOTIyNDhiMjQwOSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9idHJlZS5jXG5AQCAtNTYxLDYgJiM0Mzs1NjEsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4mIzQzO1x0XHRcdFx0XHRcdGlmICh1bmxpa2VseSghKGlkeCAmIzQzOyBpKSkpIHtcbiYjNDM7XHRcdFx0XHRcdFx0XHRwcl93YXJuKFwmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0aGZzX2J0cmVlX25hbWUodHJlZS1cdTAwM2VjbmlkKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlY25pZCk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cHJfd2FybihcJiMzNDtSdW4gZnNjay5oZnNwbHVzIHRvIHJlcGFpci5cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlc2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuJiM0MztcdFx0XHRcdFx0XHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4mIzQzO1x0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZHggJiM0Mzs9IGk7XG4gXHRcdFx0XHRcdFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xuIFx0XHRcdFx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNfRlMmIzM0OywKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgICAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfYm1hcF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcyBpbiB0aGUgSEZTIGFuZCBIRlMmIzQzOyBmaWxlc3lzdGVtcyBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgQi10cmVlIG9wZW5pbmcuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgY29ycnVwdGVkIGltYWdlcyB3aXRob3V0IGNyYXNoaW5nIG9yIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlmNzYyNTAyNjdmNzA4NGRhNDA4ZGZlODg0ZDk0ZDdmYmE1MDVkMDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjo1OTozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmMKaW5kZXggMmViMzdhMmY2NGU4Ni4uOWIwYjc0MThkZGJkNSAxMDA2NDQKLS0tIGEvZnMvaGZzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmMKQEAgLTE1LDEyICYjNDM7MTUsNTkgQEAKIAogI2luY2x1ZGUgJiMzNDtidHJlZS5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpCiYjNDM7ewomIzQzOwl1MTYgcmVjX2lkeCwgb2ZmLCBsZW47CiYjNDM7CXUzMiBieXRlX29mZnNldDsKJiM0MzsJdTggYnl0ZSwgbWFzazsKJiM0MzsKJiM0MzsJaWYgKG5vZGUtJmd0O3RoaXMgPT0gMCkgewomIzQzOwkJaWYgKG5vZGUtJmd0O3R5cGUgIT0gSEZTX05PREVfSEVBREVSKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIGhlYWRlciBub2RlXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwkJcmVjX2lkeCA9IDI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9NQVApIHsKJiM0MzsJCQlwcl9lcnIoJiMzNDtoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQlyZWNfaWR4ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgJmFtcDtvZmYpOwomIzQzOwlpZiAoIWxlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJYnl0ZV9vZmZzZXQgPSBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFOwomIzQzOwlpZiAoYnl0ZV9vZmZzZXQgJmd0Oz0gbGVuKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlieXRlID0gaGZzX2Jub2RlX3JlYWRfdTgobm9kZSwgb2ZmICYjNDM7IGJ5dGVfb2Zmc2V0KTsKJiM0MzsJbWFzayA9IDEgJmx0OyZsdDsgKDcgLSAobm9kZV9iaXRfaWR4ICUgQklUU19QRVJfQllURSkpOwomIzQzOwomIzQzOwlyZXR1cm4gYnl0ZSAmYW1wOyBtYXNrOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGNuaWQpIHsKJiM0MzsJY2FzZSBIRlNfRVhUX0NOSUQ6CiYjNDM7CQlyZXR1cm4gJiMzNDtFeHRlbnRzIE92ZXJmbG93IEZpbGUmIzM0OzsKJiM0MzsJY2FzZSBIRlNfQ0FUX0NOSUQ6CiYjNDM7CQlyZXR1cm4gJiMzNDtDYXRhbG9nIEZpbGUmIzM0OzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAmIzM0O1Vua25vd24gQi10cmVlJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi8KIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcCkKIHsKIAlzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlOwogCXN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyAqaGVhZDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKJiM0MzsJc3RydWN0IGhmc19ibm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xNTUsNiAmIzQzOzIwMiwxOSBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZQogCWt1bm1hcF9sb2NhbChoZWFkKTsKIAlmb2xpb191bmxvY2soZm9saW8pOwogCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CiYjNDM7CW5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihub2RlKSkKJiM0MzsJCWdvdG8gZnJlZV9pbm9kZTsKJiM0MzsKJiM0MzsJaWYgKCFoZnNfYm1hcF90ZXN0X2JpdChub2RlLCAwKSkgewomIzQzOwkJcHJfd2FybigmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXG4mIzM0OywKJiM0MzsJCQlzYi0mZ3Q7c19pZCwgaGZzX2J0cmVlX25hbWUoaWQpLCBpZCk7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UnVuIGZzY2suaGZzIHRvIHJlcGFpci5cbiYjMzQ7KTsKJiM0MzsJCXNiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKJiM0MzsJfQomIzQzOwomIzQzOwloZnNfYm5vZGVfcHV0KG5vZGUpOwogCXJldHVybiB0cmVlOwogCiBmYWlsX2ZvbGlvOgpAQCAtMzE2LDYgJiM0MzszNzYsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSkKIAkJCWlmIChieXRlICE9IDB4ZmYpIHsKIAkJCQlmb3IgKG0gPSAweDgwLCBpID0gMDsgaSAmbHQ7IDg7IG0gJmd0OyZndDs9IDEsIGkmIzQzOyYjNDM7KSB7CiAJCQkJCWlmICghKGJ5dGUgJmFtcDsgbSkpIHsKJiM0MzsJCQkJCQlpZiAodW5saWtlbHkoIShpZHggJiM0MzsgaSkpKSB7CiYjNDM7CQkJCQkJCXByX3dhcm4oJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxuJiMzNDssCiYjNDM7CQkJCQkJCQl0cmVlLSZndDtzYi0mZ3Q7c19pZCwKJiM0MzsJCQkJCQkJCWhmc19idHJlZV9uYW1lKHRyZWUtJmd0O2NuaWQpLAomIzQzOwkJCQkJCQkJdHJlZS0mZ3Q7Y25pZCk7CiYjNDM7CQkJCQkJCXByX3dhcm4oJiMzNDtSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxuJiMzNDspOwomIzQzOwkJCQkJCQl0cmVlLSZndDtzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CQkJCQkJCWt1bm1hcF9sb2NhbChkYXRhKTsKJiM0MzsJCQkJCQkJaGZzX2Jub2RlX3B1dChub2RlKTsKJiM0MzsJCQkJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiYjNDM7CQkJCQkJfQogCQkJCQkJaWR4ICYjNDM7PSBpOwogCQkJCQkJZGF0YVtvZmZdIHw9IG07CiAJCQkJCQlzZXRfcGFnZV9kaXJ0eSgqcGFnZXApOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9idHJlZS5jIGIvZnMvaGZzcGx1cy9idHJlZS5jCmluZGV4IDM5NDU0MmE0N2U2MDAuLjNlZTkyMjQ4YjI0MDkgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2J0cmVlLmMKQEAgLTU2MSw2ICYjNDM7NTYxLDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpCiAJCQlpZiAoYnl0ZSAhPSAweGZmKSB7CiAJCQkJZm9yIChtID0gMHg4MCwgaSA9IDA7IGkgJmx0OyA4OyBtICZndDsmZ3Q7PSAxLCBpJiM0MzsmIzQzOykgewogCQkJCQlpZiAoIShieXRlICZhbXA7IG0pKSB7CiYjNDM7CQkJCQkJaWYgKHVubGlrZWx5KCEoaWR4ICYjNDM7IGkpKSkgewomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7KCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cbiYjMzQ7LAomIzQzOwkJCQkJCQkJdHJlZS0mZ3Q7c2ItJmd0O3NfaWQsCiYjNDM7CQkJCQkJCQloZnNfYnRyZWVfbmFtZSh0cmVlLSZndDtjbmlkKSwKJiM0MzsJCQkJCQkJCXRyZWUtJmd0O2NuaWQpOwomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7UnVuIGZzY2suaGZzcGx1cyB0byByZXBhaXIuXG4mIzM0Oyk7CiYjNDM7CQkJCQkJCXRyZWUtJmd0O3NiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKJiM0MzsJCQkJCQkJa3VubWFwX2xvY2FsKGRhdGEpOwomIzQzOwkJCQkJCQloZnNfYm5vZGVfcHV0KG5vZGUpOwomIzQzOwkJCQkJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKJiM0MzsJCQkJCQl9CiAJCQkJCQlpZHggJiM0Mzs9IGk7CiAJCQkJCQlkYXRhW2N0eC5vZmZdIHw9IG07CiAJCQkJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhGUy9IRlMmIzQzOyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2hmcy9idHJlZS5jYCBhbmQgYGZzL2hmc3BsdXMvYnRyZWUuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgY29yZSBCLXRyZWUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlc2UgZmlsZXN5c3RlbXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBgaGZzX2JtYXBfdGVzdF9iaXRgIGNoZWNrIHdpdGhpbiBgaGZzX2J0cmVlX29wZW5gIGluIHRoZSBIRlMgY29kZSwgYW5kIGFub3RoZXIgb25lIHdpdGhpbiBgaGZzX2JtYXBfYWxsb2NgIGluICpib3RoKiBIRlMgYW5kIEhGUyYjNDM7LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgaWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgaXQmIzM5O3MgZ29pbmcgdG8gZm9yY2UgdGhlIGZpbGVzeXN0ZW0gaW50byByZWFkLW9ubHkgbW9kZSwgd2hpY2ggbWFrZXMgdG90YWwgc2Vuc2UgZnJvbSBhIGRhdGEgaW50ZWdyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcHJvYWN0aXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZGF0YSBsb3NzLiBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgc29tZXRoaW5nIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIFRodXMsIEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgdGhlIHNjb3BlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBgQ09ORklHX0hGU19GU2AgYW5kIGBDT05GSUdfSEZTUExVU19GU2AsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhvc2UgaW4gdGhlIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBmaWxlcyBpbiBgZnMvaGZzL0tjb25maWdgIGFuZCBgZnMvaGZzcGx1cy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0IGlzIHdvcnRoIGNoZWNraW5nIHdoYXQgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGVzZSBLY29uZmlnIGZpbGVzIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvaGZzL0tjb25maWc6Mjpjb25maWcgSEZTX0ZTXG5mcy9oZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXAgaW50byBIRlMmIzQzOyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBIRlMmIzQzOyBoZXJlLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgY2hhbGxlbmdlcyBvZiBpdHMgZGVzaWduLiBUaGUgY2xhc3NpYyBoaWVyYXJjaGljYWwgZmlsZSBzeXN0ZW0sIGEgY29ybmVyc3RvbmUgb2YgbWFjT1MgZm9yIHllYXJzLiBJIGZpbmQgbXlzZWxmIGNvbnNpZGVyaW5nIGl0cyBzdHJ1Y3R1cmUg4oCTIHRoZSBCLXRyZWUgbWV0YWRhdGEsIHRoZSB2b2x1bWUgaGVhZGVyLCB0aGUgYWxsb2NhdGlvbiBibG9ja3MsIGFuZCBhbGwgdGhlIGludHJpY2FjaWVzIG9mIG1hbmFnaW5nIGJvdGggZGF0YSBhbmQgbWV0YWRhdGEgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24gdW5pdC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXRzIGxpbWl0YXRpb25zLiBUaGUgMiBHQiBmaWxlIHNpemUgbGltaXQgaW4gZWFybGllciBpdGVyYXRpb25zLiBUaGUgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgb24gbGFyZ2VyIGRyaXZlcywgd2hpY2ggYWx3YXlzIGxlZCB0byBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gVGhlIGluaGVyZW50IGZyYWdpbGl0eSBvZiB0aGUgY2F0YWxvZyBmaWxlLiBJJiMzOTttIHJlY2FsbGluZyB0aGUgY2xldmVyIHdvcmthcm91bmRzIEFwcGxlIGVtcGxveWVkIHRvIG1pdGlnYXRlIHNvbWUgb2YgdGhlc2UgcHJvYmxlbXMsIHN1Y2ggYXMgdGhlIGV4dGVudCBvdmVyZmxvdyBmaWxlLiBJJiMzOTttIHdvbmRlcmluZyBob3cgdGhvc2UgdGVjaG5pcXVlcyBwZXJmb3JtZWQgaW4gcmVhbCB3b3JsZCBzY2VuYXJpb3MuCgpBbmQgdGhlbiB0aGUgam91cm5hbGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBqb3VybmFsaW5nIHdhcyBhIGh1Z2Ugc3RlcCwgYnV0IEkmIzM5O20gcmVtZW1iZXJpbmcgdGhlIGRlYmF0ZXMgYWJvdXQgaXRzIGltcGxlbWVudGF0aW9uLiBUaGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eSwgdGhlIHBvdGVudGlhbCBmb3IgZGF0YSBsb3NzIGluIHRoZSBldmVudCBvZiBjYXRhc3Ryb3BoaWMgZmFpbHVyZXMuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLCB3b25kZXJpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCBjb25zaXN0ZW5jeSBtb2RlcyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBJJiMzOTttIHF1ZXN0aW9uaW5nIGhvdyBIRlMmIzQzOyB3YXMgYWJsZSB0byBzY2FsZSBhbmQgcGVyZm9ybSBpbiBkaWZmZXJlbnQgY29uZGl0aW9ucyBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGltZS4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIEl0IHdhcyBhIGdvb2QgZGVzaWduLCBidXQgY2VydGFpbmx5IG5vdCB3aXRob3V0IGl0cyBpc3N1ZXMgd2hlbiBtb3ZpbmcgZmlsZXMgYmV0d2VlbiBzeXN0ZW1zLiBJIGFtIHJ1bm5pbmcgdGhyb3VnaCB2YXJpb3VzIGRlc2lnbiBjaG9pY2VzLCBzdWNoIGFzIHRoZSB1c2Ugb2YgcmVzb3VyY2UgZm9ya3MsIGFuZCBob3cgdGhvc2Ugd2VyZSBlaXRoZXIgZW1icmFjZWQgb3IgcHJvYmxlbWF0aWMuCgpGaW5hbGx5LCBJJiMzOTttIHJlZmxlY3Rpbmcgb24gaXRzIGxlZ2FjeS4gVGhlIHBhdGggdG8gQVBGUyDigJMgdGhlIGV2b2x1dGlvbmFyeSBzdGVwcyB0aGF0IHdlcmUgdGFrZW4sIHRoZSBsZXNzb25zIGxlYXJuZWQgZnJvbSBIRlMmIzQzOy4gSG93IEFQRlMgYWRkcmVzc2VkIGl0cyBwcmVkZWNlc3NvcnMmIzM5OyBzaG9ydGNvbWluZ3MuIEkgYW0gYXdhcmUgb2YgdGhlIGNvbnRpbnVlZCBwcmVzZW5jZSBvZiBIRlMmIzQzOyBvbiBvbGRlciBzeXN0ZW1zLCBhbmQgSSBoYXZlIHRvIGFzayBteXNlbGYsICYjMzQ7RG9lcyBIRlMmIzQzOyBzdGlsbCBob2xkIHZhbHVlPyYjMzQ7CgpVbHRpbWF0ZWx5LCBJIHJlYWxpemUgdGhhdCBIRlMmIzQzOyB3YXMgYSBjb21wbGV4IHBpZWNlIG9mIGVuZ2luZWVyaW5nLCByZWZsZWN0aW5nIHRoZSBjb25zdHJhaW50cyBvZiBpdHMgdGltZS4gSXQgd2FzIGEgZ29vZCBkZXNpZ24sIGJ1dCBhIHJlbGljIGluIHRoZSBtb2Rlcm4gd29ybGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhGU1BMVVNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xuZnMvaGZzcGx1cy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25mbGljdHMgaW4gSEZTL0hGUyYjNDM7IEItVHJlZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIHNwZWNpZmljYWxseSBpbiB0aGUgSEZTIGFuZCBIRlMmIzQzOyBmaWxlIHN5c3RlbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVkIGFzIGBzdGF0aWNgIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGZpbGVzPyBJZiB0aGV5IGFyZSwgdGhlbiB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRob3NlIGZpbGVzIGFuZCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBleHRlcm5hbCBsaW5rYWdlIGlzc3Vlcy4gSWYgbm90Li4uIHdlbGwsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgSSBuZWVkIHRvIGRlbHZlIGRlZXBlci4KCkkgc2VlIHRoZSBkZWNsYXJhdGlvbnM6IGBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApYCBhbmQgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYCBpbiBgZnMvaGZzL2J0cmVlLmNgLCBhbG9uZyB3aXRoIGEgcmVwZWF0IG9mIGBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKWAgaW4gYGZzL2hmc3BsdXMvYnRyZWUuY2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGNhbiB0ZWxsIHRoZXNlIGFyZW4mIzM5O3Qgc3RhdGljIGRlY2xhcmF0aW9ucyBiZWNhdXNlIHRoZXkmIzM5O3JlIGJlaW5nIGV4cG9ydGVkLCBhdCBsZWFzdCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2Ugb2YgdGhhdCBrZXl3b3JkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGZvciBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBiZXR3ZWVuIHRoZSBIRlMgYW5kIEhGUyYjNDM7IGltcGxlbWVudGF0aW9ucyBvZiBgaGZzX2JtYXBfYWxsb2NgLiBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBgZnMvaGZzL2J0cmVlLmNgIGZpbGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYnRyZWVfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmcy9idHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmcy9idHJlZS5jPTUyPXN0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcbi0tXG5mcy9oZnMvYnRyZWUuYy02NC0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbmZzL2hmcy9idHJlZS5jOjY1OnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcbmZzL2hmcy9idHJlZS5jLTY2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEItdHJlZSBBbGxvY2F0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSEZTJiM0MzsgYm1hcCBhbGxvY2F0b3Igd29ya3MuIFRoYXQgc3VnZ2VzdHMgYSBkZWVwIGRpdmUgaW50byB0aGUgYGZzL2hmcy9idHJlZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgYmxvY2tzIHdpdGhpbiB0aGUgSEZTJiM0MzsgQi10cmVlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBmaWxlIHN5c3RlbSBzdHJ1Y3R1cmUgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIGZyZWUgc3BhY2UsIGhhbmRsZXMgZnJhZ21lbnRhdGlvbiAob3IgYXR0ZW1wdHMgdG8gbWl0aWdhdGUgaXQpLCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIG1ldGFkYXRhLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gbG93ZXItbGV2ZWwgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZSBwaHlzaWNhbCBkaXNrIGFjY2Vzcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MpIG9mIEhGUyYjNDM7IGxpZXMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBmb3IgdGhlIGFsbG9jYXRpb24gYWxnb3JpdGhtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnMvYnRyZWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYnRyZWUuYz0zMjI9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXG4tLVxuZnMvaGZzL2J0cmVlLmMtMzQ0LVxuZnMvaGZzL2J0cmVlLmM6MzQ1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG5mcy9oZnMvYnRyZWUuYy0zNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgSEZTJiM0MzsgQi1UcmVlIEFsbG9jYXRpb24gTWVjaGFuaXNtKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSEZTJiM0MzsgZmlsZSBzeXN0ZW0gYWxsb2NhdGVzIHNwYWNlIHZpYSBpdHMgQi1UcmVlIHN0cnVjdHVyZS4gU2luY2UgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBmcy9oZnNwbHVzL2J0cmVlLmNgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEItVHJlZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgSEZTJiM0MzsgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBJIG5lZWQgdG8gcGlucG9pbnQgd291bGQgYmUgYGhmc19ibWFwX2FsbG9jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHNjcmVhbXMgJiMzNDtibG9jayBtYXAgYWxsb2NhdGlvbiYjMzQ7IHRvIG1lLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCBJIG5lZWQgdG8gZXhwbG9yZS4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBIRlMmIzQzOyBmaWxlIHN5c3RlbSBtYW5hZ2VzIGRpc2sgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9idHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYnRyZWUuYz00OTk9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTUyNy1cbmZzL2hmc3BsdXMvYnRyZWUuYzo1Mjg6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbmZzL2hmc3BsdXMvYnRyZWUuYy01Mjkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlN5bWJvbCBSZXNvbHV0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gYWRkaW5nIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgdG8gRm9jdXNTeW1ib2xzLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEkganVzdCByZW1lbWJlcmVkIHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpcyBkZWZpbmVkIGluIGJvdGggYGhmc2AgYW5kIGBoZnNwbHVzYC4gTm93LCBTeXprYWxsZXIgKm1pZ2h0KiBjaG9rZSBvbiB0aGF0IGlmIHRoZXJlJiMzOTtzIGEgbmFtZSBjb2xsaXNpb24sIGV2ZW4gdGhvdWdoIEkmIzM5O20gcHJldHR5IHN1cmUgdGhlc2UgYXJlIGNvbXBpbGVkIGludG8gc2VwYXJhdGUgbW9kdWxlcy4gU3RpbGwsIEkgc2hvdWxkIGNvbmZpcm0gdGhleSYjMzk7cmUgYWN0dWFsbHkgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm90IGp1c3Qgbm9uLXN0YXRpYyBsb2NhbCBmdW5jdGlvbnMuIExldCBtZSBkb3VibGUtY2hlY2suCgpBaCwgcmlnaHQuIEluIGBoZnNwbHVzYCwgdGhlIGZ1bmN0aW9uJiMzOTtzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGlzIGBoZnNfYm1hcF9hbGxvY2AsIG5vdCBqdXN0IGBibWFwX2FsbG9jYC4gT2theSwgbm93LCBkb2VzIGBoZnNwbHVzYCBldmVuICp1c2UqIHRoaXMgdmVyc2lvbiwgb3IgaXMgdGhlcmUgYW5vdGhlciBvbmU/IFllcyEgSXQgaXMgaW5kZWVkIGRlZmluZWQgaW4gYGZzL2hmc3BsdXMvYnRyZWUuY2AuIE9rYXksIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgaXQgbWlnaHQgYmUgd29ydGggdmVyaWZ5aW5nIHRoaXMuIExldCBtZSBsb29rIGluIGBmcy9oZnNwbHVzL2J0cmVlLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIHNlZSBpZiBpdCYjMzk7cyBleHBvcnRlZC4gSSBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2JyZWMuYz0yMzU9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjQ3LVx0bm9kZSA9IGZkLVx1MDAzZWJub2RlO1xuZnMvaGZzcGx1cy9icmVjLmM6MjQ4Olx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTI0OS1cdGlmIChJU19FUlIobmV3X25vZGUpKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTQ3MD1zdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtNDgyLVx0fVxuZnMvaGZzcGx1cy9icmVjLmM6NDgzOlx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTQ4NC1cdGlmIChJU19FUlIobmV3X25vZGUpKSB7XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTQ5OT1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcylcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI3LVxuZnMvaGZzcGx1cy9idHJlZS5jOjUyODpzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuZnMvaGZzcGx1cy9idHJlZS5jLTUyOS17XG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4OS0jZGVmaW5lIGhmc19ibWFwX3Jlc2VydmUgaGZzcGx1c19ibWFwX3Jlc2VydmVcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjI5MDojZGVmaW5lIGhmc19ibWFwX2FsbG9jIGhmc3BsdXNfYm1hcF9hbGxvY1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjkxLSNkZWZpbmUgaGZzX2JtYXBfZnJlZSBoZnNwbHVzX2JtYXBfZnJlZVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM2Nj1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcyk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozNjc6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zNjgtdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTI3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIHRoZSBIRlMmIzQzOyBCbWFwIEFsbG9jYXRpb24gRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyBhYm91dCB0aGUgSEZTJiM0MzsgYm1hcCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBgaGZzX2JtYXBfYWxsb2NgIHNvbWV3aGVyZSwgYnV0IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyBqdXN0IGEgbWFjcm8uIFJpZ2h0LCBsb29raW5nIGluIGBmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaGAsIGl0JiMzOTtzIGNsZWFyOiBgaGZzX2JtYXBfYWxsb2NgIGlzIGluZGVlZCBqdXN0IGEgbWFjcm8gZGVmaW5pdGlvbiBmb3IgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbiBgaGZzcGx1c2AsIHdoaWNoIGlzIGBoZnNwbHVzX2JtYXBfYWxsb2NgLiBKdXN0IHdhbnQgdG8gbG9jayB0aGF0IGRvd24gaW4gbXkgaGVhZCBhbmQga2VlcCB0aGF0IHN0cmFpZ2h0LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gdXNlIGBoZnNwbHVzX2JtYXBfYWxsb2NgIHdoZW4gSSYjMzk7bSBhY3R1YWxseSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb2RlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHRvIGJlIHN1cmUuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIGV4dHJhIGNhcmVmdWwsIGVzcGVjaWFsbHkgd2l0aCBzb21ldGhpbmcgZnVuZGFtZW50YWwgbGlrZSBibG9jayBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNwbHVzX2JtYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjg5LSNkZWZpbmUgaGZzX2JtYXBfcmVzZXJ2ZSBoZnNwbHVzX2JtYXBfcmVzZXJ2ZVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MjkwOiNkZWZpbmUgaGZzX2JtYXBfYWxsb2MgaGZzcGx1c19ibWFwX2FsbG9jXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yOTEtI2RlZmluZSBoZnNfYm1hcF9mcmVlIGhmc3BsdXNfYm1hcF9mcmVlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIRlMmIzQzOyBCLXRyZWUgQWxsb2NhdGlvbiBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgYXMgYGhmc3BsdXNfYm1hcF9hbGxvY2AuIFNvLCBvbiB0aGUgc3VyZmFjZSwgdGhlIGNvbXBpbGVyIGlzIGdvaW5nIHRvIHNlZSBgaGZzcGx1c19ibWFwX2FsbG9jYCB3aGVuIGl0IGNvbXBpbGVzLiBCdXQgd2FpdCwgaW4gYGZzL2hmc3BsdXMvYnRyZWUuY2AsIGl0JiMzOTtzIGFjdHVhbGx5IGRlZmluZWQgYXMgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYC4gTm93LCB3aHkgdGhlIG5hbWUgZGlzY3JlcGFuY3k/IEFoLCBJIHNlZSwgYmVjYXVzZSBgYnRyZWUuY2AgaW5jbHVkZXMgYGhmc3BsdXNfZnMuaGAsIHRoZSBwcmVwcm9jZXNzb3IgaXMgaGFuZGxpbmcgdGhlIGNoYW5nZS4gSXQmIzM5O3MgbWFjcm8taW5nIGBoZnNfYm1hcF9hbGxvY2AgdG8gYmUgYGhmc3BsdXNfYm1hcF9hbGxvY2AgYmVmb3JlIHRoZSBjb21waWxlciBldmVuIGdldHMgaXRzIGhhbmRzIG9uIHRoZSBjb2RlLiBUaGlzIGlzIGxpa2VseSBkb25lIHRvIGtlZXAgdGhlIGNvZGViYXNlIGNsZWFuZXIgb3IgbWFuYWdlIHNvbWUgc29ydCBvZiB2ZXJzaW9uaW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgaGZzX2J0cmVlX29wZW5gIGlzIHRyZWF0ZWQgc2ltaWxhcmx5IHdpdGhpbiBgaGZzcGx1c2AuLi4gSSB3YW50IHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG5hbWUgbWFwcGluZyBhcHByb2FjaCB3aXRoaW4gdGhpcyBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9idHJlZS5jPTI1Mz1zdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTI2Ny0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbmZzL2hmc3BsdXMvYnRyZWUuYzoyNjg6c3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkKVxuZnMvaGZzcGx1cy9idHJlZS5jLTI2OS17XG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4NS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjI4NjojZGVmaW5lIGhmc19idHJlZV9vcGVuIGhmc3BsdXNfYnRyZWVfb3BlblxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjg3LSNkZWZpbmUgaGZzX2J0cmVlX2Nsb3NlIGhmc3BsdXNfYnRyZWVfY2xvc2Vcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zNjE9dTMyIGhmc3BsdXNfY2FsY19idHJlZV9jbHVtcF9zaXplKHUzMiBibG9ja19zaXplLCB1MzIgbm9kZV9zaXplLCB1NjQgc2VjdG9ycyxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM2Mi1cdFx0XHRcdCAgaW50IGZpbGVfaWQpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzYzOnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zNjQtdm9pZCBoZnNfYnRyZWVfY2xvc2Uoc3RydWN0IGhmc19idHJlZSAqdHJlZSk7XG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jPTQ1Mj1zdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTU0NS1cdC8qIExvYWQgbWV0YWRhdGEgb2JqZWN0cyAoQipUcmVlcykgKi9cbmZzL2hmc3BsdXMvc3VwZXIuYzo1NDY6XHRzYmktXHUwMDNlZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19FWFRfQ05JRCk7XG5mcy9oZnNwbHVzL3N1cGVyLmMtNTQ3LVx0aWYgKCFzYmktXHUwMDNlZXh0X3RyZWUpIHtcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtNTUwLVx0fVxuZnMvaGZzcGx1cy9zdXBlci5jOjU1MTpcdHNiaS1cdTAwM2VjYXRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0NBVF9DTklEKTtcbmZzL2hmc3BsdXMvc3VwZXIuYy01NTItXHRpZiAoIXNiaS1cdTAwM2VjYXRfdHJlZSkge1xuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy01NTctXHRpZiAodmhkci1cdTAwM2VhdHRyX2ZpbGUudG90YWxfYmxvY2tzICE9IDApIHtcbmZzL2hmc3BsdXMvc3VwZXIuYzo1NTg6XHRcdHNiaS1cdTAwM2VhdHRyX3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19BVFRSX0NOSUQpO1xuZnMvaGZzcGx1cy9zdXBlci5jLTU1OS1cdFx0aWYgKCFzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy0zMjEtXG5mcy9oZnNwbHVzL3hhdHRyLmM6MzIyOlx0c2JpLVx1MDAzZWF0dHJfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0FUVFJfQ05JRCk7XG5mcy9oZnNwbHVzL3hhdHRyLmMtMzIzLVx0aWYgKCFzYmktXHUwMDNlYXR0cl90cmVlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEhGUyBCLVRyZWUgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5IHRob3VnaHQgaXQgd2FzIHRvdWNoaW5nIHRoZSBgaGZzcGx1c2Agc2lkZSBvZiB0aGluZ3MsIGJ1dCBJJiMzOTttIG5vdyBjZXJ0YWluIEkgbmVlZCB0byByZS1ldmFsdWF0ZS4gSXQgYXBwZWFycyB0aGUgY29kZSBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGhmc19idHJlZV9vcGVuYCB3aXRoaW4gdGhlIGBmcy9oZnMvYnRyZWUuY2AgZmlsZSBhbmQgbm90IHRoZSBgaGZzcGx1c2AgdmVyc2lvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYWdhaW4gYnkgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgZGlmZjoKCmBgYGRpZmYKLS0tIGEvZnMvaGZzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzL2J0cmVlLmMKQEAgLTE1LDEyICYjNDM7MTUsNTkgQEAKIAogI2luY2x1ZGUgJiMzNDtidHJlZS5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpCi4uLgogc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2V5Y21wKQouLi4KQEAgLTMxNiw2ICYjNDM7Mzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpCi4uLgotLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9idHJlZS5jCkBAIC01NjEsNiAmIzQzOzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKQpgYGAKClJpZ2h0LCBjb25maXJtZWQuIEl0JiMzOTtzIHRoZSBgaGZzYCB2ZXJzaW9uIHRoYXQmIzM5O3MgYmVpbmcgdG91Y2hlZC4gVGhhdCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGhmc2Agc2lkZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgaGZzX2J0cmVlX29wZW5gLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBoZnNfYm1hcF9hbGxvY2Agb24gdGhlIGBoZnNgIHNpZGUgYW5kIGBoZnNwbHVzX2JtYXBfYWxsb2NgIG9uIHRoZSBgaGZzcGx1c2Agc2lkZS4KCk5vdywgbGV0IG1lIGNoZWNrIGlmIGBoZnNfYnRyZWVfb3BlbmAgaW4gYGhmc2AgaXMgZXhwb3J0ZWQgb3IgaWYgaXQmIzM5O3MgaW50ZXJuYWwuIFNpbmNlIGl0IGlzbiYjMzk7dCBzdGF0aWMsIGl0JiMzOTtzIHByZXN1bWFibHkgZXhwb3J0ZWQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBmcy9oZnMvYnRyZWUuaGAgb3IgcmVsYXRlZCBoZWFkZXJzIHRvIHNlZSBpZiBpdCYjMzk7cyBiZWluZyBtYWNyb2VkIGFueXdoZXJlLCBqdXN0IGluIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19idHJlZV9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYnRyZWUuYz01Mj1zdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4tLVxuZnMvaGZzL2J0cmVlLmMtNjQtLyogR2V0IGEgcmVmZXJlbmNlIHRvIGEgQipUcmVlIGFuZCBkbyBzb21lIGluaXRpYWwgY2hlY2tzICovXG5mcy9oZnMvYnRyZWUuYzo2NTpzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG5mcy9oZnMvYnRyZWUuYy02Ni17XG4tLVxuZnMvaGZzL2J0cmVlLmg9Nzc9c3RydWN0IGhmc19maW5kX2RhdGEge1xuLS1cbmZzL2hmcy9idHJlZS5oLTg4LS8qIGJ0cmVlLmMgKi9cbmZzL2hmcy9idHJlZS5oOjg5OmV4dGVybiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsXG5mcy9oZnMvYnRyZWUuaC05MC1cdFx0XHRcdFx0YnRyZWVfa2V5Y21wIGtleWNtcCk7XG4tLVxuZnMvaGZzL21kYi5jPTk0PWludCBoZnNfbWRiX2dldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmcy9tZGIuYy0yMjctXG5mcy9oZnMvbWRiLmM6MjI4Olx0SEZTX1NCKHNiKS1cdTAwM2VleHRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNfRVhUX0NOSUQsIGhmc19leHRfa2V5Y21wKTtcbmZzL2hmcy9tZGIuYy0yMjktXHRpZiAoIUhGU19TQihzYiktXHUwMDNlZXh0X3RyZWUpIHtcbi0tXG5mcy9oZnMvbWRiLmMtMjMyLVx0fVxuZnMvaGZzL21kYi5jOjIzMzpcdEhGU19TQihzYiktXHUwMDNlY2F0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTX0NBVF9DTklELCBoZnNfY2F0X2tleWNtcCk7XG5mcy9oZnMvbWRiLmMtMjM0LVx0aWYgKCFIRlNfU0Ioc2IpLVx1MDAzZWNhdF90cmVlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyBIRlMgQi1UcmVlIEFsbG9jYXRpb24gUm91dGluZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgSEZTIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBCLXRyZWUgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIEZpcnN0IG9ic2VydmF0aW9uOiB0aGVzZSByb3V0aW5lcyBhcmVuJiMzOTt0IG1hY3JvZWQuIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzZWFyY2gg4oCTIG5vIGhpZGRlbiBjb21wbGV4aXR5IHRoZXJlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYGhmc19idHJlZV9vcGVuYCwgYGhmc19ibWFwX2FsbG9jYCwgYW5kIGBoZnNwbHVzX2JtYXBfYWxsb2NgLgoKSG9sZCBvbi4uLiBJJiMzOTttIGp1c3QgZG91YmxlIGNoZWNraW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpbiBgZnMvaGZzL2J0cmVlLmNgICphbHNvKiBpc24mIzM5O3QgbWFjcm9lZCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNhdyBpdCB3YXMgbm90IGJ1dCBJIG11c3QgZG91YmxlIGNoZWNrISBPa2F5LCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19ibWFwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnMvYnJlYy5jPTI1MD1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnMvYnJlYy5jLTI1OS1cdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbmZzL2hmcy9icmVjLmM6MjYwOlx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcbmZzL2hmcy9icmVjLmMtMjYxLVx0aWYgKElTX0VSUihuZXdfbm9kZSkpXG4tLVxuZnMvaGZzL2JyZWMuYz00Nzc9c3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuLS1cbmZzL2hmcy9icmVjLmMtNDg5LVx0fVxuZnMvaGZzL2JyZWMuYzo0OTA6XHRuZXdfbm9kZSA9IGhmc19ibWFwX2FsbG9jKHRyZWUpO1xuZnMvaGZzL2JyZWMuYy00OTEtXHRpZiAoSVNfRVJSKG5ld19ub2RlKSkge1xuLS1cbmZzL2hmcy9idHJlZS5jPTMyMj1pbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcylcbi0tXG5mcy9oZnMvYnRyZWUuYy0zNDQtXG5mcy9oZnMvYnRyZWUuYzozNDU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbmZzL2hmcy9idHJlZS5jLTM0Ni17XG4tLVxuZnMvaGZzL2J0cmVlLmg9OTM9ZXh0ZXJuIGludCBoZnNfYm1hcF9yZXNlcnZlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiByc3ZkX25vZGVzKTtcbmZzL2hmcy9idHJlZS5oOjk0OmV4dGVybiBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcbmZzL2hmcy9idHJlZS5oLTk1LWV4dGVybiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTA0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIRlMvSEZTJiM0MzsgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgY29uZmlybWluZyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIHJhdyBzeW1ib2xzIGhlcmUsIG5vdGhpbmcgbWFjcm9lZC4gVGhlIG9uZXMgSSYjMzk7bSBzZWVpbmcgYXJlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzcGx1c19ibWFwX2FsbG9jYC4KCk5vdywgSSB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGBoZnNwbHVzX2JtYXBfYWxsb2NgIGlzIHRoZSBjb3JyZWN0IG5hbWUgd2l0aGluIHRoZSBgaGZzcGx1c2AgY29udGV4dC4gQSBxdWljayBwZWVrIGF0IGBmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaGAgY29uZmlybXMgaXQ6IGAjZGVmaW5lIGhmc19ibWFwX2FsbG9jIGhmc3BsdXNfYm1hcF9hbGxvY2AuIFNvLCB0aGUgYWN0dWFsIGZ1bmN0aW9uIGRlZmluZWQgYXMgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYCBpbiBgZnMvaGZzcGx1cy9idHJlZS5jYCBpcywgdW5kZXIgdGhlIGhvb2QsIGBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNwbHVzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlgLiBFeGNlbGxlbnQuIFRoYXQgY2xlYXJzIHRoYXQgdXAuCgpNb3Zpbmcgb24sIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBgSEZTX0ZTYCBhbmQgYEhGU1BMVVNfRlNgLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBoZXJlLiBBIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXM6IEJvdGggYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYCBkZXBlbmQgb24gYEJMT0NLYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayBgZnMvaGZzL0tjb25maWdgIGFuZCBgZnMvaGZzcGx1cy9LY29uZmlnYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgTWFjaW50b3NoLWZvcm1hdHRlZFxuICAxMDpcdFx0ICBmbG9wcHkgZGlza3MgYW5kIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDExOlx0XHQgIFBsZWFzZSByZWFkIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XHUwMDNlIHRvIGxlYXJuIGFib3V0XG4gIDEyOlx0XHQgIHRoZSBhdmFpbGFibGUgbW91bnQgb3B0aW9ucy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBIRlNfS1VOSVRfVEVTVFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIEhGUyBmaWxlc3lzdGVtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMTk6XHRcdGRlcGVuZHMgb24gSEZTX0ZTIFx1MDAyNlx1MDAyNiBLVU5JVFxuICAyMDpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgRmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLkkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGZzL2hmc3BsdXMvS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHN1cHBvcnQgaXMgYmVpbmcgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gcGxhbm5pbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgZW5oYW5jZW1lbnRzIHRvIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIE1hYy1mb3JtYXR0ZWQgZHJpdmVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIEtjb25maWcgZmlsZXMgaXMgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQtdGltZSBhbmQgcnVuLXRpbWUgYXNwZWN0cyBvZiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSEZTUExVU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNjpcdFx0c2VsZWN0IE5MU1xuICAgNzpcdFx0c2VsZWN0IE5MU19VVEY4XG4gICA4Olx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcbiAgMTE6XHRcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxuICAxMjpcdFxuICAxMzpcdFx0ICBUaGlzIGZpbGUgc3lzdGVtIGlzIG9mdGVuIGNhbGxlZCBIRlMmIzQzOyBhbmQgd2FzIGludHJvZHVjZWQgd2l0aFxuICAxNDpcdFx0ICBNYWNPUyA4LiBJdCBpbmNsdWRlcyBhbGwgTWFjIHNwZWNpZmljIGZpbGVzeXN0ZW0gZGF0YSBzdWNoIGFzXG4gIDE1Olx0XHQgIGRhdGEgZm9ya3MgYW5kIGNyZWF0b3IgY29kZXMsIGJ1dCBpdCBhbHNvIGhhcyBzZXZlcmFsIFVOSVhcbiAgMTY6XHRcdCAgc3R5bGUgZmVhdHVyZXMgc3VjaCBhcyBmaWxlIG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMuXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIEhGUyYjNDM7IGZpbGVzeXN0ZW1cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBIRlNQTFVTX0ZTIFx1MDAyNlx1MDAyNiBLVU5JVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxOQoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTL0hGUyYjNDM7IEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHR3byByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlOiBgSEZTX0ZTYCBhbmQgYEhGU1BMVVNfRlNgLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBjb3JydXB0aW9uIGNoZWNrcyB3aXRoaW4gdGhlIEhGUyBhbmQgSEZTJiM0MzsgZmlsZXN5c3RlbXMsIHNwZWNpZmljYWxseSBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgb3BlbmluZy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBmb3JjZSBhIHJlYWQtb25seSBzdGF0ZSBpZiBjb3JydXB0aW9uIGlzIGlkZW50aWZpZWQsIHByZXZlbnRpbmcgZnVydGhlciBkYXRhIGxvc3MuIFRoaXMgaXMgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0ICpkZW1hbmRzKiBmdXp6aW5nIHRvIGd1YXJhbnRlZSByb2J1c3RuZXNzIHdoZW4gZmFjZWQgd2l0aCBjb3JydXB0ZWQgaW1hZ2VzOyB3ZSB3YW50IHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoZXNlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseSwgd2l0aG91dCBjcmFzaGluZyBvciBpbnRyb2R1Y2luZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMuCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcmx5IGxhaWQgb3V0IGZvciBtZTogYGhmc19idHJlZV9vcGVuYCwgYGhmc19ibWFwX2FsbG9jYCwgYW5kIGBoZnNwbHVzX2JtYXBfYWxsb2NgLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGZvciBpbmNsdXNpb24gb2YgYGhmc19ibWFwX3Rlc3RfYml0YC4gQWgsIHllcywgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdXN1YWxseSBtZWFucyBpdCYjMzk7cyBlaXRoZXIgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgb3IgaXNuJiMzOTt0IGEgZGlzdGluY3Qgc3ltYm9sLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIGhlcmU6IHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTbywgYmFzZWQgb24gdGhhdCwgSSYjMzk7bSBnb2luZyB0byAqZXhjbHVkZSogYGhmc19ibWFwX3Rlc3RfYml0YCBmcm9tIG15IGxpc3QuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTX0ZTJiMzNDssCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNfYnRyZWVfb3BlbiYjMzQ7LAogICAgJiMzNDtoZnNfYm1hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2JtYXBfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBiaXRtYXAgY29ycnVwdGlvbiBjaGVja3MgaW4gdGhlIEhGUyBhbmQgSEZTJiM0MzsgZmlsZXN5c3RlbXMgZHVyaW5nIEItdHJlZSBub2RlIGFsbG9jYXRpb24gYW5kIEItdHJlZSBvcGVuaW5nLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGNvcnJ1cHRlZCBpbWFnZXMgd2l0aG91dCBjcmFzaGluZyBvciBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU19GUyYjMzQ7LAogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2J0cmVlX29wZW4mIzM0OywKICAgICYjMzQ7aGZzX2JtYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aGZzcGx1c19ibWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUyYjNDM7IGZpbGVzeXN0ZW1zIGR1cmluZyBCLXRyZWUgbm9kZSBhbGxvY2F0aW9uIGFuZCBCLXRyZWUgb3BlbmluZy4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBjb3JydXB0ZWQgaW1hZ2VzIHdpdGhvdXQgY3Jhc2hpbmcgb3IgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAzOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gdGhlIEhGUyBhbmQgSEZTJiM0MzsgQi10cmVlIGltcGxlbWVudGF0aW9ucyB0byBkZXRlY3QgYml0bWFwIGNvcnJ1cHRpb24gKHNwZWNpZmljYWxseSwgZW5zdXJpbmcgdGhhdCBub2RlIGluZGV4IDAsIHRoZSBoZWFkZXIgbm9kZSwgaXMgbWFya2VkIGFzIHVzZWQpLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG92ZXJ3cml0aW5nIHRoZSBoZWFkZXIgbm9kZSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcykgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Zjc2MjUwMjY3ZjcwODRkYTQwOGRmZTg4NGQ5NGQ3ZmJhNTA1ZDA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDI6NTk6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jCmluZGV4IDJlYjM3YTJmNjRlODYuLjliMGI3NDE4ZGRiZDUgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9idHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmcy9idHJlZS5jCkBAIC0xNSwxMiAmIzQzOzE1LDU5IEBACiAKICNpbmNsdWRlICYjMzQ7YnRyZWUuaCYjMzQ7CiAKJiM0MztzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KQomIzQzO3sKJiM0MzsJdTE2IHJlY19pZHgsIG9mZiwgbGVuOwomIzQzOwl1MzIgYnl0ZV9vZmZzZXQ7CiYjNDM7CXU4IGJ5dGUsIG1hc2s7CiYjNDM7CiYjNDM7CWlmIChub2RlLSZndDt0aGlzID09IDApIHsKJiM0MzsJCWlmIChub2RlLSZndDt0eXBlICE9IEhGU19OT0RFX0hFQURFUikgewomIzQzOwkJCXByX2VycigmIzM0O2hmczogaW52YWxpZCBidHJlZSBoZWFkZXIgbm9kZVxuJiMzNDspOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCXJlY19pZHggPSAyOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKG5vZGUtJmd0O3R5cGUgIT0gSEZTX05PREVfTUFQKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7aGZzOiBpbnZhbGlkIGJ0cmVlIG1hcCBub2RlXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwkJcmVjX2lkeCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsICZhbXA7b2ZmKTsKJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWJ5dGVfb2Zmc2V0ID0gbm9kZV9iaXRfaWR4IC8gQklUU19QRVJfQllURTsKJiM0MzsJaWYgKGJ5dGVfb2Zmc2V0ICZndDs9IGxlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJYnl0ZSA9IGhmc19ibm9kZV9yZWFkX3U4KG5vZGUsIG9mZiAmIzQzOyBieXRlX29mZnNldCk7CiYjNDM7CW1hc2sgPSAxICZsdDsmbHQ7ICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ5dGUgJmFtcDsgbWFzazsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmhmc19idHJlZV9uYW1lKHUzMiBjbmlkKQomIzQzO3sKJiM0MzsJc3dpdGNoIChjbmlkKSB7CiYjNDM7CWNhc2UgSEZTX0VYVF9DTklEOgomIzQzOwkJcmV0dXJuICYjMzQ7RXh0ZW50cyBPdmVyZmxvdyBGaWxlJiMzNDs7CiYjNDM7CWNhc2UgSEZTX0NBVF9DTklEOgomIzQzOwkJcmV0dXJuICYjMzQ7Q2F0YWxvZyBGaWxlJiMzNDs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gJiMzNDtVbmtub3duIEItdHJlZSYjMzQ7OwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogR2V0IGEgcmVmZXJlbmNlIHRvIGEgQipUcmVlIGFuZCBkbyBzb21lIGluaXRpYWwgY2hlY2tzICovCiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApCiB7CiAJc3RydWN0IGhmc19idHJlZSAqdHJlZTsKIAlzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgKmhlYWQ7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiYjNDM7CXN0cnVjdCBoZnNfYm5vZGUgKm5vZGU7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTU1LDYgJiM0MzsyMDIsMTkgQEAgc3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkLCBidHJlZV9rZXljbXAga2UKIAlrdW5tYXBfbG9jYWwoaGVhZCk7CiAJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwomIzQzOwomIzQzOwlub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7CiYjNDM7CWlmIChJU19FUlIobm9kZSkpCiYjNDM7CQlnb3RvIGZyZWVfaW5vZGU7CiYjNDM7CiYjNDM7CWlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgMCkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDsoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxuJiMzNDssCiYjNDM7CQkJc2ItJmd0O3NfaWQsIGhmc19idHJlZV9uYW1lKGlkKSwgaWQpOwomIzQzOwkJcHJfd2FybigmIzM0O1J1biBmc2NrLmhmcyB0byByZXBhaXIuXG4mIzM0Oyk7CiYjNDM7CQlzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGZzX2Jub2RlX3B1dChub2RlKTsKIAlyZXR1cm4gdHJlZTsKIAogZmFpbF9mb2xpbzoKQEAgLTMxNiw2ICYjNDM7Mzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpCiAJCQlpZiAoYnl0ZSAhPSAweGZmKSB7CiAJCQkJZm9yIChtID0gMHg4MCwgaSA9IDA7IGkgJmx0OyA4OyBtICZndDsmZ3Q7PSAxLCBpJiM0MzsmIzQzOykgewogCQkJCQlpZiAoIShieXRlICZhbXA7IG0pKSB7CiYjNDM7CQkJCQkJaWYgKHVubGlrZWx5KCEoaWR4ICYjNDM7IGkpKSkgewomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7KCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cbiYjMzQ7LAomIzQzOwkJCQkJCQkJdHJlZS0mZ3Q7c2ItJmd0O3NfaWQsCiYjNDM7CQkJCQkJCQloZnNfYnRyZWVfbmFtZSh0cmVlLSZndDtjbmlkKSwKJiM0MzsJCQkJCQkJCXRyZWUtJmd0O2NuaWQpOwomIzQzOwkJCQkJCQlwcl93YXJuKCYjMzQ7UnVuIGZzY2suaGZzIHRvIHJlcGFpci5cbiYjMzQ7KTsKJiM0MzsJCQkJCQkJdHJlZS0mZ3Q7c2ItJmd0O3NfZmxhZ3MgfD0gU0JfUkRPTkxZOwomIzQzOwkJCQkJCQlrdW5tYXBfbG9jYWwoZGF0YSk7CiYjNDM7CQkJCQkJCWhmc19ibm9kZV9wdXQobm9kZSk7CiYjNDM7CQkJCQkJCXJldHVybiBFUlJfUFRSKC1FSU8pOwomIzQzOwkJCQkJCX0KIAkJCQkJCWlkeCAmIzQzOz0gaTsKIAkJCQkJCWRhdGFbb2ZmXSB8PSBtOwogCQkJCQkJc2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuYwppbmRleCAzOTQ1NDJhNDdlNjAwLi4zZWU5MjI0OGIyNDA5IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9idHJlZS5jCkBAIC01NjEsNiAmIzQzOzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKQogCQkJaWYgKGJ5dGUgIT0gMHhmZikgewogCQkJCWZvciAobSA9IDB4ODAsIGkgPSAwOyBpICZsdDsgODsgbSAmZ3Q7Jmd0Oz0gMSwgaSYjNDM7JiM0MzspIHsKIAkJCQkJaWYgKCEoYnl0ZSAmYW1wOyBtKSkgewomIzQzOwkJCQkJCWlmICh1bmxpa2VseSghKGlkeCAmIzQzOyBpKSkpIHsKJiM0MzsJCQkJCQkJcHJfd2FybigmIzM0Oyglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXG4mIzM0OywKJiM0MzsJCQkJCQkJCXRyZWUtJmd0O3NiLSZndDtzX2lkLAomIzQzOwkJCQkJCQkJaGZzX2J0cmVlX25hbWUodHJlZS0mZ3Q7Y25pZCksCiYjNDM7CQkJCQkJCQl0cmVlLSZndDtjbmlkKTsKJiM0MzsJCQkJCQkJcHJfd2FybigmIzM0O1J1biBmc2NrLmhmc3BsdXMgdG8gcmVwYWlyLlxuJiMzNDspOwomIzQzOwkJCQkJCQl0cmVlLSZndDtzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiYjNDM7CQkJCQkJCWt1bm1hcF9sb2NhbChkYXRhKTsKJiM0MzsJCQkJCQkJaGZzX2Jub2RlX3B1dChub2RlKTsKJiM0MzsJCQkJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiYjNDM7CQkJCQkJfQogCQkJCQkJaWR4ICYjNDM7PSBpOwogCQkJCQkJZGF0YVtjdHgub2ZmXSB8PSBtOwogCQkJCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ5CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMvSEZTJiM0MzsgQi10cmVlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2gsIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgZnMvaGZzL2J0cmVlLmNgIGFuZCBgZnMvaGZzcGx1cy9idHJlZS5jYC4gV2hhdCB3ZSBoYXZlIGhlcmUgYXJlIHNhbml0eSBjaGVja3MgZGVzaWduZWQgdG8gZGV0ZWN0IGFuZCBoYW5kbGUgZmlsZXN5c3RlbSBjb3JydXB0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCLXRyZWUgYml0bWFwLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiBlbnN1cmluZyB0aGUgZmlyc3QgYml0IChpbmRleCAwKSBvZiB0aGUgQi10cmVlIG1hcCByZWNvcmQgaXMgc2V0LCBpbmRpY2F0aW5nIHRoYXQgdGhlIGhlYWRlciBub2RlIChub2RlIGluZGV4IDApIGlzIGluIHVzZSDigJMgd2hpY2ggaXQgKmFsd2F5cyogc2hvdWxkIGJlLiBJZiB0aGF0IGJpdCBpcyAqbm90KiBzZXQsIHRoZSBjb2RlIG5vdyB0cmlnZ2VycyBhIHJlYWQtb25seSBtb3VudCwgZWZmZWN0aXZlbHkgbG9ja2luZyBkb3duIHRoZSBmaWxlc3lzdGVtIHRvIHByZXZlbnQgbW9yZSBzZXZlcmUgZGFtYWdlLgoKSSYjMzk7dmUgYWxzbyBub3RpY2VkIHRoYXQgdGhlcmUmIzM5O3MgYSBndWFyZCBpbiBgaGZzX2JtYXBfYWxsb2NgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBvZiBub2RlIGluZGV4IDAuIFRoaXMgaXMgYSBjcnVjaWFsIGRlZmVuc2UsIGFzIGFsbG9jYXRpbmcgdGhlIGhlYWRlciBub2RlIHdvdWxkIGJlIGNhdGFzdHJvcGhpYy4gVGhlIGZvcmNlZCByZWFkLW9ubHkgbW9kZSBhbmQgZXJyb3IgcmV0dXJuIGFyZSB0aGUgY29ycmVjdCByZXNwb25zZXMgdG8gc3VjaCBhbiBhdHRlbXB0LgoKQ3JpdGljYWxseSwgdGhlcmUmIzM5O3Mgbm8gbmV3IGFsbG9jYXRpb24gb2YgbWVtb3J5LCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGFwcGFyZW50IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzLiBUaGUgbWFpbiBwdXJwb3NlIGlzIHRvIGRldGVjdCBhbmQgY29udGFpbiBmaWxlc3lzdGVtIGNvcnJ1cHRpb24uIFRoaXMgaXMgZXhjZWxsZW50IGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KClRoaXMgZml4IGlzLCBlc3NlbnRpYWxseSwgYSByZXNwb25zZSB0byBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgaGVhZGVyIG5vZGUgaXMgdHJlYXRlZCBhcyBhdmFpbGFibGUuIEl0JiMzOTtzIHRoZSBraW5kIG9mIGJ1ZyB0aGF0ICpzaG91bGQqIGJlIGNhdWdodCBieSBLQVNBTiBvciBvdGhlciBrZXJuZWwgYnVnIGRldGVjdG9ycy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIG1vcmUgZ2VuZXJhbGx5LCBmaWxlc3lzdGVtIGNvcnJ1cHRpb24sIGFyZSBhbGwgcG90ZW50aWFsIG91dGNvbWVzIGlmIG5vZGUgMCBpcyBtaXNoYW5kbGVkLgoKTm93LCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYGhmc19ibWFwX3Rlc3RfYml0YCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gT2theSwgdGhlIGZ1bmN0aW9uIGBoZnNfYm5vZGVfcmVhZF91OGAgcmVhZHMgZGF0YSBmcm9tIHRoZSBCLXRyZWUgbm9kZSBwYWdlcy4gVGhlc2UgcGFnZXMgYXJlIHJlYWQgZnJvbSB0aGUgZGlzayBieSB0aGUgYmxvY2sgbGF5ZXIgYW5kLCB0aGVyZWZvcmUsIHRoZXkgYXJlICphbHdheXMqIGluaXRpYWxpemVkIGJ5IHRoZSBibG9jayBsYXllci4gU28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZS4KCkdpdmVuIGFsbCB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIGEgc29saWQsIGRlZmVuc2l2ZSBwYXRjaCBhaW1lZCBhdCBpbXByb3ZpbmcgZmlsZXN5c3RlbSBpbnRlZ3JpdHkgYW5kIHByb3RlY3RpbmcgYWdhaW5zdCBrbm93biBjb3JydXB0aW9uIHNjZW5hcmlvcy4gTmVlZHNLTVNBTiBpcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMmIzQzOyBCLXRyZWUgaW1wbGVtZW50YXRpb25zIHRvIGRldGVjdCBiaXRtYXAgY29ycnVwdGlvbiAoc3BlY2lmaWNhbGx5LCBlbnN1cmluZyB0aGF0IG5vZGUgaW5kZXggMCwgdGhlIGhlYWRlciBub2RlLCBpcyBtYXJrZWQgYXMgdXNlZCkuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3ZlcndyaXRpbmcgdGhlIGhlYWRlciBub2RlIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzKSBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHRoZSBIRlMgYW5kIEhGUyYjNDM7IEItdHJlZSBpbXBsZW1lbnRhdGlvbnMgdG8gZGV0ZWN0IGJpdG1hcCBjb3JydXB0aW9uIChzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoYXQgbm9kZSBpbmRleCAwLCB0aGUgaGVhZGVyIG5vZGUsIGlzIG1hcmtlZCBhcyB1c2VkKS4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBvdmVyd3JpdGluZyB0aGUgaGVhZGVyIG5vZGUgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMpIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6MzguMjkyNjU5NjEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2Mjc0MjExNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiLFxuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19idHJlZV9vcGVuXCIsXG4gICAgXCJoZnNfYm1hcF9hbGxvY1wiLFxuICAgIFwiaGZzcGx1c19ibWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHRoZSBIRlMgYW5kIEhGUysgQi10cmVlIGltcGxlbWVudGF0aW9ucyB0byBkZXRlY3QgYml0bWFwIGNvcnJ1cHRpb24gKHNwZWNpZmljYWxseSwgZW5zdXJpbmcgdGhhdCBub2RlIGluZGV4IDAsIHRoZSBoZWFkZXIgbm9kZSwgaXMgbWFya2VkIGFzIHVzZWQpLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG92ZXJ3cml0aW5nIHRoZSBoZWFkZXIgbm9kZSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgY3Jhc2hlcykgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBhcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUysgZmlsZXN5c3RlbXMgZHVyaW5nIEItdHJlZSBub2RlIGFsbG9jYXRpb24gYW5kIEItdHJlZSBvcGVuaW5nLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGNvcnJ1cHRlZCBpbWFnZXMgd2l0aG91dCBjcmFzaGluZyBvciBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjM4LjI5MjY3MDUyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MjQ0NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWY3NjI1MDI2N2Y3MDg0ZGE0MDhkZmU4ODRkOTRkN2ZiYTUwNWQwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjo1OTozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXFxuaW5kZXggMmViMzdhMmY2NGU4Ni4uOWIwYjc0MThkZGJkNSAxMDA2NDRcXG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xcbisrKyBiL2ZzL2hmcy9idHJlZS5jXFxuQEAgLTE1LDEyICsxNSw1OSBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImJ0cmVlLmhcXFwiXFxuIFxcbitzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxcbit7XFxuK1xcdHUxNiByZWNfaWR4LCBvZmYsIGxlbjtcXG4rXFx0dTMyIGJ5dGVfb2Zmc2V0O1xcbitcXHR1OCBieXRlLCBtYXNrO1xcbitcXG4rXFx0aWYgKG5vZGUtXFx1MDAzZXRoaXMgPT0gMCkge1xcbitcXHRcXHRpZiAobm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmVjX2lkeCA9IDI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChub2RlLVxcdTAwM2V0eXBlICE9IEhGU19OT0RFX01BUCkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcImhmczogaW52YWxpZCBidHJlZSBtYXAgbm9kZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNfaWR4ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsIFxcdTAwMjZvZmYpO1xcbitcXHRpZiAoIWxlbilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Ynl0ZV9vZmZzZXQgPSBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFO1xcbitcXHRpZiAoYnl0ZV9vZmZzZXQgXFx1MDAzZT0gbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRieXRlID0gaGZzX2Jub2RlX3JlYWRfdTgobm9kZSwgb2ZmICsgYnl0ZV9vZmZzZXQpO1xcbitcXHRtYXNrID0gMSBcXHUwMDNjXFx1MDAzYyAoNyAtIChub2RlX2JpdF9pZHggJSBCSVRTX1BFUl9CWVRFKSk7XFxuK1xcbitcXHRyZXR1cm4gYnl0ZSBcXHUwMDI2IG1hc2s7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcXG4re1xcbitcXHRzd2l0Y2ggKGNuaWQpIHtcXG4rXFx0Y2FzZSBIRlNfRVhUX0NOSUQ6XFxuK1xcdFxcdHJldHVybiBcXFwiRXh0ZW50cyBPdmVyZmxvdyBGaWxlXFxcIjtcXG4rXFx0Y2FzZSBIRlNfQ0FUX0NOSUQ6XFxuK1xcdFxcdHJldHVybiBcXFwiQ2F0YWxvZyBGaWxlXFxcIjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFxcXCJVbmtub3duIEItdHJlZVxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogR2V0IGEgcmVmZXJlbmNlIHRvIGEgQipUcmVlIGFuZCBkbyBzb21lIGluaXRpYWwgY2hlY2tzICovXFxuIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcXG4ge1xcbiBcXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xcbiBcXHRzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgKmhlYWQ7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbitcXHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5AQCAtMTU1LDYgKzIwMiwxOSBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxcbiBcXHRrdW5tYXBfbG9jYWwoaGVhZCk7XFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XFxuK1xcdGlmIChJU19FUlIobm9kZSkpXFxuK1xcdFxcdGdvdG8gZnJlZV9pbm9kZTtcXG4rXFxuK1xcdGlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgMCkpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNiLVxcdTAwM2VzX2lkLCBoZnNfYnRyZWVfbmFtZShpZCksIGlkKTtcXG4rXFx0XFx0cHJfd2FybihcXFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXFxcblxcXCIpO1xcbitcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuK1xcdH1cXG4rXFxuK1xcdGhmc19ibm9kZV9wdXQobm9kZSk7XFxuIFxcdHJldHVybiB0cmVlO1xcbiBcXG4gZmFpbF9mb2xpbzpcXG5AQCAtMzE2LDYgKzM3NiwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRcXHRcXHRpZiAoYnl0ZSAhPSAweGZmKSB7XFxuIFxcdFxcdFxcdFxcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFxcdTAwM2MgODsgbSBcXHUwMDNlXFx1MDAzZT0gMSwgaSsrKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmICghKGJ5dGUgXFx1MDAyNiBtKSkge1xcbitcXHRcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIShpZHggKyBpKSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZXNiLVxcdTAwM2VzX2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRoZnNfYnRyZWVfbmFtZSh0cmVlLVxcdTAwM2VjbmlkKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dHJlZS1cXHUwMDNlY25pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIlJ1biBmc2NrLmhmcyB0byByZXBhaXIuXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0dHJlZS1cXHUwMDNlc2ItXFx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRrdW5tYXBfbG9jYWwoZGF0YSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGhmc19ibm9kZV9wdXQobm9kZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGlkeCArPSBpO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRkYXRhW29mZl0gfD0gbTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9idHJlZS5jIGIvZnMvaGZzcGx1cy9idHJlZS5jXFxuaW5kZXggMzk0NTQyYTQ3ZTYwMC4uM2VlOTIyNDhiMjQwOSAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmNcXG4rKysgYi9mcy9oZnNwbHVzL2J0cmVlLmNcXG5AQCAtNTYxLDYgKzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbiBcXHRcXHRcXHRpZiAoYnl0ZSAhPSAweGZmKSB7XFxuIFxcdFxcdFxcdFxcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFxcdTAwM2MgODsgbSBcXHUwMDNlXFx1MDAzZT0gMSwgaSsrKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmICghKGJ5dGUgXFx1MDAyNiBtKSkge1xcbitcXHRcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIShpZHggKyBpKSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZXNiLVxcdTAwM2VzX2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRoZnNfYnRyZWVfbmFtZSh0cmVlLVxcdTAwM2VjbmlkKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dHJlZS1cXHUwMDNlY25pZCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIlJ1biBmc2NrLmhmc3BsdXMgdG8gcmVwYWlyLlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHRyZWUtXFx1MDAzZXNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0a3VubWFwX2xvY2FsKGRhdGEpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRpZHggKz0gaTtcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZGF0YVtjdHgub2ZmXSB8PSBtO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6MzguNzQyODU4NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDU2NzE4MDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNfRlNcIixcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnRyZWVfb3BlblwiLFxuICAgIFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgICBcImhmc3BsdXNfYm1hcF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYml0bWFwIGNvcnJ1cHRpb24gY2hlY2tzIGluIHRoZSBIRlMgYW5kIEhGUysgZmlsZXN5c3RlbXMgZHVyaW5nIEItdHJlZSBub2RlIGFsbG9jYXRpb24gYW5kIEItdHJlZSBvcGVuaW5nLiBJZiBjb3JydXB0aW9uIGlzIGRldGVjdGVkLCB0aGUgZmlsZXN5c3RlbSBpcyBmb3JjZWQgaW50byByZWFkLW9ubHkgbW9kZSB0byBwcmV2ZW50IGZ1cnRoZXIgZGFtYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGNvcnJ1cHRlZCBpbWFnZXMgd2l0aG91dCBjcmFzaGluZyBvciBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlmNzYyNTAyNjdmNzA4NGRhNDA4ZGZlODg0ZDk0ZDdmYmE1MDVkMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjo1OTozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmNcbmluZGV4IDJlYjM3YTJmNjRlODYuLjliMGI3NDE4ZGRiZDUgMTAwNjQ0XG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuKysrIGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSwxMiArMTUsNTkgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuK3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXG4re1xuK1x0dTE2IHJlY19pZHgsIG9mZiwgbGVuO1xuK1x0dTMyIGJ5dGVfb2Zmc2V0O1xuK1x0dTggYnl0ZSwgbWFzaztcbitcbitcdGlmIChub2RlLVx1MDAzZXRoaXMgPT0gMCkge1xuK1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0hFQURFUikge1xuK1x0XHRcdHByX2VycihcImhmczogaW52YWxpZCBidHJlZSBoZWFkZXIgbm9kZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmVjX2lkeCA9IDI7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX01BUCkge1xuK1x0XHRcdHByX2VycihcImhmczogaW52YWxpZCBidHJlZSBtYXAgbm9kZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmVjX2lkeCA9IDA7XG4rXHR9XG4rXG4rXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjX2lkeCwgXHUwMDI2b2ZmKTtcbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRieXRlX29mZnNldCA9IG5vZGVfYml0X2lkeCAvIEJJVFNfUEVSX0JZVEU7XG4rXHRpZiAoYnl0ZV9vZmZzZXQgXHUwMDNlPSBsZW4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGJ5dGUgPSBoZnNfYm5vZGVfcmVhZF91OChub2RlLCBvZmYgKyBieXRlX29mZnNldCk7XG4rXHRtYXNrID0gMSBcdTAwM2NcdTAwM2MgKDcgLSAobm9kZV9iaXRfaWR4ICUgQklUU19QRVJfQllURSkpO1xuK1xuK1x0cmV0dXJuIGJ5dGUgXHUwMDI2IG1hc2s7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcbit7XG4rXHRzd2l0Y2ggKGNuaWQpIHtcbitcdGNhc2UgSEZTX0VYVF9DTklEOlxuK1x0XHRyZXR1cm4gXCJFeHRlbnRzIE92ZXJmbG93IEZpbGVcIjtcbitcdGNhc2UgSEZTX0NBVF9DTklEOlxuK1x0XHRyZXR1cm4gXCJDYXRhbG9nIEZpbGVcIjtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBcIlVua25vd24gQi10cmVlXCI7XG4rXHR9XG4rfVxuK1xuIC8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xuIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcbiB7XG4gXHRzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlO1xuIFx0c3RydWN0IGhmc19idHJlZV9oZWFkZXJfcmVjICpoZWFkO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4rXHRzdHJ1Y3QgaGZzX2Jub2RlICpub2RlO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTUsNiArMjAyLDE5IEBAIHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtlXG4gXHRrdW5tYXBfbG9jYWwoaGVhZCk7XG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcbitcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCAwKTtcbitcdGlmIChJU19FUlIobm9kZSkpXG4rXHRcdGdvdG8gZnJlZV9pbm9kZTtcbitcbitcdGlmICghaGZzX2JtYXBfdGVzdF9iaXQobm9kZSwgMCkpIHtcbitcdFx0cHJfd2FybihcIiglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCIsXG4rXHRcdFx0c2ItXHUwMDNlc19pZCwgaGZzX2J0cmVlX25hbWUoaWQpLCBpZCk7XG4rXHRcdHByX3dhcm4oXCJSdW4gZnNjay5oZnMgdG8gcmVwYWlyLlxcblwiKTtcbitcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4rXHR9XG4rXG4rXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuIFx0cmV0dXJuIHRyZWU7XG4gXG4gZmFpbF9mb2xpbzpcbkBAIC0zMTYsNiArMzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4gXHRcdFx0aWYgKGJ5dGUgIT0gMHhmZikge1xuIFx0XHRcdFx0Zm9yIChtID0gMHg4MCwgaSA9IDA7IGkgXHUwMDNjIDg7IG0gXHUwMDNlXHUwMDNlPSAxLCBpKyspIHtcbiBcdFx0XHRcdFx0aWYgKCEoYnl0ZSBcdTAwMjYgbSkpIHtcbitcdFx0XHRcdFx0XHRpZiAodW5saWtlbHkoIShpZHggKyBpKSkpIHtcbitcdFx0XHRcdFx0XHRcdHByX3dhcm4oXCIoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxcblwiLFxuK1x0XHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZXNiLVx1MDAzZXNfaWQsXG4rXHRcdFx0XHRcdFx0XHRcdGhmc19idHJlZV9uYW1lKHRyZWUtXHUwMDNlY25pZCksXG4rXHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlY25pZCk7XG4rXHRcdFx0XHRcdFx0XHRwcl93YXJuKFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXG5cIik7XG4rXHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZXNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuK1x0XHRcdFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuK1x0XHRcdFx0XHRcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbitcdFx0XHRcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZHggKz0gaTtcbiBcdFx0XHRcdFx0XHRkYXRhW29mZl0gfD0gbTtcbiBcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eSgqcGFnZXApO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnRyZWUuYyBiL2ZzL2hmc3BsdXMvYnRyZWUuY1xuaW5kZXggMzk0NTQyYTQ3ZTYwMC4uM2VlOTIyNDhiMjQwOSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuY1xuKysrIGIvZnMvaGZzcGx1cy9idHJlZS5jXG5AQCAtNTYxLDYgKzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0XHRcdGlmIChieXRlICE9IDB4ZmYpIHtcbiBcdFx0XHRcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFx1MDAzYyA4OyBtIFx1MDAzZVx1MDAzZT0gMSwgaSsrKSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4rXHRcdFx0XHRcdFx0aWYgKHVubGlrZWx5KCEoaWR4ICsgaSkpKSB7XG4rXHRcdFx0XHRcdFx0XHRwcl93YXJuKFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXG5cIixcbitcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuK1x0XHRcdFx0XHRcdFx0XHRoZnNfYnRyZWVfbmFtZSh0cmVlLVx1MDAzZWNuaWQpLFxuK1x0XHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZWNuaWQpO1xuK1x0XHRcdFx0XHRcdFx0cHJfd2FybihcIlJ1biBmc2NrLmhmc3BsdXMgdG8gcmVwYWlyLlxcblwiKTtcbitcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlc2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4rXHRcdFx0XHRcdFx0XHRrdW5tYXBfbG9jYWwoZGF0YSk7XG4rXHRcdFx0XHRcdFx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuK1x0XHRcdFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4rXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdGlkeCArPSBpO1xuIFx0XHRcdFx0XHRcdGRhdGFbY3R4Lm9mZl0gfD0gbTtcbiBcdFx0XHRcdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjM4Ljc0Mjg2NjU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNTQxMzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhGUy9IRlMrIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9oZnMvYnRyZWUuY2AgYW5kIGBmcy9oZnNwbHVzL2J0cmVlLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWUgY29yZSBCLXRyZWUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlc2UgZmlsZXN5c3RlbXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGBoZnNfYm1hcF90ZXN0X2JpdGAgY2hlY2sgd2l0aGluIGBoZnNfYnRyZWVfb3BlbmAgaW4gdGhlIEhGUyBjb2RlLCBhbmQgYW5vdGhlciBvbmUgd2l0aGluIGBoZnNfYm1hcF9hbGxvY2AgaW4gKmJvdGgqIEhGUyBhbmQgSEZTKy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGlmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIGl0J3MgZ29pbmcgdG8gZm9yY2UgdGhlIGZpbGVzeXN0ZW0gaW50byByZWFkLW9ubHkgbW9kZSwgd2hpY2ggbWFrZXMgdG90YWwgc2Vuc2UgZnJvbSBhIGRhdGEgaW50ZWdyaXR5IHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcHJvYWN0aXZlIG1lYXN1cmUgYWdhaW5zdCBwb3RlbnRpYWwgZGF0YSBsb3NzLiBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgc29tZXRoaW5nIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuIFRodXMsIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEknbSBjYXB0dXJpbmcgdGhlIHNjb3BlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHByZXR0eSBzdXJlIGl0J3MgYENPTkZJR19IRlNfRlNgIGFuZCBgQ09ORklHX0hGU1BMVVNfRlNgLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgaW4gdGhlIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBmaWxlcyBpbiBgZnMvaGZzL0tjb25maWdgIGFuZCBgZnMvaGZzcGx1cy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0IGlzIHdvcnRoIGNoZWNraW5nIHdoYXQgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGVzZSBLY29uZmlnIGZpbGVzIHRvIGVuc3VyZSBJIGhhdmUgZnVsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NDQuMjU4Mjg0MTA0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzI5NTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvaGZzL0tjb25maWc6Mjpjb25maWcgSEZTX0ZTXFxuZnMvaGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjQ0LjUzMTU4ODc4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzAyODQ5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEhGUysqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIEhGUysgaGVyZSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNoYWxsZW5nZXMgb2YgaXRzIGRlc2lnbi4gVGhlIGNsYXNzaWMgaGllcmFyY2hpY2FsIGZpbGUgc3lzdGVtLCBhIGNvcm5lcnN0b25lIG9mIG1hY09TIGZvciB5ZWFycy4gSSBmaW5kIG15c2VsZiBjb25zaWRlcmluZyBpdHMgc3RydWN0dXJlIOKAkyB0aGUgQi10cmVlIG1ldGFkYXRhLCB0aGUgdm9sdW1lIGhlYWRlciwgdGhlIGFsbG9jYXRpb24gYmxvY2tzLCBhbmQgYWxsIHRoZSBpbnRyaWNhY2llcyBvZiBtYW5hZ2luZyBib3RoIGRhdGEgYW5kIG1ldGFkYXRhIHdpdGhpbiB0aGUgc2FtZSBhbGxvY2F0aW9uIHVuaXQuXG5cbkknbSB0aGlua2luZyBhYm91dCBpdHMgbGltaXRhdGlvbnMuIFRoZSAyIEdCIGZpbGUgc2l6ZSBsaW1pdCBpbiBlYXJsaWVyIGl0ZXJhdGlvbnMuIFRoZSBmcmFnbWVudGF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBvbiBsYXJnZXIgZHJpdmVzLCB3aGljaCBhbHdheXMgbGVkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBUaGUgaW5oZXJlbnQgZnJhZ2lsaXR5IG9mIHRoZSBjYXRhbG9nIGZpbGUuIEknbSByZWNhbGxpbmcgdGhlIGNsZXZlciB3b3JrYXJvdW5kcyBBcHBsZSBlbXBsb3llZCB0byBtaXRpZ2F0ZSBzb21lIG9mIHRoZXNlIHByb2JsZW1zLCBzdWNoIGFzIHRoZSBleHRlbnQgb3ZlcmZsb3cgZmlsZS4gSSdtIHdvbmRlcmluZyBob3cgdGhvc2UgdGVjaG5pcXVlcyBwZXJmb3JtZWQgaW4gcmVhbCB3b3JsZCBzY2VuYXJpb3MuXG5cbkFuZCB0aGVuIHRoZSBqb3VybmFsaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGpvdXJuYWxpbmcgd2FzIGEgaHVnZSBzdGVwLCBidXQgSSdtIHJlbWVtYmVyaW5nIHRoZSBkZWJhdGVzIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbi4gVGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgZGF0YSBpbnRlZ3JpdHksIHRoZSBwb3RlbnRpYWwgZm9yIGRhdGEgbG9zcyBpbiB0aGUgZXZlbnQgb2YgY2F0YXN0cm9waGljIGZhaWx1cmVzLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLCB3b25kZXJpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCBjb25zaXN0ZW5jeSBtb2RlcyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLiBJJ20gcXVlc3Rpb25pbmcgaG93IEhGUysgd2FzIGFibGUgdG8gc2NhbGUgYW5kIHBlcmZvcm0gaW4gZGlmZmVyZW50IGNvbmRpdGlvbnMgb3ZlciB0aGUgY291cnNlIG9mIHRpbWUuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gSXQgd2FzIGEgZ29vZCBkZXNpZ24sIGJ1dCBjZXJ0YWlubHkgbm90IHdpdGhvdXQgaXRzIGlzc3VlcyB3aGVuIG1vdmluZyBmaWxlcyBiZXR3ZWVuIHN5c3RlbXMuIEkgYW0gcnVubmluZyB0aHJvdWdoIHZhcmlvdXMgZGVzaWduIGNob2ljZXMsIHN1Y2ggYXMgdGhlIHVzZSBvZiByZXNvdXJjZSBmb3JrcywgYW5kIGhvdyB0aG9zZSB3ZXJlIGVpdGhlciBlbWJyYWNlZCBvciBwcm9ibGVtYXRpYy5cblxuRmluYWxseSwgSSdtIHJlZmxlY3Rpbmcgb24gaXRzIGxlZ2FjeS4gVGhlIHBhdGggdG8gQVBGUyDigJMgdGhlIGV2b2x1dGlvbmFyeSBzdGVwcyB0aGF0IHdlcmUgdGFrZW4sIHRoZSBsZXNzb25zIGxlYXJuZWQgZnJvbSBIRlMrLiBIb3cgQVBGUyBhZGRyZXNzZWQgaXRzIHByZWRlY2Vzc29ycycgc2hvcnRjb21pbmdzLiBJIGFtIGF3YXJlIG9mIHRoZSBjb250aW51ZWQgcHJlc2VuY2Ugb2YgSEZTKyBvbiBvbGRlciBzeXN0ZW1zLCBhbmQgSSBoYXZlIHRvIGFzayBteXNlbGYsIFwiRG9lcyBIRlMrIHN0aWxsIGhvbGQgdmFsdWU/XCJcblxuVWx0aW1hdGVseSwgSSByZWFsaXplIHRoYXQgSEZTKyB3YXMgYSBjb21wbGV4IHBpZWNlIG9mIGVuZ2luZWVyaW5nLCByZWZsZWN0aW5nIHRoZSBjb25zdHJhaW50cyBvZiBpdHMgdGltZS4gSXQgd2FzIGEgZ29vZCBkZXNpZ24sIGJ1dCBhIHJlbGljIGluIHRoZSBtb2Rlcm4gd29ybGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjQ5LjIwMTg3Njc5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMxODI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcXG5mcy9oZnNwbHVzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjQ5LjI1MjIwNzQ3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjkyMjI1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBDb25mbGljdHMgaW4gSEZTL0hGUysgQi1UcmVlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgYXMgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIHNwZWNpZmljYWxseSBpbiB0aGUgSEZTIGFuZCBIRlMrIGZpbGUgc3lzdGVtcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQgYXMgYHN0YXRpY2Agd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXM/IElmIHRoZXkgYXJlLCB0aGVuIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhvc2UgZmlsZXMgYW5kIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgZXh0ZXJuYWwgbGlua2FnZSBpc3N1ZXMuIElmIG5vdC4uLiB3ZWxsLCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgSSBuZWVkIHRvIGRlbHZlIGRlZXBlci5cblxuSSBzZWUgdGhlIGRlY2xhcmF0aW9uczogYHN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClgIGFuZCBgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlgIGluIGBmcy9oZnMvYnRyZWUuY2AsIGFsb25nIHdpdGggYSByZXBlYXQgb2YgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpYCBpbiBgZnMvaGZzcGx1cy9idHJlZS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgY2FuIHRlbGwgdGhlc2UgYXJlbid0IHN0YXRpYyBkZWNsYXJhdGlvbnMgYmVjYXVzZSB0aGV5J3JlIGJlaW5nIGV4cG9ydGVkLCBhdCBsZWFzdCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2Ugb2YgdGhhdCBrZXl3b3JkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCBpZiB0aGVyZSdzIGFueSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGJldHdlZW4gdGhlIEhGUyBhbmQgSEZTKyBpbXBsZW1lbnRhdGlvbnMgb2YgYGhmc19ibWFwX2FsbG9jYC4gSSBzaG91bGQgc3RhcnQgYnkgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgYGZzL2hmcy9idHJlZS5jYCBmaWxlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NTQuMjgxNDMzODQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzMzMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19idHJlZV9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmcy9idHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmcy9idHJlZS5jPTUyPXN0YXRpYyBjb25zdCBjaGFyICpoZnNfYnRyZWVfbmFtZSh1MzIgY25pZClcXG4tLVxcbmZzL2hmcy9idHJlZS5jLTY0LS8qIEdldCBhIHJlZmVyZW5jZSB0byBhIEIqVHJlZSBhbmQgZG8gc29tZSBpbml0aWFsIGNoZWNrcyAqL1xcbmZzL2hmcy9idHJlZS5jOjY1OnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZCwgYnRyZWVfa2V5Y21wIGtleWNtcClcXG5mcy9oZnMvYnRyZWUuYy02Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjU5OjU0LjMzMjE3MzA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MDc2MTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEItdHJlZSBBbGxvY2F0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBIRlMrIGJtYXAgYWxsb2NhdG9yIHdvcmtzLiBUaGF0IHN1Z2dlc3RzIGEgZGVlcCBkaXZlIGludG8gdGhlIGBmcy9oZnMvYnRyZWUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gcGlucG9pbnQgdGhlIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgYmxvY2tzIHdpdGhpbiB0aGUgSEZTKyBCLXRyZWUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgc3lzdGVtIHN0cnVjdHVyZSBhbmQgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBzZWUgaG93IGl0IG1hbmFnZXMgZnJlZSBzcGFjZSwgaGFuZGxlcyBmcmFnbWVudGF0aW9uIChvciBhdHRlbXB0cyB0byBtaXRpZ2F0ZSBpdCksIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgbWV0YWRhdGEuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSB0aGUgcGh5c2ljYWwgZGlzayBhY2Nlc3MuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzKSBvZiBIRlMrIGxpZXMsIHNvIEknbGwgYmUgbG9va2luZyBjbG9zZWx5IGZvciB0aGUgYWxsb2NhdGlvbiBhbGdvcml0aG1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjkwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NTcuNTEyOTM4NjY0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUwOTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm1hcF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnMvYnRyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYnRyZWUuYz0zMjI9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy0zNDQtXFxuZnMvaGZzL2J0cmVlLmM6MzQ1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuZnMvaGZzL2J0cmVlLmMtMzQ2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6NTk6NTcuNTYxNDU2NjcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjUyMjgyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSEZTKyBCLVRyZWUgQWxsb2NhdGlvbiBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEhGUysgZmlsZSBzeXN0ZW0gYWxsb2NhdGVzIHNwYWNlIHZpYSBpdHMgQi1UcmVlIHN0cnVjdHVyZS4gU2luY2UgSSdtIGludGVyZXN0ZWQgaW4gdGhlIGFsbG9jYXRpb24gcHJvY2VzcywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGZzL2hmc3BsdXMvYnRyZWUuY2AuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBCLVRyZWUgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEhGUysgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBJIG5lZWQgdG8gcGlucG9pbnQgd291bGQgYmUgYGhmc19ibWFwX2FsbG9jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIHNjcmVhbXMgXCJibG9jayBtYXAgYWxsb2NhdGlvblwiIHRvIG1lLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0IEkgbmVlZCB0byBleHBsb3JlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIEhGUysgZmlsZSBzeXN0ZW0gbWFuYWdlcyBkaXNrIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MDEuNTI2Njg5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0OTM1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9idHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYnRyZWUuYz00OTk9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI3LVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo1Mjg6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MDEuNTc2MTg4MTk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzc3NDg3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU3ltYm9sIFJlc29sdXRpb24gUXVhbmRhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gYWRkaW5nIGBoZnNfYnRyZWVfb3BlbmAgYW5kIGBoZnNfYm1hcF9hbGxvY2AgdG8gRm9jdXNTeW1ib2xzLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEkganVzdCByZW1lbWJlcmVkIHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpcyBkZWZpbmVkIGluIGJvdGggYGhmc2AgYW5kIGBoZnNwbHVzYC4gTm93LCBTeXprYWxsZXIgKm1pZ2h0KiBjaG9rZSBvbiB0aGF0IGlmIHRoZXJlJ3MgYSBuYW1lIGNvbGxpc2lvbiwgZXZlbiB0aG91Z2ggSSdtIHByZXR0eSBzdXJlIHRoZXNlIGFyZSBjb21waWxlZCBpbnRvIHNlcGFyYXRlIG1vZHVsZXMuIFN0aWxsLCBJIHNob3VsZCBjb25maXJtIHRoZXkncmUgYWN0dWFsbHkgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm90IGp1c3Qgbm9uLXN0YXRpYyBsb2NhbCBmdW5jdGlvbnMuIExldCBtZSBkb3VibGUtY2hlY2suXG5cbkFoLCByaWdodC4gSW4gYGhmc3BsdXNgLCB0aGUgZnVuY3Rpb24ncyBmdWxseSBxdWFsaWZpZWQgbmFtZSBpcyBgaGZzX2JtYXBfYWxsb2NgLCBub3QganVzdCBgYm1hcF9hbGxvY2AuIE9rYXksIG5vdywgZG9lcyBgaGZzcGx1c2AgZXZlbiAqdXNlKiB0aGlzIHZlcnNpb24sIG9yIGlzIHRoZXJlIGFub3RoZXIgb25lPyBZZXMhIEl0IGlzIGluZGVlZCBkZWZpbmVkIGluIGBmcy9oZnNwbHVzL2J0cmVlLmNgLiBPa2F5LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGl0IG1pZ2h0IGJlIHdvcnRoIHZlcmlmeWluZyB0aGlzLiBMZXQgbWUgbG9vayBpbiBgZnMvaGZzcGx1cy9idHJlZS5oYCBvciBzb21ld2hlcmUgc2ltaWxhciB0byBzZWUgaWYgaXQncyBleHBvcnRlZC4gSSBjYW4ndCBiZSB0b28gY2FyZWZ1bCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjA2LjE1Mzk0MTE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5MzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm1hcF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JyZWMuYz0yMzU9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yNDctXFx0bm9kZSA9IGZkLVxcdTAwM2Vibm9kZTtcXG5mcy9oZnNwbHVzL2JyZWMuYzoyNDg6XFx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0yNDktXFx0aWYgKElTX0VSUihuZXdfbm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz00NzA9c3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDgyLVxcdH1cXG5mcy9oZnNwbHVzL2JyZWMuYzo0ODM6XFx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy00ODQtXFx0aWYgKElTX0VSUihuZXdfbm9kZSkpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz00OTk9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI3LVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo1Mjg6c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTI5LXtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4OS0jZGVmaW5lIGhmc19ibWFwX3Jlc2VydmUgaGZzcGx1c19ibWFwX3Jlc2VydmVcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyOTA6I2RlZmluZSBoZnNfYm1hcF9hbGxvYyBoZnNwbHVzX2JtYXBfYWxsb2NcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yOTEtI2RlZmluZSBoZnNfYm1hcF9mcmVlIGhmc3BsdXNfYm1hcF9mcmVlXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zNjY9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjM2NzpzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zNjgtdm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDowNi4yMDI4NTE3NTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMTg0ODAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIHRoZSBIRlMrIEJtYXAgQWxsb2NhdGlvbiBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYWJvdXQgdGhlIEhGUysgYm1hcCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBgaGZzX2JtYXBfYWxsb2NgIHNvbWV3aGVyZSwgYnV0IEknbSBwcmV0dHkgc3VyZSB0aGF0J3MganVzdCBhIG1hY3JvLiBSaWdodCwgbG9va2luZyBpbiBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLCBpdCdzIGNsZWFyOiBgaGZzX2JtYXBfYWxsb2NgIGlzIGluZGVlZCBqdXN0IGEgbWFjcm8gZGVmaW5pdGlvbiBmb3IgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbiBgaGZzcGx1c2AsIHdoaWNoIGlzIGBoZnNwbHVzX2JtYXBfYWxsb2NgLiBKdXN0IHdhbnQgdG8gbG9jayB0aGF0IGRvd24gaW4gbXkgaGVhZCBhbmQga2VlcCB0aGF0IHN0cmFpZ2h0LiBJJ2xsIG1ha2Ugc3VyZSB0byB1c2UgYGhmc3BsdXNfYm1hcF9hbGxvY2Agd2hlbiBJJ20gYWN0dWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSB0byBiZSBzdXJlLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIGV4dHJhIGNhcmVmdWwsIGVzcGVjaWFsbHkgd2l0aCBzb21ldGhpbmcgZnVuZGFtZW50YWwgbGlrZSBibG9jayBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MTAuMTA0NzAzMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjgyNDM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNwbHVzX2JtYXBfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMjg5LSNkZWZpbmUgaGZzX2JtYXBfcmVzZXJ2ZSBoZnNwbHVzX2JtYXBfcmVzZXJ2ZVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjI5MDojZGVmaW5lIGhmc19ibWFwX2FsbG9jIGhmc3BsdXNfYm1hcF9hbGxvY1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI5MS0jZGVmaW5lIGhmc19ibWFwX2ZyZWUgaGZzcGx1c19ibWFwX2ZyZWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MTAuMjg3NTMzMzk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzYyNDAxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIRlMrIEItdHJlZSBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBoZnNfYm1hcF9hbGxvY2AgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBhcyBgaGZzcGx1c19ibWFwX2FsbG9jYC4gU28sIG9uIHRoZSBzdXJmYWNlLCB0aGUgY29tcGlsZXIgaXMgZ29pbmcgdG8gc2VlIGBoZnNwbHVzX2JtYXBfYWxsb2NgIHdoZW4gaXQgY29tcGlsZXMuIEJ1dCB3YWl0LCBpbiBgZnMvaGZzcGx1cy9idHJlZS5jYCwgaXQncyBhY3R1YWxseSBkZWZpbmVkIGFzIGBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKWAuIE5vdywgd2h5IHRoZSBuYW1lIGRpc2NyZXBhbmN5PyBBaCwgSSBzZWUsIGJlY2F1c2UgYGJ0cmVlLmNgIGluY2x1ZGVzIGBoZnNwbHVzX2ZzLmhgLCB0aGUgcHJlcHJvY2Vzc29yIGlzIGhhbmRsaW5nIHRoZSBjaGFuZ2UuIEl0J3MgbWFjcm8taW5nIGBoZnNfYm1hcF9hbGxvY2AgdG8gYmUgYGhmc3BsdXNfYm1hcF9hbGxvY2AgYmVmb3JlIHRoZSBjb21waWxlciBldmVuIGdldHMgaXRzIGhhbmRzIG9uIHRoZSBjb2RlLiBUaGlzIGlzIGxpa2VseSBkb25lIHRvIGtlZXAgdGhlIGNvZGViYXNlIGNsZWFuZXIgb3IgbWFuYWdlIHNvbWUgc29ydCBvZiB2ZXJzaW9uaW5nLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIGBoZnNfYnRyZWVfb3BlbmAgaXMgdHJlYXRlZCBzaW1pbGFybHkgd2l0aGluIGBoZnNwbHVzYC4uLiBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbmFtZSBtYXBwaW5nIGFwcHJvYWNoIHdpdGhpbiB0aGlzIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDoxNS4xMjM3NzY0MDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjQ0Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19idHJlZV9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYnRyZWUuYz0yNTM9c3RhdGljIGNvbnN0IGNoYXIgKmhmc19idHJlZV9uYW1lKHUzMiBjbmlkKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTI2Ny0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cXG5mcy9oZnNwbHVzL2J0cmVlLmM6MjY4OnN0cnVjdCBoZnNfYnRyZWUgKmhmc19idHJlZV9vcGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBpZClcXG5mcy9oZnNwbHVzL2J0cmVlLmMtMjY5LXtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTI4NS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDoyODY6I2RlZmluZSBoZnNfYnRyZWVfb3BlbiBoZnNwbHVzX2J0cmVlX29wZW5cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0yODctI2RlZmluZSBoZnNfYnRyZWVfY2xvc2UgaGZzcGx1c19idHJlZV9jbG9zZVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MzYxPXUzMiBoZnNwbHVzX2NhbGNfYnRyZWVfY2x1bXBfc2l6ZSh1MzIgYmxvY2tfc2l6ZSwgdTMyIG5vZGVfc2l6ZSwgdTY0IHNlY3RvcnMsXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzYyLVxcdFxcdFxcdFxcdCAgaW50IGZpbGVfaWQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjM2MzpzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM2NC12b2lkIGhmc19idHJlZV9jbG9zZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz00NTI9c3RhdGljIGludCBoZnNwbHVzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTU0NS1cXHQvKiBMb2FkIG1ldGFkYXRhIG9iamVjdHMgKEIqVHJlZXMpICovXFxuZnMvaGZzcGx1cy9zdXBlci5jOjU0NjpcXHRzYmktXFx1MDAzZWV4dF90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU1BMVVNfRVhUX0NOSUQpO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy01NDctXFx0aWYgKCFzYmktXFx1MDAzZWV4dF90cmVlKSB7XFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmMtNTUwLVxcdH1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6NTUxOlxcdHNiaS1cXHUwMDNlY2F0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19DQVRfQ05JRCk7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTU1Mi1cXHRpZiAoIXNiaS1cXHUwMDNlY2F0X3RyZWUpIHtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy01NTctXFx0aWYgKHZoZHItXFx1MDAzZWF0dHJfZmlsZS50b3RhbF9ibG9ja3MgIT0gMCkge1xcbmZzL2hmc3BsdXMvc3VwZXIuYzo1NTg6XFx0XFx0c2JpLVxcdTAwM2VhdHRyX3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19BVFRSX0NOSUQpO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy01NTktXFx0XFx0aWYgKCFzYmktXFx1MDAzZWF0dHJfdHJlZSkge1xcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jPTE5OD1zdGF0aWMgaW50IGhmc3BsdXNfY3JlYXRlX2F0dHJpYnV0ZXNfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTMyMS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6MzIyOlxcdHNiaS1cXHUwMDNlYXR0cl90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU1BMVVNfQVRUUl9DTklEKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtMzIzLVxcdGlmICghc2JpLVxcdTAwM2VhdHRyX3RyZWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjE1LjE4MDQzMDIxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTgwNTUwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEhGUyBCLVRyZWUgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGluaXRpYWxseSB0aG91Z2h0IGl0IHdhcyB0b3VjaGluZyB0aGUgYGhmc3BsdXNgIHNpZGUgb2YgdGhpbmdzLCBidXQgSSdtIG5vdyBjZXJ0YWluIEkgbmVlZCB0byByZS1ldmFsdWF0ZS4gSXQgYXBwZWFycyB0aGUgY29kZSBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGhmc19idHJlZV9vcGVuYCB3aXRoaW4gdGhlIGBmcy9oZnMvYnRyZWUuY2AgZmlsZSBhbmQgbm90IHRoZSBgaGZzcGx1c2AgdmVyc2lvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhZ2FpbiBieSBjYXJlZnVsbHkgZXhhbWluaW5nIHRoZSBkaWZmOlxuXG5gYGBkaWZmXG4tLS0gYS9mcy9oZnMvYnRyZWUuY1xuKysrIGIvZnMvaGZzL2J0cmVlLmNcbkBAIC0xNSwxMiArMTUsNTkgQEBcbiBcbiAjaW5jbHVkZSBcImJ0cmVlLmhcIlxuIFxuK3N0YXRpYyBib29sIGhmc19ibWFwX3Rlc3RfYml0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBub2RlX2JpdF9pZHgpXG4uLi5cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4uLi5cbkBAIC0zMTYsNiArMzc2LDE3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4uLi5cbi0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuY1xuKysrIGIvZnMvaGZzcGx1cy9idHJlZS5jXG5AQCAtNTYxLDYgKzU2MSwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuYGBgXG5cblJpZ2h0LCBjb25maXJtZWQuIEl0J3MgdGhlIGBoZnNgIHZlcnNpb24gdGhhdCdzIGJlaW5nIHRvdWNoZWQuIFRoYXQgbWVhbnMgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBoZnNgIHNpZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGhmc19idHJlZV9vcGVuYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgaGZzX2JtYXBfYWxsb2NgIG9uIHRoZSBgaGZzYCBzaWRlIGFuZCBgaGZzcGx1c19ibWFwX2FsbG9jYCBvbiB0aGUgYGhmc3BsdXNgIHNpZGUuXG5cbk5vdywgbGV0IG1lIGNoZWNrIGlmIGBoZnNfYnRyZWVfb3BlbmAgaW4gYGhmc2AgaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBpbnRlcm5hbC4gU2luY2UgaXQgaXNuJ3Qgc3RhdGljLCBpdCdzIHByZXN1bWFibHkgZXhwb3J0ZWQuIEknbGwgdGFrZSBhIHF1aWNrIHBlZWsgYXQgYGZzL2hmcy9idHJlZS5oYCBvciByZWxhdGVkIGhlYWRlcnMgdG8gc2VlIGlmIGl0J3MgYmVpbmcgbWFjcm9lZCBhbnl3aGVyZSwganVzdCBpbiBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjIyLjc2MDk4MzMyNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1OTEyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2J0cmVlX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYnRyZWUuYz01Mj1zdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy02NC0vKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cXG5mcy9oZnMvYnRyZWUuYzo2NTpzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXFxuZnMvaGZzL2J0cmVlLmMtNjYte1xcbi0tXFxuZnMvaGZzL2J0cmVlLmg9Nzc9c3RydWN0IGhmc19maW5kX2RhdGEge1xcbi0tXFxuZnMvaGZzL2J0cmVlLmgtODgtLyogYnRyZWUuYyAqL1xcbmZzL2hmcy9idHJlZS5oOjg5OmV4dGVybiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsXFxuZnMvaGZzL2J0cmVlLmgtOTAtXFx0XFx0XFx0XFx0XFx0YnRyZWVfa2V5Y21wIGtleWNtcCk7XFxuLS1cXG5mcy9oZnMvbWRiLmM9OTQ9aW50IGhmc19tZGJfZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnMvbWRiLmMtMjI3LVxcbmZzL2hmcy9tZGIuYzoyMjg6XFx0SEZTX1NCKHNiKS1cXHUwMDNlZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTX0VYVF9DTklELCBoZnNfZXh0X2tleWNtcCk7XFxuZnMvaGZzL21kYi5jLTIyOS1cXHRpZiAoIUhGU19TQihzYiktXFx1MDAzZWV4dF90cmVlKSB7XFxuLS1cXG5mcy9oZnMvbWRiLmMtMjMyLVxcdH1cXG5mcy9oZnMvbWRiLmM6MjMzOlxcdEhGU19TQihzYiktXFx1MDAzZWNhdF90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU19DQVRfQ05JRCwgaGZzX2NhdF9rZXljbXApO1xcbmZzL2hmcy9tZGIuYy0yMzQtXFx0aWYgKCFIRlNfU0Ioc2IpLVxcdTAwM2VjYXRfdHJlZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDoyMi44MTg1ODQ1MDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3Mzk0NTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBIRlMgQi1UcmVlIEFsbG9jYXRpb24gUm91dGluZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIEhGUyBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgQi10cmVlIGFsbG9jYXRpb24gZnVuY3Rpb25zLiBGaXJzdCBvYnNlcnZhdGlvbjogdGhlc2Ugcm91dGluZXMgYXJlbid0IG1hY3JvZWQuIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzZWFyY2gg4oCTIG5vIGhpZGRlbiBjb21wbGV4aXR5IHRoZXJlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc3BsdXNfYm1hcF9hbGxvY2AuXG5cbkhvbGQgb24uLi4gSSdtIGp1c3QgZG91YmxlIGNoZWNraW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGhmc19ibWFwX2FsbG9jYCBpbiBgZnMvaGZzL2J0cmVlLmNgICphbHNvKiBpc24ndCBtYWNyb2VkLCBJJ20gcHJldHR5IHN1cmUgSSBzYXcgaXQgd2FzIG5vdCBidXQgSSBtdXN0IGRvdWJsZSBjaGVjayEgT2theSwgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjI2LjQ5MjUzNDI3MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzMDU2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2JtYXBfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnMvYnJlYy5jPTI1MD1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmcy9icmVjLmMtMjU5LVxcdG5vZGUgPSBmZC1cXHUwMDNlYm5vZGU7XFxuZnMvaGZzL2JyZWMuYzoyNjA6XFx0bmV3X25vZGUgPSBoZnNfYm1hcF9hbGxvYyh0cmVlKTtcXG5mcy9oZnMvYnJlYy5jLTI2MS1cXHRpZiAoSVNfRVJSKG5ld19ub2RlKSlcXG4tLVxcbmZzL2hmcy9icmVjLmM9NDc3PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmcy9icmVjLmMtNDg5LVxcdH1cXG5mcy9oZnMvYnJlYy5jOjQ5MDpcXHRuZXdfbm9kZSA9IGhmc19ibWFwX2FsbG9jKHRyZWUpO1xcbmZzL2hmcy9icmVjLmMtNDkxLVxcdGlmIChJU19FUlIobmV3X25vZGUpKSB7XFxuLS1cXG5mcy9oZnMvYnRyZWUuYz0zMjI9aW50IGhmc19ibWFwX3Jlc2VydmUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIHJzdmRfbm9kZXMpXFxuLS1cXG5mcy9oZnMvYnRyZWUuYy0zNDQtXFxuZnMvaGZzL2J0cmVlLmM6MzQ1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuZnMvaGZzL2J0cmVlLmMtMzQ2LXtcXG4tLVxcbmZzL2hmcy9idHJlZS5oPTkzPWV4dGVybiBpbnQgaGZzX2JtYXBfcmVzZXJ2ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgcnN2ZF9ub2Rlcyk7XFxuZnMvaGZzL2J0cmVlLmg6OTQ6ZXh0ZXJuIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpO1xcbmZzL2hmcy9idHJlZS5oLTk1LWV4dGVybiB2b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjI2LjU0Mzg1MDE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDEyMjkzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhGUy9IRlMrIEFsbG9jYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBjb25maXJtaW5nIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHRoZSByYXcgc3ltYm9scyBoZXJlLCBub3RoaW5nIG1hY3JvZWQuIFRoZSBvbmVzIEknbSBzZWVpbmcgYXJlIGBoZnNfYnRyZWVfb3BlbmAsIGBoZnNfYm1hcF9hbGxvY2AsIGFuZCBgaGZzcGx1c19ibWFwX2FsbG9jYC5cblxuTm93LCBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYGhmc3BsdXNfYm1hcF9hbGxvY2AgaXMgdGhlIGNvcnJlY3QgbmFtZSB3aXRoaW4gdGhlIGBoZnNwbHVzYCBjb250ZXh0LiBBIHF1aWNrIHBlZWsgYXQgYGZzL2hmc3BsdXMvaGZzcGx1c19mcy5oYCBjb25maXJtcyBpdDogYCNkZWZpbmUgaGZzX2JtYXBfYWxsb2MgaGZzcGx1c19ibWFwX2FsbG9jYC4gU28sIHRoZSBhY3R1YWwgZnVuY3Rpb24gZGVmaW5lZCBhcyBgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlgIGluIGBmcy9oZnNwbHVzL2J0cmVlLmNgIGlzLCB1bmRlciB0aGUgaG9vZCwgYHN0cnVjdCBoZnNfYm5vZGUgKmhmc3BsdXNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKWAuIEV4Y2VsbGVudC4gVGhhdCBjbGVhcnMgdGhhdCB1cC5cblxuTW92aW5nIG9uLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCBoZXJlLiBBIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXM6IEJvdGggYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYCBkZXBlbmQgb24gYEJMT0NLYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrIGBmcy9oZnMvS2NvbmZpZ2AgYW5kIGBmcy9oZnNwbHVzL0tjb25maWdgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjMzLjM4NTA4MzQxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hY2ludG9zaCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBNYWNpbnRvc2gtZm9ybWF0dGVkXFxuICAxMDpcXHRcXHQgIGZsb3BweSBkaXNrcyBhbmQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDExOlxcdFxcdCAgUGxlYXNlIHJlYWQgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMucnN0XFx1MDAzZSB0byBsZWFybiBhYm91dFxcbiAgMTI6XFx0XFx0ICB0aGUgYXZhaWxhYmxlIG1vdW50IG9wdGlvbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGZzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgSEZTX0tVTklUX1RFU1RcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTIGZpbGVzeXN0ZW1cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gSEZTX0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuICAyMDpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDozMy4zODUxNTI0NjRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5Njk0MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uSSdtIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBmcy9oZnNwbHVzL0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyB0aGUgSEZTKyBmaWxlc3lzdGVtIHN1cHBvcnQgaXMgYmVpbmcgaGFuZGxlZCBhdCB0aGUga2VybmVsIGxldmVsLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhLCBlc3BlY2lhbGx5IGlmIEknbSBwbGFubmluZyBhbnkgbW9kaWZpY2F0aW9ucyBvciBlbmhhbmNlbWVudHMgdG8gaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggTWFjLWZvcm1hdHRlZCBkcml2ZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgS2NvbmZpZyBmaWxlcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGFuZCBydW4tdGltZSBhc3BlY3RzIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6MzYuNjgyMDk3NjQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU1BMVVNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5MU19VVEY4XFxuICAgODpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXRcXG4gIDExOlxcdFxcdCAgTWFjaW50b3NoLWZvcm1hdHRlZCBoYXJkIGRyaXZlIHBhcnRpdGlvbnMgd2l0aCBmdWxsIHJlYWQtd3JpdGUgYWNjZXNzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUysgYW5kIHdhcyBpbnRyb2R1Y2VkIHdpdGhcXG4gIDE0OlxcdFxcdCAgTWFjT1MgOC4gSXQgaW5jbHVkZXMgYWxsIE1hYyBzcGVjaWZpYyBmaWxlc3lzdGVtIGRhdGEgc3VjaCBhc1xcbiAgMTU6XFx0XFx0ICBkYXRhIGZvcmtzIGFuZCBjcmVhdG9yIGNvZGVzLCBidXQgaXQgYWxzbyBoYXMgc2V2ZXJhbCBVTklYXFxuICAxNjpcXHRcXHQgIHN0eWxlIGZlYXR1cmVzIHN1Y2ggYXMgZmlsZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIEhGUysgZmlsZXN5c3RlbVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBIRlNQTFVTX0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjM2LjY4MjE2NzQyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQwMDQzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUy9IRlMrIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0d28gcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZTogYEhGU19GU2AgYW5kIGBIRlNQTFVTX0ZTYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgY29ycnVwdGlvbiBjaGVja3Mgd2l0aGluIHRoZSBIRlMgYW5kIEhGUysgZmlsZXN5c3RlbXMsIHNwZWNpZmljYWxseSBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgb3BlbmluZy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBmb3JjZSBhIHJlYWQtb25seSBzdGF0ZSBpZiBjb3JydXB0aW9uIGlzIGlkZW50aWZpZWQsIHByZXZlbnRpbmcgZnVydGhlciBkYXRhIGxvc3MuIFRoaXMgaXMgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0ICpkZW1hbmRzKiBmdXp6aW5nIHRvIGd1YXJhbnRlZSByb2J1c3RuZXNzIHdoZW4gZmFjZWQgd2l0aCBjb3JydXB0ZWQgaW1hZ2VzOyB3ZSB3YW50IHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoZXNlIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseSwgd2l0aG91dCBjcmFzaGluZyBvciBpbnRyb2R1Y2luZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFybHkgbGFpZCBvdXQgZm9yIG1lOiBgaGZzX2J0cmVlX29wZW5gLCBgaGZzX2JtYXBfYWxsb2NgLCBhbmQgYGhmc3BsdXNfYm1hcF9hbGxvY2AuXG5cbk5vdywgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGZvciBpbmNsdXNpb24gb2YgYGhmc19ibWFwX3Rlc3RfYml0YC4gQWgsIHllcywgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0J3MgZWl0aGVyIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIG9yIGlzbid0IGEgZGlzdGluY3Qgc3ltYm9sLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIGhlcmU6IHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTbywgYmFzZWQgb24gdGhhdCwgSSdtIGdvaW5nIHRvICpleGNsdWRlKiBgaGZzX2JtYXBfdGVzdF9iaXRgIGZyb20gbXkgbGlzdC5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxOSwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDo0My4yMjIyMTQ5ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgxOTMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTX0ZTXCIsXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2J0cmVlX29wZW5cIixcbiAgICBcImhmc19ibWFwX2FsbG9jXCIsXG4gICAgXCJoZnNwbHVzX2JtYXBfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJpdG1hcCBjb3JydXB0aW9uIGNoZWNrcyBpbiB0aGUgSEZTIGFuZCBIRlMrIGZpbGVzeXN0ZW1zIGR1cmluZyBCLXRyZWUgbm9kZSBhbGxvY2F0aW9uIGFuZCBCLXRyZWUgb3BlbmluZy4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBjb3JydXB0ZWQgaW1hZ2VzIHdpdGhvdXQgY3Jhc2hpbmcgb3IgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU19GU1wiLFxuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19idHJlZV9vcGVuXCIsXG4gICAgXCJoZnNfYm1hcF9hbGxvY1wiLFxuICAgIFwiaGZzcGx1c19ibWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBiaXRtYXAgY29ycnVwdGlvbiBjaGVja3MgaW4gdGhlIEhGUyBhbmQgSEZTKyBmaWxlc3lzdGVtcyBkdXJpbmcgQi10cmVlIG5vZGUgYWxsb2NhdGlvbiBhbmQgQi10cmVlIG9wZW5pbmcuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgY29ycnVwdGVkIGltYWdlcyB3aXRob3V0IGNyYXNoaW5nIG9yIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDM6MDA6NDMuMzEwMDQ0OTkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTI1NjgwODY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAzOjAwOjQzLjMxMDY5NTM3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTI1NjE1NDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMrIEItdHJlZSBpbXBsZW1lbnRhdGlvbnMgdG8gZGV0ZWN0IGJpdG1hcCBjb3JydXB0aW9uIChzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoYXQgbm9kZSBpbmRleCAwLCB0aGUgaGVhZGVyIG5vZGUsIGlzIG1hcmtlZCBhcyB1c2VkKS4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBvdmVyd3JpdGluZyB0aGUgaGVhZGVyIG5vZGUgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMpIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5Zjc2MjUwMjY3ZjcwODRkYTQwOGRmZTg4NGQ5NGQ3ZmJhNTA1ZDA0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDI6NTk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jXG5pbmRleCAyZWIzN2EyZjY0ZTg2Li45YjBiNzQxOGRkYmQ1IDEwMDY0NFxuLS0tIGEvZnMvaGZzL2J0cmVlLmNcbisrKyBiL2ZzL2hmcy9idHJlZS5jXG5AQCAtMTUsMTIgKzE1LDU5IEBAXG4gXG4gI2luY2x1ZGUgXCJidHJlZS5oXCJcbiBcbitzdGF0aWMgYm9vbCBoZnNfYm1hcF90ZXN0X2JpdChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgbm9kZV9iaXRfaWR4KVxuK3tcbitcdHUxNiByZWNfaWR4LCBvZmYsIGxlbjtcbitcdHUzMiBieXRlX29mZnNldDtcbitcdHU4IGJ5dGUsIG1hc2s7XG4rXG4rXHRpZiAobm9kZS1cdTAwM2V0aGlzID09IDApIHtcbitcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9IRUFERVIpIHtcbitcdFx0XHRwcl9lcnIoXCJoZnM6IGludmFsaWQgYnRyZWUgaGVhZGVyIG5vZGVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHRcdHJlY19pZHggPSAyO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9NQVApIHtcbitcdFx0XHRwcl9lcnIoXCJoZnM6IGludmFsaWQgYnRyZWUgbWFwIG5vZGVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXHRcdHJlY19pZHggPSAwO1xuK1x0fVxuK1xuK1x0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlY19pZHgsIFx1MDAyNm9mZik7XG4rXHRpZiAoIWxlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Ynl0ZV9vZmZzZXQgPSBub2RlX2JpdF9pZHggLyBCSVRTX1BFUl9CWVRFO1xuK1x0aWYgKGJ5dGVfb2Zmc2V0IFx1MDAzZT0gbGVuKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRieXRlID0gaGZzX2Jub2RlX3JlYWRfdTgobm9kZSwgb2ZmICsgYnl0ZV9vZmZzZXQpO1xuK1x0bWFzayA9IDEgXHUwMDNjXHUwMDNjICg3IC0gKG5vZGVfYml0X2lkeCAlIEJJVFNfUEVSX0JZVEUpKTtcbitcbitcdHJldHVybiBieXRlIFx1MDAyNiBtYXNrO1xuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqaGZzX2J0cmVlX25hbWUodTMyIGNuaWQpXG4re1xuK1x0c3dpdGNoIChjbmlkKSB7XG4rXHRjYXNlIEhGU19FWFRfQ05JRDpcbitcdFx0cmV0dXJuIFwiRXh0ZW50cyBPdmVyZmxvdyBGaWxlXCI7XG4rXHRjYXNlIEhGU19DQVRfQ05JRDpcbitcdFx0cmV0dXJuIFwiQ2F0YWxvZyBGaWxlXCI7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gXCJVbmtub3duIEItdHJlZVwiO1xuK1x0fVxuK31cbitcbiAvKiBHZXQgYSByZWZlcmVuY2UgdG8gYSBCKlRyZWUgYW5kIGRvIHNvbWUgaW5pdGlhbCBjaGVja3MgKi9cbiBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZXljbXApXG4ge1xuIFx0c3RydWN0IGhmc19idHJlZSAqdHJlZTtcbiBcdHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyAqaGVhZDtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuK1x0c3RydWN0IGhmc19ibm9kZSAqbm9kZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTU1LDYgKzIwMiwxOSBAQCBzdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQsIGJ0cmVlX2tleWNtcCBrZVxuIFx0a3VubWFwX2xvY2FsKGhlYWQpO1xuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4rXG4rXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG4rXHRpZiAoSVNfRVJSKG5vZGUpKVxuK1x0XHRnb3RvIGZyZWVfaW5vZGU7XG4rXG4rXHRpZiAoIWhmc19ibWFwX3Rlc3RfYml0KG5vZGUsIDApKSB7XG4rXHRcdHByX3dhcm4oXCIoJXMpOiAlcyAoY25pZCAweCV4KSBtYXAgcmVjb3JkIGludmFsaWQgb3IgYml0bWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQsIGZvcmNpbmcgcmVhZC1vbmx5LlxcblwiLFxuK1x0XHRcdHNiLVx1MDAzZXNfaWQsIGhmc19idHJlZV9uYW1lKGlkKSwgaWQpO1xuK1x0XHRwcl93YXJuKFwiUnVuIGZzY2suaGZzIHRvIHJlcGFpci5cXG5cIik7XG4rXHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuK1x0fVxuK1xuK1x0aGZzX2Jub2RlX3B1dChub2RlKTtcbiBcdHJldHVybiB0cmVlO1xuIFxuIGZhaWxfZm9saW86XG5AQCAtMzE2LDYgKzM3NiwxNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuIFx0XHRcdGlmIChieXRlICE9IDB4ZmYpIHtcbiBcdFx0XHRcdGZvciAobSA9IDB4ODAsIGkgPSAwOyBpIFx1MDAzYyA4OyBtIFx1MDAzZVx1MDAzZT0gMSwgaSsrKSB7XG4gXHRcdFx0XHRcdGlmICghKGJ5dGUgXHUwMDI2IG0pKSB7XG4rXHRcdFx0XHRcdFx0aWYgKHVubGlrZWx5KCEoaWR4ICsgaSkpKSB7XG4rXHRcdFx0XHRcdFx0XHRwcl93YXJuKFwiKCVzKTogJXMgKGNuaWQgMHgleCkgbWFwIHJlY29yZCBpbnZhbGlkIG9yIGJpdG1hcCBjb3JydXB0aW9uIGRldGVjdGVkLCBmb3JjaW5nIHJlYWQtb25seS5cXG5cIixcbitcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2lkLFxuK1x0XHRcdFx0XHRcdFx0XHRoZnNfYnRyZWVfbmFtZSh0cmVlLVx1MDAzZWNuaWQpLFxuK1x0XHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZWNuaWQpO1xuK1x0XHRcdFx0XHRcdFx0cHJfd2FybihcIlJ1biBmc2NrLmhmcyB0byByZXBhaXIuXFxuXCIpO1xuK1x0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbitcdFx0XHRcdFx0XHRcdGt1bm1hcF9sb2NhbChkYXRhKTtcbitcdFx0XHRcdFx0XHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4rXHRcdFx0XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbitcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWR4ICs9IGk7XG4gXHRcdFx0XHRcdFx0ZGF0YVtvZmZdIHw9IG07XG4gXHRcdFx0XHRcdFx0c2V0X3BhZ2VfZGlydHkoKnBhZ2VwKTtcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2J0cmVlLmMgYi9mcy9oZnNwbHVzL2J0cmVlLmNcbmluZGV4IDM5NDU0MmE0N2U2MDAuLjNlZTkyMjQ4YjI0MDkgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2J0cmVlLmNcbisrKyBiL2ZzL2hmc3BsdXMvYnRyZWUuY1xuQEAgLTU2MSw2ICs1NjEsMTcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcbiBcdFx0XHRpZiAoYnl0ZSAhPSAweGZmKSB7XG4gXHRcdFx0XHRmb3IgKG0gPSAweDgwLCBpID0gMDsgaSBcdTAwM2MgODsgbSBcdTAwM2VcdTAwM2U9IDEsIGkrKykge1xuIFx0XHRcdFx0XHRpZiAoIShieXRlIFx1MDAyNiBtKSkge1xuK1x0XHRcdFx0XHRcdGlmICh1bmxpa2VseSghKGlkeCArIGkpKSkge1xuK1x0XHRcdFx0XHRcdFx0cHJfd2FybihcIiglcyk6ICVzIChjbmlkIDB4JXgpIG1hcCByZWNvcmQgaW52YWxpZCBvciBiaXRtYXAgY29ycnVwdGlvbiBkZXRlY3RlZCwgZm9yY2luZyByZWFkLW9ubHkuXFxuXCIsXG4rXHRcdFx0XHRcdFx0XHRcdHRyZWUtXHUwMDNlc2ItXHUwMDNlc19pZCxcbitcdFx0XHRcdFx0XHRcdFx0aGZzX2J0cmVlX25hbWUodHJlZS1cdTAwM2VjbmlkKSxcbitcdFx0XHRcdFx0XHRcdFx0dHJlZS1cdTAwM2VjbmlkKTtcbitcdFx0XHRcdFx0XHRcdHByX3dhcm4oXCJSdW4gZnNjay5oZnNwbHVzIHRvIHJlcGFpci5cXG5cIik7XG4rXHRcdFx0XHRcdFx0XHR0cmVlLVx1MDAzZXNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuK1x0XHRcdFx0XHRcdFx0a3VubWFwX2xvY2FsKGRhdGEpO1xuK1x0XHRcdFx0XHRcdFx0aGZzX2Jub2RlX3B1dChub2RlKTtcbitcdFx0XHRcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuK1x0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZHggKz0gaTtcbiBcdFx0XHRcdFx0XHRkYXRhW2N0eC5vZmZdIHw9IG07XG4gXHRcdFx0XHRcdFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMDo0My4zMTA2OTY0OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNTYxMzAyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTL0hGUysgQi10cmVlIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYGZzL2hmcy9idHJlZS5jYCBhbmQgYGZzL2hmc3BsdXMvYnRyZWUuY2AuIFdoYXQgd2UgaGF2ZSBoZXJlIGFyZSBzYW5pdHkgY2hlY2tzIGRlc2lnbmVkIHRvIGRldGVjdCBhbmQgaGFuZGxlIGZpbGVzeXN0ZW0gY29ycnVwdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQi10cmVlIGJpdG1hcC4gVGhlIHByaW1hcnkgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlIGZpcnN0IGJpdCAoaW5kZXggMCkgb2YgdGhlIEItdHJlZSBtYXAgcmVjb3JkIGlzIHNldCwgaW5kaWNhdGluZyB0aGF0IHRoZSBoZWFkZXIgbm9kZSAobm9kZSBpbmRleCAwKSBpcyBpbiB1c2Ug4oCTIHdoaWNoIGl0ICphbHdheXMqIHNob3VsZCBiZS4gSWYgdGhhdCBiaXQgaXMgKm5vdCogc2V0LCB0aGUgY29kZSBub3cgdHJpZ2dlcnMgYSByZWFkLW9ubHkgbW91bnQsIGVmZmVjdGl2ZWx5IGxvY2tpbmcgZG93biB0aGUgZmlsZXN5c3RlbSB0byBwcmV2ZW50IG1vcmUgc2V2ZXJlIGRhbWFnZS5cblxuSSd2ZSBhbHNvIG5vdGljZWQgdGhhdCB0aGVyZSdzIGEgZ3VhcmQgaW4gYGhmc19ibWFwX2FsbG9jYCB0byBwcmV2ZW50IGFsbG9jYXRpb24gb2Ygbm9kZSBpbmRleCAwLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZWZlbnNlLCBhcyBhbGxvY2F0aW5nIHRoZSBoZWFkZXIgbm9kZSB3b3VsZCBiZSBjYXRhc3Ryb3BoaWMuIFRoZSBmb3JjZWQgcmVhZC1vbmx5IG1vZGUgYW5kIGVycm9yIHJldHVybiBhcmUgdGhlIGNvcnJlY3QgcmVzcG9uc2VzIHRvIHN1Y2ggYW4gYXR0ZW1wdC5cblxuQ3JpdGljYWxseSwgdGhlcmUncyBubyBuZXcgYWxsb2NhdGlvbiBvZiBtZW1vcnksIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gYXBwYXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMuIFRoZSBtYWluIHB1cnBvc2UgaXMgdG8gZGV0ZWN0IGFuZCBjb250YWluIGZpbGVzeXN0ZW0gY29ycnVwdGlvbi4gVGhpcyBpcyBleGNlbGxlbnQgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5UaGlzIGZpeCBpcywgZXNzZW50aWFsbHksIGEgcmVzcG9uc2UgdG8gYSBzaXR1YXRpb24gd2hlcmUgdGhlIGhlYWRlciBub2RlIGlzIHRyZWF0ZWQgYXMgYXZhaWxhYmxlLiBJdCdzIHRoZSBraW5kIG9mIGJ1ZyB0aGF0ICpzaG91bGQqIGJlIGNhdWdodCBieSBLQVNBTiBvciBvdGhlciBrZXJuZWwgYnVnIGRldGVjdG9ycy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IsIG1vcmUgZ2VuZXJhbGx5LCBmaWxlc3lzdGVtIGNvcnJ1cHRpb24sIGFyZSBhbGwgcG90ZW50aWFsIG91dGNvbWVzIGlmIG5vZGUgMCBpcyBtaXNoYW5kbGVkLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBoZnNfYm1hcF90ZXN0X2JpdGAgaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gT2theSwgdGhlIGZ1bmN0aW9uIGBoZnNfYm5vZGVfcmVhZF91OGAgcmVhZHMgZGF0YSBmcm9tIHRoZSBCLXRyZWUgbm9kZSBwYWdlcy4gVGhlc2UgcGFnZXMgYXJlIHJlYWQgZnJvbSB0aGUgZGlzayBieSB0aGUgYmxvY2sgbGF5ZXIgYW5kLCB0aGVyZWZvcmUsIHRoZXkgYXJlICphbHdheXMqIGluaXRpYWxpemVkIGJ5IHRoZSBibG9jayBsYXllci4gU28gdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuXG5cbkdpdmVuIGFsbCB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgS01TQU4gZG9lc24ndCBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoIHRoaXMgY2hhbmdlLiBJdCdzIGEgc29saWQsIGRlZmVuc2l2ZSBwYXRjaCBhaW1lZCBhdCBpbXByb3ZpbmcgZmlsZXN5c3RlbSBpbnRlZ3JpdHkgYW5kIHByb3RlY3RpbmcgYWdhaW5zdCBrbm93biBjb3JydXB0aW9uIHNjZW5hcmlvcy4gTmVlZHNLTVNBTiBpcyBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0OSwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMzowMToyNC41NjY4Mjk0ODZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gdGhlIEhGUyBhbmQgSEZTKyBCLXRyZWUgaW1wbGVtZW50YXRpb25zIHRvIGRldGVjdCBiaXRtYXAgY29ycnVwdGlvbiAoc3BlY2lmaWNhbGx5LCBlbnN1cmluZyB0aGF0IG5vZGUgaW5kZXggMCwgdGhlIGhlYWRlciBub2RlLCBpcyBtYXJrZWQgYXMgdXNlZCkuIElmIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQsIHRoZSBmaWxlc3lzdGVtIGlzIGZvcmNlZCBpbnRvIHJlYWQtb25seSBtb2RlIHRvIHByZXZlbnQgZnVydGhlciBkYW1hZ2UuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3ZlcndyaXRpbmcgdGhlIGhlYWRlciBub2RlIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBjcmFzaGVzKSBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byB0aGUgSEZTIGFuZCBIRlMrIEItdHJlZSBpbXBsZW1lbnRhdGlvbnMgdG8gZGV0ZWN0IGJpdG1hcCBjb3JydXB0aW9uIChzcGVjaWZpY2FsbHksIGVuc3VyaW5nIHRoYXQgbm9kZSBpbmRleCAwLCB0aGUgaGVhZGVyIG5vZGUsIGlzIG1hcmtlZCBhcyB1c2VkKS4gSWYgY29ycnVwdGlvbiBpcyBkZXRlY3RlZCwgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yY2VkIGludG8gcmVhZC1vbmx5IG1vZGUgdG8gcHJldmVudCBmdXJ0aGVyIGRhbWFnZS4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChlLmcuLCBvdmVyd3JpdGluZyB0aGUgaGVhZGVyIG5vZGUgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGNyYXNoZXMpIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowc22ph[1] Phase: Succeeded StartedAt: 2026-08-14 03:01:36 +0000 UTC FinishedAt: 2026-08-14 03:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 03:01:36 +0000 UTC FinishedAt: 2026-08-14 03:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2] Phase: Succeeded StartedAt: 2026-08-14 03:01:36 +0000 UTC FinishedAt: 2026-08-14 06:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 03:01:36 +0000 UTC FinishedAt: 2026-08-14 06:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 03:01:36 +0000 UTC FinishedAt: 2026-08-14 03:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 03:01:36 +0000 UTC FinishedAt: 2026-08-14 03:01:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc22ph/series-workflowc22ph-convert-artifact-1938831179/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 03:01:46 +0000 UTC FinishedAt: 2026-08-14 03:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 03:01:46 +0000 UTC FinishedAt: 2026-08-14 03:18:29 +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:*19984395-ec40-4f0d-95ac-962a9668f89f,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-workflowc22ph/series-workflowc22ph-convert-artifact-1938831179/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": "04c5f30e-8144-4a01-834b-5d59a91d1863", "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-workflowc22ph/series-workflowc22ph-build-action-1414770249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 03:01:46 +0000 UTC FinishedAt: 2026-08-14 03:18:19 +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:*19984395-ec40-4f0d-95ac-962a9668f89f,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-workflowc22ph/series-workflowc22ph-convert-artifact-1938831179/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": "04c5f30e-8144-4a01-834b-5d59a91d1863", "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-workflowc22ph/series-workflowc22ph-build-action-1414770249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 03:18:29 +0000 UTC FinishedAt: 2026-08-14 03:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 03:18:29 +0000 UTC FinishedAt: 2026-08-14 03:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 03:18:29 +0000 UTC FinishedAt: 2026-08-14 03:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 03:18:29 +0000 UTC FinishedAt: 2026-08-14 03:18:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc22ph/series-workflowc22ph-convert-artifact-353233570/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 03:18:39 +0000 UTC FinishedAt: 2026-08-14 03:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 03:18:39 +0000 UTC FinishedAt: 2026-08-14 03:20:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*04c5f30e-8144-4a01-834b-5d59a91d1863,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-workflowc22ph/series-workflowc22ph-build-action-1414770249/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-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 03:20:48 +0000 UTC FinishedAt: 2026-08-14 03:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 03:20:48 +0000 UTC FinishedAt: 2026-08-14 03:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 03:20:48 +0000 UTC FinishedAt: 2026-08-14 03:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 03:20:48 +0000 UTC FinishedAt: 2026-08-14 03:37:13 +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:*19984395-ec40-4f0d-95ac-962a9668f89f,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-workflowc22ph/series-workflowc22ph-convert-artifact-353233570/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": "d5596721-5fc3-4662-90af-6b24c9ea0771", "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-workflowc22ph/series-workflowc22ph-build-action-2733058806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 03:20:48 +0000 UTC FinishedAt: 2026-08-14 03:37:03 +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:*19984395-ec40-4f0d-95ac-962a9668f89f,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-workflowc22ph/series-workflowc22ph-convert-artifact-353233570/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": "d5596721-5fc3-4662-90af-6b24c9ea0771", "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-workflowc22ph/series-workflowc22ph-build-action-2733058806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 03:37:13 +0000 UTC FinishedAt: 2026-08-14 03:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 03:37:13 +0000 UTC FinishedAt: 2026-08-14 03:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 03:37:13 +0000 UTC FinishedAt: 2026-08-14 03:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 03:37:13 +0000 UTC FinishedAt: 2026-08-14 03:39:25 +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:*d5596721-5fc3-4662-90af-6b24c9ea0771,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-workflowc22ph/series-workflowc22ph-build-action-2733058806/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-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 03:39:35 +0000 UTC FinishedAt: 2026-08-14 06:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 03:39:35 +0000 UTC FinishedAt: 2026-08-14 06:42:49 +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":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"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:*04c5f30e-8144-4a01-834b-5d59a91d1863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5596721-5fc3-4662-90af-6b24c9ea0771,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-workflowc22ph/series-workflowc22ph-build-action-1414770249/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-workflowc22ph/series-workflowc22ph-build-action-2733058806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 03:39:35 +0000 UTC FinishedAt: 2026-08-14 03:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 03:39:35 +0000 UTC FinishedAt: 2026-08-14 03:39:41 +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":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"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-workflowc22ph/series-workflowc22ph-convert-artifact-159091671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 03:39:35 +0000 UTC FinishedAt: 2026-08-14 03:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 03:39:35 +0000 UTC FinishedAt: 2026-08-14 03:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 03:39:35 +0000 UTC FinishedAt: 2026-08-14 03:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 03:39:45 +0000 UTC FinishedAt: 2026-08-14 06:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc22ph[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_btree_open","hfs_bmap_alloc","hfsplus_bmap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFS_FS","HFSPLUS_FS"],"series_id":"ee5a1c66-3cc8-4b60-8e9f-cb208839f2e2","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 03:39:45 +0000 UTC FinishedAt: 2026-08-14 06:42:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*04c5f30e-8144-4a01-834b-5d59a91d1863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5596721-5fc3-4662-90af-6b24c9ea0771,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-workflowc22ph/series-workflowc22ph-build-action-1414770249/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-workflowc22ph/series-workflowc22ph-build-action-2733058806/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-workflowc22ph/series-workflowc22ph-convert-artifact-159091671/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,}