Name: series-workflow6s2t5 Phase: Succeeded StartedAt: 2026-07-23 15:54:07 +0000 UTC FinishedAt: 2026-07-23 20:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[0] Phase: Succeeded StartedAt: 2026-07-23 15:54:07 +0000 UTC FinishedAt: 2026-07-23 16:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 15:54:07 +0000 UTC FinishedAt: 2026-07-23 16:18:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3d5aa4cacc9999594171c96e327110788d0987da", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3d5aa4cacc9999594171c96e327110788d0987da", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "43c35080-ee60-4281-bb5f-cd20c8aae974" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__alloc_pages_direct_compact", "__alloc_pages_direct_reclaim", "try_to_compact_pages", "fast_find_migrateblock", "suitable_migration_source" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2NvbXBhY3RfcGFnZXMmIzM0OywKICAgICYjMzQ7ZmFzdF9maW5kX21pZ3JhdGVibG9jayYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBkaXJlY3QgcmVjbGFpbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBgY2FwdHVyZV9jb250cm9sYCBpcyBoYW5kbGVkIGFuZCBob3cgYWxsb2NhdGlvbiBvcmRlcnMgYXJlIHByb21vdGVkIGZvciBub24tbW92YWJsZSBhbGxvY2F0aW9ucyB3aXRoIGBBTExPQ19OT0ZSQUdNRU5UYC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdHJpZ2dlcmVkIGJ5IGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgdW5kZXIgbWVtb3J5IGZyYWdtZW50YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MWJjN2ZkMWY1NjFiMWQ2MWM3YTVjNzU2NGRjZDg5ZDUzOGY4MTQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6MTY6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuaW5kZXggZjI5ZWYwNjUzNTQ2ZWQuLjY2YTJmNzBlOWUwMTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5AQCAtNTgsNiAmIzQzOzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuJiM0MztzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXG4gXG4gLypcbiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmtcbkBAIC05Miw3ICYjNDM7OTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0XHRjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuLVx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2UpO1xuJiM0MztcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XG4gZXh0ZXJuIHZvaWQgcmVzZXRfaXNvbGF0aW9uX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpO1xuIGV4dGVybiBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGYwODc2NWFkZTAxNGNlLi45NzdlMzBiM2EyYmQxNiAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMTM4MSwxMiAmIzQzOzEzODEsNDQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbiBcdGlmIChwYWdlYmxvY2tfc2tpcF9wZXJzaXN0ZW50KHBhZ2UpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQykgfHwgIWNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXRcbiYjNDM7XHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXG4mIzQzO1x0ICogYmxvY2sgdHlwZXMsIGluY2x1ZGluZyBDTUEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRibG9ja19tdCA9IGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSk7XG4gXG4tXHRpZiAoY2MtXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHlcbiYjNDM7XHQgKiBlbHNlLCB2YWNhdGluZyBhIENNQSBibG9jayBjb25zdW1lcyBmcmVlIHBhZ2VzIHRoZSBjYWxsZXJcbiYjNDM7XHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfbWlncmF0ZV9jbWEoYmxvY2tfbXQpIFx1MDAyNlx1MDAyNiAhKGNjLVx1MDAzZWFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DTUEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBlciBkZWZhdWx0LCBzY2FucyBhcmUgcmVzdHJpY3RlZCB0byBibG9ja3MgY29tcGF0aWJsZSB3aXRoXG4mIzQzO1x0ICogdGhlIHJlcXVlc3QsIHRvIHByZXZlbnQgY3Jvc3MtY29udGFtaW5hdGlvbi4gT25jZVxuJiM0MztcdCAqIGNvbXBhY3Rpb24gcHJpb3JpdHkgZXNjYWxhdGVzIHRvIHN5bmNocm9ub3VzIHNjYW5zLCB0aG91Z2gsXG4mIzQzO1x0ICogc2NhbiBhbGwgYmxvY2tzIHRvIHRyeSB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuIEZvclxuJiM0MztcdCAqIG1vdmFibGUgcmVxdWVzdCwgdGhpcyBsaWtlbHkgaGVscHMgbGl0dGxlOiB0aGVyZSBzaG91bGRuJiMzOTt0XG4mIzQzO1x0ICogYmUgbWFueSBtaWdyYXRhYmxlIHBhZ2VzIGluc2lkZSBub24tbW92YWJsZSBibG9ja3MgYmVzaWRlc1xuJiM0MztcdCAqIGFsbG9jYXRvciBmYWxsYmFja3MuIEZvciBub24tbW92YWJsZSByZXF1ZXN0cywgdGhpcyBoZWxwcyBhXG4mIzQzO1x0ICogbG90LCBhcyB0aGV5IGNhbiBmaW5hbGx5IHNjYW4gbW92YWJsZSBibG9ja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgXHUwMDNjcGFnZWJsb2NrX29yZGVyIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tXG4mIzQzO1x0ICogcG9sbHV0aW5nIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uXG4mIzQzO1x0ICogKGRpcmVjdGx5IHJlcXVlc3RlZCwgb3IgZGVmcmFnX21vZGUpIGlzIGV4ZW1wdCBhcyB0aGUgYWxsb2NhdG9yXG4mIzQzO1x0ICogY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY2MtXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLVx1MDAzZW9yZGVyIFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyKVxuIFx0XHRyZXR1cm4gaXNfbWlncmF0ZV9tb3ZhYmxlKGJsb2NrX210KTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIGJsb2NrX210ID09IGNjLVx1MDAzZW1pZ3JhdGV0eXBlO1xuQEAgLTE5NzQsMTIgJiM0MzsyMDA2LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4gXHRcdHJldHVybiBwZm47XG4gXG4gXHQvKlxuLVx0ICogT25seSBhbGxvdyBrY29tcGFjdGQgYW5kIGRpcmVjdCByZXF1ZXN0cyBmb3IgbW92YWJsZSBwYWdlcyB0b1xuLVx0ICogcXVpY2tseSBjbGVhciBvdXQgYSBNT1ZBQkxFIHBhZ2VibG9jayBmb3IgYWxsb2NhdGlvbi4gVGhpc1xuLVx0ICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yXG4tXHQgKiBhbiB1bm1vdmFibGUvcmVjbGFpbWFibGUgc21hbGwgYWxsb2NhdGlvbi5cbiYjNDM7XHQgKiBQcmV2ZW50IFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxuJiM0MztcdCAqIHBvbGx1dGluZyBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvblxuJiM0MztcdCAqIGlzIGV4ZW1wdCBhcyB0aGUgYWxsb2NhdG9yIGNsYWltcyBhbmQgY29udmVydHMgdGhlc2UuXG4gXHQgKi9cbi1cdGlmIChjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcdTAwMjZcdTAwMjYgY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdGlmIChjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcdTAwMjZcdTAwMjYgY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjYy1cdTAwM2VvcmRlciBcdTAwM2MgcGFnZWJsb2NrX29yZGVyKVxuIFx0XHRyZXR1cm4gcGZuO1xuIFxuIFx0LypcbkBAIC0yNzcwLDkgJiM0MzsyODAyLDggQEAgY29tcGFjdF96b25lKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXG4gXHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IGhpZ2hlc3Rfem9uZWlkeCxcbi1cdFx0c3RydWN0IHBhZ2UgKipjYXB0dXJlKVxuJiM0MztcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiB7XG4tXHRlbnVtIGNvbXBhY3RfcmVzdWx0IHJldDtcbiBcdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7XG4gXHRcdC5vcmRlciA9IG9yZGVyLFxuIFx0XHQuc2VhcmNoX29yZGVyID0gb3JkZXIsXG5AQCAtMjc4NywzOCAmIzQzOzI4MTgsOCBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0Lmlnbm9yZV9za2lwX2hpbnQgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSksXG4gXHRcdC5pZ25vcmVfYmxvY2tfc3VpdGFibGUgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSlcbiBcdH07XG4tXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7XG4tXHRcdC5jYyA9IFx1MDAyNmNjLFxuLVx0XHQucGFnZSA9IE5VTEwsXG4tXHR9O1xuIFxuLVx0Lypcbi1cdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXG4tXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbi1cdCAqIGZyZWVzIGEgcGFnZS5cbi1cdCAqL1xuLVx0YmFycmllcigpO1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4tXG4tXHRyZXQgPSBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIFx1MDAyNmNhcGMpO1xuLVxuLVx0Lypcbi1cdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbi1cdCAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZVxuLVx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXG4tXHQgKi9cbi1cdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIE5VTEwpO1xuLVx0KmNhcHR1cmUgPSBSRUFEX09OQ0UoY2FwYy5wYWdlKTtcbi1cdC8qXG4tXHQgKiBUZWNobmljYWxseSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGNvbXBhY3Rpb24gaXMgc2tpcHBlZCBidXRcbi1cdCAqIHRoZSBwYWdlIGlzIHN0aWxsIGNhcHR1cmVkIG91dCBvZiBsdWNrKElSUSBjYW1lIGFuZCBmcmVlZCB0aGUgcGFnZSkuXG4tXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xuLVx0ICogdGhlIENPTVBBQ1RbU1RBTEx8RkFJTF0gd2hlbiBjb21wYWN0aW9uIGlzIHNraXBwZWQuXG4tXHQgKi9cbi1cdGlmICgqY2FwdHVyZSlcbi1cdFx0cmV0ID0gQ09NUEFDVF9TVUNDRVNTO1xuLVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gY29tcGFjdF96b25lKFx1MDAyNmNjLCBjYXBjKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjgyOCwxMyAmIzQzOzI4MjksMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb25cbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcbiYjNDM7ICogQGNhcGM6IEZyZWUgcGFnZSBjYXB0dXJlIGJ5cGFzc2luZyB0aGUgZnJlZWxpc3RcbiAgKlxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXG4gICovXG4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi1cdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbiYjNDM7XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG5AQCAtMjg2MSw4ICYjNDM7Mjg2MiwxNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY2FwYy1cdTAwM2V6b25lLCB6b25lKTtcbiYjNDM7XG4gXHRcdHN0YXR1cyA9IGNvbXBhY3Rfem9uZV9vcmRlcih6b25lLCBvcmRlciwgZ2ZwX21hc2ssIHByaW8sXG4tXHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXB0dXJlKTtcbiYjNDM7XHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGNhcGMtXHUwMDNlem9uZSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0LyogU3RvcCBpZiBhIHBhZ2UgaGFzIGJlZW4gY2FwdHVyZWQgKi9cbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UoY2FwYy1cdTAwM2VwYWdlKSlcbiYjNDM7XHRcdFx0c3RhdHVzID0gQ09NUEFDVF9TVUNDRVNTO1xuJiM0MztcbiBcdFx0cmMgPSBtYXgoc3RhdHVzLCByYyk7XG4gXG4gXHRcdC8qIFRoZSBhbGxvY2F0aW9uIHNob3VsZCBzdWNjZWVkLCBzdG9wIGNvbXBhY3RpbmcgKi9cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjVhY2JhMzQ3MDY1OWQ5IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTEwNTksNyAmIzQzOzEwNTksMTUgQEAgc3RydWN0IGNvbXBhY3RfY29udHJvbCB7XG4gICogaW1tZWRpYXRlbHkgd2hlbiBvbmUgaXMgY3JlYXRlZCBkdXJpbmcgdGhlIGZyZWUgcGF0aC5cbiAgKi9cbiBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIHtcbi1cdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjO1xuJiM0MztcdHN0cnVjdCB6b25lICp6b25lO1xuJiM0MztcdGludCBtaWdyYXRldHlwZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uXG4mIzQzO1x0ICogb3JkZXI6IGRlZnJhZ19tb2RlIHByb21vdGVzIHN1Yi1ibG9jayBhbGxvY2F0aW9ucyB0b1xuJiM0MztcdCAqIHBhZ2VibG9jay1vcmRlciBjb21wYWN0aW9uOyBjYXB0dXJlIHN0aWxsIG1hdGNoZXMgYXQgdGhlXG4mIzQzO1x0ICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgb3JkZXI7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLmY5MjA1NTgyN2FlOTU4IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC03MjEsMTQgJiM0Mzs3MjEsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpXG4gXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4gXHRcdCEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCFjYXBjLVx1MDAzZXBhZ2UgXHUwMDI2XHUwMDI2XG4tXHRcdGNhcGMtXHUwMDNlY2MtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG4mIzQzO1x0XHRjYXBjLVx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdCAgIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlKVxuIHtcbi1cdGlmICghY2FwYyB8fCBvcmRlciAhPSBjYXBjLVx1MDAzZWNjLVx1MDAzZW9yZGVyKVxuJiM0MztcdGlmICghY2FwYyB8fCBvcmRlciAhPSBjYXBjLVx1MDAzZW9yZGVyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBEbyBub3QgYWNjaWRlbnRhbGx5IHBvbGx1dGUgQ01BIG9yIGlzb2xhdGVkIHJlZ2lvbnMqL1xuQEAgLTc0NCwxMiAmIzQzOzc0NCwxMiBAQCBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiBoYXZlIHRyb3VibGUgZmluZGluZyBhIGhpZ2gtb3JkZXIgZnJlZSBwYWdlLlxuIFx0ICovXG4gXHRpZiAob3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcdTAwMjZcdTAwMjYgbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdCAgICBjYXBjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUpXG4tXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZWNjLVx1MDAzZW9yZGVyLCBvcmRlcixcbi1cdFx0XHRcdFx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTtcbiYjNDM7XHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cdTAwM2VtaWdyYXRldHlwZSlcbiYjNDM7XHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZW9yZGVyLCBvcmRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICBjYXBjLVx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XG4gXG4gXHRjYXBjLVx1MDAzZXBhZ2UgPSBwYWdlO1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtNDE0NiwxOCAmIzQzOzQxNDYsNjcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XG4mIzQzO1x0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuJiM0MztcdFx0LnpvbmUgPSBOVUxMLFxuJiM0MztcdFx0Lm1pZ3JhdGV0eXBlID0gYWMtXHUwMDNlbWlncmF0ZXR5cGUsXG4mIzQzO1x0XHQub3JkZXIgPSBvcmRlcixcbiYjNDM7XHRcdC5wYWdlID0gTlVMTCxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBjb21wYWN0X29yZGVyID0gb3JkZXI7XG4gXG4tXHRpZiAoIW9yZGVyKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgZmFsbGJhY2tzIGFyZSBub3QgcGVybWl0dGVkIChkZWZyYWdfbW9kZSksIHdlIGVpdGhlclxuJiM0MztcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG4mIzQzO1x0ICogb3V0IGFuIGVudGlyZSBibG9jayB0byBhbGxvdyBfX3JtcXVldWVfY2xhaW0oKSB0byBjb252ZXJ0LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxuJiM0MztcdCAqIGJsb2Nrcywgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgTFJVIHBhZ2VzIGxpdmUuIFNvIHRoaXNcbiYjNDM7XHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRm9yIHRob3NlLCBwcm9tb3RlIHRoZSBvcmRlciB0byBoZWxwIG1ha2UgYmxvY2tzLCBpbnN0ZWFkXG4mIzQzO1x0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdFx0Y29tcGFjdF9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjb21wYWN0X29yZGVyKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuIFx0ZGVsYXlhY2N0X2NvbXBhY3Rfc3RhcnQoKTtcbiYjNDM7XHRmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX21hc2spO1xuIFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuIFxuLVx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG4tXHRcdFx0XHRcdFx0XHRcdHByaW8sIFx1MDAyNnBhZ2UpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcbiYjNDM7XHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbiYjNDM7XHQgKiBmcmVlcyBhIHBhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFycmllcigpO1xuJiM0MztcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFx1MDAyNmNhcGMpO1xuJiM0MztcbiYjNDM7XHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBhbGxvY19mbGFncywgYWMsIHByaW8sIFx1MDAyNmNhcGMpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbiYjNDM7XHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcbiYjNDM7XHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlY2FwdHVyZV9jb250cm9sLCBOVUxMKTtcbiYjNDM7XHRwYWdlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGVjaG5pY2FsbHksIGl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBjb21wYWN0aW9uIGlzIHNraXBwZWQgYnV0XG4mIzQzO1x0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbiYjNDM7XHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xuJiM0MztcdCAqIHRoZSBDT01QQUNUW1NUQUxMfEZBSUxdIHdoZW4gY29tcGFjdGlvbiBpcyBza2lwcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYWdlKVxuJiM0MztcdFx0KmNvbXBhY3RfcmVzdWx0ID0gQ09NUEFDVF9TVUNDRVNTO1xuIFxuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuJiM0MztcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XG4gXHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbiBcdGRlbGF5YWNjdF9jb21wYWN0X2VuZCgpO1xuIFxuQEAgLTQxODIsNyAmIzQzOzQyMzEsNyBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuIFxuIFx0XHR6b25lLVx1MDAzZWNvbXBhY3RfYmxvY2tza2lwX2ZsdXNoID0gZmFsc2U7XG4tXHRcdGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgb3JkZXIsIHRydWUpO1xuJiM0MztcdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBjb21wYWN0X29yZGVyLCB0cnVlKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoQ09NUEFDVFNVQ0NFU1MpO1xuIFx0XHRyZXR1cm4gcGFnZTtcbiBcdH1cbkBAIC00NDIyLDkgJiM0Mzs0NDcxLDE0IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XG4mIzQzO1x0aW50IHJlY2xhaW1fb3JkZXIgPSBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0LyogTWF0Y2ggdGhlIHNsb3dwYXRoIGNvbXBhY3Rpb24gcHJvbW90aW9uIGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QgKi9cbiYjNDM7XHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XG4mIzQzO1x0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIHJlY2xhaW1fb3JkZXIsIGFjKTtcbiBcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDssCiAgICAmIzM0O3N1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzFiYzdmZDFmNTYxYjFkNjFjN2E1Yzc1NjRkY2Q4OWQ1MzhmODE0MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDE2OjE2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaAppbmRleCBmMjllZjA2NTM1NDZlZC4uNjZhMmY3MGU5ZTAxOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCkBAIC01OCw2ICYjNDM7NTgsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHsKIH07CiAKIHN0cnVjdCBhbGxvY19jb250ZXh0OyAvKiBpbiBtbS9pbnRlcm5hbC5oICovCiYjNDM7c3RydWN0IGNhcHR1cmVfY29udHJvbDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqLwogCiAvKgogICogTnVtYmVyIG9mIGZyZWUgb3JkZXItMCBwYWdlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYWJvdmUgZ2l2ZW4gd2F0ZXJtYXJrCkBAIC05Miw3ICYjNDM7OTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywKIAkJdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsCiAJCWNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sCi0JCXN0cnVjdCBwYWdlICoqcGFnZSk7CiYjNDM7CQlzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKTsKIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTsKIGV4dGVybiBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAkJCQl1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7CmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmMKaW5kZXggZjA4NzY1YWRlMDE0Y2UuLjk3N2UzMGIzYTJiZDE2IDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jCkBAIC0xMzgxLDEyICYjNDM7MTM4MSw0NCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLAogCWlmIChwYWdlYmxvY2tfc2tpcF9wZXJzaXN0ZW50KHBhZ2UpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoKGNjLSZndDttb2RlICE9IE1JR1JBVEVfQVNZTkMpIHx8ICFjYy0mZ3Q7ZGlyZWN0X2NvbXBhY3Rpb24pCiYjNDM7CS8qCiYjNDM7CSAqIEJhY2tncm91bmQgY29tcGFjdGlvbiBwcm9kdWNlcyBibG9ja3MgZm9yIHRoZSB6b25lIGF0CiYjNDM7CSAqIGxhcmdlLCB3aXRoIG5vIHBhcnRpY3VsYXIgYWxsb2NhdGlvbiBjb250ZXh0LiBBbGxvdyBhbGwKJiM0MzsJICogYmxvY2sgdHlwZXMsIGluY2x1ZGluZyBDTUEuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNjLSZndDtkaXJlY3RfY29tcGFjdGlvbikKIAkJcmV0dXJuIHRydWU7CiAKIAlibG9ja19tdCA9IGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSk7CiAKLQlpZiAoY2MtJmd0O21pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJLyoKJiM0MzsJICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHkKJiM0MzsJICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyCiYjNDM7CSAqIGNvdWxkIGhhdmUgdXNlZCwgYW5kIHByb2R1Y2VzIGZyZWUgcGFnZXMgaXQgY2Fubm90LgomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSAmYW1wOyZhbXA7ICEoY2MtJmd0O2FsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX0NNQSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBlciBkZWZhdWx0LCBzY2FucyBhcmUgcmVzdHJpY3RlZCB0byBibG9ja3MgY29tcGF0aWJsZSB3aXRoCiYjNDM7CSAqIHRoZSByZXF1ZXN0LCB0byBwcmV2ZW50IGNyb3NzLWNvbnRhbWluYXRpb24uIE9uY2UKJiM0MzsJICogY29tcGFjdGlvbiBwcmlvcml0eSBlc2NhbGF0ZXMgdG8gc3luY2hyb25vdXMgc2NhbnMsIHRob3VnaCwKJiM0MzsJICogc2NhbiBhbGwgYmxvY2tzIHRvIHRyeSB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuIEZvcgomIzQzOwkgKiBtb3ZhYmxlIHJlcXVlc3QsIHRoaXMgbGlrZWx5IGhlbHBzIGxpdHRsZTogdGhlcmUgc2hvdWxkbiYjMzk7dAomIzQzOwkgKiBiZSBtYW55IG1pZ3JhdGFibGUgcGFnZXMgaW5zaWRlIG5vbi1tb3ZhYmxlIGJsb2NrcyBiZXNpZGVzCiYjNDM7CSAqIGFsbG9jYXRvciBmYWxsYmFja3MuIEZvciBub24tbW92YWJsZSByZXF1ZXN0cywgdGhpcyBoZWxwcyBhCiYjNDM7CSAqIGxvdCwgYXMgdGhleSBjYW4gZmluYWxseSBzY2FuIG1vdmFibGUgYmxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGNjLSZndDttb2RlICE9IE1JR1JBVEVfQVNZTkMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCAmbHQ7cGFnZWJsb2NrX29yZGVyIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tCiYjNDM7CSAqIHBvbGx1dGluZyBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbgomIzQzOwkgKiAoZGlyZWN0bHkgcmVxdWVzdGVkLCBvciBkZWZyYWdfbW9kZSkgaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IKJiM0MzsJICogY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS4KJiM0MzsJICovCiYjNDM7CWlmIChjYy0mZ3Q7bWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLSZndDtvcmRlciAmZ3Q7PSBwYWdlYmxvY2tfb3JkZXIpCiAJCXJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpOwogCWVsc2UKIAkJcmV0dXJuIGJsb2NrX210ID09IGNjLSZndDttaWdyYXRldHlwZTsKQEAgLTE5NzQsMTIgJiM0MzsyMDA2LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiAJCXJldHVybiBwZm47CiAKIAkvKgotCSAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG8KLQkgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzCi0JICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yCi0JICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uCiYjNDM7CSAqIFByZXZlbnQgJmx0O3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbQomIzQzOwkgKiBwb2xsdXRpbmcgbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24KJiM0MzsJICogaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS4KIAkgKi8KLQlpZiAoY2MtJmd0O2RpcmVjdF9jb21wYWN0aW9uICZhbXA7JmFtcDsgY2MtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJaWYgKGNjLSZndDtkaXJlY3RfY29tcGFjdGlvbiAmYW1wOyZhbXA7IGNjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUgJmFtcDsmYW1wOwomIzQzOwkgICAgY2MtJmd0O29yZGVyICZsdDsgcGFnZWJsb2NrX29yZGVyKQogCQlyZXR1cm4gcGZuOwogCiAJLyoKQEAgLTI3NzAsOSAmIzQzOzI4MDIsOCBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpCiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAkJZ2ZwX3QgZ2ZwX21hc2ssIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLAogCQl1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBoaWdoZXN0X3pvbmVpZHgsCi0JCXN0cnVjdCBwYWdlICoqY2FwdHVyZSkKJiM0MzsJCXN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpCiB7Ci0JZW51bSBjb21wYWN0X3Jlc3VsdCByZXQ7CiAJc3RydWN0IGNvbXBhY3RfY29udHJvbCBjYyA9IHsKIAkJLm9yZGVyID0gb3JkZXIsCiAJCS5zZWFyY2hfb3JkZXIgPSBvcmRlciwKQEAgLTI3ODcsMzggJiM0MzsyODE4LDggQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCiAJCS5pZ25vcmVfc2tpcF9oaW50ID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpLAogCQkuaWdub3JlX2Jsb2NrX3N1aXRhYmxlID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpCiAJfTsKLQlzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7Ci0JCS5jYyA9ICZhbXA7Y2MsCi0JCS5wYWdlID0gTlVMTCwKLQl9OwogCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZQotCSAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgotCSAqIGZyZWVzIGEgcGFnZS4KLQkgKi8KLQliYXJyaWVyKCk7Ci0JV1JJVEVfT05DRShjdXJyZW50LSZndDtjYXB0dXJlX2NvbnRyb2wsICZhbXA7Y2FwYyk7Ci0KLQlyZXQgPSBjb21wYWN0X3pvbmUoJmFtcDtjYywgJmFtcDtjYXBjKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZAotCSAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZQotCSAqIGFuZCB3ZSB3b3VsZCBsZWFrIGl0LgotCSAqLwotCVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCBOVUxMKTsKLQkqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpOwotCS8qCi0JICogVGVjaG5pY2FsbHksIGl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBjb21wYWN0aW9uIGlzIHNraXBwZWQgYnV0Ci0JICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS4KLQkgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZwotCSAqIHRoZSBDT01QQUNUW1NUQUxMfEZBSUxdIHdoZW4gY29tcGFjdGlvbiBpcyBza2lwcGVkLgotCSAqLwotCWlmICgqY2FwdHVyZSkKLQkJcmV0ID0gQ09NUEFDVF9TVUNDRVNTOwotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGNvbXBhY3Rfem9uZSgmYW1wO2NjLCBjYXBjKTsKIH0KIAogLyoqCkBAIC0yODI4LDEzICYjNDM7MjgyOSwxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKICAqIEBhbGxvY19mbGFnczogVGhlIGFsbG9jYXRpb24gZmxhZ3Mgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbgogICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb24KICAqIEBwcmlvOiBEZXRlcm1pbmVzIGhvdyBoYXJkIGRpcmVjdCBjb21wYWN0aW9uIHNob3VsZCB0cnkgdG8gc3VjY2VlZAotICogQGNhcHR1cmU6IFBvaW50ZXIgdG8gZnJlZSBwYWdlIGNyZWF0ZWQgYnkgY29tcGFjdGlvbiB3aWxsIGJlIHN0b3JlZCBoZXJlCiYjNDM7ICogQGNhcGM6IEZyZWUgcGFnZSBjYXB0dXJlIGJ5cGFzc2luZyB0aGUgZnJlZWxpc3QKICAqCiAgKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgcGFnZSBjb21wYWN0aW9uLgogICovCiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCXVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLAotCQllbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IHBhZ2UgKipjYXB0dXJlKQomIzQzOwkJZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpCiB7CiAJc3RydWN0IHpvbmVyZWYgKno7CiAJc3RydWN0IHpvbmUgKnpvbmU7CkBAIC0yODYxLDggJiM0MzsyODYyLDE3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCVdSSVRFX09OQ0UoY2FwYy0mZ3Q7em9uZSwgem9uZSk7CiYjNDM7CiAJCXN0YXR1cyA9IGNvbXBhY3Rfem9uZV9vcmRlcih6b25lLCBvcmRlciwgZ2ZwX21hc2ssIHByaW8sCi0JCQkJYWxsb2NfZmxhZ3MsIGFjLSZndDtoaWdoZXN0X3pvbmVpZHgsIGNhcHR1cmUpOwomIzQzOwkJCQlhbGxvY19mbGFncywgYWMtJmd0O2hpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGNhcGMtJmd0O3pvbmUsIE5VTEwpOwomIzQzOwomIzQzOwkJLyogU3RvcCBpZiBhIHBhZ2UgaGFzIGJlZW4gY2FwdHVyZWQgKi8KJiM0MzsJCWlmIChSRUFEX09OQ0UoY2FwYy0mZ3Q7cGFnZSkpCiYjNDM7CQkJc3RhdHVzID0gQ09NUEFDVF9TVUNDRVNTOwomIzQzOwogCQlyYyA9IG1heChzdGF0dXMsIHJjKTsKIAogCQkvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAxODFlNzlmMWQ2YTIwNy4uNWFjYmEzNDcwNjU5ZDkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTA1OSw3ICYjNDM7MTA1OSwxNSBAQCBzdHJ1Y3QgY29tcGFjdF9jb250cm9sIHsKICAqIGltbWVkaWF0ZWx5IHdoZW4gb25lIGlzIGNyZWF0ZWQgZHVyaW5nIHRoZSBmcmVlIHBhdGguCiAgKi8KIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgewotCXN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjOwomIzQzOwlzdHJ1Y3Qgem9uZSAqem9uZTsKJiM0MzsJaW50IG1pZ3JhdGV0eXBlOwomIzQzOwkvKgomIzQzOwkgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvbgomIzQzOwkgKiBvcmRlcjogZGVmcmFnX21vZGUgcHJvbW90ZXMgc3ViLWJsb2NrIGFsbG9jYXRpb25zIHRvCiYjNDM7CSAqIHBhZ2VibG9jay1vcmRlciBjb21wYWN0aW9uOyBjYXB0dXJlIHN0aWxsIG1hdGNoZXMgYXQgdGhlCiYjNDM7CSAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuCiYjNDM7CSAqLwomIzQzOwlpbnQgb3JkZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggZWU5MDJhNDY4YzJmNWIuLmY5MjA1NTgyN2FlOTU4IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC03MjEsMTQgJiM0Mzs3MjEsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpCiAJcmV0dXJuIHVubGlrZWx5KGNhcGMpICZhbXA7JmFtcDsKIAkJIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7CiAJCSFjYXBjLSZndDtwYWdlICZhbXA7JmFtcDsKLQkJY2FwYy0mZ3Q7Y2MtJmd0O3pvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMOwomIzQzOwkJY2FwYy0mZ3Q7em9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAogY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSkKIHsKLQlpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy0mZ3Q7Y2MtJmd0O29yZGVyKQomIzQzOwlpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy0mZ3Q7b3JkZXIpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovCkBAIC03NDQsMTIgJiM0Mzs3NDQsMTIgQEAgY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLAogCSAqIGhhdmUgdHJvdWJsZSBmaW5kaW5nIGEgaGlnaC1vcmRlciBmcmVlIHBhZ2UuCiAJICovCiAJaWYgKG9yZGVyICZsdDsgcGFnZWJsb2NrX29yZGVyICZhbXA7JmFtcDsgbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFICZhbXA7JmFtcDsKLQkgICAgY2FwYy0mZ3Q7Y2MtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJICAgIGNhcGMtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtJmd0O2NjLSZndDttaWdyYXRldHlwZSkKLQkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtJmd0O2NjLSZndDtvcmRlciwgb3JkZXIsCi0JCQkJCSAgICBjYXBjLSZndDtjYy0mZ3Q7bWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTsKJiM0MzsJaWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtJmd0O21pZ3JhdGV0eXBlKQomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtJmd0O29yZGVyLCBvcmRlciwKJiM0MzsJCQkJCSAgICBjYXBjLSZndDttaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpOwogCiAJY2FwYy0mZ3Q7cGFnZSA9IHBhZ2U7CiAJcmV0dXJuIHRydWU7CkBAIC00MTQ2LDE4ICYjNDM7NDE0Niw2NyBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCXVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZzsKJiM0MzsJc3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0gewomIzQzOwkJLnpvbmUgPSBOVUxMLAomIzQzOwkJLm1pZ3JhdGV0eXBlID0gYWMtJmd0O21pZ3JhdGV0eXBlLAomIzQzOwkJLm9yZGVyID0gb3JkZXIsCiYjNDM7CQkucGFnZSA9IE5VTEwsCiYjNDM7CX07CiYjNDM7CWludCBjb21wYWN0X29yZGVyID0gb3JkZXI7CiAKLQlpZiAoIW9yZGVyKQomIzQzOwkvKgomIzQzOwkgKiBJZiBmYWxsYmFja3MgYXJlIG5vdCBwZXJtaXR0ZWQgKGRlZnJhZ19tb2RlKSwgd2UgZWl0aGVyCiYjNDM7CSAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyCiYjNDM7CSAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC4KJiM0MzsJICoKJiM0MzsJICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZQomIzQzOwkgKiBibG9ja3MsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzCiYjNDM7CSAqIHdvcmtzIGZvciBtb3ZhYmxlIHJlcXVlc3RzLCBidXQgbm90IGZvciBvdGhlcnMuCiYjNDM7CSAqCiYjNDM7CSAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZAomIzQzOwkgKiBvZiBzcGlubmluZyBpbiByZWNsYWltIGFsb25lIHVucHJvZHVjdGl2ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19OT0ZSQUdNRU5UKSAmYW1wOyZhbXA7IGFjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CQljb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpOwomIzQzOwomIzQzOwlpZiAoIWNvbXBhY3Rfb3JkZXIpCiAJCXJldHVybiBOVUxMOwogCiAJcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKIAlkZWxheWFjY3RfY29tcGFjdF9zdGFydCgpOwomIzQzOwlmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX21hc2spOwogCW5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTsKIAotCSpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLAotCQkJCQkJCQlwcmlvLCAmYW1wO3BhZ2UpOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZQomIzQzOwkgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXIKJiM0MzsJICogZnJlZXMgYSBwYWdlLgomIzQzOwkgKi8KJiM0MzsJYmFycmllcigpOwomIzQzOwlXUklURV9PTkNFKGN1cnJlbnQtJmd0O2NhcHR1cmVfY29udHJvbCwgJmFtcDtjYXBjKTsKJiM0MzsKJiM0MzsJKmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsCiYjNDM7CQkJCQkgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCAmYW1wO2NhcGMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgd2UgaGlkZSBjYXB0dXJlIGNvbnRyb2wgZmlyc3QgYmVmb3JlIHdlIHJlYWQgdGhlIGNhcHR1cmVkCiYjNDM7CSAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZQomIzQzOwkgKiBhbmQgd2Ugd291bGQgbGVhayBpdC4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCBOVUxMKTsKJiM0MzsJcGFnZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUZWNobmljYWxseSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGNvbXBhY3Rpb24gaXMgc2tpcHBlZCBidXQKJiM0MzsJICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS4KJiM0MzsJICogUmV0dXJuaW5nIENPTVBBQ1RfU1VDQ0VTUyBpbiBzdWNoIGNhc2VzIGhlbHBzIGluIHByb3Blcmx5IGFjY291bnRpbmcKJiM0MzsJICogdGhlIENPTVBBQ1RbU1RBTEx8RkFJTF0gd2hlbiBjb21wYWN0aW9uIGlzIHNraXBwZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocGFnZSkKJiM0MzsJCSpjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfU1VDQ0VTUzsKIAogCW1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTsKJiM0MzsJZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF9tYXNrKTsKIAlwc2lfbWVtc3RhbGxfbGVhdmUoJmFtcDtwZmxhZ3MpOwogCWRlbGF5YWNjdF9jb21wYWN0X2VuZCgpOwogCkBAIC00MTgyLDcgJiM0Mzs0MjMxLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAogCQl6b25lLSZndDtjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlOwotCQljb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTsKJiM0MzsJCWNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgY29tcGFjdF9vcmRlciwgdHJ1ZSk7CiAJCWNvdW50X3ZtX2V2ZW50KENPTVBBQ1RTVUNDRVNTKTsKIAkJcmV0dXJuIHBhZ2U7CiAJfQpAQCAtNDQyMiw5ICYjNDM7NDQ3MSwxNCBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCWJvb2wgZHJhaW5lZCA9IGZhbHNlOwomIzQzOwlpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyOwomIzQzOwomIzQzOwkvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqLwomIzQzOwlpZiAoKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX05PRlJBR01FTlQpICZhbXA7JmFtcDsgYWMtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJCXJlY2xhaW1fb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7CiAKIAlwc2lfbWVtc3RhbGxfZW50ZXIoJmFtcDtwZmxhZ3MpOwotCSpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWMpOwomIzQzOwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpOwogCWlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gc3Vic3lzdGVtLiBSaWdodCBhd2F5LCBJIHNlZSBpdCB0b3VjaGVzIHNvbWUga2V5IGZpbGVzOiBgbW0vY29tcGFjdGlvbi5jYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGBpbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaGAsIGFuZCBgbW0vaW50ZXJuYWwuaGAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIGhvdyBgY2FwdHVyZV9jb250cm9sYCBpcyBtYW5hZ2VkIGR1cmluZyBkaXJlY3QgY29tcGFjdGlvbiBhbmQgYXJlIGFsc28gcmUtd3JpdGluZyBzb21lIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyBtaWdyYXRpb24gc291cmNlcyBhbmQgdGFyZ2V0cywgc3BlY2lmaWNhbGx5IGFyb3VuZCBoYW5kbGluZyBgQUxMT0NfTk9GUkFHTUVOVGAgZmxhZ3MgYW5kIHRoZSBgcGFnZWJsb2NrX29yZGVyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2UmIzM5O3JlIG9wdGltaXppbmcgZnJhZ21lbnRhdGlvbiBoYW5kbGluZyBmb3Igc3BlY2lmaWMgYWxsb2NhdGlvbiB0eXBlcyBkdXJpbmcgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW0uJiMzNDsgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgYWJvdXQgcHJvbW90aW5nIHRoZSBvcmRlciB0byBgcGFnZWJsb2NrX29yZGVyYCBmb3Igbm9uLW1vdmFibGUgYWxsb2NhdGlvbnMgd2l0aCBgQUxMT0NfTk9GUkFHTUVOVGAgZmxhZ3MgZHVyaW5nIGRpcmVjdCBjb21wYWN0aW9uIGFuZCBkaXJlY3QgcmVjbGFpbQoKTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gTWVtb3J5IGNvbXBhY3Rpb24gaXMgYWJzb2x1dGVseSBhIGNvcmUgZmVhdHVyZSwgdHJpZ2dlcmVkIHdoZW4gaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoaXQgZnJhZ21lbnRhdGlvbiB3YWxscy4gVGhpcyBpc24mIzM5O3Qgc29tZSBuaWNoZSBjb3JuZXIgY2FzZTsgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5IHByZXNzdXJlLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgcmVhY2hhYmxlLgoKTm93LCBteSBtaW5kIGp1bXBzIHRvIGZ1enppbmcgdGFyZ2V0cy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIGJpdHMgb2YgbG9naWMgSSBuZWVkIHRvIGZvY3VzIG9uOgotICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgCi0gICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AKLSAgIGBjb21wYWN0X3pvbmVfb3JkZXJgCi0gICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgCi0gICBgY29tcGFjdGlvbl9jYXB0dXJlYAotICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgCi0gICBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAKCkxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgYXJlIHBhcnQgb2YgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoLiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IGNvbXBhY3Rpb24uIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhbmQgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgIGFyZSB1c2VkIGR1cmluZyB0aGUgYWN0dWFsIGNvbXBhY3Rpb24uCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQ29tcGFjdGlvbiwgdGhhbmtmdWxseSwgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX0NPTVBBQ1RJT05gLiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBpbiBgbW0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCYjMzk7bGwgYmUgYSBrZXkgcHJlLXJlcXVpc2l0ZSBmb3IgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09NUEFDVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NDI9Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02NTMtIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxubW0vS2NvbmZpZzo2NTQ6Y29uZmlnIENPTVBBQ1RJT05cbm1tL0tjb25maWctNjU1LVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IENvbXBhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZpcnN0LCB0aGUgb2J2aW91czogSSBuZWVkIHRvIHZlcmlmeSBpZiBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIGVuYWJsZWQsIGFzIHRoYXQmIzM5O3MgY2xlYXJseSB0aGUgcHJpbWFyeSBzd2l0Y2ggZm9yIHRoZSBlbnRpcmUgY29tcGFjdGlvbiBtZWNoYW5pc20uIEFuZCBzaW5jZSBjb21wYWN0aW9uIGZyZXF1ZW50bHkgaW52b2x2ZXMgbW92aW5nIHBhZ2VzIGFyb3VuZCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGlzIGFsc28gZW5hYmxlZCwgYXMgbWlncmF0aW9uIGlzIHR5cGljYWxseSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGJvdGggYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhvc2UgZmlsZXMgYW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0IGF3YXksIEkga25vdyBgbW0vY29tcGFjdGlvbi5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZGVmaW5lZCwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uLiBCYXNlZCBvbiB0aGlzLCBJIHdvdWxkIGd1ZXNzIHRoaXMgcGF0Y2ggZGVwZW5kcyBzb2xlbHkgb24gYENPTkZJR19DT01QQUNUSU9OYCBhbmQgYENPTkZJR19NSUdSQVRJT05gLCB3aXRoIGBDT05GSUdfQ09NUEFDVElPTmAgYmVpbmcgZXNzZW50aWFsIGZvciB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfQ09NUEFDVElPTlxcKS4qY29tcGFjdGlvblxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGl0LiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIGFzIGFuIGV4cGVydDoKCioqQ29tcGFjdGlvbiBpbiBgbW0vTWFrZWZpbGVgIOKAkyBRdWljayBDaGVjayoqCgpSaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBzcGVjaWZpYyBpc3N1ZSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGUgY29tcGFjdGlvbiBwcm9jZXNzIGlzIGJlaW5nIGhhbmRsZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGlyZWN0aXZlcyBjb250cm9sbGluZyBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIGFuZCBieSBleHRlbnNpb24sIGFueSBjb21wYWN0aW9uIHJvdXRpbmVzIG9yIHJlbGF0ZWQgbG9naWMuIEEgcXVpY2sgc2NhbiB0aGVyZSBjYW4gb2Z0ZW4gcmV2ZWFsIGlmIGNvbXBhY3Rpb24gaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncyBJIG5lZWQgdG8gY29uc2lkZXIuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IEkmIzM5O20gbm90IGdvaW5nIHRvIHNwaW4gbXkgd2hlZWxzIGRpZ2dpbmcgdGhyb3VnaCBzb3VyY2UgY29kZSBpZiB0aGUgTWFrZWZpbGUgaXNuJiMzOTt0IGV2ZW4gY29uZmlndXJlZCB0byBpbmNsdWRlIHRoZSBwYXJ0cyB0aGF0IEkgbmVlZCB0byBhbmFseXplLiBHb3R0YSBlc3RhYmxpc2ggbXkgYmFzZWxpbmUsIGtub3cgd2hhdCB0b29scyB0aGUgYnVpbGQgdXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG5tbS9NYWtlZmlsZTo1NjpcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGUtNTctXHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBDb21wYWN0aW9uJiMzOTtzIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGNvbXBhY3Rpb24ub2AuIElzIGl0ICphbHdheXMqIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgb3IgaXMgaXQgY29uZGl0aW9uYWw/IFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpczogd2hhdCBhcmUgdGhlIGJ1aWxkIG9wdGlvbnMgYXQgcGxheT8gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gd2hlbiB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCgpUaGUgcmVmbGV4IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9jb21wYWN0aW9uLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdXNlZCB3aXRoIGEgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSBxdWlja2VzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIGNvbXBhY3Rpb24gaXMgYnVpbHQtaW4gb3IgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdpbGwgZGlyZWN0bHkgZGljdGF0ZSB3aGV0aGVyIGl0JiMzOTtzIGFsd2F5cyBwYXJ0IG9mIG15IGtlcm5lbCBvciBzb21ldGhpbmcgSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYy0yOC1cbm1tL2NvbXBhY3Rpb24uYzoyOTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMC0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz01OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjEtXG5tbS9jb21wYWN0aW9uLmM6NjI6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjMtXG4tLVxubW0vY29tcGFjdGlvbi5jPTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTE1LVxubW0vY29tcGFjdGlvbi5jOjExNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0xMTctXG4tLVxubW0vY29tcGFjdGlvbi5jPTQ5MD1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vY29tcGFjdGlvbi5jLTQ5My19XG5tbS9jb21wYWN0aW9uLmM6NDk0OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xubW0vY29tcGFjdGlvbi5jLTQ5NS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MTMzNz1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vY29tcGFjdGlvbi5jLTEzNzItXG5tbS9jb21wYWN0aW9uLmM6MTM3MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTM3NS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzM2Mz1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzM2NC1cbm1tL2NvbXBhY3Rpb24uYzozMzY1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3Vzc2luZyBGdXp6aW5nIEVmZm9ydHMgZm9yIE1lbW9yeSBDb21wYWN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBrZXkgYXJlYSB0byB0YXJnZXQgaGVyZSBpcyBkZWZpbml0ZWx5IGBDT05GSUdfQ09NUEFDVElPTmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgbGllcy4gTm93LCB0byBtYWtlIHRoZSBtb3N0IG9mIGZ1enppbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vc3QgbGlrZWx5IHRvIHJldmVhbCB2dWxuZXJhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYHRyeV90b19jb21wYWN0X3BhZ2VzYCwgYGNvbXBhY3Rfem9uZV9vcmRlcmAsIGBjb21wYWN0aW9uX2NhcHR1cmVgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGFuZCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAuCgpgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBsb29rIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMgdG8gc3RhcnQgd2l0aC4gVGhleSYjMzk7cmUgcmlnaHQgdGhlcmUsIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCByZWNsYWltaW5nLCB3aGljaCBpcyBvZnRlbiB3aGVyZSBzdWJ0bGUgaXNzdWVzIGFyaXNlLiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGFsc28gc2VlbXMgcHJvbWlzaW5nLCBpdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgdGhlIGFjdHVhbCB3b3JrIGhhcHBlbnMuIE5vdywgYGNvbXBhY3Rpb25fY2FwdHVyZWAuLi4gaG1tLCBJIHJlY2FsbCBpdCBiZWluZyByZWxhdGVkIHRvIGB0YXNrX2NhcGNgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gVGltZSB0byBkaWcgaW50byBgY29tcGFjdGlvbl9jYXB0dXJlYCBhIGJpdCBkZWVwZXIsIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gR290dGEgdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb25fY2FwdHVyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NzI3PXN0YXRpYyBpbmxpbmUgYm9vbFxubW0vcGFnZV9hbGxvYy5jOjcyODpjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9wYWdlX2FsbG9jLmMtNzI5LVx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzY0PXN0YXRpYyBpbmxpbmUgYm9vbFxubW0vcGFnZV9hbGxvYy5jOjc2NTpjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9wYWdlX2FsbG9jLmMtNzY2LVx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9OTM2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfb25lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTk1OC1cbm1tL3BhZ2VfYWxsb2MuYzo5NTk6XHRcdGlmIChjb21wYWN0aW9uX2NhcHR1cmUoY2FwYywgcGFnZSwgb3JkZXIsIG1pZ3JhdGV0eXBlKSkge1xubW0vcGFnZV9hbGxvYy5jLTk2MC1cdFx0XHRhY2NvdW50X2ZyZWVwYWdlcyh6b25lLCAtKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSwgbWlncmF0ZXR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBIb3RzcG90cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBtZW1vcnkgYWxsb2NhdGlvbiBwZXJmb3JtYW5jZSwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYF9fZnJlZV9vbmVfcGFnZWAgaXMgYSBzZXJpb3VzIGJvdHRsZW5lY2sg4oCTIGEgcmVhbCBob3QgcGF0aC4gV2UgbmVlZCB0byB0cmVhZCBjYXJlZnVsbHkgYXJvdW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdCB0b28gZnJlcXVlbnRseS4gQ29uc2lkZXJpbmcgdGhhdCwgSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgc3RlZXIgY2xlYXIgb2YgZm9jdXNpbmcgb24gYGNvbXBhY3Rpb25fY2FwdHVyZWAgYXMgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3Igb3B0aW1pemF0aW9uIHJpZ2h0IG5vdzsgaXQgY291bGQgYmUgdG9vIGludGVydHdpbmVkIHdpdGggYF9fZnJlZV9vbmVfcGFnZWAgYW5kIGV4YWNlcmJhdGUgYW55IGlzc3Vlcy4KCk9uIHRoZSBvdGhlciBoYW5kLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBwcmVzZW50IGEgZGlmZmVyZW50IG9wcG9ydHVuaXR5LiBUaGVzZSBhcmUga25vd24gYXMgc2xvd2VyIGFsbG9jYXRpb24gcGF0aHMuIFRoaXMgbWFrZXMgdGhlbSBnb29kIGNhbmRpZGF0ZXMuIFdlIGFsc28gaGF2ZSBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIHdoaWNoIGlzIGFub3RoZXIgc2xvdyBwYXRoLCBieSBkZWZpbml0aW9uLiBTaW1pbGFybHksIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFyZSBwYXJ0IG9mIHRoZSBjb21wYWN0aW9uIHByb2Nlc3MsIGEgcmVsYXRpdmVseSBzbG93IGFyZWEgY29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkIGFsbG9jL2ZyZWUgb3BlcmF0aW9ucy4KCkdpdmVuIHRoZSBvcHRpb25zLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBUaGV5JiMzOTtyZSBwcm9iYWJseSB3aGVyZSB3ZSBjYW4gZ2V0IHRoZSBtb3N0IHNpZ25pZmljYW50IGdhaW5zIGJ5IG9wdGltaXppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTQxNDE9c3RhdGljIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MTQyOl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MTQzLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMxOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MzE5Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MzIwLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQ2Nz1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NzUtXG5tbS9wYWdlX2FsbG9jLmM6NDQ3NjpcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXG5tbS9wYWdlX2FsbG9jLmMtNDQ3Ny1cdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3Nzk9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OTM2LVx0LyogVHJ5IGRpcmVjdCBjb21wYWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRpbmcgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0OTM3Olx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG5tbS9wYWdlX2FsbG9jLmMtNDkzOC1cdFx0XHRcdFx0Y29tcGFjdF9wcmlvcml0eSwgXHUwMDI2Y29tcGFjdF9yZXN1bHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODE0CgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDQ4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGtleSBhcmVhcy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHByb2Nlc3MgemVyb2VzIGluIG9uIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYHRyeV90b19jb21wYWN0X3BhZ2VzYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gdGhlIGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIHByb2Nlc3MuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWJvdXQgZGVwZW5kZW5jaWVzIOKAkyBpcyBgQ09ORklHX0NPTVBBQ1RJT05gIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHk/IEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCwgeWVzLCBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIHRoZSBwcmltYXJ5IGVuYWJsZXIuIEdvb2QuIE5vIG90aGVyIGNyaXRpY2FsIGNvbmZpZyBvcHRpb25zIGJlc2lkZXMgYEFMTE9DX05PRlJBR01FTlRgICh3aGljaCBpcyBhIGZsYWcpIGFuZCBgTUlHUkFURV9NT1ZBQkxFYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBtaWdyYXRldHlwZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucy4gSXQgc2VlbXMgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGdldHMgdHdlYWtlZCB0byBpbmZsdWVuY2UgdGhlIGFsbG9jYXRpb24gb3JkZXIgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHVzaW5nIGBBTExPQ19OT0ZSQUdNRU5UYC4gIEFsc28sIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBzZWVzIGEgbW9kaWZpY2F0aW9uLCBvcmRlciBwcm9tb3Rpb24gYW5kIHRoZSBwcm9wZXIgdXNlIG9mIGBjYXB0dXJlX2NvbnRyb2xgLiBBZGRpdGlvbmFsbHksIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2hpZnRzIGZyb20gdGFraW5nIGBwYWdlICoqYCB0byB0YWtpbmcgYGNhcHR1cmVfY29udHJvbGAuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBzbyBJIGNoZWNrIGlmIHRoZXkgYXJlIHN0YXRpYy4gQXMgSSBleHBlY3RlZCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFyZSBzdGF0aWMsIHdoaWxlIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgaXMgbm9uLXN0YXRpYyBvciBleHBvcnRlZC4KClNvLCBmb3IgdGhlIGZ1enplciwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgb2J2aW91cyB0YXJnZXRzLiBJIGtub3cgdGhpcyBjb2RlIGhhbmRsZXMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgcG90ZW50aWFsbHkgdW5kZXIgZnJhZ21lbnRlZCBtZW1vcnkgY29uZGl0aW9ucy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgZG91YmxlLWNoZWNrIHRoYXQgYENPTVBBQ1RJT05gIGlzIGluZGVlZCBzdWZmaWNpZW50LiBBbmQgeWVzLCBpdCBpcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDssCiAgICAmIzM0O3N1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDssCiAgICAmIzM0O3N1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE2OjM2LjM0NzE5NDI3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDcyODI5MTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdFwiLFxuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcImZhc3RfZmluZF9taWdyYXRlYmxvY2tcIixcbiAgICBcInN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSBob3cgYGNhcHR1cmVfY29udHJvbGAgaXMgaGFuZGxlZCBhbmQgaG93IGFsbG9jYXRpb24gb3JkZXJzIGFyZSBwcm9tb3RlZCBmb3Igbm9uLW1vdmFibGUgYWxsb2NhdGlvbnMgd2l0aCBgQUxMT0NfTk9GUkFHTUVOVGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRyaWdnZXJlZCBieSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHVuZGVyIG1lbW9yeSBmcmFnbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNjozNi4zNDcyMDA5NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDY3ODgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcxYmM3ZmQxZjU2MWIxZDYxYzdhNWM3NTY0ZGNkODlkNTM4ZjgxNDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6MTY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuQEAgLTU4LDYgKzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xcbitzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXFxuIFxcbiAvKlxcbiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmtcXG5AQCAtOTIsNyArOTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcXG4rXFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XFxuIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTtcXG4gZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xcbmluZGV4IGYwODc2NWFkZTAxNGNlLi45NzdlMzBiM2EyYmQxNiAxMDA2NDRcXG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcXG5AQCAtMTM4MSwxMiArMTM4MSw0NCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbiBcXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKChjYy1cXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKSB8fCAhY2MtXFx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxcbitcXHQvKlxcbitcXHQgKiBCYWNrZ3JvdW5kIGNvbXBhY3Rpb24gcHJvZHVjZXMgYmxvY2tzIGZvciB0aGUgem9uZSBhdFxcbitcXHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXFxuK1xcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xcbiBcXG4tXFx0aWYgKGNjLVxcdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdC8qXFxuK1xcdCAqIENNQSBwYWdlcyBjYW4gb25seSBiZSB0YWtlbiBieSBBTExPQ19DTUEgcmVxdWVzdHMuIEZvciBhbnlib2R5XFxuK1xcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxcbitcXHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cXG4rXFx0ICovXFxuK1xcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXIgZGVmYXVsdCwgc2NhbnMgYXJlIHJlc3RyaWN0ZWQgdG8gYmxvY2tzIGNvbXBhdGlibGUgd2l0aFxcbitcXHQgKiB0aGUgcmVxdWVzdCwgdG8gcHJldmVudCBjcm9zcy1jb250YW1pbmF0aW9uLiBPbmNlXFxuK1xcdCAqIGNvbXBhY3Rpb24gcHJpb3JpdHkgZXNjYWxhdGVzIHRvIHN5bmNocm9ub3VzIHNjYW5zLCB0aG91Z2gsXFxuK1xcdCAqIHNjYW4gYWxsIGJsb2NrcyB0byB0cnkgdG8gbWFrZSBmb3J3YXJkIHByb2dyZXNzLiBGb3JcXG4rXFx0ICogbW92YWJsZSByZXF1ZXN0LCB0aGlzIGxpa2VseSBoZWxwcyBsaXR0bGU6IHRoZXJlIHNob3VsZG4ndFxcbitcXHQgKiBiZSBtYW55IG1pZ3JhdGFibGUgcGFnZXMgaW5zaWRlIG5vbi1tb3ZhYmxlIGJsb2NrcyBiZXNpZGVzXFxuK1xcdCAqIGFsbG9jYXRvciBmYWxsYmFja3MuIEZvciBub24tbW92YWJsZSByZXF1ZXN0cywgdGhpcyBoZWxwcyBhXFxuK1xcdCAqIGxvdCwgYXMgdGhleSBjYW4gZmluYWxseSBzY2FuIG1vdmFibGUgYmxvY2tzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNjLVxcdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBcXHUwMDNjcGFnZWJsb2NrX29yZGVyIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tXFxuK1xcdCAqIHBvbGx1dGluZyBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvblxcbitcXHQgKiAoZGlyZWN0bHkgcmVxdWVzdGVkLCBvciBkZWZyYWdfbW9kZSkgaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3JcXG4rXFx0ICogY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cXG4rXFx0ICovXFxuK1xcdGlmIChjYy1cXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLVxcdTAwM2VvcmRlciBcXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpXFxuIFxcdFxcdHJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHJldHVybiBibG9ja19tdCA9PSBjYy1cXHUwMDNlbWlncmF0ZXR5cGU7XFxuQEAgLTE5NzQsMTIgKzIwMDYsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmFzdF9maW5kX21pZ3JhdGVibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4gXFx0XFx0cmV0dXJuIHBmbjtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG9cXG4tXFx0ICogcXVpY2tseSBjbGVhciBvdXQgYSBNT1ZBQkxFIHBhZ2VibG9jayBmb3IgYWxsb2NhdGlvbi4gVGhpc1xcbi1cXHQgKiByZWR1Y2VzIHRoZSByaXNrIHRoYXQgYSBsYXJnZSBtb3ZhYmxlIHBhZ2VibG9jayBpcyBmcmVlZCBmb3JcXG4tXFx0ICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uXFxuK1xcdCAqIFByZXZlbnQgXFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxcbitcXHQgKiBwb2xsdXRpbmcgbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb25cXG4rXFx0ICogaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cXG4gXFx0ICovXFxuLVxcdGlmIChjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXFx1MDAyNlxcdTAwMjYgY2MtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0aWYgKGNjLVxcdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcXHUwMDI2XFx1MDAyNiBjYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjYy1cXHUwMDNlb3JkZXIgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIpXFxuIFxcdFxcdHJldHVybiBwZm47XFxuIFxcbiBcXHQvKlxcbkBAIC0yNzcwLDkgKzI4MDIsOCBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IGhpZ2hlc3Rfem9uZWlkeCxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipjYXB0dXJlKVxcbitcXHRcXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbiB7XFxuLVxcdGVudW0gY29tcGFjdF9yZXN1bHQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xcbiBcXHRcXHQub3JkZXIgPSBvcmRlcixcXG4gXFx0XFx0LnNlYXJjaF9vcmRlciA9IG9yZGVyLFxcbkBAIC0yNzg3LDM4ICsyODE4LDggQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuIFxcdFxcdC5pZ25vcmVfc2tpcF9oaW50ID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpLFxcbiBcXHRcXHQuaWdub3JlX2Jsb2NrX3N1aXRhYmxlID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpXFxuIFxcdH07XFxuLVxcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcXG4tXFx0XFx0LmNjID0gXFx1MDAyNmNjLFxcbi1cXHRcXHQucGFnZSA9IE5VTEwsXFxuLVxcdH07XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxcbi1cXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcXG4tXFx0ICogZnJlZXMgYSBwYWdlLlxcbi1cXHQgKi9cXG4tXFx0YmFycmllcigpO1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgXFx1MDAyNmNhcGMpO1xcbi1cXG4tXFx0cmV0ID0gY29tcGFjdF96b25lKFxcdTAwMjZjYywgXFx1MDAyNmNhcGMpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxcbi1cXHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcXG4tXFx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXFxuLVxcdCAqL1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XFxuLVxcdCpjYXB0dXJlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XFxuLVxcdC8qXFxuLVxcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxcbi1cXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxcbi1cXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xcbi1cXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cXG4tXFx0ICovXFxuLVxcdGlmICgqY2FwdHVyZSlcXG4tXFx0XFx0cmV0ID0gQ09NUEFDVF9TVUNDRVNTO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGNvbXBhY3Rfem9uZShcXHUwMDI2Y2MsIGNhcGMpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjgyOCwxMyArMjgyOSwxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXFxuICAqIEBhYzogVGhlIGNvbnRleHQgb2YgY3VycmVudCBhbGxvY2F0aW9uXFxuICAqIEBwcmlvOiBEZXRlcm1pbmVzIGhvdyBoYXJkIGRpcmVjdCBjb21wYWN0aW9uIHNob3VsZCB0cnkgdG8gc3VjY2VlZFxcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcXG4rICogQGNhcGM6IEZyZWUgcGFnZSBjYXB0dXJlIGJ5cGFzc2luZyB0aGUgZnJlZWxpc3RcXG4gICpcXG4gICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IHBhZ2UgY29tcGFjdGlvbi5cXG4gICovXFxuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLVxcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpXFxuK1xcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbiBcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG5AQCAtMjg2MSw4ICsyODYyLDE3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdFdSSVRFX09OQ0UoY2FwYy1cXHUwMDNlem9uZSwgem9uZSk7XFxuK1xcbiBcXHRcXHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxcbi1cXHRcXHRcXHRcXHRhbGxvY19mbGFncywgYWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwdHVyZSk7XFxuK1xcdFxcdFxcdFxcdGFsbG9jX2ZsYWdzLCBhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UoY2FwYy1cXHUwMDNlem9uZSwgTlVMTCk7XFxuK1xcbitcXHRcXHQvKiBTdG9wIGlmIGEgcGFnZSBoYXMgYmVlbiBjYXB0dXJlZCAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGNhcGMtXFx1MDAzZXBhZ2UpKVxcbitcXHRcXHRcXHRzdGF0dXMgPSBDT01QQUNUX1NVQ0NFU1M7XFxuK1xcbiBcXHRcXHRyYyA9IG1heChzdGF0dXMsIHJjKTtcXG4gXFxuIFxcdFxcdC8qIFRoZSBhbGxvY2F0aW9uIHNob3VsZCBzdWNjZWVkLCBzdG9wIGNvbXBhY3RpbmcgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uNWFjYmEzNDcwNjU5ZDkgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtMTA1OSw3ICsxMDU5LDE1IEBAIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbiAgKiBpbW1lZGlhdGVseSB3aGVuIG9uZSBpcyBjcmVhdGVkIGR1cmluZyB0aGUgZnJlZSBwYXRoLlxcbiAgKi9cXG4gc3RydWN0IGNhcHR1cmVfY29udHJvbCB7XFxuLVxcdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjO1xcbitcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4rXFx0aW50IG1pZ3JhdGV0eXBlO1xcbitcXHQvKlxcbitcXHQgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvblxcbitcXHQgKiBvcmRlcjogZGVmcmFnX21vZGUgcHJvbW90ZXMgc3ViLWJsb2NrIGFsbG9jYXRpb25zIHRvXFxuK1xcdCAqIHBhZ2VibG9jay1vcmRlciBjb21wYWN0aW9uOyBjYXB0dXJlIHN0aWxsIG1hdGNoZXMgYXQgdGhlXFxuK1xcdCAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuXFxuK1xcdCAqL1xcbitcXHRpbnQgb3JkZXI7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggZWU5MDJhNDY4YzJmNWIuLmY5MjA1NTgyN2FlOTU4IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC03MjEsMTQgKzcyMSwxNCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFx0cmV0dXJuIHVubGlrZWx5KGNhcGMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LVEhSRUFEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhY2FwYy1cXHUwMDNlcGFnZSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRjYXBjLVxcdTAwM2VjYy1cXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XFxuK1xcdFxcdGNhcGMtXFx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcXG4gY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcXG4ge1xcbi1cXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW9yZGVyKVxcbitcXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cXHUwMDNlb3JkZXIpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovXFxuQEAgLTc0NCwxMiArNzQ0LDEyIEBAIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0ICogaGF2ZSB0cm91YmxlIGZpbmRpbmcgYSBoaWdoLW9yZGVyIGZyZWUgcGFnZS5cXG4gXFx0ICovXFxuIFxcdGlmIChvcmRlciBcXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcXHUwMDI2XFx1MDAyNiBtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGNhcGMtXFx1MDAzZWNjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdCAgICBjYXBjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChtaWdyYXRldHlwZSAhPSBjYXBjLVxcdTAwM2VjYy1cXHUwMDNlbWlncmF0ZXR5cGUpXFxuLVxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVxcdTAwM2VjYy1cXHUwMDNlb3JkZXIsIG9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XFxuK1xcdGlmIChtaWdyYXRldHlwZSAhPSBjYXBjLVxcdTAwM2VtaWdyYXRldHlwZSlcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXFx1MDAzZW9yZGVyLCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNhcGMtXFx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XFxuIFxcbiBcXHRjYXBjLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuQEAgLTQxNDYsMTggKzQxNDYsNjcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XFxuK1xcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcXG4rXFx0XFx0LnpvbmUgPSBOVUxMLFxcbitcXHRcXHQubWlncmF0ZXR5cGUgPSBhYy1cXHUwMDNlbWlncmF0ZXR5cGUsXFxuK1xcdFxcdC5vcmRlciA9IG9yZGVyLFxcbitcXHRcXHQucGFnZSA9IE5VTEwsXFxuK1xcdH07XFxuK1xcdGludCBjb21wYWN0X29yZGVyID0gb3JkZXI7XFxuIFxcbi1cXHRpZiAoIW9yZGVyKVxcbitcXHQvKlxcbitcXHQgKiBJZiBmYWxsYmFja3MgYXJlIG5vdCBwZXJtaXR0ZWQgKGRlZnJhZ19tb2RlKSwgd2UgZWl0aGVyXFxuK1xcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXFxuK1xcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cXG4rXFx0ICpcXG4rXFx0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxcbitcXHQgKiBibG9ja3MsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgTFJVIHBhZ2VzIGxpdmUuIFNvIHRoaXNcXG4rXFx0ICogd29ya3MgZm9yIG1vdmFibGUgcmVxdWVzdHMsIGJ1dCBub3QgZm9yIG90aGVycy5cXG4rXFx0ICpcXG4rXFx0ICogRm9yIHRob3NlLCBwcm9tb3RlIHRoZSBvcmRlciB0byBoZWxwIG1ha2UgYmxvY2tzLCBpbnN0ZWFkXFxuK1xcdCAqIG9mIHNwaW5uaW5nIGluIHJlY2xhaW0gYWxvbmUgdW5wcm9kdWN0aXZlbHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXFx1MDAyNlxcdTAwMjYgYWMtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0XFx0Y29tcGFjdF9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcXG4rXFxuK1xcdGlmICghY29tcGFjdF9vcmRlcilcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuIFxcdGRlbGF5YWNjdF9jb21wYWN0X3N0YXJ0KCk7XFxuK1xcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XFxuIFxcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcXG4gXFxuLVxcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwcmlvLCBcXHUwMDI2cGFnZSk7XFxuK1xcdC8qXFxuK1xcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXFxuK1xcdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxcbitcXHQgKiBmcmVlcyBhIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHRiYXJyaWVyKCk7XFxuK1xcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sLCBcXHUwMDI2Y2FwYyk7XFxuK1xcbitcXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXFx1MDAyNmNhcGMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxcbitcXHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcXG4rXFx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXFxuK1xcdCAqL1xcbitcXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XFxuK1xcdHBhZ2UgPSBSRUFEX09OQ0UoY2FwYy5wYWdlKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxcbitcXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxcbitcXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xcbitcXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChwYWdlKVxcbitcXHRcXHQqY29tcGFjdF9yZXN1bHQgPSBDT01QQUNUX1NVQ0NFU1M7XFxuIFxcbiBcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7XFxuK1xcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XFxuIFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4gXFx0ZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7XFxuIFxcbkBAIC00MTgyLDcgKzQyMzEsNyBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xcbiBcXG4gXFx0XFx0em9uZS1cXHUwMDNlY29tcGFjdF9ibG9ja3NraXBfZmx1c2ggPSBmYWxzZTtcXG4tXFx0XFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBvcmRlciwgdHJ1ZSk7XFxuK1xcdFxcdGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgY29tcGFjdF9vcmRlciwgdHJ1ZSk7XFxuIFxcdFxcdGNvdW50X3ZtX2V2ZW50KENPTVBBQ1RTVUNDRVNTKTtcXG4gXFx0XFx0cmV0dXJuIHBhZ2U7XFxuIFxcdH1cXG5AQCAtNDQyMiw5ICs0NDcxLDE0IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4gXFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XFxuK1xcdGludCByZWNsYWltX29yZGVyID0gb3JkZXI7XFxuK1xcbitcXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xcbitcXHRpZiAoKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXFx1MDAyNlxcdTAwMjYgYWMtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0XFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcXG4gXFxuIFxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4tXFx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XFxuK1xcdCpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCByZWNsYWltX29yZGVyLCBhYyk7XFxuIFxcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE2OjM2Ljk3MjQyODIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIwMTAzMDQ4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltXCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiZmFzdF9maW5kX21pZ3JhdGVibG9ja1wiLFxuICAgIFwic3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBkaXJlY3QgcmVjbGFpbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBgY2FwdHVyZV9jb250cm9sYCBpcyBoYW5kbGVkIGFuZCBob3cgYWxsb2NhdGlvbiBvcmRlcnMgYXJlIHByb21vdGVkIGZvciBub24tbW92YWJsZSBhbGxvY2F0aW9ucyB3aXRoIGBBTExPQ19OT0ZSQUdNRU5UYC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdHJpZ2dlcmVkIGJ5IGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgdW5kZXIgbWVtb3J5IGZyYWdtZW50YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzFiYzdmZDFmNTYxYjFkNjFjN2E1Yzc1NjRkY2Q4OWQ1MzhmODE0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE2OjE2OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuaW5kZXggZjI5ZWYwNjUzNTQ2ZWQuLjY2YTJmNzBlOWUwMTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5AQCAtNTgsNiArNTgsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHtcbiB9O1xuIFxuIHN0cnVjdCBhbGxvY19jb250ZXh0OyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXG4rc3RydWN0IGNhcHR1cmVfY29udHJvbDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuIFxuIC8qXG4gICogTnVtYmVyIG9mIGZyZWUgb3JkZXItMCBwYWdlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYWJvdmUgZ2l2ZW4gd2F0ZXJtYXJrXG5AQCAtOTIsNyArOTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0XHRjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuLVx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2UpO1xuK1x0XHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKTtcbiBleHRlcm4gdm9pZCByZXNldF9pc29sYXRpb25fc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdCk7XG4gZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcmssIGludCBoaWdoZXN0X3pvbmVpZHgpO1xuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggZjA4NzY1YWRlMDE0Y2UuLjk3N2UzMGIzYTJiZDE2IDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC0xMzgxLDEyICsxMzgxLDQ0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4gXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKChjYy1cdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpIHx8ICFjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbilcbitcdC8qXG4rXHQgKiBCYWNrZ3JvdW5kIGNvbXBhY3Rpb24gcHJvZHVjZXMgYmxvY2tzIGZvciB0aGUgem9uZSBhdFxuK1x0ICogbGFyZ2UsIHdpdGggbm8gcGFydGljdWxhciBhbGxvY2F0aW9uIGNvbnRleHQuIEFsbG93IGFsbFxuK1x0ICogYmxvY2sgdHlwZXMsIGluY2x1ZGluZyBDTUEuXG4rXHQgKi9cbitcdGlmICghY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xuIFxuLVx0aWYgKGNjLVx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSlcbitcdC8qXG4rXHQgKiBDTUEgcGFnZXMgY2FuIG9ubHkgYmUgdGFrZW4gYnkgQUxMT0NfQ01BIHJlcXVlc3RzLiBGb3IgYW55Ym9keVxuK1x0ICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyXG4rXHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cbitcdCAqL1xuK1x0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFBlciBkZWZhdWx0LCBzY2FucyBhcmUgcmVzdHJpY3RlZCB0byBibG9ja3MgY29tcGF0aWJsZSB3aXRoXG4rXHQgKiB0aGUgcmVxdWVzdCwgdG8gcHJldmVudCBjcm9zcy1jb250YW1pbmF0aW9uLiBPbmNlXG4rXHQgKiBjb21wYWN0aW9uIHByaW9yaXR5IGVzY2FsYXRlcyB0byBzeW5jaHJvbm91cyBzY2FucywgdGhvdWdoLFxuK1x0ICogc2NhbiBhbGwgYmxvY2tzIHRvIHRyeSB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuIEZvclxuK1x0ICogbW92YWJsZSByZXF1ZXN0LCB0aGlzIGxpa2VseSBoZWxwcyBsaXR0bGU6IHRoZXJlIHNob3VsZG4ndFxuK1x0ICogYmUgbWFueSBtaWdyYXRhYmxlIHBhZ2VzIGluc2lkZSBub24tbW92YWJsZSBibG9ja3MgYmVzaWRlc1xuK1x0ICogYWxsb2NhdG9yIGZhbGxiYWNrcy4gRm9yIG5vbi1tb3ZhYmxlIHJlcXVlc3RzLCB0aGlzIGhlbHBzIGFcbitcdCAqIGxvdCwgYXMgdGhleSBjYW4gZmluYWxseSBzY2FuIG1vdmFibGUgYmxvY2tzLlxuK1x0ICovXG4rXHRpZiAoY2MtXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBQcmV2ZW50IFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxuK1x0ICogcG9sbHV0aW5nIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uXG4rXHQgKiAoZGlyZWN0bHkgcmVxdWVzdGVkLCBvciBkZWZyYWdfbW9kZSkgaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3JcbitcdCAqIGNsYWltcyBhbmQgY29udmVydHMgdGhlc2UuXG4rXHQgKi9cbitcdGlmIChjYy1cdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgfHwgY2MtXHUwMDNlb3JkZXIgXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpXG4gXHRcdHJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gYmxvY2tfbXQgPT0gY2MtXHUwMDNlbWlncmF0ZXR5cGU7XG5AQCAtMTk3NCwxMiArMjAwNiwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0XHRyZXR1cm4gcGZuO1xuIFxuIFx0Lypcbi1cdCAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG9cbi1cdCAqIHF1aWNrbHkgY2xlYXIgb3V0IGEgTU9WQUJMRSBwYWdlYmxvY2sgZm9yIGFsbG9jYXRpb24uIFRoaXNcbi1cdCAqIHJlZHVjZXMgdGhlIHJpc2sgdGhhdCBhIGxhcmdlIG1vdmFibGUgcGFnZWJsb2NrIGlzIGZyZWVkIGZvclxuLVx0ICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uXG4rXHQgKiBQcmV2ZW50IFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxuK1x0ICogcG9sbHV0aW5nIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uXG4rXHQgKiBpcyBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuIFx0ICovXG4tXHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdGlmIChjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcdTAwMjZcdTAwMjYgY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNjLVx1MDAzZW9yZGVyIFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIpXG4gXHRcdHJldHVybiBwZm47XG4gXG4gXHQvKlxuQEAgLTI3NzAsOSArMjgwMiw4IEBAIGNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBoaWdoZXN0X3pvbmVpZHgsXG4tXHRcdHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbitcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiB7XG4tXHRlbnVtIGNvbXBhY3RfcmVzdWx0IHJldDtcbiBcdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7XG4gXHRcdC5vcmRlciA9IG9yZGVyLFxuIFx0XHQuc2VhcmNoX29yZGVyID0gb3JkZXIsXG5AQCAtMjc4NywzOCArMjgxOCw4IEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHQuaWdub3JlX3NraXBfaGludCA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKSxcbiBcdFx0Lmlnbm9yZV9ibG9ja19zdWl0YWJsZSA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKVxuIFx0fTtcbi1cdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcbi1cdFx0LmNjID0gXHUwMDI2Y2MsXG4tXHRcdC5wYWdlID0gTlVMTCxcbi1cdH07XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcbi1cdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxuLVx0ICogZnJlZXMgYSBwYWdlLlxuLVx0ICovXG4tXHRiYXJyaWVyKCk7XG4tXHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlY2FwdHVyZV9jb250cm9sLCBcdTAwMjZjYXBjKTtcbi1cbi1cdHJldCA9IGNvbXBhY3Rfem9uZShcdTAwMjZjYywgXHUwMDI2Y2FwYyk7XG4tXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuLVx0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4tXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbi1cdCAqL1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4tXHQqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuLVx0Lypcbi1cdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxuLVx0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbi1cdCAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nXG4tXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cbi1cdCAqL1xuLVx0aWYgKCpjYXB0dXJlKVxuLVx0XHRyZXQgPSBDT01QQUNUX1NVQ0NFU1M7XG4tXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIGNvbXBhY3Rfem9uZShcdTAwMjZjYywgY2FwYyk7XG4gfVxuIFxuIC8qKlxuQEAgLTI4MjgsMTMgKzI4MjksMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb25cbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcbisgKiBAY2FwYzogRnJlZSBwYWdlIGNhcHR1cmUgYnlwYXNzaW5nIHRoZSBmcmVlbGlzdFxuICAqXG4gICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IHBhZ2UgY29tcGFjdGlvbi5cbiAgKi9cbiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuLVx0XHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IHBhZ2UgKipjYXB0dXJlKVxuK1x0XHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiB7XG4gXHRzdHJ1Y3Qgem9uZXJlZiAqejtcbiBcdHN0cnVjdCB6b25lICp6b25lO1xuQEAgLTI4NjEsOCArMjg2MiwxNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0V1JJVEVfT05DRShjYXBjLVx1MDAzZXpvbmUsIHpvbmUpO1xuK1xuIFx0XHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxuLVx0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwdHVyZSk7XG4rXHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcbitcbitcdFx0V1JJVEVfT05DRShjYXBjLVx1MDAzZXpvbmUsIE5VTEwpO1xuK1xuK1x0XHQvKiBTdG9wIGlmIGEgcGFnZSBoYXMgYmVlbiBjYXB0dXJlZCAqL1xuK1x0XHRpZiAoUkVBRF9PTkNFKGNhcGMtXHUwMDNlcGFnZSkpXG4rXHRcdFx0c3RhdHVzID0gQ09NUEFDVF9TVUNDRVNTO1xuK1xuIFx0XHRyYyA9IG1heChzdGF0dXMsIHJjKTtcbiBcbiBcdFx0LyogVGhlIGFsbG9jYXRpb24gc2hvdWxkIHN1Y2NlZWQsIHN0b3AgY29tcGFjdGluZyAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uNWFjYmEzNDcwNjU5ZDkgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTA1OSw3ICsxMDU5LDE1IEBAIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xuICAqIGltbWVkaWF0ZWx5IHdoZW4gb25lIGlzIGNyZWF0ZWQgZHVyaW5nIHRoZSBmcmVlIHBhdGguXG4gICovXG4gc3RydWN0IGNhcHR1cmVfY29udHJvbCB7XG4tXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYztcbitcdHN0cnVjdCB6b25lICp6b25lO1xuK1x0aW50IG1pZ3JhdGV0eXBlO1xuK1x0LypcbitcdCAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uXG4rXHQgKiBvcmRlcjogZGVmcmFnX21vZGUgcHJvbW90ZXMgc3ViLWJsb2NrIGFsbG9jYXRpb25zIHRvXG4rXHQgKiBwYWdlYmxvY2stb3JkZXIgY29tcGFjdGlvbjsgY2FwdHVyZSBzdGlsbCBtYXRjaGVzIGF0IHRoZVxuK1x0ICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC5cbitcdCAqL1xuK1x0aW50IG9yZGVyO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi5mOTIwNTU4MjdhZTk1OCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNzIxLDE0ICs3MjEsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpXG4gXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4gXHRcdCEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCFjYXBjLVx1MDAzZXBhZ2UgXHUwMDI2XHUwMDI2XG4tXHRcdGNhcGMtXHUwMDNlY2MtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG4rXHRcdGNhcGMtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4ge1xuLVx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIpXG4rXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbkBAIC03NDQsMTIgKzc0NCwxMiBAQCBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiBoYXZlIHRyb3VibGUgZmluZGluZyBhIGhpZ2gtb3JkZXIgZnJlZSBwYWdlLlxuIFx0ICovXG4gXHRpZiAob3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcdTAwMjZcdTAwMjYgbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuK1x0ICAgIGNhcGMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cdTAwM2VjYy1cdTAwM2VtaWdyYXRldHlwZSlcbi1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIsIG9yZGVyLFxuLVx0XHRcdFx0XHQgICAgY2FwYy1cdTAwM2VjYy1cdTAwM2VtaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpO1xuK1x0aWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtXHUwMDNlbWlncmF0ZXR5cGUpXG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZW9yZGVyLCBvcmRlcixcbitcdFx0XHRcdFx0ICAgIGNhcGMtXHUwMDNlbWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTtcbiBcbiBcdGNhcGMtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC00MTQ2LDE4ICs0MTQ2LDY3IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0dW5zaWduZWQgaW50IG5vcmVjbGFpbV9mbGFnO1xuK1x0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuK1x0XHQuem9uZSA9IE5VTEwsXG4rXHRcdC5taWdyYXRldHlwZSA9IGFjLVx1MDAzZW1pZ3JhdGV0eXBlLFxuK1x0XHQub3JkZXIgPSBvcmRlcixcbitcdFx0LnBhZ2UgPSBOVUxMLFxuK1x0fTtcbitcdGludCBjb21wYWN0X29yZGVyID0gb3JkZXI7XG4gXG4tXHRpZiAoIW9yZGVyKVxuK1x0LypcbitcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcbitcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG4rXHQgKiBvdXQgYW4gZW50aXJlIGJsb2NrIHRvIGFsbG93IF9fcm1xdWV1ZV9jbGFpbSgpIHRvIGNvbnZlcnQuXG4rXHQgKlxuK1x0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxuK1x0ICogYmxvY2tzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzXG4rXHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxuK1x0ICpcbitcdCAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZFxuK1x0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cbitcdCAqL1xuK1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdFx0Y29tcGFjdF9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbitcbitcdGlmICghY29tcGFjdF9vcmRlcilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbiBcdGRlbGF5YWNjdF9jb21wYWN0X3N0YXJ0KCk7XG4rXHRmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX21hc2spO1xuIFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuIFxuLVx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG4tXHRcdFx0XHRcdFx0XHRcdHByaW8sIFx1MDAyNnBhZ2UpO1xuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXG4rXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbitcdCAqIGZyZWVzIGEgcGFnZS5cbitcdCAqL1xuK1x0YmFycmllcigpO1xuK1x0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4rXG4rXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXHUwMDI2Y2FwYyk7XG4rXG4rXHQvKlxuK1x0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuK1x0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4rXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4rXHRwYWdlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XG4rXG4rXHQvKlxuK1x0ICogVGVjaG5pY2FsbHksIGl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBjb21wYWN0aW9uIGlzIHNraXBwZWQgYnV0XG4rXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxuK1x0ICogUmV0dXJuaW5nIENPTVBBQ1RfU1VDQ0VTUyBpbiBzdWNoIGNhc2VzIGhlbHBzIGluIHByb3Blcmx5IGFjY291bnRpbmdcbitcdCAqIHRoZSBDT01QQUNUW1NUQUxMfEZBSUxdIHdoZW4gY29tcGFjdGlvbiBpcyBza2lwcGVkLlxuK1x0ICovXG4rXHRpZiAocGFnZSlcbitcdFx0KmNvbXBhY3RfcmVzdWx0ID0gQ09NUEFDVF9TVUNDRVNTO1xuIFxuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuK1x0ZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF9tYXNrKTtcbiBcdHBzaV9tZW1zdGFsbF9sZWF2ZShcdTAwMjZwZmxhZ3MpO1xuIFx0ZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7XG4gXG5AQCAtNDE4Miw3ICs0MjMxLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcbiBcdFx0em9uZS1cdTAwM2Vjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlO1xuLVx0XHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTtcbitcdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBjb21wYWN0X29yZGVyLCB0cnVlKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoQ09NUEFDVFNVQ0NFU1MpO1xuIFx0XHRyZXR1cm4gcGFnZTtcbiBcdH1cbkBAIC00NDIyLDkgKzQ0NzEsMTQgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbitcdGludCByZWNsYWltX29yZGVyID0gb3JkZXI7XG4rXG4rXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xuK1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XG4rXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuIFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6MTY6MzYuOTcyNDI5NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTU3OTUxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gc3Vic3lzdGVtLiBSaWdodCBhd2F5LCBJIHNlZSBpdCB0b3VjaGVzIHNvbWUga2V5IGZpbGVzOiBgbW0vY29tcGFjdGlvbi5jYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGBpbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaGAsIGFuZCBgbW0vaW50ZXJuYWwuaGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIG1hbmFnZWQgZHVyaW5nIGRpcmVjdCBjb21wYWN0aW9uIGFuZCBhcmUgYWxzbyByZS13cml0aW5nIHNvbWUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIG1pZ3JhdGlvbiBzb3VyY2VzIGFuZCB0YXJnZXRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhhbmRsaW5nIGBBTExPQ19OT0ZSQUdNRU5UYCBmbGFncyBhbmQgdGhlIGBwYWdlYmxvY2tfb3JkZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3ZSdyZSBvcHRpbWl6aW5nIGZyYWdtZW50YXRpb24gaGFuZGxpbmcgZm9yIHNwZWNpZmljIGFsbG9jYXRpb24gdHlwZXMgZHVyaW5nIGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltLlwiIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGNoYW5nZXMgYXJlIGFib3V0IHByb21vdGluZyB0aGUgb3JkZXIgdG8gYHBhZ2VibG9ja19vcmRlcmAgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgIGZsYWdzIGR1cmluZyBkaXJlY3QgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW1cblxuTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gTWVtb3J5IGNvbXBhY3Rpb24gaXMgYWJzb2x1dGVseSBhIGNvcmUgZmVhdHVyZSwgdHJpZ2dlcmVkIHdoZW4gaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoaXQgZnJhZ21lbnRhdGlvbiB3YWxscy4gVGhpcyBpc24ndCBzb21lIG5pY2hlIGNvcm5lciBjYXNlOyBpdCdzIGEgY3JpdGljYWwgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSBwcmVzc3VyZS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IHJlYWNoYWJsZS5cblxuTm93LCBteSBtaW5kIGp1bXBzIHRvIGZ1enppbmcgdGFyZ2V0cy4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpbXBhY3RzIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgYml0cyBvZiBsb2dpYyBJIG5lZWQgdG8gZm9jdXMgb246XG4tICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgXG4tICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgXG4tICAgYGNvbXBhY3Rfem9uZV9vcmRlcmBcbi0gICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgXG4tICAgYGNvbXBhY3Rpb25fY2FwdHVyZWBcbi0gICBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGBcbi0gICBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWBcblxuTG9va3MgbGlrZSBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGguIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgY29tcGFjdGlvbi4gYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgYXJlIHVzZWQgZHVyaW5nIHRoZSBhY3R1YWwgY29tcGFjdGlvbi5cblxuRmluYWxseSwgYXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IENvbXBhY3Rpb24sIHRoYW5rZnVsbHksIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19DT01QQUNUSU9OYC4gTGV0J3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBpbiBgbW0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCdsbCBiZSBhIGtleSBwcmUtcmVxdWlzaXRlIGZvciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzcyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6MTY6NDMuOTMwMzgzMDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzc2MTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NjQyPWNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTMtIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxcbm1tL0tjb25maWc6NjU0OmNvbmZpZyBDT01QQUNUSU9OXFxubW0vS2NvbmZpZy02NTUtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNjo0NC4yNTQxNTQ1OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI0NzkwMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IENvbXBhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGaXJzdCwgdGhlIG9idmlvdXM6IEkgbmVlZCB0byB2ZXJpZnkgaWYgYENPTkZJR19DT01QQUNUSU9OYCBpcyBlbmFibGVkLCBhcyB0aGF0J3MgY2xlYXJseSB0aGUgcHJpbWFyeSBzd2l0Y2ggZm9yIHRoZSBlbnRpcmUgY29tcGFjdGlvbiBtZWNoYW5pc20uIEFuZCBzaW5jZSBjb21wYWN0aW9uIGZyZXF1ZW50bHkgaW52b2x2ZXMgbW92aW5nIHBhZ2VzIGFyb3VuZCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGlzIGFsc28gZW5hYmxlZCwgYXMgbWlncmF0aW9uIGlzIHR5cGljYWxseSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHByb2Nlc3MuXG5cbk5vdywgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGJvdGggYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBmaWxlcyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQgYXdheSwgSSBrbm93IGBtbS9jb21wYWN0aW9uLmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIG9ubHkgaWYgYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbmVkLCB3aGljaCByZWluZm9yY2VzIHRoZSBpbml0aWFsIGFzc3VtcHRpb24uIEJhc2VkIG9uIHRoaXMsIEkgd291bGQgZ3Vlc3MgdGhpcyBwYXRjaCBkZXBlbmRzIHNvbGVseSBvbiBgQ09ORklHX0NPTVBBQ1RJT05gIGFuZCBgQ09ORklHX01JR1JBVElPTmAsIHdpdGggYENPTkZJR19DT01QQUNUSU9OYCBiZWluZyBlc3NlbnRpYWwgZm9yIHRoaXMgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE2OjQ4LjI3ODk0NjQ0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTYxNDY3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfQ09NUEFDVElPTlxcXFwpLipjb21wYWN0aW9uXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNjo0OC4zNDA1Njk2MzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODMxNjA2NTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGl0LiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBhcyBhbiBleHBlcnQ6XG5cbioqQ29tcGFjdGlvbiBpbiBgbW0vTWFrZWZpbGVgIOKAkyBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHRoZSBjb21wYWN0aW9uIHByb2Nlc3MgaXMgYmVpbmcgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBidWlsZCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIGJ5IGV4dGVuc2lvbiwgYW55IGNvbXBhY3Rpb24gcm91dGluZXMgb3IgcmVsYXRlZCBsb2dpYy4gQSBxdWljayBzY2FuIHRoZXJlIGNhbiBvZnRlbiByZXZlYWwgaWYgY29tcGFjdGlvbiBpcyBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgY29tcGlsZS10aW1lIGZsYWdzIEkgbmVlZCB0byBjb25zaWRlci4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgSSdtIG5vdCBnb2luZyB0byBzcGluIG15IHdoZWVscyBkaWdnaW5nIHRocm91Z2ggc291cmNlIGNvZGUgaWYgdGhlIE1ha2VmaWxlIGlzbid0IGV2ZW4gY29uZmlndXJlZCB0byBpbmNsdWRlIHRoZSBwYXJ0cyB0aGF0IEkgbmVlZCB0byBhbmFseXplLiBHb3R0YSBlc3RhYmxpc2ggbXkgYmFzZWxpbmUsIGtub3cgd2hhdCB0b29scyB0aGUgYnVpbGQgdXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE3OjQ2LjY1NjYzNjcxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY3NzM0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvblxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTUtXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU2OlxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Ny1cXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNzo0Ni45NTM0MTQ3NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgwNjQ1NjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIENvbXBhY3Rpb24ncyBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgY29tcGFjdGlvbi5vYC4gSXMgaXQgKmFsd2F5cyogYnVpbHQgaW50byB0aGUga2VybmVsLCBvciBpcyBpdCBjb25kaXRpb25hbD8gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzOiB3aGF0IGFyZSB0aGUgYnVpbGQgb3B0aW9ucyBhdCBwbGF5PyBJdCdzIGEga2V5IHF1ZXN0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLlxuXG5UaGUgcmVmbGV4IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9jb21wYWN0aW9uLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdXNlZCB3aXRoIGEgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSBxdWlja2VzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIGNvbXBhY3Rpb24gaXMgYnVpbHQtaW4gb3IgaWYgaXQncyBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoaXMgd2lsbCBkaXJlY3RseSBkaWN0YXRlIHdoZXRoZXIgaXQncyBhbHdheXMgcGFydCBvZiBteSBrZXJuZWwgb3Igc29tZXRoaW5nIEkgY2FuIGVuYWJsZSBvciBkaXNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6MTg6MTYuNzU5ODczNDQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxNTQzODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19DT01QQUNUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmMtMjgtXFxubW0vY29tcGFjdGlvbi5jOjI5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0zMC0vKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTYxLVxcbm1tL2NvbXBhY3Rpb24uYzo2MjojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9jb21wYWN0aW9uLmMtNjMtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9OTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZV9mcmVlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZXBhZ2VzKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTExNS1cXG5tbS9jb21wYWN0aW9uLmM6MTE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMTctXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NDkwPXN0YXRpYyBib29sIHRlc3RfYW5kX3NldF9za2lwKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy00OTMtfVxcbm1tL2NvbXBhY3Rpb24uYzo0OTQ6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vY29tcGFjdGlvbi5jLTQ5NS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xMzM3PWlzb2xhdGVfbWlncmF0ZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMzcyLVxcbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTEzNzUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzM2Mz1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXFxubW0vY29tcGFjdGlvbi5jLTMzNjQtXFxubW0vY29tcGFjdGlvbi5jOjMzNjU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE4OjE3LjgzMTQyMjE2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjAxNDg2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3Vzc2luZyBGdXp6aW5nIEVmZm9ydHMgZm9yIE1lbW9yeSBDb21wYWN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGtleSBhcmVhIHRvIHRhcmdldCBoZXJlIGlzIGRlZmluaXRlbHkgYENPTkZJR19DT01QQUNUSU9OYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIE5vdywgdG8gbWFrZSB0aGUgbW9zdCBvZiBmdXp6aW5nLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byByZXZlYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgLCBgY29tcGFjdF96b25lX29yZGVyYCwgYGNvbXBhY3Rpb25fY2FwdHVyZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYW5kIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYC5cblxuYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgbG9vayBsaWtlIHN0cm9uZyBjYW5kaWRhdGVzIHRvIHN0YXJ0IHdpdGguIFRoZXkncmUgcmlnaHQgdGhlcmUsIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCByZWNsYWltaW5nLCB3aGljaCBpcyBvZnRlbiB3aGVyZSBzdWJ0bGUgaXNzdWVzIGFyaXNlLiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGFsc28gc2VlbXMgcHJvbWlzaW5nLCBpdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUgYWN0dWFsIHdvcmsgaGFwcGVucy4gTm93LCBgY29tcGFjdGlvbl9jYXB0dXJlYC4uLiBobW0sIEkgcmVjYWxsIGl0IGJlaW5nIHJlbGF0ZWQgdG8gYHRhc2tfY2FwY2AsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgZnJvbSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBUaW1lIHRvIGRpZyBpbnRvIGBjb21wYWN0aW9uX2NhcHR1cmVgIGEgYml0IGRlZXBlciwgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxODoyMi40MzI5MTE4NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDg2NTQzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvbl9jYXB0dXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NzI3PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm1tL3BhZ2VfYWxsb2MuYzo3Mjg6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjktXFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzY0PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm1tL3BhZ2VfYWxsb2MuYzo3NjU6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy03NjYtXFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9OTM2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfb25lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtOTU4LVxcbm1tL3BhZ2VfYWxsb2MuYzo5NTk6XFx0XFx0aWYgKGNvbXBhY3Rpb25fY2FwdHVyZShjYXBjLCBwYWdlLCBvcmRlciwgbWlncmF0ZXR5cGUpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTk2MC1cXHRcXHRcXHRhY2NvdW50X2ZyZWVwYWdlcyh6b25lLCAtKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpLCBtaWdyYXRldHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE4OjIzLjU0MTU3NDEzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU4OTAzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBIb3RzcG90cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gbWVtb3J5IGFsbG9jYXRpb24gcGVyZm9ybWFuY2UsIGFuZCBpdCdzIGNsZWFyIHRoYXQgYF9fZnJlZV9vbmVfcGFnZWAgaXMgYSBzZXJpb3VzIGJvdHRsZW5lY2sg4oCTIGEgcmVhbCBob3QgcGF0aC4gV2UgbmVlZCB0byB0cmVhZCBjYXJlZnVsbHkgYXJvdW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdCB0b28gZnJlcXVlbnRseS4gQ29uc2lkZXJpbmcgdGhhdCwgSSdtIHRoaW5raW5nIHdlIHNob3VsZCBzdGVlciBjbGVhciBvZiBmb2N1c2luZyBvbiBgY29tcGFjdGlvbl9jYXB0dXJlYCBhcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBvcHRpbWl6YXRpb24gcmlnaHQgbm93OyBpdCBjb3VsZCBiZSB0b28gaW50ZXJ0d2luZWQgd2l0aCBgX19mcmVlX29uZV9wYWdlYCBhbmQgZXhhY2VyYmF0ZSBhbnkgaXNzdWVzLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgcHJlc2VudCBhIGRpZmZlcmVudCBvcHBvcnR1bml0eS4gVGhlc2UgYXJlIGtub3duIGFzIHNsb3dlciBhbGxvY2F0aW9uIHBhdGhzLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBXZSBhbHNvIGhhdmUgYHRyeV90b19jb21wYWN0X3BhZ2VzYCB3aGljaCBpcyBhbm90aGVyIHNsb3cgcGF0aCwgYnkgZGVmaW5pdGlvbi4gU2ltaWxhcmx5LCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgYW5kIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhcmUgcGFydCBvZiB0aGUgY29tcGFjdGlvbiBwcm9jZXNzLCBhIHJlbGF0aXZlbHkgc2xvdyBhcmVhIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBhbGxvYy9mcmVlIG9wZXJhdGlvbnMuXG5cbkdpdmVuIHRoZSBvcHRpb25zLCBsZXQncyBkcmlsbCBkb3duIGludG8gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuIFRoZXkncmUgcHJvYmFibHkgd2hlcmUgd2UgY2FuIGdldCB0aGUgbW9zdCBzaWduaWZpY2FudCBnYWlucyBieSBvcHRpbWl6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQ0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE4OjI4LjAwMDQ3OTg1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1NjQ1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTQxNDE9c3RhdGljIHN0cnVjdCBwYWdlICpcXG5tbS9wYWdlX2FsbG9jLmM6NDE0MjpfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTQxNDMtXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDMxOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcXG5tbS9wYWdlX2FsbG9jLmM6NDMxOTpfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTQzMjAtXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDQ2Nz1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDQ3NS1cXG5tbS9wYWdlX2FsbG9jLmM6NDQ3NjpcXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYy00NDc3LVxcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ3Nzk9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ5MzYtXFx0LyogVHJ5IGRpcmVjdCBjb21wYWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRpbmcgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDkzNzpcXHRwYWdlID0gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyxcXG5tbS9wYWdlX2FsbG9jLmMtNDkzOC1cXHRcXHRcXHRcXHRcXHRjb21wYWN0X3ByaW9yaXR5LCBcXHUwMDI2Y29tcGFjdF9yZXN1bHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxODoyOC4wNTcwNDgzNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkzOTAxNTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBhcmVhcy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHByb2Nlc3MgemVyb2VzIGluIG9uIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYHRyeV90b19jb21wYWN0X3BhZ2VzYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gdGhlIGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBkZXBlbmRlbmNpZXMg4oCTIGlzIGBDT05GSUdfQ09NUEFDVElPTmAgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eT8gQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0LCB5ZXMsIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdGhlIHByaW1hcnkgZW5hYmxlci4gR29vZC4gTm8gb3RoZXIgY3JpdGljYWwgY29uZmlnIG9wdGlvbnMgYmVzaWRlcyBgQUxMT0NfTk9GUkFHTUVOVGAgKHdoaWNoIGlzIGEgZmxhZykgYW5kIGBNSUdSQVRFX01PVkFCTEVgLCB3aGljaCBzZWVtcyB0byBiZSBhIG1pZ3JhdGV0eXBlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucy4gSXQgc2VlbXMgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGdldHMgdHdlYWtlZCB0byBpbmZsdWVuY2UgdGhlIGFsbG9jYXRpb24gb3JkZXIgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHVzaW5nIGBBTExPQ19OT0ZSQUdNRU5UYC4gIEFsc28sIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBzZWVzIGEgbW9kaWZpY2F0aW9uLCBvcmRlciBwcm9tb3Rpb24gYW5kIHRoZSBwcm9wZXIgdXNlIG9mIGBjYXB0dXJlX2NvbnRyb2xgLiBBZGRpdGlvbmFsbHksIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2hpZnRzIGZyb20gdGFraW5nIGBwYWdlICoqYCB0byB0YWtpbmcgYGNhcHR1cmVfY29udHJvbGAuXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHNvIEkgY2hlY2sgaWYgdGhleSBhcmUgc3RhdGljLiBBcyBJIGV4cGVjdGVkLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgIGFuZCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgYXJlIHN0YXRpYywgd2hpbGUgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub24tc3RhdGljIG9yIGV4cG9ydGVkLlxuXG5TbywgZm9yIHRoZSBmdXp6ZXIsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIG9idmlvdXMgdGFyZ2V0cy4gSSBrbm93IHRoaXMgY29kZSBoYW5kbGVzIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMsIHBvdGVudGlhbGx5IHVuZGVyIGZyYWdtZW50ZWQgbWVtb3J5IGNvbmRpdGlvbnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgZG91YmxlLWNoZWNrIHRoYXQgYENPTVBBQ1RJT05gIGlzIGluZGVlZCBzdWZmaWNpZW50LiBBbmQgeWVzLCBpdCBpcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE0LCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxODozNi45OTYwNjY2NDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQwNzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RcIixcbiAgICBcIl9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1cIixcbiAgICBcInRyeV90b19jb21wYWN0X3BhZ2VzXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdFwiLFxuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcImZhc3RfZmluZF9taWdyYXRlYmxvY2tcIixcbiAgICBcInN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSBob3cgYGNhcHR1cmVfY29udHJvbGAgaXMgaGFuZGxlZCBhbmQgaG93IGFsbG9jYXRpb24gb3JkZXJzIGFyZSBwcm9tb3RlZCBmb3Igbm9uLW1vdmFibGUgYWxsb2NhdGlvbnMgd2l0aCBgQUxMT0NfTk9GUkFHTUVOVGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRyaWdnZXJlZCBieSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHVuZGVyIG1lbW9yeSBmcmFnbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6s2t5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 15:54:07 +0000 UTC FinishedAt: 2026-07-23 16:18:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3d5aa4cacc9999594171c96e327110788d0987da", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "3d5aa4cacc9999594171c96e327110788d0987da", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION" ], "series_id": "43c35080-ee60-4281-bb5f-cd20c8aae974" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__alloc_pages_direct_compact", "__alloc_pages_direct_reclaim", "try_to_compact_pages", "fast_find_migrateblock", "suitable_migration_source" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0JiMzNDssCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2NvbXBhY3RfcGFnZXMmIzM0OywKICAgICYjMzQ7ZmFzdF9maW5kX21pZ3JhdGVibG9jayYjMzQ7LAogICAgJiMzNDtzdWl0YWJsZV9taWdyYXRpb25fc291cmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBkaXJlY3QgcmVjbGFpbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBgY2FwdHVyZV9jb250cm9sYCBpcyBoYW5kbGVkIGFuZCBob3cgYWxsb2NhdGlvbiBvcmRlcnMgYXJlIHByb21vdGVkIGZvciBub24tbW92YWJsZSBhbGxvY2F0aW9ucyB3aXRoIGBBTExPQ19OT0ZSQUdNRU5UYC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdHJpZ2dlcmVkIGJ5IGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgdW5kZXIgbWVtb3J5IGZyYWdtZW50YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MWJjN2ZkMWY1NjFiMWQ2MWM3YTVjNzU2NGRjZDg5ZDUzOGY4MTQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6MTY6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuaW5kZXggZjI5ZWYwNjUzNTQ2ZWQuLjY2YTJmNzBlOWUwMTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5AQCAtNTgsNiAmIzQzOzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuJiM0MztzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXG4gXG4gLypcbiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmtcbkBAIC05Miw3ICYjNDM7OTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0XHRjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuLVx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2UpO1xuJiM0MztcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XG4gZXh0ZXJuIHZvaWQgcmVzZXRfaXNvbGF0aW9uX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpO1xuIGV4dGVybiBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGYwODc2NWFkZTAxNGNlLi45NzdlMzBiM2EyYmQxNiAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMTM4MSwxMiAmIzQzOzEzODEsNDQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbiBcdGlmIChwYWdlYmxvY2tfc2tpcF9wZXJzaXN0ZW50KHBhZ2UpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQykgfHwgIWNjLVx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFja2dyb3VuZCBjb21wYWN0aW9uIHByb2R1Y2VzIGJsb2NrcyBmb3IgdGhlIHpvbmUgYXRcbiYjNDM7XHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXG4mIzQzO1x0ICogYmxvY2sgdHlwZXMsIGluY2x1ZGluZyBDTUEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRibG9ja19tdCA9IGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSk7XG4gXG4tXHRpZiAoY2MtXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHlcbiYjNDM7XHQgKiBlbHNlLCB2YWNhdGluZyBhIENNQSBibG9jayBjb25zdW1lcyBmcmVlIHBhZ2VzIHRoZSBjYWxsZXJcbiYjNDM7XHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfbWlncmF0ZV9jbWEoYmxvY2tfbXQpIFx1MDAyNlx1MDAyNiAhKGNjLVx1MDAzZWFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DTUEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBlciBkZWZhdWx0LCBzY2FucyBhcmUgcmVzdHJpY3RlZCB0byBibG9ja3MgY29tcGF0aWJsZSB3aXRoXG4mIzQzO1x0ICogdGhlIHJlcXVlc3QsIHRvIHByZXZlbnQgY3Jvc3MtY29udGFtaW5hdGlvbi4gT25jZVxuJiM0MztcdCAqIGNvbXBhY3Rpb24gcHJpb3JpdHkgZXNjYWxhdGVzIHRvIHN5bmNocm9ub3VzIHNjYW5zLCB0aG91Z2gsXG4mIzQzO1x0ICogc2NhbiBhbGwgYmxvY2tzIHRvIHRyeSB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuIEZvclxuJiM0MztcdCAqIG1vdmFibGUgcmVxdWVzdCwgdGhpcyBsaWtlbHkgaGVscHMgbGl0dGxlOiB0aGVyZSBzaG91bGRuJiMzOTt0XG4mIzQzO1x0ICogYmUgbWFueSBtaWdyYXRhYmxlIHBhZ2VzIGluc2lkZSBub24tbW92YWJsZSBibG9ja3MgYmVzaWRlc1xuJiM0MztcdCAqIGFsbG9jYXRvciBmYWxsYmFja3MuIEZvciBub24tbW92YWJsZSByZXF1ZXN0cywgdGhpcyBoZWxwcyBhXG4mIzQzO1x0ICogbG90LCBhcyB0aGV5IGNhbiBmaW5hbGx5IHNjYW4gbW92YWJsZSBibG9ja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNjLVx1MDAzZW1vZGUgIT0gTUlHUkFURV9BU1lOQylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgXHUwMDNjcGFnZWJsb2NrX29yZGVyIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tXG4mIzQzO1x0ICogcG9sbHV0aW5nIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uXG4mIzQzO1x0ICogKGRpcmVjdGx5IHJlcXVlc3RlZCwgb3IgZGVmcmFnX21vZGUpIGlzIGV4ZW1wdCBhcyB0aGUgYWxsb2NhdG9yXG4mIzQzO1x0ICogY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY2MtXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLVx1MDAzZW9yZGVyIFx1MDAzZT0gcGFnZWJsb2NrX29yZGVyKVxuIFx0XHRyZXR1cm4gaXNfbWlncmF0ZV9tb3ZhYmxlKGJsb2NrX210KTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIGJsb2NrX210ID09IGNjLVx1MDAzZW1pZ3JhdGV0eXBlO1xuQEAgLTE5NzQsMTIgJiM0MzsyMDA2LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG4gXHRcdHJldHVybiBwZm47XG4gXG4gXHQvKlxuLVx0ICogT25seSBhbGxvdyBrY29tcGFjdGQgYW5kIGRpcmVjdCByZXF1ZXN0cyBmb3IgbW92YWJsZSBwYWdlcyB0b1xuLVx0ICogcXVpY2tseSBjbGVhciBvdXQgYSBNT1ZBQkxFIHBhZ2VibG9jayBmb3IgYWxsb2NhdGlvbi4gVGhpc1xuLVx0ICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yXG4tXHQgKiBhbiB1bm1vdmFibGUvcmVjbGFpbWFibGUgc21hbGwgYWxsb2NhdGlvbi5cbiYjNDM7XHQgKiBQcmV2ZW50IFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxuJiM0MztcdCAqIHBvbGx1dGluZyBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvblxuJiM0MztcdCAqIGlzIGV4ZW1wdCBhcyB0aGUgYWxsb2NhdG9yIGNsYWltcyBhbmQgY29udmVydHMgdGhlc2UuXG4gXHQgKi9cbi1cdGlmIChjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcdTAwMjZcdTAwMjYgY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdGlmIChjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcdTAwMjZcdTAwMjYgY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjYy1cdTAwM2VvcmRlciBcdTAwM2MgcGFnZWJsb2NrX29yZGVyKVxuIFx0XHRyZXR1cm4gcGZuO1xuIFxuIFx0LypcbkBAIC0yNzcwLDkgJiM0MzsyODAyLDggQEAgY29tcGFjdF96b25lKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXG4gXHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IGhpZ2hlc3Rfem9uZWlkeCxcbi1cdFx0c3RydWN0IHBhZ2UgKipjYXB0dXJlKVxuJiM0MztcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiB7XG4tXHRlbnVtIGNvbXBhY3RfcmVzdWx0IHJldDtcbiBcdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7XG4gXHRcdC5vcmRlciA9IG9yZGVyLFxuIFx0XHQuc2VhcmNoX29yZGVyID0gb3JkZXIsXG5AQCAtMjc4NywzOCAmIzQzOzI4MTgsOCBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0Lmlnbm9yZV9za2lwX2hpbnQgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSksXG4gXHRcdC5pZ25vcmVfYmxvY2tfc3VpdGFibGUgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSlcbiBcdH07XG4tXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7XG4tXHRcdC5jYyA9IFx1MDAyNmNjLFxuLVx0XHQucGFnZSA9IE5VTEwsXG4tXHR9O1xuIFxuLVx0Lypcbi1cdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXG4tXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbi1cdCAqIGZyZWVzIGEgcGFnZS5cbi1cdCAqL1xuLVx0YmFycmllcigpO1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4tXG4tXHRyZXQgPSBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIFx1MDAyNmNhcGMpO1xuLVxuLVx0Lypcbi1cdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbi1cdCAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZVxuLVx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXG4tXHQgKi9cbi1cdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIE5VTEwpO1xuLVx0KmNhcHR1cmUgPSBSRUFEX09OQ0UoY2FwYy5wYWdlKTtcbi1cdC8qXG4tXHQgKiBUZWNobmljYWxseSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGNvbXBhY3Rpb24gaXMgc2tpcHBlZCBidXRcbi1cdCAqIHRoZSBwYWdlIGlzIHN0aWxsIGNhcHR1cmVkIG91dCBvZiBsdWNrKElSUSBjYW1lIGFuZCBmcmVlZCB0aGUgcGFnZSkuXG4tXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xuLVx0ICogdGhlIENPTVBBQ1RbU1RBTEx8RkFJTF0gd2hlbiBjb21wYWN0aW9uIGlzIHNraXBwZWQuXG4tXHQgKi9cbi1cdGlmICgqY2FwdHVyZSlcbi1cdFx0cmV0ID0gQ09NUEFDVF9TVUNDRVNTO1xuLVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gY29tcGFjdF96b25lKFx1MDAyNmNjLCBjYXBjKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjgyOCwxMyAmIzQzOzI4MjksMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb25cbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcbiYjNDM7ICogQGNhcGM6IEZyZWUgcGFnZSBjYXB0dXJlIGJ5cGFzc2luZyB0aGUgZnJlZWxpc3RcbiAgKlxuICAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBwYWdlIGNvbXBhY3Rpb24uXG4gICovXG4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi1cdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbiYjNDM7XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG5AQCAtMjg2MSw4ICYjNDM7Mjg2MiwxNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY2FwYy1cdTAwM2V6b25lLCB6b25lKTtcbiYjNDM7XG4gXHRcdHN0YXR1cyA9IGNvbXBhY3Rfem9uZV9vcmRlcih6b25lLCBvcmRlciwgZ2ZwX21hc2ssIHByaW8sXG4tXHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXB0dXJlKTtcbiYjNDM7XHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGNhcGMtXHUwMDNlem9uZSwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0LyogU3RvcCBpZiBhIHBhZ2UgaGFzIGJlZW4gY2FwdHVyZWQgKi9cbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UoY2FwYy1cdTAwM2VwYWdlKSlcbiYjNDM7XHRcdFx0c3RhdHVzID0gQ09NUEFDVF9TVUNDRVNTO1xuJiM0MztcbiBcdFx0cmMgPSBtYXgoc3RhdHVzLCByYyk7XG4gXG4gXHRcdC8qIFRoZSBhbGxvY2F0aW9uIHNob3VsZCBzdWNjZWVkLCBzdG9wIGNvbXBhY3RpbmcgKi9cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjVhY2JhMzQ3MDY1OWQ5IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTEwNTksNyAmIzQzOzEwNTksMTUgQEAgc3RydWN0IGNvbXBhY3RfY29udHJvbCB7XG4gICogaW1tZWRpYXRlbHkgd2hlbiBvbmUgaXMgY3JlYXRlZCBkdXJpbmcgdGhlIGZyZWUgcGF0aC5cbiAgKi9cbiBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIHtcbi1cdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjO1xuJiM0MztcdHN0cnVjdCB6b25lICp6b25lO1xuJiM0MztcdGludCBtaWdyYXRldHlwZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uXG4mIzQzO1x0ICogb3JkZXI6IGRlZnJhZ19tb2RlIHByb21vdGVzIHN1Yi1ibG9jayBhbGxvY2F0aW9ucyB0b1xuJiM0MztcdCAqIHBhZ2VibG9jay1vcmRlciBjb21wYWN0aW9uOyBjYXB0dXJlIHN0aWxsIG1hdGNoZXMgYXQgdGhlXG4mIzQzO1x0ICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgb3JkZXI7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggZWU5MDJhNDY4YzJmNWIuLmY5MjA1NTgyN2FlOTU4IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC03MjEsMTQgJiM0Mzs3MjEsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpXG4gXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4gXHRcdCEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCFjYXBjLVx1MDAzZXBhZ2UgXHUwMDI2XHUwMDI2XG4tXHRcdGNhcGMtXHUwMDNlY2MtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG4mIzQzO1x0XHRjYXBjLVx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdCAgIGludCBvcmRlciwgaW50IG1pZ3JhdGV0eXBlKVxuIHtcbi1cdGlmICghY2FwYyB8fCBvcmRlciAhPSBjYXBjLVx1MDAzZWNjLVx1MDAzZW9yZGVyKVxuJiM0MztcdGlmICghY2FwYyB8fCBvcmRlciAhPSBjYXBjLVx1MDAzZW9yZGVyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBEbyBub3QgYWNjaWRlbnRhbGx5IHBvbGx1dGUgQ01BIG9yIGlzb2xhdGVkIHJlZ2lvbnMqL1xuQEAgLTc0NCwxMiAmIzQzOzc0NCwxMiBAQCBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiBoYXZlIHRyb3VibGUgZmluZGluZyBhIGhpZ2gtb3JkZXIgZnJlZSBwYWdlLlxuIFx0ICovXG4gXHRpZiAob3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcdTAwMjZcdTAwMjYgbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdCAgICBjYXBjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUpXG4tXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZWNjLVx1MDAzZW9yZGVyLCBvcmRlcixcbi1cdFx0XHRcdFx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTtcbiYjNDM7XHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cdTAwM2VtaWdyYXRldHlwZSlcbiYjNDM7XHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZW9yZGVyLCBvcmRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICBjYXBjLVx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XG4gXG4gXHRjYXBjLVx1MDAzZXBhZ2UgPSBwYWdlO1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtNDE0NiwxOCAmIzQzOzQxNDYsNjcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XG4mIzQzO1x0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuJiM0MztcdFx0LnpvbmUgPSBOVUxMLFxuJiM0MztcdFx0Lm1pZ3JhdGV0eXBlID0gYWMtXHUwMDNlbWlncmF0ZXR5cGUsXG4mIzQzO1x0XHQub3JkZXIgPSBvcmRlcixcbiYjNDM7XHRcdC5wYWdlID0gTlVMTCxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBjb21wYWN0X29yZGVyID0gb3JkZXI7XG4gXG4tXHRpZiAoIW9yZGVyKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgZmFsbGJhY2tzIGFyZSBub3QgcGVybWl0dGVkIChkZWZyYWdfbW9kZSksIHdlIGVpdGhlclxuJiM0MztcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG4mIzQzO1x0ICogb3V0IGFuIGVudGlyZSBibG9jayB0byBhbGxvdyBfX3JtcXVldWVfY2xhaW0oKSB0byBjb252ZXJ0LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxuJiM0MztcdCAqIGJsb2Nrcywgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgTFJVIHBhZ2VzIGxpdmUuIFNvIHRoaXNcbiYjNDM7XHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRm9yIHRob3NlLCBwcm9tb3RlIHRoZSBvcmRlciB0byBoZWxwIG1ha2UgYmxvY2tzLCBpbnN0ZWFkXG4mIzQzO1x0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdFx0Y29tcGFjdF9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjb21wYWN0X29yZGVyKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuIFx0ZGVsYXlhY2N0X2NvbXBhY3Rfc3RhcnQoKTtcbiYjNDM7XHRmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX21hc2spO1xuIFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuIFxuLVx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG4tXHRcdFx0XHRcdFx0XHRcdHByaW8sIFx1MDAyNnBhZ2UpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcbiYjNDM7XHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbiYjNDM7XHQgKiBmcmVlcyBhIHBhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFycmllcigpO1xuJiM0MztcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wsIFx1MDAyNmNhcGMpO1xuJiM0MztcbiYjNDM7XHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBhbGxvY19mbGFncywgYWMsIHByaW8sIFx1MDAyNmNhcGMpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2Ugc3VyZSB3ZSBoaWRlIGNhcHR1cmUgY29udHJvbCBmaXJzdCBiZWZvcmUgd2UgcmVhZCB0aGUgY2FwdHVyZWRcbiYjNDM7XHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcbiYjNDM7XHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlY2FwdHVyZV9jb250cm9sLCBOVUxMKTtcbiYjNDM7XHRwYWdlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGVjaG5pY2FsbHksIGl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBjb21wYWN0aW9uIGlzIHNraXBwZWQgYnV0XG4mIzQzO1x0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbiYjNDM7XHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xuJiM0MztcdCAqIHRoZSBDT01QQUNUW1NUQUxMfEZBSUxdIHdoZW4gY29tcGFjdGlvbiBpcyBza2lwcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYWdlKVxuJiM0MztcdFx0KmNvbXBhY3RfcmVzdWx0ID0gQ09NUEFDVF9TVUNDRVNTO1xuIFxuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuJiM0MztcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XG4gXHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbiBcdGRlbGF5YWNjdF9jb21wYWN0X2VuZCgpO1xuIFxuQEAgLTQxODIsNyAmIzQzOzQyMzEsNyBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xuIFxuIFx0XHR6b25lLVx1MDAzZWNvbXBhY3RfYmxvY2tza2lwX2ZsdXNoID0gZmFsc2U7XG4tXHRcdGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgb3JkZXIsIHRydWUpO1xuJiM0MztcdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBjb21wYWN0X29yZGVyLCB0cnVlKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoQ09NUEFDVFNVQ0NFU1MpO1xuIFx0XHRyZXR1cm4gcGFnZTtcbiBcdH1cbkBAIC00NDIyLDkgJiM0Mzs0NDcxLDE0IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XG4mIzQzO1x0aW50IHJlY2xhaW1fb3JkZXIgPSBvcmRlcjtcbiYjNDM7XG4mIzQzO1x0LyogTWF0Y2ggdGhlIHNsb3dwYXRoIGNvbXBhY3Rpb24gcHJvbW90aW9uIGluIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QgKi9cbiYjNDM7XHRpZiAoKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuJiM0MztcdFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XG4mIzQzO1x0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIHJlY2xhaW1fb3JkZXIsIGFjKTtcbiBcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDssCiAgICAmIzM0O3N1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzFiYzdmZDFmNTYxYjFkNjFjN2E1Yzc1NjRkY2Q4OWQ1MzhmODE0MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDE2OjE2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaAppbmRleCBmMjllZjA2NTM1NDZlZC4uNjZhMmY3MGU5ZTAxOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oCkBAIC01OCw2ICYjNDM7NTgsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHsKIH07CiAKIHN0cnVjdCBhbGxvY19jb250ZXh0OyAvKiBpbiBtbS9pbnRlcm5hbC5oICovCiYjNDM7c3RydWN0IGNhcHR1cmVfY29udHJvbDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqLwogCiAvKgogICogTnVtYmVyIG9mIGZyZWUgb3JkZXItMCBwYWdlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYWJvdmUgZ2l2ZW4gd2F0ZXJtYXJrCkBAIC05Miw3ICYjNDM7OTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzaywKIAkJdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsCiAJCWNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sCi0JCXN0cnVjdCBwYWdlICoqcGFnZSk7CiYjNDM7CQlzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKTsKIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTsKIGV4dGVybiBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAkJCQl1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7CmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmMKaW5kZXggZjA4NzY1YWRlMDE0Y2UuLjk3N2UzMGIzYTJiZDE2IDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jCkBAIC0xMzgxLDEyICYjNDM7MTM4MSw0NCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLAogCWlmIChwYWdlYmxvY2tfc2tpcF9wZXJzaXN0ZW50KHBhZ2UpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoKGNjLSZndDttb2RlICE9IE1JR1JBVEVfQVNZTkMpIHx8ICFjYy0mZ3Q7ZGlyZWN0X2NvbXBhY3Rpb24pCiYjNDM7CS8qCiYjNDM7CSAqIEJhY2tncm91bmQgY29tcGFjdGlvbiBwcm9kdWNlcyBibG9ja3MgZm9yIHRoZSB6b25lIGF0CiYjNDM7CSAqIGxhcmdlLCB3aXRoIG5vIHBhcnRpY3VsYXIgYWxsb2NhdGlvbiBjb250ZXh0LiBBbGxvdyBhbGwKJiM0MzsJICogYmxvY2sgdHlwZXMsIGluY2x1ZGluZyBDTUEuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWNjLSZndDtkaXJlY3RfY29tcGFjdGlvbikKIAkJcmV0dXJuIHRydWU7CiAKIAlibG9ja19tdCA9IGdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSk7CiAKLQlpZiAoY2MtJmd0O21pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJLyoKJiM0MzsJICogQ01BIHBhZ2VzIGNhbiBvbmx5IGJlIHRha2VuIGJ5IEFMTE9DX0NNQSByZXF1ZXN0cy4gRm9yIGFueWJvZHkKJiM0MzsJICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyCiYjNDM7CSAqIGNvdWxkIGhhdmUgdXNlZCwgYW5kIHByb2R1Y2VzIGZyZWUgcGFnZXMgaXQgY2Fubm90LgomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSAmYW1wOyZhbXA7ICEoY2MtJmd0O2FsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX0NNQSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBlciBkZWZhdWx0LCBzY2FucyBhcmUgcmVzdHJpY3RlZCB0byBibG9ja3MgY29tcGF0aWJsZSB3aXRoCiYjNDM7CSAqIHRoZSByZXF1ZXN0LCB0byBwcmV2ZW50IGNyb3NzLWNvbnRhbWluYXRpb24uIE9uY2UKJiM0MzsJICogY29tcGFjdGlvbiBwcmlvcml0eSBlc2NhbGF0ZXMgdG8gc3luY2hyb25vdXMgc2NhbnMsIHRob3VnaCwKJiM0MzsJICogc2NhbiBhbGwgYmxvY2tzIHRvIHRyeSB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuIEZvcgomIzQzOwkgKiBtb3ZhYmxlIHJlcXVlc3QsIHRoaXMgbGlrZWx5IGhlbHBzIGxpdHRsZTogdGhlcmUgc2hvdWxkbiYjMzk7dAomIzQzOwkgKiBiZSBtYW55IG1pZ3JhdGFibGUgcGFnZXMgaW5zaWRlIG5vbi1tb3ZhYmxlIGJsb2NrcyBiZXNpZGVzCiYjNDM7CSAqIGFsbG9jYXRvciBmYWxsYmFja3MuIEZvciBub24tbW92YWJsZSByZXF1ZXN0cywgdGhpcyBoZWxwcyBhCiYjNDM7CSAqIGxvdCwgYXMgdGhleSBjYW4gZmluYWxseSBzY2FuIG1vdmFibGUgYmxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGNjLSZndDttb2RlICE9IE1JR1JBVEVfQVNZTkMpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCAmbHQ7cGFnZWJsb2NrX29yZGVyIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tCiYjNDM7CSAqIHBvbGx1dGluZyBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvbgomIzQzOwkgKiAoZGlyZWN0bHkgcmVxdWVzdGVkLCBvciBkZWZyYWdfbW9kZSkgaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IKJiM0MzsJICogY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS4KJiM0MzsJICovCiYjNDM7CWlmIChjYy0mZ3Q7bWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLSZndDtvcmRlciAmZ3Q7PSBwYWdlYmxvY2tfb3JkZXIpCiAJCXJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpOwogCWVsc2UKIAkJcmV0dXJuIGJsb2NrX210ID09IGNjLSZndDttaWdyYXRldHlwZTsKQEAgLTE5NzQsMTIgJiM0MzsyMDA2LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiAJCXJldHVybiBwZm47CiAKIAkvKgotCSAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG8KLQkgKiBxdWlja2x5IGNsZWFyIG91dCBhIE1PVkFCTEUgcGFnZWJsb2NrIGZvciBhbGxvY2F0aW9uLiBUaGlzCi0JICogcmVkdWNlcyB0aGUgcmlzayB0aGF0IGEgbGFyZ2UgbW92YWJsZSBwYWdlYmxvY2sgaXMgZnJlZWQgZm9yCi0JICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uCiYjNDM7CSAqIFByZXZlbnQgJmx0O3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbQomIzQzOwkgKiBwb2xsdXRpbmcgbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb24KJiM0MzsJICogaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS4KIAkgKi8KLQlpZiAoY2MtJmd0O2RpcmVjdF9jb21wYWN0aW9uICZhbXA7JmFtcDsgY2MtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJaWYgKGNjLSZndDtkaXJlY3RfY29tcGFjdGlvbiAmYW1wOyZhbXA7IGNjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUgJmFtcDsmYW1wOwomIzQzOwkgICAgY2MtJmd0O29yZGVyICZsdDsgcGFnZWJsb2NrX29yZGVyKQogCQlyZXR1cm4gcGZuOwogCiAJLyoKQEAgLTI3NzAsOSAmIzQzOzI4MDIsOCBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpCiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAkJZ2ZwX3QgZ2ZwX21hc2ssIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLAogCQl1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBoaWdoZXN0X3pvbmVpZHgsCi0JCXN0cnVjdCBwYWdlICoqY2FwdHVyZSkKJiM0MzsJCXN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpCiB7Ci0JZW51bSBjb21wYWN0X3Jlc3VsdCByZXQ7CiAJc3RydWN0IGNvbXBhY3RfY29udHJvbCBjYyA9IHsKIAkJLm9yZGVyID0gb3JkZXIsCiAJCS5zZWFyY2hfb3JkZXIgPSBvcmRlciwKQEAgLTI3ODcsMzggJiM0MzsyODE4LDggQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCiAJCS5pZ25vcmVfc2tpcF9oaW50ID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpLAogCQkuaWdub3JlX2Jsb2NrX3N1aXRhYmxlID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpCiAJfTsKLQlzdHJ1Y3QgY2FwdHVyZV9jb250cm9sIGNhcGMgPSB7Ci0JCS5jYyA9ICZhbXA7Y2MsCi0JCS5wYWdlID0gTlVMTCwKLQl9OwogCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZQotCSAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgotCSAqIGZyZWVzIGEgcGFnZS4KLQkgKi8KLQliYXJyaWVyKCk7Ci0JV1JJVEVfT05DRShjdXJyZW50LSZndDtjYXB0dXJlX2NvbnRyb2wsICZhbXA7Y2FwYyk7Ci0KLQlyZXQgPSBjb21wYWN0X3pvbmUoJmFtcDtjYywgJmFtcDtjYXBjKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZAotCSAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZQotCSAqIGFuZCB3ZSB3b3VsZCBsZWFrIGl0LgotCSAqLwotCVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCBOVUxMKTsKLQkqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpOwotCS8qCi0JICogVGVjaG5pY2FsbHksIGl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBjb21wYWN0aW9uIGlzIHNraXBwZWQgYnV0Ci0JICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS4KLQkgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZwotCSAqIHRoZSBDT01QQUNUW1NUQUxMfEZBSUxdIHdoZW4gY29tcGFjdGlvbiBpcyBza2lwcGVkLgotCSAqLwotCWlmICgqY2FwdHVyZSkKLQkJcmV0ID0gQ09NUEFDVF9TVUNDRVNTOwotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGNvbXBhY3Rfem9uZSgmYW1wO2NjLCBjYXBjKTsKIH0KIAogLyoqCkBAIC0yODI4LDEzICYjNDM7MjgyOSwxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKICAqIEBhbGxvY19mbGFnczogVGhlIGFsbG9jYXRpb24gZmxhZ3Mgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbgogICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb24KICAqIEBwcmlvOiBEZXRlcm1pbmVzIGhvdyBoYXJkIGRpcmVjdCBjb21wYWN0aW9uIHNob3VsZCB0cnkgdG8gc3VjY2VlZAotICogQGNhcHR1cmU6IFBvaW50ZXIgdG8gZnJlZSBwYWdlIGNyZWF0ZWQgYnkgY29tcGFjdGlvbiB3aWxsIGJlIHN0b3JlZCBoZXJlCiYjNDM7ICogQGNhcGM6IEZyZWUgcGFnZSBjYXB0dXJlIGJ5cGFzc2luZyB0aGUgZnJlZWxpc3QKICAqCiAgKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgcGFnZSBjb21wYWN0aW9uLgogICovCiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCXVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLAotCQllbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IHBhZ2UgKipjYXB0dXJlKQomIzQzOwkJZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpCiB7CiAJc3RydWN0IHpvbmVyZWYgKno7CiAJc3RydWN0IHpvbmUgKnpvbmU7CkBAIC0yODYxLDggJiM0MzsyODYyLDE3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCVdSSVRFX09OQ0UoY2FwYy0mZ3Q7em9uZSwgem9uZSk7CiYjNDM7CiAJCXN0YXR1cyA9IGNvbXBhY3Rfem9uZV9vcmRlcih6b25lLCBvcmRlciwgZ2ZwX21hc2ssIHByaW8sCi0JCQkJYWxsb2NfZmxhZ3MsIGFjLSZndDtoaWdoZXN0X3pvbmVpZHgsIGNhcHR1cmUpOwomIzQzOwkJCQlhbGxvY19mbGFncywgYWMtJmd0O2hpZ2hlc3Rfem9uZWlkeCwgY2FwYyk7CiYjNDM7CiYjNDM7CQlXUklURV9PTkNFKGNhcGMtJmd0O3pvbmUsIE5VTEwpOwomIzQzOwomIzQzOwkJLyogU3RvcCBpZiBhIHBhZ2UgaGFzIGJlZW4gY2FwdHVyZWQgKi8KJiM0MzsJCWlmIChSRUFEX09OQ0UoY2FwYy0mZ3Q7cGFnZSkpCiYjNDM7CQkJc3RhdHVzID0gQ09NUEFDVF9TVUNDRVNTOwomIzQzOwogCQlyYyA9IG1heChzdGF0dXMsIHJjKTsKIAogCQkvKiBUaGUgYWxsb2NhdGlvbiBzaG91bGQgc3VjY2VlZCwgc3RvcCBjb21wYWN0aW5nICovCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAxODFlNzlmMWQ2YTIwNy4uNWFjYmEzNDcwNjU5ZDkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTA1OSw3ICYjNDM7MTA1OSwxNSBAQCBzdHJ1Y3QgY29tcGFjdF9jb250cm9sIHsKICAqIGltbWVkaWF0ZWx5IHdoZW4gb25lIGlzIGNyZWF0ZWQgZHVyaW5nIHRoZSBmcmVlIHBhdGguCiAgKi8KIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgewotCXN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjOwomIzQzOwlzdHJ1Y3Qgem9uZSAqem9uZTsKJiM0MzsJaW50IG1pZ3JhdGV0eXBlOwomIzQzOwkvKgomIzQzOwkgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvbgomIzQzOwkgKiBvcmRlcjogZGVmcmFnX21vZGUgcHJvbW90ZXMgc3ViLWJsb2NrIGFsbG9jYXRpb25zIHRvCiYjNDM7CSAqIHBhZ2VibG9jay1vcmRlciBjb21wYWN0aW9uOyBjYXB0dXJlIHN0aWxsIG1hdGNoZXMgYXQgdGhlCiYjNDM7CSAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuCiYjNDM7CSAqLwomIzQzOwlpbnQgb3JkZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggZWU5MDJhNDY4YzJmNWIuLmY5MjA1NTgyN2FlOTU4IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC03MjEsMTQgJiM0Mzs3MjEsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpCiAJcmV0dXJuIHVubGlrZWx5KGNhcGMpICZhbXA7JmFtcDsKIAkJIShjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSAmYW1wOyZhbXA7CiAJCSFjYXBjLSZndDtwYWdlICZhbXA7JmFtcDsKLQkJY2FwYy0mZ3Q7Y2MtJmd0O3pvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMOwomIzQzOwkJY2FwYy0mZ3Q7em9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAogY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSkKIHsKLQlpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy0mZ3Q7Y2MtJmd0O29yZGVyKQomIzQzOwlpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy0mZ3Q7b3JkZXIpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovCkBAIC03NDQsMTIgJiM0Mzs3NDQsMTIgQEAgY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLAogCSAqIGhhdmUgdHJvdWJsZSBmaW5kaW5nIGEgaGlnaC1vcmRlciBmcmVlIHBhZ2UuCiAJICovCiAJaWYgKG9yZGVyICZsdDsgcGFnZWJsb2NrX29yZGVyICZhbXA7JmFtcDsgbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFICZhbXA7JmFtcDsKLQkgICAgY2FwYy0mZ3Q7Y2MtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJICAgIGNhcGMtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtJmd0O2NjLSZndDttaWdyYXRldHlwZSkKLQkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtJmd0O2NjLSZndDtvcmRlciwgb3JkZXIsCi0JCQkJCSAgICBjYXBjLSZndDtjYy0mZ3Q7bWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTsKJiM0MzsJaWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtJmd0O21pZ3JhdGV0eXBlKQomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtJmd0O29yZGVyLCBvcmRlciwKJiM0MzsJCQkJCSAgICBjYXBjLSZndDttaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpOwogCiAJY2FwYy0mZ3Q7cGFnZSA9IHBhZ2U7CiAJcmV0dXJuIHRydWU7CkBAIC00MTQ2LDE4ICYjNDM7NDE0Niw2NyBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCXVuc2lnbmVkIGludCBub3JlY2xhaW1fZmxhZzsKJiM0MzsJc3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0gewomIzQzOwkJLnpvbmUgPSBOVUxMLAomIzQzOwkJLm1pZ3JhdGV0eXBlID0gYWMtJmd0O21pZ3JhdGV0eXBlLAomIzQzOwkJLm9yZGVyID0gb3JkZXIsCiYjNDM7CQkucGFnZSA9IE5VTEwsCiYjNDM7CX07CiYjNDM7CWludCBjb21wYWN0X29yZGVyID0gb3JkZXI7CiAKLQlpZiAoIW9yZGVyKQomIzQzOwkvKgomIzQzOwkgKiBJZiBmYWxsYmFja3MgYXJlIG5vdCBwZXJtaXR0ZWQgKGRlZnJhZ19tb2RlKSwgd2UgZWl0aGVyCiYjNDM7CSAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyCiYjNDM7CSAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC4KJiM0MzsJICoKJiM0MzsJICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZQomIzQzOwkgKiBibG9ja3MsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzCiYjNDM7CSAqIHdvcmtzIGZvciBtb3ZhYmxlIHJlcXVlc3RzLCBidXQgbm90IGZvciBvdGhlcnMuCiYjNDM7CSAqCiYjNDM7CSAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZAomIzQzOwkgKiBvZiBzcGlubmluZyBpbiByZWNsYWltIGFsb25lIHVucHJvZHVjdGl2ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19OT0ZSQUdNRU5UKSAmYW1wOyZhbXA7IGFjLSZndDttaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CQljb21wYWN0X29yZGVyID0gbWF4KG9yZGVyLCBwYWdlYmxvY2tfb3JkZXIpOwomIzQzOwomIzQzOwlpZiAoIWNvbXBhY3Rfb3JkZXIpCiAJCXJldHVybiBOVUxMOwogCiAJcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKIAlkZWxheWFjY3RfY29tcGFjdF9zdGFydCgpOwomIzQzOwlmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX21hc2spOwogCW5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTsKIAotCSpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLAotCQkJCQkJCQlwcmlvLCAmYW1wO3BhZ2UpOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZQomIzQzOwkgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXIKJiM0MzsJICogZnJlZXMgYSBwYWdlLgomIzQzOwkgKi8KJiM0MzsJYmFycmllcigpOwomIzQzOwlXUklURV9PTkNFKGN1cnJlbnQtJmd0O2NhcHR1cmVfY29udHJvbCwgJmFtcDtjYXBjKTsKJiM0MzsKJiM0MzsJKmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIGNvbXBhY3Rfb3JkZXIsCiYjNDM7CQkJCQkgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCAmYW1wO2NhcGMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHN1cmUgd2UgaGlkZSBjYXB0dXJlIGNvbnRyb2wgZmlyc3QgYmVmb3JlIHdlIHJlYWQgdGhlIGNhcHR1cmVkCiYjNDM7CSAqIHBhZ2UgcG9pbnRlciwgb3RoZXJ3aXNlIGFuIGludGVycnVwdCBjb3VsZCBmcmVlIGFuZCBjYXB0dXJlIGEgcGFnZQomIzQzOwkgKiBhbmQgd2Ugd291bGQgbGVhayBpdC4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UoY3VycmVudC0mZ3Q7Y2FwdHVyZV9jb250cm9sLCBOVUxMKTsKJiM0MzsJcGFnZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUZWNobmljYWxseSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGNvbXBhY3Rpb24gaXMgc2tpcHBlZCBidXQKJiM0MzsJICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS4KJiM0MzsJICogUmV0dXJuaW5nIENPTVBBQ1RfU1VDQ0VTUyBpbiBzdWNoIGNhc2VzIGhlbHBzIGluIHByb3Blcmx5IGFjY291bnRpbmcKJiM0MzsJICogdGhlIENPTVBBQ1RbU1RBTEx8RkFJTF0gd2hlbiBjb21wYWN0aW9uIGlzIHNraXBwZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAocGFnZSkKJiM0MzsJCSpjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfU1VDQ0VTUzsKIAogCW1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTsKJiM0MzsJZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF9tYXNrKTsKIAlwc2lfbWVtc3RhbGxfbGVhdmUoJmFtcDtwZmxhZ3MpOwogCWRlbGF5YWNjdF9jb21wYWN0X2VuZCgpOwogCkBAIC00MTgyLDcgJiM0Mzs0MjMxLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAogCQl6b25lLSZndDtjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlOwotCQljb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTsKJiM0MzsJCWNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgY29tcGFjdF9vcmRlciwgdHJ1ZSk7CiAJCWNvdW50X3ZtX2V2ZW50KENPTVBBQ1RTVUNDRVNTKTsKIAkJcmV0dXJuIHBhZ2U7CiAJfQpAQCAtNDQyMiw5ICYjNDM7NDQ3MSwxNCBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGZsYWdzOwogCWJvb2wgZHJhaW5lZCA9IGZhbHNlOwomIzQzOwlpbnQgcmVjbGFpbV9vcmRlciA9IG9yZGVyOwomIzQzOwomIzQzOwkvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqLwomIzQzOwlpZiAoKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX05PRlJBR01FTlQpICZhbXA7JmFtcDsgYWMtJmd0O21pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkKJiM0MzsJCXJlY2xhaW1fb3JkZXIgPSBtYXgob3JkZXIsIHBhZ2VibG9ja19vcmRlcik7CiAKIAlwc2lfbWVtc3RhbGxfZW50ZXIoJmFtcDtwZmxhZ3MpOwotCSpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWMpOwomIzQzOwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpOwogCWlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKQogCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzcyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gc3Vic3lzdGVtLiBSaWdodCBhd2F5LCBJIHNlZSBpdCB0b3VjaGVzIHNvbWUga2V5IGZpbGVzOiBgbW0vY29tcGFjdGlvbi5jYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGBpbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaGAsIGFuZCBgbW0vaW50ZXJuYWwuaGAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIGhvdyBgY2FwdHVyZV9jb250cm9sYCBpcyBtYW5hZ2VkIGR1cmluZyBkaXJlY3QgY29tcGFjdGlvbiBhbmQgYXJlIGFsc28gcmUtd3JpdGluZyBzb21lIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyBtaWdyYXRpb24gc291cmNlcyBhbmQgdGFyZ2V0cywgc3BlY2lmaWNhbGx5IGFyb3VuZCBoYW5kbGluZyBgQUxMT0NfTk9GUkFHTUVOVGAgZmxhZ3MgYW5kIHRoZSBgcGFnZWJsb2NrX29yZGVyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2UmIzM5O3JlIG9wdGltaXppbmcgZnJhZ21lbnRhdGlvbiBoYW5kbGluZyBmb3Igc3BlY2lmaWMgYWxsb2NhdGlvbiB0eXBlcyBkdXJpbmcgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW0uJiMzNDsgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgYWJvdXQgcHJvbW90aW5nIHRoZSBvcmRlciB0byBgcGFnZWJsb2NrX29yZGVyYCBmb3Igbm9uLW1vdmFibGUgYWxsb2NhdGlvbnMgd2l0aCBgQUxMT0NfTk9GUkFHTUVOVGAgZmxhZ3MgZHVyaW5nIGRpcmVjdCBjb21wYWN0aW9uIGFuZCBkaXJlY3QgcmVjbGFpbQoKTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gTWVtb3J5IGNvbXBhY3Rpb24gaXMgYWJzb2x1dGVseSBhIGNvcmUgZmVhdHVyZSwgdHJpZ2dlcmVkIHdoZW4gaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoaXQgZnJhZ21lbnRhdGlvbiB3YWxscy4gVGhpcyBpc24mIzM5O3Qgc29tZSBuaWNoZSBjb3JuZXIgY2FzZTsgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5IHByZXNzdXJlLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgcmVhY2hhYmxlLgoKTm93LCBteSBtaW5kIGp1bXBzIHRvIGZ1enppbmcgdGFyZ2V0cy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIGJpdHMgb2YgbG9naWMgSSBuZWVkIHRvIGZvY3VzIG9uOgotICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgCi0gICBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AKLSAgIGBjb21wYWN0X3pvbmVfb3JkZXJgCi0gICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgCi0gICBgY29tcGFjdGlvbl9jYXB0dXJlYAotICAgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgCi0gICBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAKCkxvb2tzIGxpa2UgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgYXJlIHBhcnQgb2YgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoLiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IGNvbXBhY3Rpb24uIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhbmQgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgIGFyZSB1c2VkIGR1cmluZyB0aGUgYWN0dWFsIGNvbXBhY3Rpb24uCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQ29tcGFjdGlvbiwgdGhhbmtmdWxseSwgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX0NPTVBBQ1RJT05gLiBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBpbiBgbW0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCYjMzk7bGwgYmUgYSBrZXkgcHJlLXJlcXVpc2l0ZSBmb3IgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09NUEFDVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NDI9Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02NTMtIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxubW0vS2NvbmZpZzo2NTQ6Y29uZmlnIENPTVBBQ1RJT05cbm1tL0tjb25maWctNjU1LVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IENvbXBhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZpcnN0LCB0aGUgb2J2aW91czogSSBuZWVkIHRvIHZlcmlmeSBpZiBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIGVuYWJsZWQsIGFzIHRoYXQmIzM5O3MgY2xlYXJseSB0aGUgcHJpbWFyeSBzd2l0Y2ggZm9yIHRoZSBlbnRpcmUgY29tcGFjdGlvbiBtZWNoYW5pc20uIEFuZCBzaW5jZSBjb21wYWN0aW9uIGZyZXF1ZW50bHkgaW52b2x2ZXMgbW92aW5nIHBhZ2VzIGFyb3VuZCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGlzIGFsc28gZW5hYmxlZCwgYXMgbWlncmF0aW9uIGlzIHR5cGljYWxseSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGJvdGggYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhvc2UgZmlsZXMgYW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0IGF3YXksIEkga25vdyBgbW0vY29tcGFjdGlvbi5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZGVmaW5lZCwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uLiBCYXNlZCBvbiB0aGlzLCBJIHdvdWxkIGd1ZXNzIHRoaXMgcGF0Y2ggZGVwZW5kcyBzb2xlbHkgb24gYENPTkZJR19DT01QQUNUSU9OYCBhbmQgYENPTkZJR19NSUdSQVRJT05gLCB3aXRoIGBDT05GSUdfQ09NUEFDVElPTmAgYmVpbmcgZXNzZW50aWFsIGZvciB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfQ09NUEFDVElPTlxcKS4qY29tcGFjdGlvblxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGl0LiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIGFzIGFuIGV4cGVydDoKCioqQ29tcGFjdGlvbiBpbiBgbW0vTWFrZWZpbGVgIOKAkyBRdWljayBDaGVjayoqCgpSaWdodCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBzcGVjaWZpYyBpc3N1ZSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyB0aGUgY29tcGFjdGlvbiBwcm9jZXNzIGlzIGJlaW5nIGhhbmRsZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24uIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGlyZWN0aXZlcyBjb250cm9sbGluZyBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIGFuZCBieSBleHRlbnNpb24sIGFueSBjb21wYWN0aW9uIHJvdXRpbmVzIG9yIHJlbGF0ZWQgbG9naWMuIEEgcXVpY2sgc2NhbiB0aGVyZSBjYW4gb2Z0ZW4gcmV2ZWFsIGlmIGNvbXBhY3Rpb24gaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncyBJIG5lZWQgdG8gY29uc2lkZXIuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IEkmIzM5O20gbm90IGdvaW5nIHRvIHNwaW4gbXkgd2hlZWxzIGRpZ2dpbmcgdGhyb3VnaCBzb3VyY2UgY29kZSBpZiB0aGUgTWFrZWZpbGUgaXNuJiMzOTt0IGV2ZW4gY29uZmlndXJlZCB0byBpbmNsdWRlIHRoZSBwYXJ0cyB0aGF0IEkgbmVlZCB0byBhbmFseXplLiBHb3R0YSBlc3RhYmxpc2ggbXkgYmFzZWxpbmUsIGtub3cgd2hhdCB0b29scyB0aGUgYnVpbGQgdXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG5tbS9NYWtlZmlsZTo1NjpcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGUtNTctXHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBDb21wYWN0aW9uJiMzOTtzIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGNvbXBhY3Rpb24ub2AuIElzIGl0ICphbHdheXMqIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgb3IgaXMgaXQgY29uZGl0aW9uYWw/IFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpczogd2hhdCBhcmUgdGhlIGJ1aWxkIG9wdGlvbnMgYXQgcGxheT8gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gd2hlbiB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3ZlcmhlYWQuCgpUaGUgcmVmbGV4IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9jb21wYWN0aW9uLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdXNlZCB3aXRoIGEgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSBxdWlja2VzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIGNvbXBhY3Rpb24gaXMgYnVpbHQtaW4gb3IgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHdpbGwgZGlyZWN0bHkgZGljdGF0ZSB3aGV0aGVyIGl0JiMzOTtzIGFsd2F5cyBwYXJ0IG9mIG15IGtlcm5lbCBvciBzb21ldGhpbmcgSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYy0yOC1cbm1tL2NvbXBhY3Rpb24uYzoyOTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMC0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz01OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjEtXG5tbS9jb21wYWN0aW9uLmM6NjI6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjMtXG4tLVxubW0vY29tcGFjdGlvbi5jPTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTE1LVxubW0vY29tcGFjdGlvbi5jOjExNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0xMTctXG4tLVxubW0vY29tcGFjdGlvbi5jPTQ5MD1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vY29tcGFjdGlvbi5jLTQ5My19XG5tbS9jb21wYWN0aW9uLmM6NDk0OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xubW0vY29tcGFjdGlvbi5jLTQ5NS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MTMzNz1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vY29tcGFjdGlvbi5jLTEzNzItXG5tbS9jb21wYWN0aW9uLmM6MTM3MzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTM3NS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzM2Mz1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzM2NC1cbm1tL2NvbXBhY3Rpb24uYzozMzY1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3Vzc2luZyBGdXp6aW5nIEVmZm9ydHMgZm9yIE1lbW9yeSBDb21wYWN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBrZXkgYXJlYSB0byB0YXJnZXQgaGVyZSBpcyBkZWZpbml0ZWx5IGBDT05GSUdfQ09NUEFDVElPTmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgbGllcy4gTm93LCB0byBtYWtlIHRoZSBtb3N0IG9mIGZ1enppbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vc3QgbGlrZWx5IHRvIHJldmVhbCB2dWxuZXJhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYHRyeV90b19jb21wYWN0X3BhZ2VzYCwgYGNvbXBhY3Rfem9uZV9vcmRlcmAsIGBjb21wYWN0aW9uX2NhcHR1cmVgLCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AsIGFuZCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAuCgpgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBsb29rIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMgdG8gc3RhcnQgd2l0aC4gVGhleSYjMzk7cmUgcmlnaHQgdGhlcmUsIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCByZWNsYWltaW5nLCB3aGljaCBpcyBvZnRlbiB3aGVyZSBzdWJ0bGUgaXNzdWVzIGFyaXNlLiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGFsc28gc2VlbXMgcHJvbWlzaW5nLCBpdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgdGhlIGFjdHVhbCB3b3JrIGhhcHBlbnMuIE5vdywgYGNvbXBhY3Rpb25fY2FwdHVyZWAuLi4gaG1tLCBJIHJlY2FsbCBpdCBiZWluZyByZWxhdGVkIHRvIGB0YXNrX2NhcGNgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gVGltZSB0byBkaWcgaW50byBgY29tcGFjdGlvbl9jYXB0dXJlYCBhIGJpdCBkZWVwZXIsIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gR290dGEgdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb25fY2FwdHVyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NzI3PXN0YXRpYyBpbmxpbmUgYm9vbFxubW0vcGFnZV9hbGxvYy5jOjcyODpjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9wYWdlX2FsbG9jLmMtNzI5LVx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzY0PXN0YXRpYyBpbmxpbmUgYm9vbFxubW0vcGFnZV9hbGxvYy5jOjc2NTpjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS9wYWdlX2FsbG9jLmMtNzY2LVx0XHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9OTM2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfb25lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTk1OC1cbm1tL3BhZ2VfYWxsb2MuYzo5NTk6XHRcdGlmIChjb21wYWN0aW9uX2NhcHR1cmUoY2FwYywgcGFnZSwgb3JkZXIsIG1pZ3JhdGV0eXBlKSkge1xubW0vcGFnZV9hbGxvYy5jLTk2MC1cdFx0XHRhY2NvdW50X2ZyZWVwYWdlcyh6b25lLCAtKDEgXHUwMDNjXHUwMDNjIG9yZGVyKSwgbWlncmF0ZXR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBIb3RzcG90cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBtZW1vcnkgYWxsb2NhdGlvbiBwZXJmb3JtYW5jZSwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYF9fZnJlZV9vbmVfcGFnZWAgaXMgYSBzZXJpb3VzIGJvdHRsZW5lY2sg4oCTIGEgcmVhbCBob3QgcGF0aC4gV2UgbmVlZCB0byB0cmVhZCBjYXJlZnVsbHkgYXJvdW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdCB0b28gZnJlcXVlbnRseS4gQ29uc2lkZXJpbmcgdGhhdCwgSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgc3RlZXIgY2xlYXIgb2YgZm9jdXNpbmcgb24gYGNvbXBhY3Rpb25fY2FwdHVyZWAgYXMgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3Igb3B0aW1pemF0aW9uIHJpZ2h0IG5vdzsgaXQgY291bGQgYmUgdG9vIGludGVydHdpbmVkIHdpdGggYF9fZnJlZV9vbmVfcGFnZWAgYW5kIGV4YWNlcmJhdGUgYW55IGlzc3Vlcy4KCk9uIHRoZSBvdGhlciBoYW5kLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBwcmVzZW50IGEgZGlmZmVyZW50IG9wcG9ydHVuaXR5LiBUaGVzZSBhcmUga25vd24gYXMgc2xvd2VyIGFsbG9jYXRpb24gcGF0aHMuIFRoaXMgbWFrZXMgdGhlbSBnb29kIGNhbmRpZGF0ZXMuIFdlIGFsc28gaGF2ZSBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIHdoaWNoIGlzIGFub3RoZXIgc2xvdyBwYXRoLCBieSBkZWZpbml0aW9uLiBTaW1pbGFybHksIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFyZSBwYXJ0IG9mIHRoZSBjb21wYWN0aW9uIHByb2Nlc3MsIGEgcmVsYXRpdmVseSBzbG93IGFyZWEgY29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkIGFsbG9jL2ZyZWUgb3BlcmF0aW9ucy4KCkdpdmVuIHRoZSBvcHRpb25zLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBhbmQgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLiBUaGV5JiMzOTtyZSBwcm9iYWJseSB3aGVyZSB3ZSBjYW4gZ2V0IHRoZSBtb3N0IHNpZ25pZmljYW50IGdhaW5zIGJ5IG9wdGltaXppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jPTQxNDE9c3RhdGljIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MTQyOl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MTQzLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMxOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0MzE5Ol9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MzIwLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQ2Nz1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NzUtXG5tbS9wYWdlX2FsbG9jLmM6NDQ3NjpcdC8qIE1hdGNoIHRoZSBzbG93cGF0aCBjb21wYWN0aW9uIHByb21vdGlvbiBpbiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0ICovXG5tbS9wYWdlX2FsbG9jLmMtNDQ3Ny1cdGlmICgoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PRlJBR01FTlQpIFx1MDAyNlx1MDAyNiBhYy1cdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3Nzk9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OTM2LVx0LyogVHJ5IGRpcmVjdCBjb21wYWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRpbmcgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0OTM3Olx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG5tbS9wYWdlX2FsbG9jLmMtNDkzOC1cdFx0XHRcdFx0Y29tcGFjdF9wcmlvcml0eSwgXHUwMDI2Y29tcGFjdF9yZXN1bHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODE0CgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDQ4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGtleSBhcmVhcy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHByb2Nlc3MgemVyb2VzIGluIG9uIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYHRyeV90b19jb21wYWN0X3BhZ2VzYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gdGhlIGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIHByb2Nlc3MuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWJvdXQgZGVwZW5kZW5jaWVzIOKAkyBpcyBgQ09ORklHX0NPTVBBQ1RJT05gIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHk/IEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCwgeWVzLCBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIHRoZSBwcmltYXJ5IGVuYWJsZXIuIEdvb2QuIE5vIG90aGVyIGNyaXRpY2FsIGNvbmZpZyBvcHRpb25zIGJlc2lkZXMgYEFMTE9DX05PRlJBR01FTlRgICh3aGljaCBpcyBhIGZsYWcpIGFuZCBgTUlHUkFURV9NT1ZBQkxFYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBtaWdyYXRldHlwZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucy4gSXQgc2VlbXMgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGdldHMgdHdlYWtlZCB0byBpbmZsdWVuY2UgdGhlIGFsbG9jYXRpb24gb3JkZXIgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHVzaW5nIGBBTExPQ19OT0ZSQUdNRU5UYC4gIEFsc28sIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBzZWVzIGEgbW9kaWZpY2F0aW9uLCBvcmRlciBwcm9tb3Rpb24gYW5kIHRoZSBwcm9wZXIgdXNlIG9mIGBjYXB0dXJlX2NvbnRyb2xgLiBBZGRpdGlvbmFsbHksIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2hpZnRzIGZyb20gdGFraW5nIGBwYWdlICoqYCB0byB0YWtpbmcgYGNhcHR1cmVfY29udHJvbGAuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBzbyBJIGNoZWNrIGlmIHRoZXkgYXJlIHN0YXRpYy4gQXMgSSBleHBlY3RlZCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgLCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFyZSBzdGF0aWMsIHdoaWxlIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgaXMgbm9uLXN0YXRpYyBvciBleHBvcnRlZC4KClNvLCBmb3IgdGhlIGZ1enplciwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgb2J2aW91cyB0YXJnZXRzLiBJIGtub3cgdGhpcyBjb2RlIGhhbmRsZXMgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgcG90ZW50aWFsbHkgdW5kZXIgZnJhZ21lbnRlZCBtZW1vcnkgY29uZGl0aW9ucy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgZG91YmxlLWNoZWNrIHRoYXQgYENPTVBBQ1RJT05gIGlzIGluZGVlZCBzdWZmaWNpZW50LiBBbmQgeWVzLCBpdCBpcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDssCiAgICAmIzM0O3N1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QmIzM0OywKICAgICYjMzQ7X19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrJiMzNDssCiAgICAmIzM0O3N1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE2OjM2LjM0NzE5NDI3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDcyODI5MTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdFwiLFxuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcImZhc3RfZmluZF9taWdyYXRlYmxvY2tcIixcbiAgICBcInN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSBob3cgYGNhcHR1cmVfY29udHJvbGAgaXMgaGFuZGxlZCBhbmQgaG93IGFsbG9jYXRpb24gb3JkZXJzIGFyZSBwcm9tb3RlZCBmb3Igbm9uLW1vdmFibGUgYWxsb2NhdGlvbnMgd2l0aCBgQUxMT0NfTk9GUkFHTUVOVGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRyaWdnZXJlZCBieSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHVuZGVyIG1lbW9yeSBmcmFnbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNjozNi4zNDcyMDA5NTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDY3ODgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcxYmM3ZmQxZjU2MWIxZDYxYzdhNWM3NTY0ZGNkODlkNTM4ZjgxNDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMTY6MTY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbmluZGV4IGYyOWVmMDY1MzU0NmVkLi42NmEyZjcwZTllMDE5ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuQEAgLTU4LDYgKzU4LDcgQEAgZW51bSBjb21wYWN0X3Jlc3VsdCB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xcbitzdHJ1Y3QgY2FwdHVyZV9jb250cm9sOyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXFxuIFxcbiAvKlxcbiAgKiBOdW1iZXIgb2YgZnJlZSBvcmRlci0wIHBhZ2VzIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBhYm92ZSBnaXZlbiB3YXRlcm1hcmtcXG5AQCAtOTIsNyArOTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIGV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4gXFx0XFx0Y29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlKTtcXG4rXFx0XFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYyk7XFxuIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTtcXG4gZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaywgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xcbmluZGV4IGYwODc2NWFkZTAxNGNlLi45NzdlMzBiM2EyYmQxNiAxMDA2NDRcXG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcXG5AQCAtMTM4MSwxMiArMTM4MSw0NCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLFxcbiBcXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aWYgKChjYy1cXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKSB8fCAhY2MtXFx1MDAzZWRpcmVjdF9jb21wYWN0aW9uKVxcbitcXHQvKlxcbitcXHQgKiBCYWNrZ3JvdW5kIGNvbXBhY3Rpb24gcHJvZHVjZXMgYmxvY2tzIGZvciB0aGUgem9uZSBhdFxcbitcXHQgKiBsYXJnZSwgd2l0aCBubyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24gY29udGV4dC4gQWxsb3cgYWxsXFxuK1xcdCAqIGJsb2NrIHR5cGVzLCBpbmNsdWRpbmcgQ01BLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xcbiBcXG4tXFx0aWYgKGNjLVxcdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdC8qXFxuK1xcdCAqIENNQSBwYWdlcyBjYW4gb25seSBiZSB0YWtlbiBieSBBTExPQ19DTUEgcmVxdWVzdHMuIEZvciBhbnlib2R5XFxuK1xcdCAqIGVsc2UsIHZhY2F0aW5nIGEgQ01BIGJsb2NrIGNvbnN1bWVzIGZyZWUgcGFnZXMgdGhlIGNhbGxlclxcbitcXHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cXG4rXFx0ICovXFxuK1xcdGlmIChpc19taWdyYXRlX2NtYShibG9ja19tdCkgXFx1MDAyNlxcdTAwMjYgIShjYy1cXHUwMDNlYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DTUEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQZXIgZGVmYXVsdCwgc2NhbnMgYXJlIHJlc3RyaWN0ZWQgdG8gYmxvY2tzIGNvbXBhdGlibGUgd2l0aFxcbitcXHQgKiB0aGUgcmVxdWVzdCwgdG8gcHJldmVudCBjcm9zcy1jb250YW1pbmF0aW9uLiBPbmNlXFxuK1xcdCAqIGNvbXBhY3Rpb24gcHJpb3JpdHkgZXNjYWxhdGVzIHRvIHN5bmNocm9ub3VzIHNjYW5zLCB0aG91Z2gsXFxuK1xcdCAqIHNjYW4gYWxsIGJsb2NrcyB0byB0cnkgdG8gbWFrZSBmb3J3YXJkIHByb2dyZXNzLiBGb3JcXG4rXFx0ICogbW92YWJsZSByZXF1ZXN0LCB0aGlzIGxpa2VseSBoZWxwcyBsaXR0bGU6IHRoZXJlIHNob3VsZG4ndFxcbitcXHQgKiBiZSBtYW55IG1pZ3JhdGFibGUgcGFnZXMgaW5zaWRlIG5vbi1tb3ZhYmxlIGJsb2NrcyBiZXNpZGVzXFxuK1xcdCAqIGFsbG9jYXRvciBmYWxsYmFja3MuIEZvciBub24tbW92YWJsZSByZXF1ZXN0cywgdGhpcyBoZWxwcyBhXFxuK1xcdCAqIGxvdCwgYXMgdGhleSBjYW4gZmluYWxseSBzY2FuIG1vdmFibGUgYmxvY2tzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNjLVxcdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBcXHUwMDNjcGFnZWJsb2NrX29yZGVyIHVubW92YWJsZS9yZWNsYWltYWJsZSByZXF1ZXN0cyBmcm9tXFxuK1xcdCAqIHBvbGx1dGluZyBtb3ZhYmxlIGJsb2NrcyB0aHJvdWdoIGZhbGxiYWNrcy4gV2hvbGUtYmxvY2sgcHJvZHVjdGlvblxcbitcXHQgKiAoZGlyZWN0bHkgcmVxdWVzdGVkLCBvciBkZWZyYWdfbW9kZSkgaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3JcXG4rXFx0ICogY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cXG4rXFx0ICovXFxuK1xcdGlmIChjYy1cXHUwMDNlbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIHx8IGNjLVxcdTAwM2VvcmRlciBcXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpXFxuIFxcdFxcdHJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHJldHVybiBibG9ja19tdCA9PSBjYy1cXHUwMDNlbWlncmF0ZXR5cGU7XFxuQEAgLTE5NzQsMTIgKzIwMDYsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmFzdF9maW5kX21pZ3JhdGVibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4gXFx0XFx0cmV0dXJuIHBmbjtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG9cXG4tXFx0ICogcXVpY2tseSBjbGVhciBvdXQgYSBNT1ZBQkxFIHBhZ2VibG9jayBmb3IgYWxsb2NhdGlvbi4gVGhpc1xcbi1cXHQgKiByZWR1Y2VzIHRoZSByaXNrIHRoYXQgYSBsYXJnZSBtb3ZhYmxlIHBhZ2VibG9jayBpcyBmcmVlZCBmb3JcXG4tXFx0ICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uXFxuK1xcdCAqIFByZXZlbnQgXFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxcbitcXHQgKiBwb2xsdXRpbmcgbW92YWJsZSBibG9ja3MgdGhyb3VnaCBmYWxsYmFja3MuIFdob2xlLWJsb2NrIHByb2R1Y3Rpb25cXG4rXFx0ICogaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3IgY2xhaW1zIGFuZCBjb252ZXJ0cyB0aGVzZS5cXG4gXFx0ICovXFxuLVxcdGlmIChjYy1cXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXFx1MDAyNlxcdTAwMjYgY2MtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0aWYgKGNjLVxcdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcXHUwMDI2XFx1MDAyNiBjYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjYy1cXHUwMDNlb3JkZXIgXFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIpXFxuIFxcdFxcdHJldHVybiBwZm47XFxuIFxcbiBcXHQvKlxcbkBAIC0yNzcwLDkgKzI4MDIsOCBAQCBjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRcXHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IGhpZ2hlc3Rfem9uZWlkeCxcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKipjYXB0dXJlKVxcbitcXHRcXHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbiB7XFxuLVxcdGVudW0gY29tcGFjdF9yZXN1bHQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sIGNjID0ge1xcbiBcXHRcXHQub3JkZXIgPSBvcmRlcixcXG4gXFx0XFx0LnNlYXJjaF9vcmRlciA9IG9yZGVyLFxcbkBAIC0yNzg3LDM4ICsyODE4LDggQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuIFxcdFxcdC5pZ25vcmVfc2tpcF9oaW50ID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpLFxcbiBcXHRcXHQuaWdub3JlX2Jsb2NrX3N1aXRhYmxlID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpXFxuIFxcdH07XFxuLVxcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcXG4tXFx0XFx0LmNjID0gXFx1MDAyNmNjLFxcbi1cXHRcXHQucGFnZSA9IE5VTEwsXFxuLVxcdH07XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBNYWtlIHN1cmUgdGhlIHN0cnVjdHMgYXJlIHJlYWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXhwb3NlIHRoZVxcbi1cXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcXG4tXFx0ICogZnJlZXMgYSBwYWdlLlxcbi1cXHQgKi9cXG4tXFx0YmFycmllcigpO1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgXFx1MDAyNmNhcGMpO1xcbi1cXG4tXFx0cmV0ID0gY29tcGFjdF96b25lKFxcdTAwMjZjYywgXFx1MDAyNmNhcGMpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxcbi1cXHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcXG4tXFx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXFxuLVxcdCAqL1xcbi1cXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XFxuLVxcdCpjYXB0dXJlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XFxuLVxcdC8qXFxuLVxcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxcbi1cXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxcbi1cXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xcbi1cXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cXG4tXFx0ICovXFxuLVxcdGlmICgqY2FwdHVyZSlcXG4tXFx0XFx0cmV0ID0gQ09NUEFDVF9TVUNDRVNTO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGNvbXBhY3Rfem9uZShcXHUwMDI2Y2MsIGNhcGMpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjgyOCwxMyArMjgyOSwxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXFxuICAqIEBhYzogVGhlIGNvbnRleHQgb2YgY3VycmVudCBhbGxvY2F0aW9uXFxuICAqIEBwcmlvOiBEZXRlcm1pbmVzIGhvdyBoYXJkIGRpcmVjdCBjb21wYWN0aW9uIHNob3VsZCB0cnkgdG8gc3VjY2VlZFxcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcXG4rICogQGNhcGM6IEZyZWUgcGFnZSBjYXB0dXJlIGJ5cGFzc2luZyB0aGUgZnJlZWxpc3RcXG4gICpcXG4gICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IHBhZ2UgY29tcGFjdGlvbi5cXG4gICovXFxuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLVxcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgcGFnZSAqKmNhcHR1cmUpXFxuK1xcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbiBcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG5AQCAtMjg2MSw4ICsyODYyLDE3IEBAIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdFdSSVRFX09OQ0UoY2FwYy1cXHUwMDNlem9uZSwgem9uZSk7XFxuK1xcbiBcXHRcXHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxcbi1cXHRcXHRcXHRcXHRhbGxvY19mbGFncywgYWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwdHVyZSk7XFxuK1xcdFxcdFxcdFxcdGFsbG9jX2ZsYWdzLCBhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UoY2FwYy1cXHUwMDNlem9uZSwgTlVMTCk7XFxuK1xcbitcXHRcXHQvKiBTdG9wIGlmIGEgcGFnZSBoYXMgYmVlbiBjYXB0dXJlZCAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGNhcGMtXFx1MDAzZXBhZ2UpKVxcbitcXHRcXHRcXHRzdGF0dXMgPSBDT01QQUNUX1NVQ0NFU1M7XFxuK1xcbiBcXHRcXHRyYyA9IG1heChzdGF0dXMsIHJjKTtcXG4gXFxuIFxcdFxcdC8qIFRoZSBhbGxvY2F0aW9uIHNob3VsZCBzdWNjZWVkLCBzdG9wIGNvbXBhY3RpbmcgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uNWFjYmEzNDcwNjU5ZDkgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtMTA1OSw3ICsxMDU5LDE1IEBAIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbiAgKiBpbW1lZGlhdGVseSB3aGVuIG9uZSBpcyBjcmVhdGVkIGR1cmluZyB0aGUgZnJlZSBwYXRoLlxcbiAgKi9cXG4gc3RydWN0IGNhcHR1cmVfY29udHJvbCB7XFxuLVxcdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjO1xcbitcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4rXFx0aW50IG1pZ3JhdGV0eXBlO1xcbitcXHQvKlxcbitcXHQgKiBBbGxvY2F0aW9uIHJlcXVlc3Qgb3JkZXIuIE1heSBkaWZmZXIgZnJvbSB0aGUgY29tcGFjdGlvblxcbitcXHQgKiBvcmRlcjogZGVmcmFnX21vZGUgcHJvbW90ZXMgc3ViLWJsb2NrIGFsbG9jYXRpb25zIHRvXFxuK1xcdCAqIHBhZ2VibG9jay1vcmRlciBjb21wYWN0aW9uOyBjYXB0dXJlIHN0aWxsIG1hdGNoZXMgYXQgdGhlXFxuK1xcdCAqIG9yaWdpbmFsIGFsbG9jYXRpb24gb3JkZXIgc28gcHJlcF9uZXdfcGFnZSgpIGlzIGNvbnNpc3RlbnQuXFxuK1xcdCAqL1xcbitcXHRpbnQgb3JkZXI7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXFxuaW5kZXggZWU5MDJhNDY4YzJmNWIuLmY5MjA1NTgyN2FlOTU4IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC03MjEsMTQgKzcyMSwxNCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFx0cmV0dXJuIHVubGlrZWx5KGNhcGMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LVEhSRUFEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhY2FwYy1cXHUwMDNlcGFnZSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRjYXBjLVxcdTAwM2VjYy1cXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XFxuK1xcdFxcdGNhcGMtXFx1MDAzZXpvbmUgPT0gem9uZSA/IGNhcGMgOiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcXG4gY29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHQgICBpbnQgb3JkZXIsIGludCBtaWdyYXRldHlwZSlcXG4ge1xcbi1cXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW9yZGVyKVxcbitcXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cXHUwMDNlb3JkZXIpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdC8qIERvIG5vdCBhY2NpZGVudGFsbHkgcG9sbHV0ZSBDTUEgb3IgaXNvbGF0ZWQgcmVnaW9ucyovXFxuQEAgLTc0NCwxMiArNzQ0LDEyIEBAIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0ICogaGF2ZSB0cm91YmxlIGZpbmRpbmcgYSBoaWdoLW9yZGVyIGZyZWUgcGFnZS5cXG4gXFx0ICovXFxuIFxcdGlmIChvcmRlciBcXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcXHUwMDI2XFx1MDAyNiBtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGNhcGMtXFx1MDAzZWNjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuK1xcdCAgICBjYXBjLVxcdTAwM2VtaWdyYXRldHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmIChtaWdyYXRldHlwZSAhPSBjYXBjLVxcdTAwM2VjYy1cXHUwMDNlbWlncmF0ZXR5cGUpXFxuLVxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVxcdTAwM2VjYy1cXHUwMDNlb3JkZXIsIG9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgY2FwYy1cXHUwMDNlY2MtXFx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XFxuK1xcdGlmIChtaWdyYXRldHlwZSAhPSBjYXBjLVxcdTAwM2VtaWdyYXRldHlwZSlcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXFx1MDAzZW9yZGVyLCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNhcGMtXFx1MDAzZW1pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7XFxuIFxcbiBcXHRjYXBjLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuQEAgLTQxNDYsMTggKzQxNDYsNjcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgbm9yZWNsYWltX2ZsYWc7XFxuK1xcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcXG4rXFx0XFx0LnpvbmUgPSBOVUxMLFxcbitcXHRcXHQubWlncmF0ZXR5cGUgPSBhYy1cXHUwMDNlbWlncmF0ZXR5cGUsXFxuK1xcdFxcdC5vcmRlciA9IG9yZGVyLFxcbitcXHRcXHQucGFnZSA9IE5VTEwsXFxuK1xcdH07XFxuK1xcdGludCBjb21wYWN0X29yZGVyID0gb3JkZXI7XFxuIFxcbi1cXHRpZiAoIW9yZGVyKVxcbitcXHQvKlxcbitcXHQgKiBJZiBmYWxsYmFja3MgYXJlIG5vdCBwZXJtaXR0ZWQgKGRlZnJhZ19tb2RlKSwgd2UgZWl0aGVyXFxuK1xcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXFxuK1xcdCAqIG91dCBhbiBlbnRpcmUgYmxvY2sgdG8gYWxsb3cgX19ybXF1ZXVlX2NsYWltKCkgdG8gY29udmVydC5cXG4rXFx0ICpcXG4rXFx0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxcbitcXHQgKiBibG9ja3MsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgTFJVIHBhZ2VzIGxpdmUuIFNvIHRoaXNcXG4rXFx0ICogd29ya3MgZm9yIG1vdmFibGUgcmVxdWVzdHMsIGJ1dCBub3QgZm9yIG90aGVycy5cXG4rXFx0ICpcXG4rXFx0ICogRm9yIHRob3NlLCBwcm9tb3RlIHRoZSBvcmRlciB0byBoZWxwIG1ha2UgYmxvY2tzLCBpbnN0ZWFkXFxuK1xcdCAqIG9mIHNwaW5uaW5nIGluIHJlY2xhaW0gYWxvbmUgdW5wcm9kdWN0aXZlbHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXFx1MDAyNlxcdTAwMjYgYWMtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0XFx0Y29tcGFjdF9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcXG4rXFxuK1xcdGlmICghY29tcGFjdF9vcmRlcilcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuIFxcdGRlbGF5YWNjdF9jb21wYWN0X3N0YXJ0KCk7XFxuK1xcdGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfbWFzayk7XFxuIFxcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcXG4gXFxuLVxcdCpjb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwcmlvLCBcXHUwMDI2cGFnZSk7XFxuK1xcdC8qXFxuK1xcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXFxuK1xcdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxcbitcXHQgKiBmcmVlcyBhIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHRiYXJyaWVyKCk7XFxuK1xcdFdSSVRFX09OQ0UoY3VycmVudC1cXHUwMDNlY2FwdHVyZV9jb250cm9sLCBcXHUwMDI2Y2FwYyk7XFxuK1xcbitcXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXFx1MDAyNmNhcGMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxcbitcXHQgKiBwYWdlIHBvaW50ZXIsIG90aGVyd2lzZSBhbiBpbnRlcnJ1cHQgY291bGQgZnJlZSBhbmQgY2FwdHVyZSBhIHBhZ2VcXG4rXFx0ICogYW5kIHdlIHdvdWxkIGxlYWsgaXQuXFxuK1xcdCAqL1xcbitcXHRXUklURV9PTkNFKGN1cnJlbnQtXFx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XFxuK1xcdHBhZ2UgPSBSRUFEX09OQ0UoY2FwYy5wYWdlKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxcbitcXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxcbitcXHQgKiBSZXR1cm5pbmcgQ09NUEFDVF9TVUNDRVNTIGluIHN1Y2ggY2FzZXMgaGVscHMgaW4gcHJvcGVybHkgYWNjb3VudGluZ1xcbitcXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChwYWdlKVxcbitcXHRcXHQqY29tcGFjdF9yZXN1bHQgPSBDT01QQUNUX1NVQ0NFU1M7XFxuIFxcbiBcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7XFxuK1xcdGZzX3JlY2xhaW1fcmVsZWFzZShnZnBfbWFzayk7XFxuIFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4gXFx0ZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7XFxuIFxcbkBAIC00MTgyLDcgKzQyMzEsNyBAQCBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdHN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpO1xcbiBcXG4gXFx0XFx0em9uZS1cXHUwMDNlY29tcGFjdF9ibG9ja3NraXBfZmx1c2ggPSBmYWxzZTtcXG4tXFx0XFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBvcmRlciwgdHJ1ZSk7XFxuK1xcdFxcdGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoem9uZSwgY29tcGFjdF9vcmRlciwgdHJ1ZSk7XFxuIFxcdFxcdGNvdW50X3ZtX2V2ZW50KENPTVBBQ1RTVUNDRVNTKTtcXG4gXFx0XFx0cmV0dXJuIHBhZ2U7XFxuIFxcdH1cXG5AQCAtNDQyMiw5ICs0NDcxLDE0IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4gXFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XFxuK1xcdGludCByZWNsYWltX29yZGVyID0gb3JkZXI7XFxuK1xcbitcXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xcbitcXHRpZiAoKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXFx1MDAyNlxcdTAwMjYgYWMtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0XFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcXG4gXFxuIFxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4tXFx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XFxuK1xcdCpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCByZWNsYWltX29yZGVyLCBhYyk7XFxuIFxcdGlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE2OjM2Ljk3MjQyODIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIwMTAzMDQ4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0XCIsXG4gICAgXCJfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltXCIsXG4gICAgXCJ0cnlfdG9fY29tcGFjdF9wYWdlc1wiLFxuICAgIFwiZmFzdF9maW5kX21pZ3JhdGVibG9ja1wiLFxuICAgIFwic3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCBkaXJlY3QgcmVjbGFpbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBgY2FwdHVyZV9jb250cm9sYCBpcyBoYW5kbGVkIGFuZCBob3cgYWxsb2NhdGlvbiBvcmRlcnMgYXJlIHByb21vdGVkIGZvciBub24tbW92YWJsZSBhbGxvY2F0aW9ucyB3aXRoIGBBTExPQ19OT0ZSQUdNRU5UYC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdHJpZ2dlcmVkIGJ5IGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgdW5kZXIgbWVtb3J5IGZyYWdtZW50YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzFiYzdmZDFmNTYxYjFkNjFjN2E1Yzc1NjRkY2Q4OWQ1MzhmODE0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE2OjE2OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuaW5kZXggZjI5ZWYwNjUzNTQ2ZWQuLjY2YTJmNzBlOWUwMTlkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5AQCAtNTgsNiArNTgsNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHtcbiB9O1xuIFxuIHN0cnVjdCBhbGxvY19jb250ZXh0OyAvKiBpbiBtbS9pbnRlcm5hbC5oICovXG4rc3RydWN0IGNhcHR1cmVfY29udHJvbDsgLyogaW4gbW0vaW50ZXJuYWwuaCAqL1xuIFxuIC8qXG4gICogTnVtYmVyIG9mIGZyZWUgb3JkZXItMCBwYWdlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYWJvdmUgZ2l2ZW4gd2F0ZXJtYXJrXG5AQCAtOTIsNyArOTMsNyBAQCBleHRlcm4gaW50IGZyYWdtZW50YXRpb25faW5kZXgoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIGVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuIFx0XHRjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuLVx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2UpO1xuK1x0XHRzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKTtcbiBleHRlcm4gdm9pZCByZXNldF9pc29sYXRpb25fc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdCk7XG4gZXh0ZXJuIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcmssIGludCBoaWdoZXN0X3pvbmVpZHgpO1xuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggZjA4NzY1YWRlMDE0Y2UuLjk3N2UzMGIzYTJiZDE2IDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC0xMzgxLDEyICsxMzgxLDQ0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXG4gXHRpZiAocGFnZWJsb2NrX3NraXBfcGVyc2lzdGVudChwYWdlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKChjYy1cdTAwM2Vtb2RlICE9IE1JR1JBVEVfQVNZTkMpIHx8ICFjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbilcbitcdC8qXG4rXHQgKiBCYWNrZ3JvdW5kIGNvbXBhY3Rpb24gcHJvZHVjZXMgYmxvY2tzIGZvciB0aGUgem9uZSBhdFxuK1x0ICogbGFyZ2UsIHdpdGggbm8gcGFydGljdWxhciBhbGxvY2F0aW9uIGNvbnRleHQuIEFsbG93IGFsbFxuK1x0ICogYmxvY2sgdHlwZXMsIGluY2x1ZGluZyBDTUEuXG4rXHQgKi9cbitcdGlmICghY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24pXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0YmxvY2tfbXQgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpO1xuIFxuLVx0aWYgKGNjLVx1MDAzZW1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSlcbitcdC8qXG4rXHQgKiBDTUEgcGFnZXMgY2FuIG9ubHkgYmUgdGFrZW4gYnkgQUxMT0NfQ01BIHJlcXVlc3RzLiBGb3IgYW55Ym9keVxuK1x0ICogZWxzZSwgdmFjYXRpbmcgYSBDTUEgYmxvY2sgY29uc3VtZXMgZnJlZSBwYWdlcyB0aGUgY2FsbGVyXG4rXHQgKiBjb3VsZCBoYXZlIHVzZWQsIGFuZCBwcm9kdWNlcyBmcmVlIHBhZ2VzIGl0IGNhbm5vdC5cbitcdCAqL1xuK1x0aWYgKGlzX21pZ3JhdGVfY21hKGJsb2NrX210KSBcdTAwMjZcdTAwMjYgIShjYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfQ01BKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIFBlciBkZWZhdWx0LCBzY2FucyBhcmUgcmVzdHJpY3RlZCB0byBibG9ja3MgY29tcGF0aWJsZSB3aXRoXG4rXHQgKiB0aGUgcmVxdWVzdCwgdG8gcHJldmVudCBjcm9zcy1jb250YW1pbmF0aW9uLiBPbmNlXG4rXHQgKiBjb21wYWN0aW9uIHByaW9yaXR5IGVzY2FsYXRlcyB0byBzeW5jaHJvbm91cyBzY2FucywgdGhvdWdoLFxuK1x0ICogc2NhbiBhbGwgYmxvY2tzIHRvIHRyeSB0byBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuIEZvclxuK1x0ICogbW92YWJsZSByZXF1ZXN0LCB0aGlzIGxpa2VseSBoZWxwcyBsaXR0bGU6IHRoZXJlIHNob3VsZG4ndFxuK1x0ICogYmUgbWFueSBtaWdyYXRhYmxlIHBhZ2VzIGluc2lkZSBub24tbW92YWJsZSBibG9ja3MgYmVzaWRlc1xuK1x0ICogYWxsb2NhdG9yIGZhbGxiYWNrcy4gRm9yIG5vbi1tb3ZhYmxlIHJlcXVlc3RzLCB0aGlzIGhlbHBzIGFcbitcdCAqIGxvdCwgYXMgdGhleSBjYW4gZmluYWxseSBzY2FuIG1vdmFibGUgYmxvY2tzLlxuK1x0ICovXG4rXHRpZiAoY2MtXHUwMDNlbW9kZSAhPSBNSUdSQVRFX0FTWU5DKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBQcmV2ZW50IFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxuK1x0ICogcG9sbHV0aW5nIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uXG4rXHQgKiAoZGlyZWN0bHkgcmVxdWVzdGVkLCBvciBkZWZyYWdfbW9kZSkgaXMgZXhlbXB0IGFzIHRoZSBhbGxvY2F0b3JcbitcdCAqIGNsYWltcyBhbmQgY29udmVydHMgdGhlc2UuXG4rXHQgKi9cbitcdGlmIChjYy1cdTAwM2VtaWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUgfHwgY2MtXHUwMDNlb3JkZXIgXHUwMDNlPSBwYWdlYmxvY2tfb3JkZXIpXG4gXHRcdHJldHVybiBpc19taWdyYXRlX21vdmFibGUoYmxvY2tfbXQpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gYmxvY2tfbXQgPT0gY2MtXHUwMDNlbWlncmF0ZXR5cGU7XG5AQCAtMTk3NCwxMiArMjAwNiwxMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0XHRyZXR1cm4gcGZuO1xuIFxuIFx0Lypcbi1cdCAqIE9ubHkgYWxsb3cga2NvbXBhY3RkIGFuZCBkaXJlY3QgcmVxdWVzdHMgZm9yIG1vdmFibGUgcGFnZXMgdG9cbi1cdCAqIHF1aWNrbHkgY2xlYXIgb3V0IGEgTU9WQUJMRSBwYWdlYmxvY2sgZm9yIGFsbG9jYXRpb24uIFRoaXNcbi1cdCAqIHJlZHVjZXMgdGhlIHJpc2sgdGhhdCBhIGxhcmdlIG1vdmFibGUgcGFnZWJsb2NrIGlzIGZyZWVkIGZvclxuLVx0ICogYW4gdW5tb3ZhYmxlL3JlY2xhaW1hYmxlIHNtYWxsIGFsbG9jYXRpb24uXG4rXHQgKiBQcmV2ZW50IFx1MDAzY3BhZ2VibG9ja19vcmRlciB1bm1vdmFibGUvcmVjbGFpbWFibGUgcmVxdWVzdHMgZnJvbVxuK1x0ICogcG9sbHV0aW5nIG1vdmFibGUgYmxvY2tzIHRocm91Z2ggZmFsbGJhY2tzLiBXaG9sZS1ibG9jayBwcm9kdWN0aW9uXG4rXHQgKiBpcyBleGVtcHQgYXMgdGhlIGFsbG9jYXRvciBjbGFpbXMgYW5kIGNvbnZlcnRzIHRoZXNlLlxuIFx0ICovXG4tXHRpZiAoY2MtXHUwMDNlZGlyZWN0X2NvbXBhY3Rpb24gXHUwMDI2XHUwMDI2IGNjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdGlmIChjYy1cdTAwM2VkaXJlY3RfY29tcGFjdGlvbiBcdTAwMjZcdTAwMjYgY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNjLVx1MDAzZW9yZGVyIFx1MDAzYyBwYWdlYmxvY2tfb3JkZXIpXG4gXHRcdHJldHVybiBwZm47XG4gXG4gXHQvKlxuQEAgLTI3NzAsOSArMjgwMiw4IEBAIGNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGVudW0gY29tcGFjdF9wcmlvcml0eSBwcmlvLFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBoaWdoZXN0X3pvbmVpZHgsXG4tXHRcdHN0cnVjdCBwYWdlICoqY2FwdHVyZSlcbitcdFx0c3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiB7XG4tXHRlbnVtIGNvbXBhY3RfcmVzdWx0IHJldDtcbiBcdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7XG4gXHRcdC5vcmRlciA9IG9yZGVyLFxuIFx0XHQuc2VhcmNoX29yZGVyID0gb3JkZXIsXG5AQCAtMjc4NywzOCArMjgxOCw4IEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0XHQuaWdub3JlX3NraXBfaGludCA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKSxcbiBcdFx0Lmlnbm9yZV9ibG9ja19zdWl0YWJsZSA9IChwcmlvID09IE1JTl9DT01QQUNUX1BSSU9SSVRZKVxuIFx0fTtcbi1cdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgY2FwYyA9IHtcbi1cdFx0LmNjID0gXHUwMDI2Y2MsXG4tXHRcdC5wYWdlID0gTlVMTCxcbi1cdH07XG4gXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHRoZSBzdHJ1Y3RzIGFyZSByZWFsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV4cG9zZSB0aGVcbi1cdCAqIGNhcHR1cmUgY29udHJvbCwgaW4gY2FzZSB3ZSBhcmUgaW50ZXJydXB0ZWQgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlclxuLVx0ICogZnJlZXMgYSBwYWdlLlxuLVx0ICovXG4tXHRiYXJyaWVyKCk7XG4tXHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlY2FwdHVyZV9jb250cm9sLCBcdTAwMjZjYXBjKTtcbi1cbi1cdHJldCA9IGNvbXBhY3Rfem9uZShcdTAwMjZjYywgXHUwMDI2Y2FwYyk7XG4tXG4tXHQvKlxuLVx0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuLVx0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4tXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbi1cdCAqL1xuLVx0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4tXHQqY2FwdHVyZSA9IFJFQURfT05DRShjYXBjLnBhZ2UpO1xuLVx0Lypcbi1cdCAqIFRlY2huaWNhbGx5LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgY29tcGFjdGlvbiBpcyBza2lwcGVkIGJ1dFxuLVx0ICogdGhlIHBhZ2UgaXMgc3RpbGwgY2FwdHVyZWQgb3V0IG9mIGx1Y2soSVJRIGNhbWUgYW5kIGZyZWVkIHRoZSBwYWdlKS5cbi1cdCAqIFJldHVybmluZyBDT01QQUNUX1NVQ0NFU1MgaW4gc3VjaCBjYXNlcyBoZWxwcyBpbiBwcm9wZXJseSBhY2NvdW50aW5nXG4tXHQgKiB0aGUgQ09NUEFDVFtTVEFMTHxGQUlMXSB3aGVuIGNvbXBhY3Rpb24gaXMgc2tpcHBlZC5cbi1cdCAqL1xuLVx0aWYgKCpjYXB0dXJlKVxuLVx0XHRyZXQgPSBDT01QQUNUX1NVQ0NFU1M7XG4tXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIGNvbXBhY3Rfem9uZShcdTAwMjZjYywgY2FwYyk7XG4gfVxuIFxuIC8qKlxuQEAgLTI4MjgsMTMgKzI4MjksMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gICogQGFsbG9jX2ZsYWdzOiBUaGUgYWxsb2NhdGlvbiBmbGFncyBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXG4gICogQGFjOiBUaGUgY29udGV4dCBvZiBjdXJyZW50IGFsbG9jYXRpb25cbiAgKiBAcHJpbzogRGV0ZXJtaW5lcyBob3cgaGFyZCBkaXJlY3QgY29tcGFjdGlvbiBzaG91bGQgdHJ5IHRvIHN1Y2NlZWRcbi0gKiBAY2FwdHVyZTogUG9pbnRlciB0byBmcmVlIHBhZ2UgY3JlYXRlZCBieSBjb21wYWN0aW9uIHdpbGwgYmUgc3RvcmVkIGhlcmVcbisgKiBAY2FwYzogRnJlZSBwYWdlIGNhcHR1cmUgYnlwYXNzaW5nIHRoZSBmcmVlbGlzdFxuICAqXG4gICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IHBhZ2UgY29tcGFjdGlvbi5cbiAgKi9cbiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLFxuLVx0XHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IHBhZ2UgKipjYXB0dXJlKVxuK1x0XHRlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbiB7XG4gXHRzdHJ1Y3Qgem9uZXJlZiAqejtcbiBcdHN0cnVjdCB6b25lICp6b25lO1xuQEAgLTI4NjEsOCArMjg2MiwxNyBAQCBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0V1JJVEVfT05DRShjYXBjLVx1MDAzZXpvbmUsIHpvbmUpO1xuK1xuIFx0XHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxuLVx0XHRcdFx0YWxsb2NfZmxhZ3MsIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgY2FwdHVyZSk7XG4rXHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcbitcbitcdFx0V1JJVEVfT05DRShjYXBjLVx1MDAzZXpvbmUsIE5VTEwpO1xuK1xuK1x0XHQvKiBTdG9wIGlmIGEgcGFnZSBoYXMgYmVlbiBjYXB0dXJlZCAqL1xuK1x0XHRpZiAoUkVBRF9PTkNFKGNhcGMtXHUwMDNlcGFnZSkpXG4rXHRcdFx0c3RhdHVzID0gQ09NUEFDVF9TVUNDRVNTO1xuK1xuIFx0XHRyYyA9IG1heChzdGF0dXMsIHJjKTtcbiBcbiBcdFx0LyogVGhlIGFsbG9jYXRpb24gc2hvdWxkIHN1Y2NlZWQsIHN0b3AgY29tcGFjdGluZyAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uNWFjYmEzNDcwNjU5ZDkgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTA1OSw3ICsxMDU5LDE1IEBAIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xuICAqIGltbWVkaWF0ZWx5IHdoZW4gb25lIGlzIGNyZWF0ZWQgZHVyaW5nIHRoZSBmcmVlIHBhdGguXG4gICovXG4gc3RydWN0IGNhcHR1cmVfY29udHJvbCB7XG4tXHRzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYztcbitcdHN0cnVjdCB6b25lICp6b25lO1xuK1x0aW50IG1pZ3JhdGV0eXBlO1xuK1x0LypcbitcdCAqIEFsbG9jYXRpb24gcmVxdWVzdCBvcmRlci4gTWF5IGRpZmZlciBmcm9tIHRoZSBjb21wYWN0aW9uXG4rXHQgKiBvcmRlcjogZGVmcmFnX21vZGUgcHJvbW90ZXMgc3ViLWJsb2NrIGFsbG9jYXRpb25zIHRvXG4rXHQgKiBwYWdlYmxvY2stb3JkZXIgY29tcGFjdGlvbjsgY2FwdHVyZSBzdGlsbCBtYXRjaGVzIGF0IHRoZVxuK1x0ICogb3JpZ2luYWwgYWxsb2NhdGlvbiBvcmRlciBzbyBwcmVwX25ld19wYWdlKCkgaXMgY29uc2lzdGVudC5cbitcdCAqL1xuK1x0aW50IG9yZGVyO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi5mOTIwNTU4MjdhZTk1OCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNzIxLDE0ICs3MjEsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICp0YXNrX2NhcGMoc3RydWN0IHpvbmUgKnpvbmUpXG4gXHRyZXR1cm4gdW5saWtlbHkoY2FwYykgXHUwMDI2XHUwMDI2XG4gXHRcdCEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCFjYXBjLVx1MDAzZXBhZ2UgXHUwMDI2XHUwMDI2XG4tXHRcdGNhcGMtXHUwMDNlY2MtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG4rXHRcdGNhcGMtXHUwMDNlem9uZSA9PSB6b25lID8gY2FwYyA6IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIGNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXG4ge1xuLVx0aWYgKCFjYXBjIHx8IG9yZGVyICE9IGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIpXG4rXHRpZiAoIWNhcGMgfHwgb3JkZXIgIT0gY2FwYy1cdTAwM2VvcmRlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogRG8gbm90IGFjY2lkZW50YWxseSBwb2xsdXRlIENNQSBvciBpc29sYXRlZCByZWdpb25zKi9cbkBAIC03NDQsMTIgKzc0NCwxMiBAQCBjb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHQgKiBoYXZlIHRyb3VibGUgZmluZGluZyBhIGhpZ2gtb3JkZXIgZnJlZSBwYWdlLlxuIFx0ICovXG4gXHRpZiAob3JkZXIgXHUwMDNjIHBhZ2VibG9ja19vcmRlciBcdTAwMjZcdTAwMjYgbWlncmF0ZXR5cGUgPT0gTUlHUkFURV9NT1ZBQkxFIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGNhcGMtXHUwMDNlY2MtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuK1x0ICAgIGNhcGMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAobWlncmF0ZXR5cGUgIT0gY2FwYy1cdTAwM2VjYy1cdTAwM2VtaWdyYXRldHlwZSlcbi1cdFx0dHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIGNhcGMtXHUwMDNlY2MtXHUwMDNlb3JkZXIsIG9yZGVyLFxuLVx0XHRcdFx0XHQgICAgY2FwYy1cdTAwM2VjYy1cdTAwM2VtaWdyYXRldHlwZSwgbWlncmF0ZXR5cGUpO1xuK1x0aWYgKG1pZ3JhdGV0eXBlICE9IGNhcGMtXHUwMDNlbWlncmF0ZXR5cGUpXG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2NfZXh0ZnJhZyhwYWdlLCBjYXBjLVx1MDAzZW9yZGVyLCBvcmRlcixcbitcdFx0XHRcdFx0ICAgIGNhcGMtXHUwMDNlbWlncmF0ZXR5cGUsIG1pZ3JhdGV0eXBlKTtcbiBcbiBcdGNhcGMtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC00MTQ2LDE4ICs0MTQ2LDY3IEBAIF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0dW5zaWduZWQgaW50IG5vcmVjbGFpbV9mbGFnO1xuK1x0c3RydWN0IGNhcHR1cmVfY29udHJvbCBjYXBjID0ge1xuK1x0XHQuem9uZSA9IE5VTEwsXG4rXHRcdC5taWdyYXRldHlwZSA9IGFjLVx1MDAzZW1pZ3JhdGV0eXBlLFxuK1x0XHQub3JkZXIgPSBvcmRlcixcbitcdFx0LnBhZ2UgPSBOVUxMLFxuK1x0fTtcbitcdGludCBjb21wYWN0X29yZGVyID0gb3JkZXI7XG4gXG4tXHRpZiAoIW9yZGVyKVxuK1x0LypcbitcdCAqIElmIGZhbGxiYWNrcyBhcmUgbm90IHBlcm1pdHRlZCAoZGVmcmFnX21vZGUpLCB3ZSBlaXRoZXJcbitcdCAqIG5lZWQgdG8gcmVjbGFpbSBzcGFjZSBpbiBhIGJsb2NrIG9mIG1hdGNoaW5nIHR5cGUsIG9yIGNsZWFyXG4rXHQgKiBvdXQgYW4gZW50aXJlIGJsb2NrIHRvIGFsbG93IF9fcm1xdWV1ZV9jbGFpbSgpIHRvIGNvbnZlcnQuXG4rXHQgKlxuK1x0ICogUmVjbGFpbSBieSBpdHNlbGYgaXMgcHJpbWFyaWx5IGZyZWVpbmcgc3BhY2UgaW4gbW92YWJsZVxuK1x0ICogYmxvY2tzLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIExSVSBwYWdlcyBsaXZlLiBTbyB0aGlzXG4rXHQgKiB3b3JrcyBmb3IgbW92YWJsZSByZXF1ZXN0cywgYnV0IG5vdCBmb3Igb3RoZXJzLlxuK1x0ICpcbitcdCAqIEZvciB0aG9zZSwgcHJvbW90ZSB0aGUgb3JkZXIgdG8gaGVscCBtYWtlIGJsb2NrcywgaW5zdGVhZFxuK1x0ICogb2Ygc3Bpbm5pbmcgaW4gcmVjbGFpbSBhbG9uZSB1bnByb2R1Y3RpdmVseS5cbitcdCAqL1xuK1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdFx0Y29tcGFjdF9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbitcbitcdGlmICghY29tcGFjdF9vcmRlcilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbiBcdGRlbGF5YWNjdF9jb21wYWN0X3N0YXJ0KCk7XG4rXHRmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX21hc2spO1xuIFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuIFxuLVx0KmNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsXG4tXHRcdFx0XHRcdFx0XHRcdHByaW8sIFx1MDAyNnBhZ2UpO1xuK1x0LypcbitcdCAqIE1ha2Ugc3VyZSB0aGUgc3RydWN0cyBhcmUgcmVhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB3ZSBleHBvc2UgdGhlXG4rXHQgKiBjYXB0dXJlIGNvbnRyb2wsIGluIGNhc2Ugd2UgYXJlIGludGVycnVwdGVkIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsZXJcbitcdCAqIGZyZWVzIGEgcGFnZS5cbitcdCAqL1xuK1x0YmFycmllcigpO1xuK1x0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgXHUwMDI2Y2FwYyk7XG4rXG4rXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGFsbG9jX2ZsYWdzLCBhYywgcHJpbywgXHUwMDI2Y2FwYyk7XG4rXG4rXHQvKlxuK1x0ICogTWFrZSBzdXJlIHdlIGhpZGUgY2FwdHVyZSBjb250cm9sIGZpcnN0IGJlZm9yZSB3ZSByZWFkIHRoZSBjYXB0dXJlZFxuK1x0ICogcGFnZSBwb2ludGVyLCBvdGhlcndpc2UgYW4gaW50ZXJydXB0IGNvdWxkIGZyZWUgYW5kIGNhcHR1cmUgYSBwYWdlXG4rXHQgKiBhbmQgd2Ugd291bGQgbGVhayBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShjdXJyZW50LVx1MDAzZWNhcHR1cmVfY29udHJvbCwgTlVMTCk7XG4rXHRwYWdlID0gUkVBRF9PTkNFKGNhcGMucGFnZSk7XG4rXG4rXHQvKlxuK1x0ICogVGVjaG5pY2FsbHksIGl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBjb21wYWN0aW9uIGlzIHNraXBwZWQgYnV0XG4rXHQgKiB0aGUgcGFnZSBpcyBzdGlsbCBjYXB0dXJlZCBvdXQgb2YgbHVjayhJUlEgY2FtZSBhbmQgZnJlZWQgdGhlIHBhZ2UpLlxuK1x0ICogUmV0dXJuaW5nIENPTVBBQ1RfU1VDQ0VTUyBpbiBzdWNoIGNhc2VzIGhlbHBzIGluIHByb3Blcmx5IGFjY291bnRpbmdcbitcdCAqIHRoZSBDT01QQUNUW1NUQUxMfEZBSUxdIHdoZW4gY29tcGFjdGlvbiBpcyBza2lwcGVkLlxuK1x0ICovXG4rXHRpZiAocGFnZSlcbitcdFx0KmNvbXBhY3RfcmVzdWx0ID0gQ09NUEFDVF9TVUNDRVNTO1xuIFxuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuK1x0ZnNfcmVjbGFpbV9yZWxlYXNlKGdmcF9tYXNrKTtcbiBcdHBzaV9tZW1zdGFsbF9sZWF2ZShcdTAwMjZwZmxhZ3MpO1xuIFx0ZGVsYXlhY2N0X2NvbXBhY3RfZW5kKCk7XG4gXG5AQCAtNDE4Miw3ICs0MjMxLDcgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTtcbiBcbiBcdFx0em9uZS1cdTAwM2Vjb21wYWN0X2Jsb2Nrc2tpcF9mbHVzaCA9IGZhbHNlO1xuLVx0XHRjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHpvbmUsIG9yZGVyLCB0cnVlKTtcbitcdFx0Y29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBjb21wYWN0X29yZGVyLCB0cnVlKTtcbiBcdFx0Y291bnRfdm1fZXZlbnQoQ09NUEFDVFNVQ0NFU1MpO1xuIFx0XHRyZXR1cm4gcGFnZTtcbiBcdH1cbkBAIC00NDIyLDkgKzQ0NzEsMTQgQEAgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbitcdGludCByZWNsYWltX29yZGVyID0gb3JkZXI7XG4rXG4rXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xuK1x0aWYgKChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9GUkFHTUVOVCkgXHUwMDI2XHUwMDI2IGFjLVx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcbitcdFx0cmVjbGFpbV9vcmRlciA9IG1heChvcmRlciwgcGFnZWJsb2NrX29yZGVyKTtcbiBcbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuLVx0KmRpZF9zb21lX3Byb2dyZXNzID0gX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX21hc2ssIG9yZGVyLCBhYyk7XG4rXHQqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgcmVjbGFpbV9vcmRlciwgYWMpO1xuIFx0aWYgKHVubGlrZWx5KCEoKmRpZF9zb21lX3Byb2dyZXNzKSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6MTY6MzYuOTcyNDI5NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTU3OTUxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gc3Vic3lzdGVtLiBSaWdodCBhd2F5LCBJIHNlZSBpdCB0b3VjaGVzIHNvbWUga2V5IGZpbGVzOiBgbW0vY29tcGFjdGlvbi5jYCwgYG1tL3BhZ2VfYWxsb2MuY2AsIGBpbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaGAsIGFuZCBgbW0vaW50ZXJuYWwuaGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIG1hbmFnZWQgZHVyaW5nIGRpcmVjdCBjb21wYWN0aW9uIGFuZCBhcmUgYWxzbyByZS13cml0aW5nIHNvbWUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIG1pZ3JhdGlvbiBzb3VyY2VzIGFuZCB0YXJnZXRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhhbmRsaW5nIGBBTExPQ19OT0ZSQUdNRU5UYCBmbGFncyBhbmQgdGhlIGBwYWdlYmxvY2tfb3JkZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3ZSdyZSBvcHRpbWl6aW5nIGZyYWdtZW50YXRpb24gaGFuZGxpbmcgZm9yIHNwZWNpZmljIGFsbG9jYXRpb24gdHlwZXMgZHVyaW5nIGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltLlwiIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGNoYW5nZXMgYXJlIGFib3V0IHByb21vdGluZyB0aGUgb3JkZXIgdG8gYHBhZ2VibG9ja19vcmRlcmAgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgIGZsYWdzIGR1cmluZyBkaXJlY3QgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW1cblxuTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gTWVtb3J5IGNvbXBhY3Rpb24gaXMgYWJzb2x1dGVseSBhIGNvcmUgZmVhdHVyZSwgdHJpZ2dlcmVkIHdoZW4gaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoaXQgZnJhZ21lbnRhdGlvbiB3YWxscy4gVGhpcyBpc24ndCBzb21lIG5pY2hlIGNvcm5lciBjYXNlOyBpdCdzIGEgY3JpdGljYWwgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSBwcmVzc3VyZS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IHJlYWNoYWJsZS5cblxuTm93LCBteSBtaW5kIGp1bXBzIHRvIGZ1enppbmcgdGFyZ2V0cy4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpbXBhY3RzIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgYml0cyBvZiBsb2dpYyBJIG5lZWQgdG8gZm9jdXMgb246XG4tICAgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgXG4tICAgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgXG4tICAgYGNvbXBhY3Rfem9uZV9vcmRlcmBcbi0gICBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgXG4tICAgYGNvbXBhY3Rpb25fY2FwdHVyZWBcbi0gICBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGBcbi0gICBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWBcblxuTG9va3MgbGlrZSBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAgYW5kIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCBhcmUgcGFydCBvZiB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGguIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgY29tcGFjdGlvbi4gYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgIGFuZCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgYXJlIHVzZWQgZHVyaW5nIHRoZSBhY3R1YWwgY29tcGFjdGlvbi5cblxuRmluYWxseSwgYXJlIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IENvbXBhY3Rpb24sIHRoYW5rZnVsbHksIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19DT01QQUNUSU9OYC4gTGV0J3MgdmVyaWZ5IHRoYXQgcXVpY2tseSBpbiBgbW0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCdsbCBiZSBhIGtleSBwcmUtcmVxdWlzaXRlIGZvciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzcyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6MTY6NDMuOTMwMzgzMDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzc2MTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NjQyPWNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTMtIyBzdXBwb3J0IGZvciBtZW1vcnkgY29tcGFjdGlvblxcbm1tL0tjb25maWc6NjU0OmNvbmZpZyBDT01QQUNUSU9OXFxubW0vS2NvbmZpZy02NTUtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNjo0NC4yNTQxNTQ1OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI0NzkwMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IENvbXBhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGaXJzdCwgdGhlIG9idmlvdXM6IEkgbmVlZCB0byB2ZXJpZnkgaWYgYENPTkZJR19DT01QQUNUSU9OYCBpcyBlbmFibGVkLCBhcyB0aGF0J3MgY2xlYXJseSB0aGUgcHJpbWFyeSBzd2l0Y2ggZm9yIHRoZSBlbnRpcmUgY29tcGFjdGlvbiBtZWNoYW5pc20uIEFuZCBzaW5jZSBjb21wYWN0aW9uIGZyZXF1ZW50bHkgaW52b2x2ZXMgbW92aW5nIHBhZ2VzIGFyb3VuZCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGlzIGFsc28gZW5hYmxlZCwgYXMgbWlncmF0aW9uIGlzIHR5cGljYWxseSBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHByb2Nlc3MuXG5cbk5vdywgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGJvdGggYG1tL2NvbXBhY3Rpb24uY2AgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBmaWxlcyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQgYXdheSwgSSBrbm93IGBtbS9jb21wYWN0aW9uLmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIG9ubHkgaWYgYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbmVkLCB3aGljaCByZWluZm9yY2VzIHRoZSBpbml0aWFsIGFzc3VtcHRpb24uIEJhc2VkIG9uIHRoaXMsIEkgd291bGQgZ3Vlc3MgdGhpcyBwYXRjaCBkZXBlbmRzIHNvbGVseSBvbiBgQ09ORklHX0NPTVBBQ1RJT05gIGFuZCBgQ09ORklHX01JR1JBVElPTmAsIHdpdGggYENPTkZJR19DT01QQUNUSU9OYCBiZWluZyBlc3NlbnRpYWwgZm9yIHRoaXMgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE2OjQ4LjI3ODk0NjQ0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTYxNDY3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfQ09NUEFDVElPTlxcXFwpLipjb21wYWN0aW9uXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNjo0OC4zNDA1Njk2MzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODMxNjA2NTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGl0LiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzLCB0aGlua2luZyBhcyBhbiBleHBlcnQ6XG5cbioqQ29tcGFjdGlvbiBpbiBgbW0vTWFrZWZpbGVgIOKAkyBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IHRoZSBjb21wYWN0aW9uIHByb2Nlc3MgaXMgYmVpbmcgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBidWlsZCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIGJ5IGV4dGVuc2lvbiwgYW55IGNvbXBhY3Rpb24gcm91dGluZXMgb3IgcmVsYXRlZCBsb2dpYy4gQSBxdWljayBzY2FuIHRoZXJlIGNhbiBvZnRlbiByZXZlYWwgaWYgY29tcGFjdGlvbiBpcyBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgY29tcGlsZS10aW1lIGZsYWdzIEkgbmVlZCB0byBjb25zaWRlci4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgSSdtIG5vdCBnb2luZyB0byBzcGluIG15IHdoZWVscyBkaWdnaW5nIHRocm91Z2ggc291cmNlIGNvZGUgaWYgdGhlIE1ha2VmaWxlIGlzbid0IGV2ZW4gY29uZmlndXJlZCB0byBpbmNsdWRlIHRoZSBwYXJ0cyB0aGF0IEkgbmVlZCB0byBhbmFseXplLiBHb3R0YSBlc3RhYmxpc2ggbXkgYmFzZWxpbmUsIGtub3cgd2hhdCB0b29scyB0aGUgYnVpbGQgdXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE3OjQ2LjY1NjYzNjcxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTY3NzM0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvblxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTUtXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU2OlxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Ny1cXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxNzo0Ni45NTM0MTQ3NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgwNjQ1NjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIENvbXBhY3Rpb24ncyBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgY29tcGFjdGlvbi5vYC4gSXMgaXQgKmFsd2F5cyogYnVpbHQgaW50byB0aGUga2VybmVsLCBvciBpcyBpdCBjb25kaXRpb25hbD8gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzOiB3aGF0IGFyZSB0aGUgYnVpbGQgb3B0aW9ucyBhdCBwbGF5PyBJdCdzIGEga2V5IHF1ZXN0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLlxuXG5UaGUgcmVmbGV4IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9jb21wYWN0aW9uLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdXNlZCB3aXRoIGEgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSBxdWlja2VzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIGNvbXBhY3Rpb24gaXMgYnVpbHQtaW4gb3IgaWYgaXQncyBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoaXMgd2lsbCBkaXJlY3RseSBkaWN0YXRlIHdoZXRoZXIgaXQncyBhbHdheXMgcGFydCBvZiBteSBrZXJuZWwgb3Igc29tZXRoaW5nIEkgY2FuIGVuYWJsZSBvciBkaXNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTY6MTg6MTYuNzU5ODczNDQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxNTQzODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19DT01QQUNUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmMtMjgtXFxubW0vY29tcGFjdGlvbi5jOjI5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0zMC0vKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTYxLVxcbm1tL2NvbXBhY3Rpb24uYzo2MjojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9jb21wYWN0aW9uLmMtNjMtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9OTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgcmVsZWFzZV9mcmVlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZXBhZ2VzKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTExNS1cXG5tbS9jb21wYWN0aW9uLmM6MTE2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMTctXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9NDkwPXN0YXRpYyBib29sIHRlc3RfYW5kX3NldF9za2lwKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy00OTMtfVxcbm1tL2NvbXBhY3Rpb24uYzo0OTQ6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxubW0vY29tcGFjdGlvbi5jLTQ5NS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xMzM3PWlzb2xhdGVfbWlncmF0ZXBhZ2VzX3JhbmdlKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMzcyLVxcbm1tL2NvbXBhY3Rpb24uYzoxMzczOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXFxubW0vY29tcGFjdGlvbi5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTEzNzUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzM2Mz1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXFxubW0vY29tcGFjdGlvbi5jLTMzNjQtXFxubW0vY29tcGFjdGlvbi5jOjMzNjU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE4OjE3LjgzMTQyMjE2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjAxNDg2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3Vzc2luZyBGdXp6aW5nIEVmZm9ydHMgZm9yIE1lbW9yeSBDb21wYWN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGtleSBhcmVhIHRvIHRhcmdldCBoZXJlIGlzIGRlZmluaXRlbHkgYENPTkZJR19DT01QQUNUSU9OYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIE5vdywgdG8gbWFrZSB0aGUgbW9zdCBvZiBmdXp6aW5nLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGxpa2VseSB0byByZXZlYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgLCBgY29tcGFjdF96b25lX29yZGVyYCwgYGNvbXBhY3Rpb25fY2FwdHVyZWAsIGBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrYCwgYW5kIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYC5cblxuYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgbG9vayBsaWtlIHN0cm9uZyBjYW5kaWRhdGVzIHRvIHN0YXJ0IHdpdGguIFRoZXkncmUgcmlnaHQgdGhlcmUsIGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCByZWNsYWltaW5nLCB3aGljaCBpcyBvZnRlbiB3aGVyZSBzdWJ0bGUgaXNzdWVzIGFyaXNlLiBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGFsc28gc2VlbXMgcHJvbWlzaW5nLCBpdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUgYWN0dWFsIHdvcmsgaGFwcGVucy4gTm93LCBgY29tcGFjdGlvbl9jYXB0dXJlYC4uLiBobW0sIEkgcmVjYWxsIGl0IGJlaW5nIHJlbGF0ZWQgdG8gYHRhc2tfY2FwY2AsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgZnJvbSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBUaW1lIHRvIGRpZyBpbnRvIGBjb21wYWN0aW9uX2NhcHR1cmVgIGEgYml0IGRlZXBlciwgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxODoyMi40MzI5MTE4NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDg2NTQzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvbl9jYXB0dXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9NzI3PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm1tL3BhZ2VfYWxsb2MuYzo3Mjg6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjktXFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzY0PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm1tL3BhZ2VfYWxsb2MuYzo3NjU6Y29tcGFjdGlvbl9jYXB0dXJlKHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMsIHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2VfYWxsb2MuYy03NjYtXFx0XFx0ICAgaW50IG9yZGVyLCBpbnQgbWlncmF0ZXR5cGUpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9OTM2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZyZWVfb25lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtOTU4LVxcbm1tL3BhZ2VfYWxsb2MuYzo5NTk6XFx0XFx0aWYgKGNvbXBhY3Rpb25fY2FwdHVyZShjYXBjLCBwYWdlLCBvcmRlciwgbWlncmF0ZXR5cGUpKSB7XFxubW0vcGFnZV9hbGxvYy5jLTk2MC1cXHRcXHRcXHRhY2NvdW50X2ZyZWVwYWdlcyh6b25lLCAtKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpLCBtaWdyYXRldHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE4OjIzLjU0MTU3NDEzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU4OTAzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBIb3RzcG90cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gbWVtb3J5IGFsbG9jYXRpb24gcGVyZm9ybWFuY2UsIGFuZCBpdCdzIGNsZWFyIHRoYXQgYF9fZnJlZV9vbmVfcGFnZWAgaXMgYSBzZXJpb3VzIGJvdHRsZW5lY2sg4oCTIGEgcmVhbCBob3QgcGF0aC4gV2UgbmVlZCB0byB0cmVhZCBjYXJlZnVsbHkgYXJvdW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBpdCB0b28gZnJlcXVlbnRseS4gQ29uc2lkZXJpbmcgdGhhdCwgSSdtIHRoaW5raW5nIHdlIHNob3VsZCBzdGVlciBjbGVhciBvZiBmb2N1c2luZyBvbiBgY29tcGFjdGlvbl9jYXB0dXJlYCBhcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBvcHRpbWl6YXRpb24gcmlnaHQgbm93OyBpdCBjb3VsZCBiZSB0b28gaW50ZXJ0d2luZWQgd2l0aCBgX19mcmVlX29uZV9wYWdlYCBhbmQgZXhhY2VyYmF0ZSBhbnkgaXNzdWVzLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAgcHJlc2VudCBhIGRpZmZlcmVudCBvcHBvcnR1bml0eS4gVGhlc2UgYXJlIGtub3duIGFzIHNsb3dlciBhbGxvY2F0aW9uIHBhdGhzLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBXZSBhbHNvIGhhdmUgYHRyeV90b19jb21wYWN0X3BhZ2VzYCB3aGljaCBpcyBhbm90aGVyIHNsb3cgcGF0aCwgYnkgZGVmaW5pdGlvbi4gU2ltaWxhcmx5LCBgZmFzdF9maW5kX21pZ3JhdGVibG9ja2AgYW5kIGBzdWl0YWJsZV9taWdyYXRpb25fc291cmNlYCBhcmUgcGFydCBvZiB0aGUgY29tcGFjdGlvbiBwcm9jZXNzLCBhIHJlbGF0aXZlbHkgc2xvdyBhcmVhIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZCBhbGxvYy9mcmVlIG9wZXJhdGlvbnMuXG5cbkdpdmVuIHRoZSBvcHRpb25zLCBsZXQncyBkcmlsbCBkb3duIGludG8gYF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RgIGFuZCBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAuIFRoZXkncmUgcHJvYmFibHkgd2hlcmUgd2UgY2FuIGdldCB0aGUgbW9zdCBzaWduaWZpY2FudCBnYWlucyBieSBvcHRpbWl6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQ0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE2OjE4OjI4LjAwMDQ3OTg1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1NjQ1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTQxNDE9c3RhdGljIHN0cnVjdCBwYWdlICpcXG5tbS9wYWdlX2FsbG9jLmM6NDE0MjpfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTQxNDMtXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDMxOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcXG5tbS9wYWdlX2FsbG9jLmM6NDMxOTpfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTQzMjAtXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDQ2Nz1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDQ3NS1cXG5tbS9wYWdlX2FsbG9jLmM6NDQ3NjpcXHQvKiBNYXRjaCB0aGUgc2xvd3BhdGggY29tcGFjdGlvbiBwcm9tb3Rpb24gaW4gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYy00NDc3LVxcdGlmICgoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0ZSQUdNRU5UKSBcXHUwMDI2XFx1MDAyNiBhYy1cXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ3Nzk9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ5MzYtXFx0LyogVHJ5IGRpcmVjdCBjb21wYWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRpbmcgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDkzNzpcXHRwYWdlID0gX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyxcXG5tbS9wYWdlX2FsbG9jLmMtNDkzOC1cXHRcXHRcXHRcXHRcXHRjb21wYWN0X3ByaW9yaXR5LCBcXHUwMDI2Y29tcGFjdF9yZXN1bHQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxODoyOC4wNTcwNDgzNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkzOTAxNTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IENvbXBhY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBhcmVhcy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHByb2Nlc3MgemVyb2VzIGluIG9uIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zOiBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYHRyeV90b19jb21wYWN0X3BhZ2VzYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgLCBhbmQgYHN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gdGhlIGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBkZXBlbmRlbmNpZXMg4oCTIGlzIGBDT05GSUdfQ09NUEFDVElPTmAgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eT8gQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0LCB5ZXMsIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgdGhlIHByaW1hcnkgZW5hYmxlci4gR29vZC4gTm8gb3RoZXIgY3JpdGljYWwgY29uZmlnIG9wdGlvbnMgYmVzaWRlcyBgQUxMT0NfTk9GUkFHTUVOVGAgKHdoaWNoIGlzIGEgZmxhZykgYW5kIGBNSUdSQVRFX01PVkFCTEVgLCB3aGljaCBzZWVtcyB0byBiZSBhIG1pZ3JhdGV0eXBlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucy4gSXQgc2VlbXMgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gIGdldHMgdHdlYWtlZCB0byBpbmZsdWVuY2UgdGhlIGFsbG9jYXRpb24gb3JkZXIgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHVzaW5nIGBBTExPQ19OT0ZSQUdNRU5UYC4gIEFsc28sIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0YCBzZWVzIGEgbW9kaWZpY2F0aW9uLCBvcmRlciBwcm9tb3Rpb24gYW5kIHRoZSBwcm9wZXIgdXNlIG9mIGBjYXB0dXJlX2NvbnRyb2xgLiBBZGRpdGlvbmFsbHksIGB0cnlfdG9fY29tcGFjdF9wYWdlc2Agc2hpZnRzIGZyb20gdGFraW5nIGBwYWdlICoqYCB0byB0YWtpbmcgYGNhcHR1cmVfY29udHJvbGAuXG5cbk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHNvIEkgY2hlY2sgaWYgdGhleSBhcmUgc3RhdGljLiBBcyBJIGV4cGVjdGVkLCBgX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdGAsIGBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltYCwgYGZhc3RfZmluZF9taWdyYXRlYmxvY2tgIGFuZCBgc3VpdGFibGVfbWlncmF0aW9uX3NvdXJjZWAgYXJlIHN0YXRpYywgd2hpbGUgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub24tc3RhdGljIG9yIGV4cG9ydGVkLlxuXG5TbywgZm9yIHRoZSBmdXp6ZXIsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIG9idmlvdXMgdGFyZ2V0cy4gSSBrbm93IHRoaXMgY29kZSBoYW5kbGVzIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMsIHBvdGVudGlhbGx5IHVuZGVyIGZyYWdtZW50ZWQgbWVtb3J5IGNvbmRpdGlvbnMuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgZG91YmxlLWNoZWNrIHRoYXQgYENPTVBBQ1RJT05gIGlzIGluZGVlZCBzdWZmaWNpZW50LiBBbmQgeWVzLCBpdCBpcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE0LCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNjoxODozNi45OTYwNjY2NDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQwNzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3RcIixcbiAgICBcIl9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1cIixcbiAgICBcInRyeV90b19jb21wYWN0X3BhZ2VzXCIsXG4gICAgXCJmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrXCIsXG4gICAgXCJzdWl0YWJsZV9taWdyYXRpb25fc291cmNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGRpcmVjdCByZWNsYWltIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGBjYXB0dXJlX2NvbnRyb2xgIGlzIGhhbmRsZWQgYW5kIGhvdyBhbGxvY2F0aW9uIG9yZGVycyBhcmUgcHJvbW90ZWQgZm9yIG5vbi1tb3ZhYmxlIGFsbG9jYXRpb25zIHdpdGggYEFMTE9DX05PRlJBR01FTlRgLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0cmlnZ2VyZWQgYnkgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB1bmRlciBtZW1vcnkgZnJhZ21lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdFwiLFxuICAgIFwiX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcImZhc3RfZmluZF9taWdyYXRlYmxvY2tcIixcbiAgICBcInN1aXRhYmxlX21pZ3JhdGlvbl9zb3VyY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgZGlyZWN0IHJlY2xhaW0gbG9naWMsIHNwZWNpZmljYWxseSBob3cgYGNhcHR1cmVfY29udHJvbGAgaXMgaGFuZGxlZCBhbmQgaG93IGFsbG9jYXRpb24gb3JkZXJzIGFyZSBwcm9tb3RlZCBmb3Igbm9uLW1vdmFibGUgYWxsb2NhdGlvbnMgd2l0aCBgQUxMT0NfTk9GUkFHTUVOVGAuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRyaWdnZXJlZCBieSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHVuZGVyIG1lbW9yeSBmcmFnbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6s2t5[1] Phase: Succeeded StartedAt: 2026-07-23 16:18:48 +0000 UTC FinishedAt: 2026-07-23 16:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 16:18:48 +0000 UTC FinishedAt: 2026-07-23 16:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2] Phase: Succeeded StartedAt: 2026-07-23 16:18:48 +0000 UTC FinishedAt: 2026-07-23 20:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 16:18:48 +0000 UTC FinishedAt: 2026-07-23 20:50:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 16:18:48 +0000 UTC FinishedAt: 2026-07-23 16:18:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 16:18:48 +0000 UTC FinishedAt: 2026-07-23 16:18:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow6s2t5/series-workflow6s2t5-convert-artifact-657136993/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 16:18:58 +0000 UTC FinishedAt: 2026-07-23 17:03:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 16:18:58 +0000 UTC FinishedAt: 2026-07-23 17:03:47 +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:*1b29b59f-65d7-4170-b639-e50fa48778f3,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-workflow6s2t5/series-workflow6s2t5-convert-artifact-657136993/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": "39aa21e4-8002-4fa9-9b7c-f082d69238f7", "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-workflow6s2t5/series-workflow6s2t5-build-action-1743448719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 16:18:58 +0000 UTC FinishedAt: 2026-07-23 17:02:32 +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:*1b29b59f-65d7-4170-b639-e50fa48778f3,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-workflow6s2t5/series-workflow6s2t5-convert-artifact-657136993/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": "39aa21e4-8002-4fa9-9b7c-f082d69238f7", "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-workflow6s2t5/series-workflow6s2t5-build-action-1743448719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 17:03:47 +0000 UTC FinishedAt: 2026-07-23 17:03:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 17:03:47 +0000 UTC FinishedAt: 2026-07-23 17:03:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 17:03:47 +0000 UTC FinishedAt: 2026-07-23 17:03:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 17:03:47 +0000 UTC FinishedAt: 2026-07-23 17:03:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow6s2t5/series-workflow6s2t5-convert-artifact-281920180/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 17:03:57 +0000 UTC FinishedAt: 2026-07-23 17:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 17:03:57 +0000 UTC FinishedAt: 2026-07-23 17:06:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*39aa21e4-8002-4fa9-9b7c-f082d69238f7,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-workflow6s2t5/series-workflow6s2t5-build-action-1743448719/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-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 17:06:13 +0000 UTC FinishedAt: 2026-07-23 17:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 17:06:13 +0000 UTC FinishedAt: 2026-07-23 17:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 17:06:13 +0000 UTC FinishedAt: 2026-07-23 17:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 17:06:13 +0000 UTC FinishedAt: 2026-07-23 17:44:56 +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:*1b29b59f-65d7-4170-b639-e50fa48778f3,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-workflow6s2t5/series-workflow6s2t5-convert-artifact-281920180/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": "a8c00019-780c-4378-8d84-c58fed5ebf06", "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-workflow6s2t5/series-workflow6s2t5-build-action-2165843072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 17:06:13 +0000 UTC FinishedAt: 2026-07-23 17:44:35 +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:*1b29b59f-65d7-4170-b639-e50fa48778f3,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-workflow6s2t5/series-workflow6s2t5-convert-artifact-281920180/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": "a8c00019-780c-4378-8d84-c58fed5ebf06", "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-workflow6s2t5/series-workflow6s2t5-build-action-2165843072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 17:44:56 +0000 UTC FinishedAt: 2026-07-23 17:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 17:44:56 +0000 UTC FinishedAt: 2026-07-23 17:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 17:44:56 +0000 UTC FinishedAt: 2026-07-23 17:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 17:44:56 +0000 UTC FinishedAt: 2026-07-23 17:46:55 +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:*a8c00019-780c-4378-8d84-c58fed5ebf06,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-workflow6s2t5/series-workflow6s2t5-build-action-2165843072/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-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 17:47:04 +0000 UTC FinishedAt: 2026-07-23 20:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 17:47:04 +0000 UTC FinishedAt: 2026-07-23 20:50:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},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:*39aa21e4-8002-4fa9-9b7c-f082d69238f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8c00019-780c-4378-8d84-c58fed5ebf06,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-workflow6s2t5/series-workflow6s2t5-build-action-1743448719/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-workflow6s2t5/series-workflow6s2t5-build-action-2165843072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 17:47:04 +0000 UTC FinishedAt: 2026-07-23 17:47:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 17:47:04 +0000 UTC FinishedAt: 2026-07-23 17:47:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},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-workflow6s2t5/series-workflow6s2t5-convert-artifact-1062246365/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 17:47:04 +0000 UTC FinishedAt: 2026-07-23 17:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 17:47:04 +0000 UTC FinishedAt: 2026-07-23 17:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 17:47:04 +0000 UTC FinishedAt: 2026-07-23 17:47:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 17:47:14 +0000 UTC FinishedAt: 2026-07-23 20:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6s2t5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__alloc_pages_direct_compact","__alloc_pages_direct_reclaim","try_to_compact_pages","fast_find_migrateblock","suitable_migration_source"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d5aa4cacc9999594171c96e327110788d0987da","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION"],"series_id":"43c35080-ee60-4281-bb5f-cd20c8aae974","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 17:47:14 +0000 UTC FinishedAt: 2026-07-23 20:49:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*39aa21e4-8002-4fa9-9b7c-f082d69238f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a8c00019-780c-4378-8d84-c58fed5ebf06,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-workflow6s2t5/series-workflow6s2t5-build-action-1743448719/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-workflow6s2t5/series-workflow6s2t5-build-action-2165843072/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-workflow6s2t5/series-workflow6s2t5-convert-artifact-1062246365/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,}