Name: series-workflow55zps Phase: Succeeded StartedAt: 2026-07-29 18:24:52 +0000 UTC FinishedAt: 2026-07-29 22:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[0] Phase: Succeeded StartedAt: 2026-07-29 18:24:52 +0000 UTC FinishedAt: 2026-07-29 18:50:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 18:24:52 +0000 UTC FinishedAt: 2026-07-29 18:50:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d1c8241d856919a1731822f129fc628f71547d96", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d1c8241d856919a1731822f129fc628f71547d96", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "0e327424-72af-47ac-a55a-e3629e4925fd" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "afs_is_owned_by_me", "afs_have_same_owner", "vfs_inode_is_owned_by_me", "setattr_prepare", "inode_owner_or_capable", "vfs_setlease", "__check_sticky", "vfs_dedupe_file_range_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjOTlhOTc4ZTcxODBjYjI0ZDlhZTE1MWQ3NTJiY2I5N2VjNDRkYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxODo0OTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbmluZGV4IDdjNzUzMTQ4YWY4ODguLjg5MzQxOWUwMDNlYWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1x0XHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiAmIzQzOzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbiYjNDM7YGBpc19vd25lZF9ieV9tZWBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAmIzM5O293bmVkJiMzOTsgYnlcbiYjNDM7XHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbiYjNDM7XHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4mIzQzO1x0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcbiYjNDM7XHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbiYjNDM7XHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4mIzQzO1x0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXG4mIzQzO1xuJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxuJiM0MztcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4mIzQzO1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuJiM0MztcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcbiYjNDM7XHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4mIzQzO1x0a3VpZF90LlxuJiM0MztcbiYjNDM7XG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkLi5lZTJmNWVjMGIyYzY3IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyLmNcbkBAIC02OSw2ICYjNDM7NjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQucGVybWlzc2lvblx0PSBhZnNfcGVybWlzc2lvbixcbiBcdC5nZXRhdHRyXHQ9IGFmc19nZXRhdHRyLFxuIFx0LnNldGF0dHJcdD0gYWZzX3NldGF0dHIsXG4mIzQzO1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbiYjNDM7XHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jXG5pbmRleCAwNDY3NzQyYmZlZWUzLi5iYTQ0NDkzY2NhZjZlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZpbGUuY1xuQEAgLTQ5LDYgJiM0Mzs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4mIzQzO1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbiYjNDM7XHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW5vZGUuYyBiL2ZzL2Fmcy9pbm9kZS5jXG5pbmRleCAxNGYzOWE5YmVhNmNmLi5hZjg1YTg4ZDk0M2RkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jXG5AQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wZmxhZ3MgfD0gSU9QX09XTkVSU0hJUF9PVkVSUklERTtcbiBcdHNldF9ubGluayhcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVx1MDAzZW5saW5rKTtcbiBcbiBcdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVx1MDAzZXNpemUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLmYxNWRiYmM4ZGQyNjQgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xNTMxLDYgJiM0MzsxNTMxLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleV9yY3Uoc3RydWN0IGFmc19jZWxsICopO1xuIGV4dGVybiBpbnQgYWZzX2NoZWNrX3Blcm1pdChzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBrZXkgKiwgYWZzX2FjY2Vzc190ICopO1xuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xuIGV4dGVybiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlY3VyaXR5LmMgYi9mcy9hZnMvc2VjdXJpdHkuY1xuaW5kZXggNmQwMGQ2MmE2NWVkZi4uNzA5MmY1YWNkY2Q2YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc2VjdXJpdHkuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgJiMzOTttZSYjMzk7IC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlXG4mIzQzOyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGVcbiYjNDM7ICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXG4mIzQzOyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XG4mIzQzO1x0YWZzX2FjY2Vzc190IGFjY2VzcztcbiYjNDM7XHRzdHJ1Y3Qga2V5ICprZXk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdHJldHVybiAxOyAvKiBUaGUgQURNSU4gcmlnaHQgY2hlY2sgZG9lc24mIzM5O3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXG4mIzQzO1xuJiM0MztcdGtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS1cdTAwM2V2b2x1bWUtXHUwMDNlY2VsbCk7XG4mIzQzO1x0aWYgKElTX0VSUihrZXkpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbiYjNDM7XG4mIzQzO1x0LyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi9cbiYjNDM7XHRyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksIFx1MDAyNmFjY2Vzcyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGdldCB0aGUgQURNSU5JU1RFUiBiaXQgaWYgd2Ugb3duIHRoZSBmaWxlLiAqL1xuJiM0MztcdHJldCA9IChhY2Nlc3MgXHUwMDI2IEFGU19BQ0VfQURNSU5JU1RFUikgPyAwIDogMTtcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0a2V5X3B1dChrZXkpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXG4mIzQzOyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTXG4mIzQzOyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMSA9IEFGU19GU19JKGlub2RlMSk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZub2RlMS1cdTAwM2VzdGF0dXMub3duZXIgIT0gdm5vZGUyLVx1MDAzZXN0YXR1cy5vd25lcjtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXG4ge1xuIFx0aW50IGk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N5bWxpbmsuYyBiL2ZzL2Fmcy9zeW1saW5rLmNcbmluZGV4IDE2YjQ4MjNjYjdiN2UuLmVkODM0YmE5MGU4NWEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc3ltbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc3ltbGluay5jXG5AQCAtMjcxLDYgJiM0MzsyNzEsOCBAQCBpbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldF9saW5rXHQ9IGFmc19nZXRfbGluayxcbiBcdC5yZWFkbGlua1x0PSBhZnNfcmVhZGxpbmssXG4mIzQzO1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbiYjNDM7XHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfYW9wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmNcbmluZGV4IDRmNDM3ZmFiYjdmMGYuLmI3ZThiNWQ0OWE5ZmUgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2F0dHIuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbiAvKipcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxuQEAgLTkxLDE5ICYjNDM7OTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4mIzQzO3N0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdGlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuc19jYXBhYmxlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIC8qKlxuQEAgLTExOCwyMyAmIzQzOzEyMSwyNyBAQCBzdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxuJiM0MztzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiB7XG4gXHR2ZnNnaWRfdCB2ZnNnaWQgPSBpX2dpZF9pbnRvX3Zmc2dpZChpZG1hcCwgaW5vZGUpO1xuLVx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0ID09IDApIHtcbiBcdFx0aWYgKHZmc2dpZF9lcShpYV92ZnNnaWQsIHZmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRpZiAodmZzZ2lkX2luX2dyb3VwX3AoaWFfdmZzZ2lkKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzZ2lkX3ZhbGlkKHZmc2dpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xNjMsNiAmIzQzOzE3MCw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cdTAwM2VpYV92YWxpZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LypcbiBcdCAqIEZpcnN0IGNoZWNrIHNpemUgY29uc3RyYWludHMuICBUaGVzZSBjYW4mIzM5O3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xuQEAgLTE4OSwxNCAmIzQzOzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdGdvdG8ga2lsbF9wcml2O1xuIFxuIFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkge1xuJiM0MztcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSB7XG4mIzQzO1x0XHRyZXQgPSBjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG1vZC4gKi9cbiBcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9NT0RFKSB7XG5kaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmNcbmluZGV4IGU2OGE3NmZmOTJhMzguLjNmMzJlNzNhYWVkYTIgMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgJiM0Mzs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuJiM0MztcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG4gXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWQuLmE3ZWM4MzBhYjY4M2YgMTAwNjQ0XG4tLS0gYS9mcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pbm9kZS5jXG5AQCAtMjc1MCwxNiAmIzQzOzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQ7XG4gXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0ID09IDApXG4gXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbiBcdG5zID0gY3VycmVudF91c2VyX25zKCk7XG4gXHRpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpIFx1MDAyNlx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcbmluZGV4IDM1NWQ5M2Y5MjIwODYuLmJlNDVjYzYzODg2MTkgMTAwNjQ0XG4tLS0gYS9mcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oXG5AQCAtNTEsNiAmIzQzOzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIC8qXG4gICogbmFtZWkuY1xuICAqL1xuJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuIFx0XHRcdCAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7XG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmNcbmluZGV4IDZlNGZmN2ZjZWMwNTMuLjAyZjgxMGRjOWU3ZTcgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuJiM0MztcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4mIzQzO1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdGlmIChlcnJvciAhPSAwIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XG4gXHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYuLjcyZjk0ZDIwNGY5M2YgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtNTUsOCAmIzQzOzU1LDggQEBcbiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGhcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xuICAqIHRoaXMgd2l0aCBjYWxscyB0byBcdTAwM2Nmc1x1MDAzZV9mb2xsb3dfbGluaygpLlxuLSAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93IFxuLSAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGwgXG4mIzQzOyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93XG4mIzQzOyAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXG4gICpcbiAgKiBXaXRoIHRoZSBuZXcgZGNhY2hlLCB0aGUgcGF0aG5hbWUgaXMgc3RvcmVkIGF0IGVhY2ggaW5vZGUsIGF0IGxlYXN0IGFzXG5AQCAtMTI1NSw2ICYjNDM7MTI1NSw3MiBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuIFxuICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXG4gXG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSB0aGUgcHJvY2VzcyAoYWxsb3dpbmcgZm9yIGZzdWlkIG92ZXJyaWRlKSxcbiYjNDM7ICogcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbVxuJiM0MzsgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4mIzQzOyAqL1xuJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4mIzQzO1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmdcbiYjNDM7ICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZ1xuJiM0MzsgKiB0aGUgZGV0ZXJtaW5hdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5vZGUgKmRpcjtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlub2RlICE9IG5kLVx1MDAzZWlub2RlKSB7XG4mIzQzO1x0XHRcdGRpciA9IG5kLVx1MDAzZWlub2RlO1xuJiM0MztcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IFJFQURfT05DRShuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4mIzQzO1x0XHRcdGRpciA9IFJFQURfT05DRShwYXJlbnQtXHUwMDNlZF9pbm9kZSk7XG4mIzQzO1x0XHRcdGlmICghZGlyKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUNISUxEO1xuJiM0MztcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJlbnQgPSBkZ2V0X3BhcmVudChuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4mIzQzO1x0XHRcdGRpciA9IHBhcmVudC1cdTAwM2VkX2lub2RlO1xuJiM0MztcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0XHRcdGRwdXQocGFyZW50KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmZzdWlkX3ZhbGlkKG5kLVx1MDAzZWRpcl92ZnN1aWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtXHUwMDNlZGlyX3Zmc3VpZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiB0d28gaW5vZGVzIGhhdmUgdGhlIHNhbWUgb3duZXIsIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmRcbiYjNDM7ICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxuJiM0MztcdFx0cmV0dXJuIGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRpZiAodmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksXG4mIzQzO1x0XHQgICAgICBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuQEAgLTEyNzEsMjcgJiM0MzsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbi1cdHZmc3VpZF90IHZmc3VpZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xuIFx0aWYgKChuZC1cdTAwM2VkaXJfbW9kZSBcdTAwMjYgKFNfSVNWVFh8U19JV09USCkpICE9IChTX0lTVlRYfFNfSVdPVEgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG4mIzQzO1x0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG4mIzQzO1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2IHZmc3VpZF9lcShuZC1cdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKVxuIFx0XHRyZXR1cm4gLUVDSElMRDtcbkBAIC0xMzg5LDEyICYjNDM7MTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxuICAqXG4gICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XG4tICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGVcbiYjNDM7ICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZCxcbiYjNDM7ICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLFxuJiM0MzsgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSxcbiYjNDM7ICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUsXG4mIzQzOyAqICAgLSB3ZSBkb24mIzM5O3Qgb3duIHRoZSBmaWxlIGFuZFxuICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBvd24gdGhlIGZpbGVcbi0gKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZVxuICAqIElmIHRoZSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIHNldCB0byAyXG4gICogdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsXG4gICogYmUgZW5vdWdoLlxuQEAgLTE0MDUsMTMgJiM0MzsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKlxuJiM0MzsgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXG4mIzQzOyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXG4mIzQzOyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXG4mIzQzOyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXG4mIzQzOyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXG4mIzQzOyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxuJiM0MzsgKlxuJiM0MzsgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuJiM0MzsgKlxuJiM0MzsgKlx0VVNFUlx0RElSXHRGSUxFXHRGSUxFXHRBTExPV0VEXG4mIzQzOyAqXHRcdE9XTkVSXHRPV05FUlx0U1RBVEVcbiYjNDM7ICpcdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cbiYjNDM7ICpcdEFcdEFcdC1cdE5ld1x0WWVzXG4mIzQzOyAqXHRBXHRBXHRBXHRFeGlzdHNcdFllc1xuJiM0MzsgKlx0QVx0QVx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0QVx0Qlx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdEJcdEFcdEV4aXN0c1x0WWVzLCBGTz09VVxuJiM0MzsgKlx0QVx0Qlx0Qlx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0QVx0Qlx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0QVx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdGFub25bMV1cdEFcdEV4aXN0c1x0WWVzXG4mIzQzOyAqXHRBXHRhbm9uWzFdXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRhbm9uXHRBXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0YW5vblx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdGFub25cdGFub25bMV1cdC1cdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdEFcdEV4aXN0c1x0WWVzLCBGTz09RE9cbiYjNDM7ICpcdGFub25cdEFcdENcdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdGFub25cdEV4aXN0c1x0Tm9cbiYjNDM7ICpcbiYjNDM7ICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cbiYjNDM7ICpcbiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLVx0XHRcdFx0c3RydWN0IGlub2RlICpjb25zdCBpbm9kZSlcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cdTAwM2VkaXJfbW9kZTtcbi1cdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cdTAwM2VkaXJfdmZzdWlkLCBpX3Zmc3VpZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE0MjIsMTMgJiM0MzsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cbi1cdGlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KGRpcl9tb2RlIFx1MDAyNiAwMDAyKSkge1xuIFx0XHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwgXCYjMzQ7c3RpY2t5X2NyZWF0ZVwmIzM0Oyk7XG5AQCAtMzY0NSwxMiAmIzQzOzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xuIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuLVx0a3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdHJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXG5pbmRleCAyNmFmYmJiZmIxMGMyLi45ZWVlOTNjMjcwMDEyIDEwMDY0NFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmVtYXBfcmFuZ2UuY1xuQEAgLTQxMywyMCAmIzQzOzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4gRVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7XG4gXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cbi1zdGF0aWMgYm9vbCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcbkBAIC00NTksOCAmIzQzOzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVQRVJNO1xuLVx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxuJiM0MztcdHJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfZHJvcF93cml0ZTtcbiBcbiBcdHJldCA9IC1FWERFVjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYuLjgwMTNjMTNhMzUzZDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICYjNDM7NjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4mIzQzOyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVx0MHgwMjAwXHQvKiBVc2UgLVx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xuIFxuIC8qXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cdTAwM2VpX2xvY2tcbkBAIC0xNzU1LDggJiM0MzsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjOTlhOTc4ZTcxODBjYjI0ZDlhZTE1MWQ3NTJiY2I5N2VjNDRkYWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxODo0OTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAppbmRleCA3Yzc1MzE0OGFmODg4Li44OTM0MTllMDAzZWFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CkBAIC00NDUsNiAmIzQzOzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDoKIAkJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogCQlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAkgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsJCWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CQlpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAl9OwogCiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3MKQEAgLTYzNCw2ICYjNDM7NjM3LDI0IEBAIG90aGVyd2lzZSBub3RlZC4KICAgICAgICAgZmlsZXN5c3RlbSBtdXN0IGRlZmluZSB0aGlzIG9wZXJhdGlvbiB0byB1c2UKICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy4KIAomIzQzO2BgaXNfb3duZWRfYnlfbWVgYAomIzQzOwljYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICYjMzk7b3duZWQmIzM5OyBieQomIzQzOwl0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHMKJiM0MzsJaXQgb3duZXJzaGlwIHByaXZpbGVnZXMuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gY29tcGFyZSBpX3VpZAomIzQzOwl0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZQomIzQzOwluZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXMKJiM0MzsJb3duZXJzaGlwIGVudGlyZWx5IGFjY29yZGluZyB0byBhbiBvYnRhaW5lZCB0b2tlbiBhbmQgaV91aWQgbWF5IG5vdAomIzQzOwlldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS4KJiM0MzsKJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgCiYjNDM7CWNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGUKJiM0MzsJcGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHkKJiM0MzsJY29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEcwomIzQzOwlvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0CiYjNDM7CW5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG8KJiM0MzsJa3VpZF90LgomIzQzOwomIzQzOwogVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0CiA9PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDZkZjU2ZmU5MTYzZmQuLmVlMmY1ZWMwYjJjNjcgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyLmMKQEAgLTY5LDYgJiM0Mzs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkucGVybWlzc2lvbgk9IGFmc19wZXJtaXNzaW9uLAogCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBhZnNfc2V0YXR0ciwKJiM0MzsJLmlzX293bmVkX2J5X21lCT0gYWZzX2lzX293bmVkX2J5X21lLAomIzQzOwkuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lciwKIH07CiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmMKaW5kZXggMDQ2Nzc0MmJmZWVlMy4uYmE0NDQ5M2NjYWY2ZSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZmlsZS5jCkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBhZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IGFmc19wZXJtaXNzaW9uLAomIzQzOwkuaXNfb3duZWRfYnlfbWUJPSBhZnNfaXNfb3duZWRfYnlfbWUsCiYjNDM7CS5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLAogfTsKIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZmlsZV9hb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCAxNGYzOWE5YmVhNmNmLi5hZjg1YTg4ZDk0M2RkIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW5vZGUuYwpAQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsCiAJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gU19OT0FUSU1FOwogCWlub2RlLSZndDtpX3VpZCA9IG1ha2Vfa3VpZCgmYW1wO2luaXRfdXNlcl9ucywgc3RhdHVzLSZndDtvd25lcik7CiAJaW5vZGUtJmd0O2lfZ2lkID0gbWFrZV9rZ2lkKCZhbXA7aW5pdF91c2VyX25zLCBzdGF0dXMtJmd0O2dyb3VwKTsKJiM0MzsJaW5vZGUtJmd0O2lfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFOwogCXNldF9ubGluaygmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSwgc3RhdHVzLSZndDtubGluayk7CiAKIAlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy0mZ3Q7c2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDI5MDg3M2JhYzg5YjMuLmYxNWRiYmM4ZGQyNjQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xNTMxLDYgJiM0MzsxNTMxLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gaW50IGFmc19jaGVja19wZXJtaXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGFmc19hY2Nlc3NfdCAqKTsKIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MztpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsCiYjNDM7CQkJc3RydWN0IGlub2RlICppbm9kZTIpOwogZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jCmluZGV4IDZkMDBkNjJhNjVlZGYuLjcwOTJmNWFjZGNkNmEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZWN1cml0eS5jCkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZQomIzQzOyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGUKJiM0MzsgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnMKJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKJiM0MzsJYWZzX2FjY2Vzc190IGFjY2VzczsKJiM0MzsJc3RydWN0IGtleSAqa2V5OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCXJldHVybiAxOyAvKiBUaGUgQURNSU4gcmlnaHQgY2hlY2sgZG9lc24mIzM5O3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovCiYjNDM7CiYjNDM7CWtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS0mZ3Q7dm9sdW1lLSZndDtjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihrZXkpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoa2V5KTsKJiM0MzsKJiM0MzsJLyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi8KJiM0MzsJcmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCAmYW1wO2FjY2Vzcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJLyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovCiYjNDM7CXJldCA9IChhY2Nlc3MgJmFtcDsgQUZTX0FDRV9BRE1JTklTVEVSKSA/IDAgOiAxOwomIzQzO2Vycm9yOgomIzQzOwlrZXlfcHV0KGtleSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnMKJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGUwomIzQzOyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlMikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMSA9IEFGU19GU19JKGlub2RlMSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7CiYjNDM7CiYjNDM7CXJldHVybiB2bm9kZTEtJmd0O3N0YXR1cy5vd25lciAhPSB2bm9kZTItJmd0O3N0YXR1cy5vd25lcjsKJiM0Mzt9CiYjNDM7CiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9mcy9hZnMvc3ltbGluay5jIGIvZnMvYWZzL3N5bWxpbmsuYwppbmRleCAxNmI0ODIzY2I3YjdlLi5lZDgzNGJhOTBlODVhIDEwMDY0NAotLS0gYS9mcy9hZnMvc3ltbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zeW1saW5rLmMKQEAgLTI3MSw2ICYjNDM7MjcxLDggQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRfbGluawk9IGFmc19nZXRfbGluaywKIAkucmVhZGxpbmsJPSBhZnNfcmVhZGxpbmssCiYjNDM7CS5pc19vd25lZF9ieV9tZQk9IGFmc19pc19vd25lZF9ieV9tZSwKJiM0MzsJLmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsCiB9OwogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19zeW1saW5rX2FvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggNGY0MzdmYWJiN2YwZi4uYjdlOGI1ZDQ5YTlmZSAxMDA2NDQKLS0tIGEvZnMvYXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2F0dHIuYwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VjdXJpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiAvKioKICAqIHNldGF0dHJfc2hvdWxkX2Ryb3Bfc2dpZCAtIGRldGVybWluZSB3aGV0aGVyIHRoZSBzZXRnaWQgYml0IG5lZWRzIHRvIGJlCkBAIC05MSwxOSAmIzQzOzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTsKICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUKICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpCiYjNDM7c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpCiB7CiAJdmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpICZhbXA7JmFtcDsKLQkgICAgdmZzdWlkX2VxKGlhX3Zmc3VpZCwgdmZzdWlkKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCWlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwogCWlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgJmFtcDsmYW1wOwogCSAgICBuc19jYXBhYmxlKGlub2RlLSZndDtpX3NiLSZndDtzX3VzZXJfbnMsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVQRVJNOwogfQogCiAvKioKQEAgLTExOCwyMyAmIzQzOzEyMSwyNyBAQCBzdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUKICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1zdGF0aWMgYm9vbCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpCiYjNDM7c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpCiB7CiAJdmZzZ2lkX3QgdmZzZ2lkID0gaV9naWRfaW50b192ZnNnaWQoaWRtYXAsIGlub2RlKTsKLQl2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiAJCWlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKQotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJcmV0dXJuIDA7CiAJCWlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKQotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJcmV0dXJuIDA7CiAJfQogCWlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwogCWlmICghdmZzZ2lkX3ZhbGlkKHZmc2dpZCkgJmFtcDsmYW1wOwogCSAgICBuc19jYXBhYmxlKGlub2RlLSZndDtpX3NiLSZndDtzX3VzZXJfbnMsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVQRVJNOwogfQogCiAvKioKQEAgLTE2Myw2ICYjNDM7MTcwLDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CiAJdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci0mZ3Q7aWFfdmFsaWQ7CiYjNDM7CWludCByZXQ7CiAKIAkvKgogCSAqIEZpcnN0IGNoZWNrIHNpemUgY29uc3RyYWludHMuICBUaGVzZSBjYW4mIzM5O3QgYmUgb3ZlcnJpZGRlbiB1c2luZwpAQCAtMTg5LDE0ICYjNDM7MTk3LDE4IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJZ290byBraWxsX3ByaXY7CiAKIAkvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNob3duLiAqLwotCWlmICgoaWFfdmFsaWQgJmFtcDsgQVRUUl9VSUQpICZhbXA7JmFtcDsKLQkgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzdWlkKSkKLQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJaWYgKGlhX3ZhbGlkICZhbXA7IEFUVFJfVUlEKSB7CiYjNDM7CQlyZXQgPSBjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc3VpZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAkvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi8KLQlpZiAoKGlhX3ZhbGlkICZhbXA7IEFUVFJfR0lEKSAmYW1wOyZhbXA7Ci0JICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc2dpZCkpCi0JCXJldHVybiAtRVBFUk07CiYjNDM7CWlmIChpYV92YWxpZCAmYW1wOyBBVFRSX0dJRCkgewomIzQzOwkJcmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnNnaWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJLyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG1vZC4gKi8KIAlpZiAoaWFfdmFsaWQgJmFtcDsgQVRUUl9NT0RFKSB7CmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuYwppbmRleCBlNjhhNzZmZjkyYTM4Li4zZjMyZTczYWFlZGEyIDEwMDY0NAotLS0gYS9mcy9jb3JlZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmMKQEAgLTk1NCw3ICYjNDM7OTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAkgKiBmaWxlc3lzdGVtLgogCSAqLwogCWlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7Ci0JaWYgKCF2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKSB7CiYjNDM7CWlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7CiAJCWNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyJiMzNDssIGNuLSZndDtjb3JlbmFtZSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAzMWM1YjllZTNhODFkLi5hN2VjODMwYWI2ODNmIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmMKQEAgLTI3NTAsMTYgJiM0MzsyNzUwLDE5IEBAIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7CiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCQkgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mztib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdmZzdWlkX3QgdmZzdWlkOwogCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7CiYjNDM7CWludCByZXQ7CiAKLQl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ID09IDApCiAJCXJldHVybiB0cnVlOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAomIzQzOwl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwogCW5zID0gY3VycmVudF91c2VyX25zKCk7CiAJaWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSAmYW1wOyZhbXA7IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYuLmJlNDVjYzYzODg2MTkgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaApAQCAtNTEsNiAmIzQzOzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpOwogLyoKICAqIG5hbWVpLmMKICAqLwomIzQzO2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncywKIAkJCSAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7CiBpbnQgZmlsZW5hbWVfcm1kaXIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDZlNGZmN2ZjZWMwNTMuLjAyZjgxMGRjOWU3ZTcgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbG9ja3MuYwpAQCAtNjgsNiAmIzQzOzY4LDcgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvZmlsZWxvY2suaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKQogewpAQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50CiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwotCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiAJaW50IGVycm9yOwogCi0JaWYgKCghdmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9MRUFTRSkpCiYjNDM7CWVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiYjNDM7CWlmIChlcnJvciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CWlmIChlcnJvciAhPSAwICZhbXA7JmFtcDsgIWNhcGFibGUoQ0FQX0xFQVNFKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAxOWNlNDNjOWE2ZTY2Li43MmY5NGQyMDRmOTNmIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTU1LDggJiM0Mzs1NSw4IEBACiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGgKICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzCiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gJmx0O2ZzJmd0O19mb2xsb3dfbGluaygpLgotICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgCi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIAomIzQzOyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93CiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbAogICogdGhlIHNwZWNpYWwgY2FzZXMgb2YgdGhlIGZvcm1lciBjb2RlLgogICoKICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXMKQEAgLTEyNTUsNiAmIzQzOzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTsKIAogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLAomIzQzOyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0KJiM0MzsgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKQomIzQzOwkJcmV0dXJuIGlub2RlLSZndDtpX29wLSZndDtpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nCiYjNDM7ICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZwomIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKmRpcjsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoaW5vZGUgIT0gbmQtJmd0O2lub2RlKSB7CiYjNDM7CQkJZGlyID0gbmQtJmd0O2lub2RlOwomIzQzOwkJCXJldCA9IGlub2RlLSZndDtpX29wLSZndDtoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwkJfSBlbHNlIGlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkgewomIzQzOwkJCXBhcmVudCA9IFJFQURfT05DRShuZC0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwkJCWRpciA9IFJFQURfT05DRShwYXJlbnQtJmd0O2RfaW5vZGUpOwomIzQzOwkJCWlmICghZGlyKQomIzQzOwkJCQlyZXR1cm4gLUVDSElMRDsKJiM0MzsJCQlyZXQgPSBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGFyZW50ID0gZGdldF9wYXJlbnQobmQtJmd0O3BhdGguZGVudHJ5KTsKJiM0MzsJCQlkaXIgPSBwYXJlbnQtJmd0O2RfaW5vZGU7CiYjNDM7CQkJcmV0ID0gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CQkJZHB1dChwYXJlbnQpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmZzdWlkX3ZhbGlkKG5kLSZndDtkaXJfdmZzdWlkKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtJmd0O2Rpcl92ZnN1aWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kCiYjNDM7ICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpCiYjNDM7CQlyZXR1cm4gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CWlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwKJiM0MzsJCSAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwogLyoqCiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnMKICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKQEAgLTEyNzEsMjcgJiM0MzsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7CiAgKgogICogUmV0dXJucyAwIGlmIGZvbGxvd2luZyB0aGUgc3ltbGluayBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXA7Ci0JdmZzdWlkX3QgdmZzdWlkOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKQogCQlyZXR1cm4gMDsKIAotCWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7Ci0JdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQkvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi8KLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKLQogCS8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBub3Qgc3RpY2t5IGFuZCB3b3JsZC13cml0YWJsZS4gKi8KIAlpZiAoKG5kLSZndDtkaXJfbW9kZSAmYW1wOyAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpCiAJCXJldHVybiAwOwogCiYjNDM7CWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7CiYjNDM7CS8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqLwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovCi0JaWYgKHZmc3VpZF92YWxpZChuZC0mZ3Q7ZGlyX3Zmc3VpZCkgJmFtcDsmYW1wOyB2ZnN1aWRfZXEobmQtJmd0O2Rpcl92ZnN1aWQsIHZmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobmQtJmd0O2ZsYWdzICZhbXA7IExPT0tVUF9SQ1UpCiAJCXJldHVybiAtRUNISUxEOwpAQCAtMTM4OSwxMiAmIzQzOzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKQogICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlbgogICoKICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOgotICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAotICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUKJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLAomIzQzOyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywKJiM0MzsgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSwKJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSwKJiM0MzsgKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZSBhbmQKICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBvd24gdGhlIGZpbGUKLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlCiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMgogICogdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsCiAgKiBiZSBlbm91Z2guCkBAIC0xNDA1LDEzICYjNDM7MTQ3Miw0NSBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICoKJiM0MzsgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlCiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWQKJiM0MzsgKiB0byBjdXJyZW50X2ZzdWlkKCkgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgY29tcGFyYWJsZSB0byBhbm90aGVyIGlfdWlkLgomIzQzOyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrCiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXMKJiM0MzsgKiBvcGVyYXRpb25zIGFuZCBoYXZpbmcgYW5vbnltb3VzbHktb3duZWQgb2JqZWN0cy4KJiM0MzsgKgomIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CiYjNDM7ICoKJiM0MzsgKglVU0VSCURJUglGSUxFCUZJTEUJQUxMT1dFRAomIzQzOyAqCQlPV05FUglPV05FUglTVEFURQomIzQzOyAqCT09PT09PT0JPT09PT09PQk9PT09PT09CT09PT09PT0JPT09PT09PQomIzQzOyAqCUEJQQktCU5ldwlZZXMKJiM0MzsgKglBCUEJQQlFeGlzdHMJWWVzCiYjNDM7ICoJQQlBCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlCCS0JTmV3CVllcwomIzQzOyAqCUEJQglBCUV4aXN0cwlZZXMsIEZPPT1VCiYjNDM7ICoJQQlCCUIJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJQQlCCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCUEJYW5vblsxXQlBCUV4aXN0cwlZZXMKJiM0MzsgKglBCWFub25bMV0JQwlFeGlzdHMJTm8KJiM0MzsgKglhbm9uCUEJLQlOZXcJWWVzCiYjNDM7ICoJYW5vbglBCUEJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJYW5vbglhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCWFub24JYW5vblsxXQktCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlBCUV4aXN0cwlZZXMsIEZPPT1ETwomIzQzOyAqCWFub24JQQlDCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlhbm9uCUV4aXN0cwlObwomIzQzOyAqCiYjNDM7ICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT8KJiM0MzsgKgogICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCi0JCQkJc3RydWN0IGlub2RlICpjb25zdCBpbm9kZSkKJiM0MzsJCQkJc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bW9kZV90IGRpcl9tb2RlID0gbmQtJmd0O2Rpcl9tb2RlOwotCXZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC0mZ3Q7ZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKQEAgLTE0MjIsMTMgJiM0MzsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChTX0lTRklGTyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKQogCQlyZXR1cm4gMDsKIAotCWlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQotCWlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCi0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobGlrZWx5KGRpcl9tb2RlICZhbXA7IDAwMDIpKSB7CiAJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCAmIzM0O3N0aWNreV9jcmVhdGUmIzM0Oyk7CkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7CiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKJiM0MzsJaW50IHJldDsKIAotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpCi0JCXJldHVybiAwOwotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpOwogfQogRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7CmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuYwppbmRleCAyNmFmYmJiZmIxMGMyLi45ZWVlOTNjMjcwMDEyIDEwMDY0NAotLS0gYS9mcy9yZW1hcF9yYW5nZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmMKQEAgLTQxMywyMCAmIzQzOzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sCiBFWFBPUlRfU1lNQk9MKHZmc19jbG9uZV9maWxlX3JhbmdlKTsKIAogLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi8KLXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0MztzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiAJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9XUklURSkKLQkJcmV0dXJuIHRydWU7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCWlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVQRVJNOwogfQogCiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLApAQCAtNDU5LDggJiM0Mzs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSAtRVBFUk07Ci0JaWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKQomIzQzOwlyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKIAogCXJldCA9IC1FWERFVjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA1MGNlNzMxYTJiNzhmLi44MDEzYzEzYTM1M2Q2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02MjgsNiAmIzQzOzYyOCw3IEBAIGlzX3VuY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiAjZGVmaW5lIElPUF9DQUNIRURfTElOSwkJMHgwMDQwCiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQwkweDAwODAKICNkZWZpbmUgSU9QX0ZMQ1RYCQkweDAxMDAKJiM0MzsjZGVmaW5lIElPUF9PV05FUlNISVBfT1ZFUlJJREUJMHgwMjAwCS8qIFVzZSAtJmd0O2lzX293bmVkX2J5X21lKCkgYW5kIC0mZ3Q7aGF2ZV9zYW1lX293bmVyKCkgKi8KIAogLyoKICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtJmd0O2lfbG9jawpAQCAtMTc1NSw4ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiBzYl93cml0ZV9ub3Rfc3RhcnRlZChmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiKTsKIH0KIAotYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qCiAgKiBWRlMgaGVscGVyIGZ1bmN0aW9ucy4uCkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewogCQkJICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBJbm9kZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB0aGUgVkZTIGxheWVyIGhhbmRsZXMgZmlsZSBvd25lcnNoaXAsIHNwZWNpZmljYWxseSBmb3IgZmlsZXN5c3RlbXMgbGlrZSBBRlMgdGhhdCB1c2UgdG9rZW5zIGluc3RlYWQgb2YgdGhlIHRyYWRpdGlvbmFsIFVJRC9HSUQgbW9kZWwuIFdlJiMzOTt2ZSBnb3QgdHdvIG5ldyBgaW5vZGVfb3BlcmF0aW9uc2A6IGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIG93bmVyc2hpcCBjaGVja3Mgd2l0aGluIHRoZSBWRlMsIHdoaWNoIGlzIGtleSBmb3IgQUZTLiBUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGVzZSBpbiBBRlMgYXMgYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYC4KClRoZSBiaWcgcGljdHVyZSBoZXJlIGlzIHRoYXQgYSB3aG9sZSBzbGV3IG9mIFZGUyBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSB0aGVzZSBuZXcgaGVscGVyczogYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgYW5kIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIG9wZXJhdGlvbnMgbGlrZSBgY2hvd25gLCBgY2hncnBgLCBgY29yZWR1bXBgLCBsZWFzZSBtYW5hZ2VtZW50LCBzeW1saW5rIGZvbGxvd2luZywgc3RpY2t5IGJpdCBjaGVja3MsIGFuZCBldmVuIGZpbGUgZGVkdXBsaWNhdGlvbiEgVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIGZpbGUgc3lzdGVtIGJlaGF2aW9yIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBub3cgaXMgcGlucG9pbnRpbmcgdGhlIG1vc3QgdnVsbmVyYWJsZSBhcmVhcyBmb3IgZnV6emluZy4gV2UgaGF2ZSB0aHJlZSBuZXdseSBpbnRyb2R1Y2VkIFZGUyBoZWxwZXJzOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAuIE9uIHRoZSBBRlMgc2lkZSwgd2UmIzM5O3ZlIGdvdCBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0byB0YXJnZXQgZmlyc3QuCgpCZXlvbmQgdGhhdCwgdGhlIHBhdGNoZWQgVkZTIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgZnVuIGxpZXM6IGBzZXRhdHRyX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAgKG5vdCBhIHByaW1hcnkgZnV6emluZyB0YXJnZXQgZGlyZWN0bHksIGJ1dCBpdCBwcm92aWRlcyBhIHBhdGh3YXkpLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGFuZCBgX19jaGVja19zdGlja3lgLiBUaGUgZGVkdXBlIGltcGxlbWVudGF0aW9uIHZpYSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKHdoaWNoIGNhbGxzIGBtYXlfZGVkdXBlX2ZpbGVgKSBhbHNvIG5lZWRzIGEgbG9vay4gYG1heV9mb2xsb3dfbGlua2AgYW5kIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgYXJlIG1hcmtlZCBhcyBzdGF0aWMgZnVuY3Rpb25zIHNvIG15IHRlYW0gd2lsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNoZW5hbmlnYW5zIGhlcmUsIHNvIEkmIzM5O2xsIGNoZWNrIGZvciBhbnkgbmVjZXNzYXJ5IGBDT05GSUdgIG9wdGlvbnMuIEFGUyBsb29rcyBsaWtlIGl0JiMzOTtzIGdhdGVkIGJ5IGBDT05GSUdfQUZTX0ZTYCwgYnV0IHRoZSBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIGVuYWJsZWQuCgpGaW5hbGx5LCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIGp1c3QgdG8gYmUgZG91Ymx5IHN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgaW4gdGhlIGNvZGViYXNlLiBUaGVuIGl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSBmdXp6aW5nIGhhcm5lc3Nlcy4gVGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTYwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvZGlyLmMtNzEtXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbmZzL2Fmcy9kaXIuYzo3MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZGlyLmMtNzMtXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbi0tXG5mcy9hZnMvZmlsZS5jPTQ4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvYWZzL2ZpbGUuYy01MS1cdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuZnMvYWZzL2ZpbGUuYzo1MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZmlsZS5jLTUzLVx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTUzMz1leHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XG5mcy9hZnMvaW50ZXJuYWwuaDoxNTM0OmludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1pbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9hZnMvc2VjdXJpdHkuYy01MTgtICovXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XG4tLVxuZnMvYWZzL3N5bWxpbmsuYz0yNzE9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvc3ltbGluay5jLTI3My1cdC5yZWFkbGlua1x0PSBhZnNfcmVhZGxpbmssXG5mcy9hZnMvc3ltbGluay5jOjI3NDpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvc3ltbGluay5jLTI3NS1cdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaWxlIE93bmVyc2hpcCBhbmQgQWNjZXNzIENvbnRyb2wgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gSSBzZWUgYSBmb2N1c2VkIHNldCBoZXJlIHJlbGF0ZWQgdG8gZmlsZSBvd25lcnNoaXAgYW5kIGFjY2VzcyBjb250cm9sLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgdmlydHVhbCBmaWxlc3lzdGVtIGFuZCBBRlMgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIHZlcmlmeWluZyBwZXJtaXNzaW9ucywgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZmlsZSBsZWFzZXMgb3IgZGVkdXBsaWNhdGlvbi4gSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyBjYXJlZnVsbHk6IGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC4gVGhlIG5hbWluZyBjb252ZW50aW9ucyBzdWdnZXN0IGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiBBRlMtc3BlY2lmaWMgbG9naWMgYW5kIG1vcmUgZ2VuZXJhbCBWRlMgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBoYXMgYSBtb3JlIGNvbXBsZXggZmlsZS1vd25lcnNoaXAgbWFuYWdlbWVudCBzeXN0ZW0gdGhhbiBhIGJhc2ljIHN5c3RlbS4KClRoZSBwcmVzZW5jZSBvZiBgYWZzXypgIGZ1bmN0aW9ucyBpcyB0aGUga2V5IHRoaW5nIEkgYW0gc2VlaW5nIGhlcmUuIEkgd2lsbCBsb29rIHRvIHNlZSBpZiBBRlNfRlMgaXMgdGhlIG9ubHkgY29uZmlnIHByZXNlbnQgYmVjYXVzZSB0aGF0IHN1Z2dlc3RzIHRoYXQgdGhpcyBjb2RlIGlzIHBhcnQgb2YgYSBsYXJnZXIgZmlsZSBzeXN0ZW0gd2l0aCBhIG51bWJlciBvZiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIHRoYXQgaGF2ZSBkaWZmZXJpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xuZnMvYWZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXCYjMzQ7XG4tLVxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xuLS1cbmZzL2Fmcy9LY29uZmlnLTI2LVxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXG5mcy9hZnMvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTY2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrIGZvciBBRlNfRlMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgQUZTX0ZTYCBmaWxlc3lzdGVtIGZlYXR1cmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBjaGVjayBpcyBgZnMvYWZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcy4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBkZWZpbmVkIGJlZm9yZSBgQUZTX0ZTYCBjYW4gYmUgcHJvcGVybHkgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBBRlNfRlNgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBjb250aW5nZW50IG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoZSBkZXBlbmRlbmNpZXMgYXQgYSBoaWdoIGxldmVsLiBOb3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTt2ZSBnb3QgYSBtaXggb2YgdGhpbmdzIHJlbGF0ZWQgdG8gb3duZXJzaGlwIGNoZWNrcyB3aXRoaW4gdGhlIEFGUyBmaWxlIHN5c3RlbSAtIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBhcyB3ZWxsIGFzIG1vcmUgZ2VuZXJhbCBWRlMgZnVuY3Rpb25hbGl0eSBsaWtlIGBzZXRhdHRyX3ByZXBhcmVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiBBRlMsIHdoaWNoIG9mdGVuIGludm9sdmVzIGRpc3RyaWJ1dGVkIG93bmVyc2hpcCBhbmQgcG90ZW50aWFsbHkgbW9yZSBjb21wbGV4IGFjY2VzcyBjb250cm9sLCB0aGVzZSBzZWVtIGxpa2UgcmVsZXZhbnQgcGllY2VzLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBvd25lcnNoaXAgaXMgbWFuYWdlZCwgYW5kIGl0IHNlZW1zIHRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIHRoaXMuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIHRoZSBvbmUgdGhhdCByZWFsbHkgc3RpY2tzIG91dC4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGJhc2ljIHNhbml0eSBjaGVjaywgYnV0IGltcG9ydGFudCB0byBjb25maXJtIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aGVyZSBJIG5lZWQgaXQuIEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGtlcm5lbCYjMzk7cyBzeW1ib2wgdGFibGUgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnZmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTAwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkRlZXAgRGl2ZSBpbnRvIEtlcm5lbCBPd25lcnNoaXAgQ2hlY2tzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIG93bmVyc2hpcCwgYnV0IGl0JiMzOTtzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBleHBvcnRlZCBmdW5jdGlvbiBvciBhIHNpbXBsZSBzdGF0aWMgdmFsdWUuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIG1lYW5pbmcgSSBwcm9iYWJseSBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUga2VybmVsJiMzOTtzIGludGVybmFscy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgcmVsYXRlZCBjb2RlIGxpdmVzIGluIGBmcy9uYW1laS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBrZXJuZWwgZGV0ZXJtaW5lcyBpZiBhbiBpbm9kZSBpcyAmIzM0O293bmVkJiMzNDsgYnkgdGhlIGN1cnJlbnQgcHJvY2VzcywgZm9yIHdoYXRldmVyIHJlYXNvbi4KClRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvbmFtZWkuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhIGZ1bmN0aW9uIOKAkyBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgYXB0bHkgbmFtZWQg4oCTIGxpa2UgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGNoZWNrIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTAwLVxuZnMvYXR0ci5jOjEwMTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEwMi1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL2F0dHIuYz0xMjQ9c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTI5LVxuZnMvYXR0ci5jOjEzMDpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTk1Ni1cdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG5mcy9jb3JlZHVtcC5jOjk1NzpcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG5mcy9jb3JlZHVtcC5jLTk1OC1cdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXCYjMzQ7LCBjbi1cdTAwM2Vjb3JlbmFtZSk7XG4tLVxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9pbm9kZS5jLTI3NTgtXG5mcy9pbm9kZS5jOjI3NTk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2lub2RlLmMtMjc2MC1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pbnRlcm5hbC5oPTQ5PWV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbi0tXG5mcy9pbnRlcm5hbC5oLTUzLSAqL1xuZnMvaW50ZXJuYWwuaDo1NDppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9sb2Nrcy5jPTIxMzc9dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbi0tXG5mcy9sb2Nrcy5jLTIxNDEtXG5mcy9sb2Nrcy5jOjIxNDI6XHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xuZnMvbG9ja3MuYy0yMTQzLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbmZzL25hbWVpLmM9MTI1ND1mc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuLS1cbmZzL25hbWVpLmMtMTI2Mi0gKi9cbmZzL25hbWVpLmM6MTI2MzppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbmFtZWkuYy0xMjY0LXtcbi0tXG5mcy9uYW1laS5jPTEzNDA9c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmMtMTM1My1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuZnMvbmFtZWkuYzoxMzU0Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTEzNTUtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tLVxuZnMvbmFtZWkuYy0xNTI3LVxuZnMvbmFtZWkuYzoxNTI4Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTE1MjktXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uYW1laS5jLTM3NDgtXG5mcy9uYW1laS5jOjM3NDk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMzc1MC1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDI1LVx0XHRyZXR1cm4gMDtcbmZzL3JlbWFwX3JhbmdlLmM6NDI2Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9yZW1hcF9yYW5nZS5jLTQyNy1cdGlmIChyZXQgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAwNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmlsZSBPd25lcnNoaXAgYW5kIEFjY2VzcyBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHNldCBvZiBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIGEgY29yZSBncm91cCBoZXJlIHRoYXQgZGVhbHMgd2l0aCBjaGVja2luZyBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zIOKAkyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYGFmc19pc19vd25lZF9ieV9tZWAsIGFuZCBgYWZzX2hhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSB0aGUgYmFzaWNzLCBJIGV4cGVjdC4gV2UmIzM5O3ZlIGFsc28gZ290IGBzZXRhdHRyX3ByZXBhcmVgLCB3aGljaCBsaWtlbHkgaGFuZGxlcyBwcmVwYXJpbmcgYXR0cmlidXRlIGNoYW5nZXMsIGFuZCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBpdCBzb3VuZHMgbGlrZSDigJMgY2hlY2tpbmcgb3duZXJzaGlwIG9yIGNhcGFiaWxpdHkuIFRoZW4gd2UgaGF2ZSBzb21lIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zIHN1Y2ggYXMgYHZmc19zZXRsZWFzZWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgdGhhdCBJIG5lZWQgdG8gcGxhY2UgaW50byB0aGUgbGFyZ2VyIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsYXRpb25zaGlwIG9mIHNvbWUgb3RoZXIsIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBob3cgdGhlc2UgbWlnaHQgZml0LiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBBaGEsIHRoZXkmIzM5O3JlIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AuIEdvb2QgdG8ga25vdywgdGhhdCBwbGFjZXMgdGhlbSB3aXRoaW4gdGhlIFZGUyBuYW1lc3BhY2UuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgSSBidWlsZCB0aGUgbGFyZ2VyIHBpY3R1cmUuCgpJIHdhcyBhbHNvIHRoaW5raW5nIG9mIGluY2x1ZGluZyBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGFuZCBgbWF5X2ZvbGxvd19saW5rYCBpbiBteSBhbmFseXNpcywgYnV0IHNpbmNlIHRoZXkgYXJlIGFsc28gc3RhdGljIGZ1bmN0aW9ucywgdGhhdCBtaWdodCBub3QgYmUgYXMgaW1wb3J0YW50LCBidXQgZ29vZCB0byBrZWVwIGluIG1pbmQuIFdhaXQsIGlzIGBtYXlfbGlua2F0YCBjYWxsaW5nIGBtYXlfZm9sbG93X2xpbmtgPyBObywgbm8sIGBtYXlfZm9sbG93X2xpbmtgIGlzIGNhbGxlZCBmcm9tIGBmb2xsb3dfbGlua2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBzdHJhaWdodCBoZXJlLiBHaXZlbiB0aGUgdXNlIG9mIGBtYXlfZm9sbG93X2xpbmtgLCBJIHdpbGwgbm93IG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF5X2ZvbGxvd19saW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAucnN0PTExMzA9Y29tcG9uZW50IG9mIHRoZSBsb29rdXAsIHNvIHdlIHdpbGwgY2hlY2sgdXNlcnNwYWNlIGZsYWcgYGBMT09LVVBfRk9MTE9XYGAgdG9cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAucnN0OjExMzE6ZGVjaWRlIHdoZXRoZXIgZm9sbG93IGl0IHdoZW4gaXQgaXMgYSBzeW1saW5rIGFuZCBjYWxsIGBgbWF5X2ZvbGxvd19saW5rKClgYCB0b1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3QtMTEzMi1jaGVjayBpZiB3ZSBoYXZlIHByaXZpbGVnZSB0byBmb2xsb3cgaXQuXG4tLVxuZnMvbmFtZWkuYz0xMzEzPXN0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvbmFtZWkuYy0xMzI0LS8qKlxuZnMvbmFtZWkuYzoxMzI1OiAqIG1heV9mb2xsb3dfbGluayAtIENoZWNrIHN5bWxpbmsgZm9sbG93aW5nIGZvciB1bnNhZmUgc2l0dWF0aW9uc1xuZnMvbmFtZWkuYy0xMzI2LSAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbi0tXG5mcy9uYW1laS5jLTEzMzktICovXG5mcy9uYW1laS5jOjEzNDA6c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbmFtZWkuYy0xMzQxLXtcbi0tXG5mcy9uYW1laS5jPTIxMDY9c3RhdGljIG5vaW5saW5lIGNvbnN0IGNoYXIgKnBpY2tfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKmxpbmssXG4tLVxuZnMvbmFtZWkuYy0yMTMzLVx0aWYgKGZsYWdzIFx1MDAyNiBXQUxLX1RSQUlMSU5HKSB7XG5mcy9uYW1laS5jOjIxMzQ6XHRcdGVycm9yID0gbWF5X2ZvbGxvd19saW5rKG5kLCBpbm9kZSk7XG5mcy9uYW1laS5jLTIxMzUtXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQ3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqQW5hbHl6aW5nIExpbmsgVHJhdmVyc2FsIExvZ2ljKioKCk9rYXksIHNvIGBwaWNrX2xpbmtgIGlzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgcGlja2luZyBhIGxpbmsuIEFuZCBpdCBhcHBlYXJzIHRoYXQgaXQmIzM5O3MgY2FsbGluZyBgbWF5X2ZvbGxvd19saW5rYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdlIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gYWN0dWFsbHkgKmZvbGxvdyogdGhlIGxpbmsgYWZ0ZXIgd2UmIzM5O3ZlIHBpY2tlZCBpdC4gTm93LCB3aGF0JiMzOTtzIGNydWNpYWwgaGVyZSBpcyBob3cgd2UgZGVmaW5lIHRoZSBwYXJhbWV0ZXJzIGZvciBwaWNraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIGxpbmsgaXMgZGVlbWVkICYjMzk7Zm9sbG93YWJsZS4mIzM5OwoKQmVmb3JlIGRpZ2dpbmcgaW50byBgbWF5X2ZvbGxvd19saW5rYCYjMzk7cyBjb2RlIGRpcmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGVyIHBpY3R1cmUsIGFzIGluLCB3aG8gYXJlIHRoZSBjYWxsZXJzIG9mIGBtYXlfY3JlYXRlX2luX3N0aWNreWA/IEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaW5mbHVlbmNlcyB0aGUgZGVjaXNpb24gdG8gY3JlYXRlIGEgc3RpY2t5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGJyb2FkZXIgY29udGV4dHMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBsb2dpYyBtb3JlIGVmZmVjdGl2ZWx5LiBGcm9tIHRoaXMsIEkgd2lsbCBiZSBhYmxlIHRvIGNoZWNrIGZvciBhbnkgbGlua3MgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3RpY2t5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuLS1cbmZzL25hbWVpLmMtMTQ1MC0vKipcbmZzL25hbWVpLmM6MTQ1MTogKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuZnMvbmFtZWkuYy0xNDUyLSAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcbi0tXG5mcy9uYW1laS5jLTE1MDgtICovXG5mcy9uYW1laS5jOjE1MDk6c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTE1MTAtXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmM9NDc1Mz1zdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tLVxuZnMvbmFtZWkuYy00Nzc0LVx0XHRcdHJldHVybiAtRUlTRElSO1xuZnMvbmFtZWkuYzo0Nzc1Olx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbmZzL25hbWVpLmMtNDc3Ni1cdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MDEKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gYGRvX29wZW5gIGNhbGxzIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGxpc3QgaGVyZTogYGFmc19pc19vd25lZF9ieV9tZWAsIGBhZnNfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbG9jYXRpb24gb2YgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAuIFllcywgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGZzL25hbWVpLmNgLiBHb29kLiBOZXh0LCBpcyBgQUZTX0ZTYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gbmVlZGVkPyBTZWVtcyB0aGF0IHdheTsgdGhlIEFGUy1zcGVjaWZpYyBwYXJ0IGlzIGVuYWJsZWQgYnkgYEFGU19GU2AsIGFuZCB0aGUgVkZTIHBvcnRpb24gaXMgYWx3YXlzIGFjdGl2ZS4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIGxpc3QgYEFGU19GU2AgdW5kZXIgYEVuYWJsZUNvbmZpZ3NgLgoKTm93LCBsZXQmIzM5O3MgcmVjYXAgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucywgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAsIHRvIGFsbG93IGZpbGVzeXN0ZW1zIGxpa2UgQUZTIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGFsc28gbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgc3VjaCBhcyBjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBhbmQgc3ltbGluayBmb2xsb3dpbmcgdG8gbGV2ZXJhZ2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBWRlMgYW5kIEFGUywgYW5kIGl0IGZ1bmRhbWVudGFsbHkgaW1wYWN0cyBmaWxlIHBlcm1pc3Npb24gY2hlY2tzLiBUaGlzIGFic29sdXRlbHkgbmVlZHMgZnV6emluZy4KClRvIHN1bW1hcml6ZSwgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnM6CgpGb2N1cyBzeW1ib2xzOgotIGBhZnNfaXNfb3duZWRfYnlfbWVgCi0gYGFmc19oYXZlX3NhbWVfb3duZXJgCi0gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAKLSBgc2V0YXR0cl9wcmVwYXJlYAotIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYAotIGB2ZnNfc2V0bGVhc2VgCi0gYF9fY2hlY2tfc3RpY2t5YAotIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYAoKQ29uZmlnczoKLSBgQUZTX0ZTYAoKQWxyaWdodCwgdGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2hhdmVfc2FtZV9vd25lciYjMzQ7LAogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7c2V0YXR0cl9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2lub2RlX293bmVyX29yX2NhcGFibGUmIzM0OywKICAgICYjMzQ7dmZzX3NldGxlYXNlJiMzNDssCiAgICAmIzM0O19fY2hlY2tfc3RpY2t5JiMzNDssCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZTIGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIGZvciBBRlMgYW5kIG1vZGlmaWVzIHNldmVyYWwgY29yZSBWRlMgZnVuY3Rpb25zIChjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBzeW1saW5rIGZvbGxvd2luZykgdG8gdXNlIHRoZSBuZXcgaGVscGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBhZmZlY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjA4LjA1NjE2MDQ5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTQ5MzgxNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcImlub2RlX293bmVyX29yX2NhcGFibGVcIixcbiAgICBcInZmc19zZXRsZWFzZVwiLFxuICAgIFwiX19jaGVja19zdGlja3lcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MDguMDU2MTY3OTMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk0NzU1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzk5YTk3OGU3MTgwY2IyNGQ5YWUxNTFkNzUyYmNiOTdlYzQ0ZGFiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDE4OjQ5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbmluZGV4IDdjNzUzMTQ4YWY4ODguLjg5MzQxOWUwMDNlYWYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuQEAgLTQ0NSw2ICs0NDUsOSBAQCBBcyBvZiBrZXJuZWwgMi42LjIyLCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6XFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcdFxcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFx0XFx0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFx0XFx0aW50ICgqaGF2ZV9zYW1lX293bmVyKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdH07XFxuIFxcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcXG5AQCAtNjM0LDYgKzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXFxuICAgICAgICAgZmlsZXN5c3RlbSBtdXN0IGRlZmluZSB0aGlzIG9wZXJhdGlvbiB0byB1c2VcXG4gICAgICAgICBzaW1wbGVfb2Zmc2V0X2Rpcl9vcGVyYXRpb25zLlxcbiBcXG4rYGBpc19vd25lZF9ieV9tZWBgXFxuK1xcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJ293bmVkJyBieVxcbitcXHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcXG4rXFx0aXQgb3duZXJzaGlwIHByaXZpbGVnZXMuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gY29tcGFyZSBpX3VpZFxcbitcXHR0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZVxcbitcXHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcXG4rXFx0b3duZXJzaGlwIGVudGlyZWx5IGFjY29yZGluZyB0byBhbiBvYnRhaW5lZCB0b2tlbiBhbmQgaV91aWQgbWF5IG5vdFxcbitcXHRldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS5cXG4rXFxuK2BgaGF2ZV9zYW1lX293bmVyYGBcXG4rXFx0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxcbitcXHRwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseVxcbitcXHRjb21wYXJlIHRoZSBpX3VpZCBvZiBib3RoLiAgRm9yIGV4YW1wbGUsIEFGUyBjb21wYXJlcyB0aGUgb3duZXIgSURzXFxuK1xcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcXG4rXFx0bm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0b1xcbitcXHRrdWlkX3QuXFxuK1xcbitcXG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XFxuID09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXFxuaW5kZXggNmRmNTZmZTkxNjNmZC4uZWUyZjVlYzBiMmM2NyAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyLmNcXG4rKysgYi9mcy9hZnMvZGlyLmNcXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG4gXFx0LmdldGF0dHJcXHQ9IGFmc19nZXRhdHRyLFxcbiBcXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xcbmluZGV4IDA0Njc3NDJiZmVlZTMuLmJhNDQ0OTNjY2FmNmUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ZpbGUuY1xcbisrKyBiL2ZzL2Fmcy9maWxlLmNcXG5AQCAtNDksNiArNDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbiBcXHQuZ2V0YXR0clxcdD0gYWZzX2dldGF0dHIsXFxuIFxcdC5zZXRhdHRyXFx0PSBhZnNfc2V0YXR0cixcXG4gXFx0LnBlcm1pc3Npb25cXHQ9IGFmc19wZXJtaXNzaW9uLFxcbitcXHQuaXNfb3duZWRfYnlfbWVcXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcXG4rXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuIH07XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbm9kZS5jIGIvZnMvYWZzL2lub2RlLmNcXG5pbmRleCAxNGYzOWE5YmVhNmNmLi5hZjg1YTg4ZDk0M2RkIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbm9kZS5jXFxuKysrIGIvZnMvYWZzL2lub2RlLmNcXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZmxhZ3MgfD0gU19OT0FUSU1FO1xcbiBcXHRpbm9kZS1cXHUwMDNlaV91aWQgPSBtYWtlX2t1aWQoXFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVxcdTAwM2Vvd25lcik7XFxuIFxcdGlub2RlLVxcdTAwM2VpX2dpZCA9IG1ha2Vfa2dpZChcXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXFx1MDAzZWdyb3VwKTtcXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xcbiBcXHRzZXRfbmxpbmsoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVxcdTAwM2VubGluayk7XFxuIFxcbiBcXHRpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy1cXHUwMDNlc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcXG5pbmRleCAyOTA4NzNiYWM4OWIzLi5mMTVkYmJjOGRkMjY0IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcXG5AQCAtMTUzMSw2ICsxNTMxLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XFxuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcXG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XFxuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5pbmRleCA2ZDAwZDYyYTY1ZWRmLi43MDkyZjVhY2RjZDZhIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jXFxuKysrIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5AQCAtNTEwLDYgKzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSAnbWUnIC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlXFxuKyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGVcXG4rICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXFxuKyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuXFxuKyAqL1xcbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xcbitcXHRhZnNfYWNjZXNzX3QgYWNjZXNzO1xcbitcXHRzdHJ1Y3Qga2V5ICprZXk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDE7IC8qIFRoZSBBRE1JTiByaWdodCBjaGVjayBkb2Vzbid0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xcbitcXG4rXFx0a2V5ID0gYWZzX3JlcXVlc3Rfa2V5KHZub2RlLVxcdTAwM2V2b2x1bWUtXFx1MDAzZWNlbGwpO1xcbitcXHRpZiAoSVNfRVJSKGtleSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGtleSk7XFxuK1xcbitcXHQvKiBHZXQgdGhlIGFjY2VzcyByaWdodHMgZm9yIHRoZSBrZXkgb24gdGhpcyBmaWxlLiAqL1xcbitcXHRyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksIFxcdTAwMjZhY2Nlc3MpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdC8qIFdlIGdldCB0aGUgQURNSU5JU1RFUiBiaXQgaWYgd2Ugb3duIHRoZSBmaWxlLiAqL1xcbitcXHRyZXQgPSAoYWNjZXNzIFxcdTAwMjYgQUZTX0FDRV9BRE1JTklTVEVSKSA/IDAgOiAxO1xcbitlcnJvcjpcXG4rXFx0a2V5X3B1dChrZXkpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFuc1xcbisgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xcbisgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cXG4rICovXFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUxID0gQUZTX0ZTX0koaW5vZGUxKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcXG4rXFxuK1xcdHJldHVybiB2bm9kZTEtXFx1MDAzZXN0YXR1cy5vd25lciAhPSB2bm9kZTItXFx1MDAzZXN0YXR1cy5vd25lcjtcXG4rfVxcbitcXG4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKVxcbiB7XFxuIFxcdGludCBpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvc3ltbGluay5jIGIvZnMvYWZzL3N5bWxpbmsuY1xcbmluZGV4IDE2YjQ4MjNjYjdiN2UuLmVkODM0YmE5MGU4NWEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3N5bWxpbmsuY1xcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcXG5AQCAtMjcxLDYgKzI3MSw4IEBAIGludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbiBcXHQuZ2V0X2xpbmtcXHQ9IGFmc19nZXRfbGluayxcXG4gXFx0LnJlYWRsaW5rXFx0PSBhZnNfcmVhZGxpbmssXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfYW9wcyA9IHtcXG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXFxuaW5kZXggNGY0MzdmYWJiN2YwZi4uYjdlOGI1ZDQ5YTlmZSAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qKlxcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbitzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbiB7XFxuIFxcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2Myw2ICsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cXHUwMDNlaWFfdmFsaWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdGdvdG8ga2lsbF9wcml2O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cXG4tXFx0aWYgKChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9VSUQpIHtcXG4rXFx0XFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVxcdTAwM2VpYV92ZnN1aWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovXFxuLVxcdGlmICgoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX0dJRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCkpXFxuLVxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuK1xcdFxcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzZ2lkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXFxuIFxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfTU9ERSkge1xcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzguLjNmMzJlNzNhYWVkYTIgMTAwNjQ0XFxuLS0tIGEvZnMvY29yZWR1bXAuY1xcbisrKyBiL2ZzL2NvcmVkdW1wLmNcXG5AQCAtOTU0LDcgKzk1NCw3IEBAIHN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuIFxcdCAqIGZpbGVzeXN0ZW0uXFxuIFxcdCAqL1xcbiBcXHRpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbi1cXHRpZiAoIXZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcXG4gXFx0XFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXFxcIkNvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclxcXCIsIGNuLVxcdTAwM2Vjb3JlbmFtZSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuY1xcbmluZGV4IDMxYzViOWVlM2E4MWQuLmE3ZWM4MzBhYjY4M2YgMTAwNjQ0XFxuLS0tIGEvZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2lub2RlLmNcXG5AQCAtMjc1MCwxNiArMjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXFxuICAqL1xcbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0dmZzdWlkX3QgdmZzdWlkO1xcbiBcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbiBcXHRucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xcbiBcXHRpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpIFxcdTAwMjZcXHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCAzNTVkOTNmOTIyMDg2Li5iZTQ1Y2M2Mzg4NjE5IDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiAvKlxcbiAgKiBuYW1laS5jXFxuICAqL1xcbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcXG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXFxuaW5kZXggNmU0ZmY3ZmNlYzA1My4uMDJmODEwZGM5ZTdlNyAxMDA2NDRcXG4tLS0gYS9mcy9sb2Nrcy5jXFxuKysrIGIvZnMvbG9ja3MuY1xcbkBAIC02OCw2ICs2OCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcXG4ge1xcbkBAIC0yMTM2LDEwICsyMTM3LDEyIEBAIGludFxcbiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbi1cXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbiBcXHRpbnQgZXJyb3I7XFxuIFxcbi1cXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFxcdTAwMjZcXHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXFxuK1xcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XFxuK1xcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0aWYgKGVycm9yICE9IDAgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XFxuIFxcdGlmIChlcnJvcilcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcXG5pbmRleCAxOWNlNDNjOWE2ZTY2Li43MmY5NGQyMDRmOTNmIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTU1LDggKzU1LDggQEBcXG4gICogVGhlIG5ldyBjb2RlIHJlcGxhY2VzIHRoZSBvbGQgcmVjdXJzaXZlIHN5bWxpbmsgcmVzb2x1dGlvbiB3aXRoXFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXFxuICAqIHRoaXMgd2l0aCBjYWxscyB0byBcXHUwMDNjZnNcXHUwMDNlX2ZvbGxvd19saW5rKCkuXFxuLSAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93IFxcbi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIFxcbisgKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vd1xcbisgKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsXFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cXG4gICpcXG4gICogV2l0aCB0aGUgbmV3IGRjYWNoZSwgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBhdCBlYWNoIGlub2RlLCBhdCBsZWFzdCBhc1xcbkBAIC0xMjU1LDYgKzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXFxuIFxcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgdGhlIHByb2Nlc3MgKGFsbG93aW5nIGZvciBmc3VpZCBvdmVycmlkZSksXFxuKyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW1cXG4rICogbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxcbisgKi9cXG4raW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxcbitcXHRcXHRyZXR1cm4gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmdcXG4rICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZ1xcbisgKiB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShpbm9kZS1cXHUwMDNlaV9vcGZsYWdzIFxcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqcGFyZW50O1xcbitcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcjtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdGlmIChpbm9kZSAhPSBuZC1cXHUwMDNlaW5vZGUpIHtcXG4rXFx0XFx0XFx0ZGlyID0gbmQtXFx1MDAzZWlub2RlO1xcbitcXHRcXHRcXHRyZXQgPSBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IFJFQURfT05DRShuZC1cXHUwMDNlcGF0aC5kZW50cnkpO1xcbitcXHRcXHRcXHRkaXIgPSBSRUFEX09OQ0UocGFyZW50LVxcdTAwM2VkX2lub2RlKTtcXG4rXFx0XFx0XFx0aWYgKCFkaXIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUNISUxEO1xcbitcXHRcXHRcXHRyZXQgPSBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGFyZW50ID0gZGdldF9wYXJlbnQobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlyID0gcGFyZW50LVxcdTAwM2VkX2lub2RlO1xcbitcXHRcXHRcXHRyZXQgPSBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0XFx0XFx0ZHB1dChwYXJlbnQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2ZnN1aWRfdmFsaWQobmQtXFx1MDAzZWRpcl92ZnN1aWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtXFx1MDAzZWRpcl92ZnN1aWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kXFxuKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShpbm9kZS1cXHUwMDNlaV9vcGZsYWdzIFxcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXFxuK1xcdFxcdHJldHVybiBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0aWYgKHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLFxcbitcXHRcXHQgICAgICBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXFxuK31cXG4rXFxuIC8qKlxcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbkBAIC0xMjcxLDI3ICsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XFxuLVxcdHZmc3VpZF90IHZmc3VpZDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghc3lzY3RsX3Byb3RlY3RlZF9zeW1saW5rcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbi1cXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbi1cXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbiBcXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXFxuIFxcdGlmICgobmQtXFx1MDAzZWRpcl9tb2RlIFxcdTAwMjYgKFNfSVNWVFh8U19JV09USCkpICE9IChTX0lTVlRYfFNfSVdPVEgpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdGlkbWFwID0gbW50X2lkbWFwKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuK1xcdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xcbi1cXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVxcdTAwM2VkaXJfdmZzdWlkKSBcXHUwMDI2XFx1MDAyNiB2ZnN1aWRfZXEobmQtXFx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGlmIChuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKVxcbiBcXHRcXHRyZXR1cm4gLUVDSElMRDtcXG5AQCAtMTM4OSwxMiArMTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXFxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cXG4gICpcXG4gICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XFxuLSAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXFxuLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGVcXG4rICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZCxcXG4rICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLFxcbisgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSxcXG4rICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUsXFxuKyAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGUgYW5kXFxuICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IG93biB0aGUgZmlsZVxcbi0gKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZVxcbiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMlxcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSB0byBiZSB3b3JsZCB3cml0YWJsZTogYmVpbmcgZ3JvdXAgd3JpdGFibGUgd2lsbFxcbiAgKiBiZSBlbm91Z2guXFxuQEAgLTE0MDUsMTMgKzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXFxuICAqXFxuKyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcXG4rICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcXG4rICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cXG4rICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcXG4rICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcXG4rICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXFxuKyAqXFxuKyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XFxuKyAqXFxuKyAqXFx0VVNFUlxcdERJUlxcdEZJTEVcXHRGSUxFXFx0QUxMT1dFRFxcbisgKlxcdFxcdE9XTkVSXFx0T1dORVJcXHRTVEFURVxcbisgKlxcdD09PT09PT1cXHQ9PT09PT09XFx0PT09PT09PVxcdD09PT09PT1cXHQ9PT09PT09XFxuKyAqXFx0QVxcdEFcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0QVxcdEFcXHRBXFx0RXhpc3RzXFx0WWVzXFxuKyAqXFx0QVxcdEFcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRBXFx0QlxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRBXFx0QlxcdEFcXHRFeGlzdHNcXHRZZXMsIEZPPT1VXFxuKyAqXFx0QVxcdEJcXHRCXFx0RXhpc3RzXFx0WWVzLCBGTz09RE9cXG4rICpcXHRBXFx0QlxcdENcXHRFeGlzdHNcXHROb1xcbisgKlxcdEFcXHRhbm9uWzFdXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdEFcXHRhbm9uWzFdXFx0QVxcdEV4aXN0c1xcdFllc1xcbisgKlxcdEFcXHRhbm9uWzFdXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0YW5vblxcdEFcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0YW5vblxcdEFcXHRBXFx0RXhpc3RzXFx0WWVzLCBGTz09RE9cXG4rICpcXHRhbm9uXFx0YW5vblsxXVxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRhbm9uXFx0YW5vblsxXVxcdC1cXHRFeGlzdHNcXHROb1xcbisgKlxcdGFub25cXHRBXFx0QVxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0YW5vblxcdEFcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRhbm9uXFx0QVxcdGFub25cXHRFeGlzdHNcXHROb1xcbisgKlxcbisgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xcbisgKlxcbiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxcbiAgKi9cXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqY29uc3QgaW5vZGUpXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVxcdTAwM2VkaXJfbW9kZTtcXG4tXFx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVxcdTAwM2VkaXJfdmZzdWlkLCBpX3Zmc3VpZDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcXHUwMDI2IFNfSVNWVFgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTE0MjIsMTMgKzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChTX0lTRklGTyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9maWZvcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpX3Zmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcbi1cXHRpZiAodmZzdWlkX2VxKGlfdmZzdWlkLCBkaXJfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGlmIChsaWtlbHkoZGlyX21vZGUgXFx1MDAyNiAwMDAyKSkge1xcbiBcXHRcXHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwgXFxcInN0aWNreV9jcmVhdGVcXFwiKTtcXG5AQCAtMzY0NSwxMiArMzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XFxuIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4tXFx0a3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdHJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXFxuaW5kZXggMjZhZmJiYmZiMTBjMi4uOWVlZTkzYzI3MDAxMiAxMDA2NDRcXG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXFxuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbkBAIC00MTMsMjAgKzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xcbiBcXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVQRVJNO1xcbiB9XFxuIFxcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxcbkBAIC00NTksOCArNDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IC1FUEVSTTtcXG4tXFx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxcbitcXHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdHJldCA9IC1FWERFVjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggNTBjZTczMWEyYjc4Zi4uODAxM2MxM2EzNTNkNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtNjI4LDYgKzYyOCw3IEBAIGlzX3VuY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICphY2wpXFxuICNkZWZpbmUgSU9QX0NBQ0hFRF9MSU5LXFx0XFx0MHgwMDQwXFxuICNkZWZpbmUgSU9QX0ZBU1RQRVJNX01BWV9FWEVDXFx0MHgwMDgwXFxuICNkZWZpbmUgSU9QX0ZMQ1RYXFx0XFx0MHgwMTAwXFxuKyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVxcdDB4MDIwMFxcdC8qIFVzZSAtXFx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKCkgKi9cXG4gXFxuIC8qXFxuICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtXFx1MDAzZWlfbG9ja1xcbkBAIC0xNzU1LDggKzE3NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV93cml0ZV9ub3Rfc3RhcnRlZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHNiX3dyaXRlX25vdF9zdGFydGVkKGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2IpO1xcbiB9XFxuIFxcbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIC8qXFxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cXG5AQCAtMjAzNiw2ICsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xcbiBcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFx0c3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUyKTtcXG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuIFxcbiAvKiBEaWQgdGhlIGRyaXZlciBwcm92aWRlIHZhbGlkIG1tYXAgaG9vayBjb25maWd1cmF0aW9uPyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OTowOC44MDY2NjYyMDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTM5ODg2NTk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwic2V0YXR0cl9wcmVwYXJlXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZTIGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIGZvciBBRlMgYW5kIG1vZGlmaWVzIHNldmVyYWwgY29yZSBWRlMgZnVuY3Rpb25zIChjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBzeW1saW5rIGZvbGxvd2luZykgdG8gdXNlIHRoZSBuZXcgaGVscGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBhZmZlY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjOTlhOTc4ZTcxODBjYjI0ZDlhZTE1MWQ3NTJiY2I5N2VjNDRkYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxODo0OTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggN2M3NTMxNDhhZjg4OC4uODkzNDE5ZTAwM2VhZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNDQ1LDYgKzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDpcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdH07XG4gXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXG5AQCAtNjM0LDYgKzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbitgYGlzX293bmVkX2J5X21lYGBcbitcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJ293bmVkJyBieVxuK1x0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXG4rXHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4rXHR0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZVxuK1x0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXG4rXHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4rXHRldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS5cbitcbitgYGhhdmVfc2FtZV9vd25lcmBgXG4rXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgaW1tZWRpYXRlXG4rXHRwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseVxuK1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuK1x0b2YgYm90aCAtIGJ1dCB0aGVzZSBhcmUgYSA2NC1iaXQgdmFsdWVzIG9uIHNvbWUgdmFyaWFudHMgdGhhdCBtaWdodFxuK1x0bm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0b1xuK1x0a3VpZF90LlxuK1xuK1xuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxuID09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNmRmNTZmZTkxNjNmZC4uZWUyZjVlYzBiMmM2NyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXIuY1xuKysrIGIvZnMvYWZzL2Rpci5jXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQucGVybWlzc2lvblx0PSBhZnNfcGVybWlzc2lvbixcbiBcdC5nZXRhdHRyXHQ9IGFmc19nZXRhdHRyLFxuIFx0LnNldGF0dHJcdD0gYWZzX3NldGF0dHIsXG4rXHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuK1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19kaXJfYW9wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xuaW5kZXggMDQ2Nzc0MmJmZWVlMy4uYmE0NDQ5M2NjYWY2ZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbisrKyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4rXHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuK1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xuaW5kZXggMTRmMzlhOWJlYTZjZi4uYWY4NWE4OGQ5NDNkZCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbm9kZS5jXG4rKysgYi9mcy9hZnMvaW5vZGUuY1xuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbitcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xuIFx0c2V0X25saW5rKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXHUwMDNlbmxpbmspO1xuIFxuIFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggMjkwODczYmFjODliMy4uZjE1ZGJiYzhkZDI2NCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTE1MzEsNiArMTUzMSw5IEBAIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXkoc3RydWN0IGFmc19jZWxsICopO1xuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gaW50IGFmc19jaGVja19wZXJtaXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGFmc19hY2Nlc3NfdCAqKTtcbiBleHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4raW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUyKTtcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcbmluZGV4IDZkMDBkNjJhNjVlZGYuLjcwOTJmNWFjZGNkNmEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuKysrIGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcbisgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4rICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbisgKi9cbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuK1x0YWZzX2FjY2Vzc190IGFjY2VzcztcbitcdHN0cnVjdCBrZXkgKmtleTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXG4rXG4rXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuK1x0aWYgKElTX0VSUihrZXkpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihrZXkpO1xuK1xuK1x0LyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi9cbitcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXHUwMDI2YWNjZXNzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbitcdHJldCA9IChhY2Nlc3MgXHUwMDI2IEFGU19BQ0VfQURNSU5JU1RFUikgPyAwIDogMTtcbitlcnJvcjpcbitcdGtleV9wdXQoa2V5KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnNcbisgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuKyAqL1xuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuK1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcbitcbitcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4rfVxuK1xuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZClcbiB7XG4gXHRpbnQgaTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvc3ltbGluay5jIGIvZnMvYWZzL3N5bWxpbmsuY1xuaW5kZXggMTZiNDgyM2NiN2I3ZS4uZWQ4MzRiYTkwZTg1YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zeW1saW5rLmNcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcbkBAIC0yNzEsNiArMjcxLDggQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5nZXRfbGlua1x0PSBhZnNfZ2V0X2xpbmssXG4gXHQucmVhZGxpbmtcdD0gYWZzX3JlYWRsaW5rLFxuK1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbitcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xuaW5kZXggNGY0MzdmYWJiN2YwZi4uYjdlOGI1ZDQ5YTlmZSAxMDA2NDRcbi0tLSBhL2ZzL2F0dHIuY1xuKysrIGIvZnMvYXR0ci5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4rc3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE4LDIzICsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxuIHtcbiBcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XG4tXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXQgPT0gMCkge1xuIFx0XHRpZiAodmZzZ2lkX2VxKGlhX3Zmc2dpZCwgdmZzZ2lkKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuc19jYXBhYmxlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xNjMsNiArMTcwLDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHR1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLVx1MDAzZWlhX3ZhbGlkO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xuQEAgLTE4OSwxNCArMTk3LDE4IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0Z290byBraWxsX3ByaXY7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNob3duLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzdWlkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbitcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIHtcbitcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Li4zZjMyZTczYWFlZGEyIDEwMDY0NFxuLS0tIGEvZnMvY29yZWR1bXAuY1xuKysrIGIvZnMvY29yZWR1bXAuY1xuQEAgLTk1NCw3ICs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcbiBcdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcIiwgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWQuLmE3ZWM4MzBhYjY4M2YgMTAwNjQ0XG4tLS0gYS9mcy9pbm9kZS5jXG4rKysgYi9mcy9pbm9kZS5jXG5AQCAtMjc1MCwxNiArMjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dmZzdWlkX3QgdmZzdWlkO1xuIFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpucztcbitcdGludCByZXQ7XG4gXG4tXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4gXHRucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xuIFx0aWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSBcdTAwMjZcdTAwMjYgbnNfY2FwYWJsZShucywgQ0FQX0ZPV05FUikpXG4gXHRcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCAzNTVkOTNmOTIyMDg2Li5iZTQ1Y2M2Mzg4NjE5IDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIC8qXG4gICogbmFtZWkuY1xuICAqL1xuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG4gXHRcdFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcbiBpbnQgZmlsZW5hbWVfcm1kaXIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKTtcbmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuY1xuaW5kZXggNmU0ZmY3ZmNlYzA1My4uMDJmODEwZGM5ZTdlNyAxMDA2NDRcbi0tLSBhL2ZzL2xvY2tzLmNcbisrKyBiL2ZzL2xvY2tzLmNcbkBAIC02OCw2ICs2OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG4ge1xuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuK1x0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbitcdGlmIChlcnJvciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1x0aWYgKGVycm9yICE9IDAgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMTljZTQzYzlhNmU2Ni4uNzJmOTRkMjA0ZjkzZiAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC01NSw4ICs1NSw4IEBAXG4gICogVGhlIG5ldyBjb2RlIHJlcGxhY2VzIHRoZSBvbGQgcmVjdXJzaXZlIHN5bWxpbmsgcmVzb2x1dGlvbiB3aXRoXG4gICogYW4gaXRlcmF0aXZlIG9uZSAoaW4gY2FzZSBvZiBub24tbmVzdGVkIHN5bWxpbmsgY2hhaW5zKS4gIEl0IGRvZXNcbiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gXHUwMDNjZnNcdTAwM2VfZm9sbG93X2xpbmsoKS5cbi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyBcbi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIFxuKyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93XG4rICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cbiAgKlxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcbkBAIC0xMjU1LDYgKzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiBcbiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xuIFxuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxuKyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW1cbisgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4rICovXG4raW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbitcdFx0cmV0dXJuIGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbit9XG4rXG4rLypcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmdcbisgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nXG4rICogdGhlIGRldGVybWluYXRpb24uXG4rICovXG4rc3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4re1xuK1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcbitcdFx0c3RydWN0IGRlbnRyeSAqcGFyZW50O1xuK1x0XHRzdHJ1Y3QgaW5vZGUgKmRpcjtcbitcdFx0aW50IHJldDtcbitcbitcdFx0aWYgKGlub2RlICE9IG5kLVx1MDAzZWlub2RlKSB7XG4rXHRcdFx0ZGlyID0gbmQtXHUwMDNlaW5vZGU7XG4rXHRcdFx0cmV0ID0gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0XHR9IGVsc2UgaWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSB7XG4rXHRcdFx0cGFyZW50ID0gUkVBRF9PTkNFKG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbitcdFx0XHRkaXIgPSBSRUFEX09OQ0UocGFyZW50LVx1MDAzZWRfaW5vZGUpO1xuK1x0XHRcdGlmICghZGlyKVxuK1x0XHRcdFx0cmV0dXJuIC1FQ0hJTEQ7XG4rXHRcdFx0cmV0ID0gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbitcdFx0XHRkaXIgPSBwYXJlbnQtXHUwMDNlZF9pbm9kZTtcbitcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRcdFx0ZHB1dChwYXJlbnQpO1xuK1x0XHR9XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVx1MDAzZWRpcl92ZnN1aWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC1cdTAwM2VkaXJfdmZzdWlkKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxuKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbisgKi9cbitzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIpXG4re1xuK1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4rXHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRpZiAodmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksXG4rXHRcdCAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4rfVxuK1xuIC8qKlxuICAqIG1heV9mb2xsb3dfbGluayAtIENoZWNrIHN5bWxpbmsgZm9sbG93aW5nIGZvciB1bnNhZmUgc2l0dWF0aW9uc1xuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbkBAIC0xMjcxLDI3ICsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuLVx0dmZzdWlkX3QgdmZzdWlkO1xuK1x0aW50IHJldDtcbiBcbiBcdGlmICghc3lzY3RsX3Byb3RlY3RlZF9zeW1saW5rcylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG4tXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBub3Qgc3RpY2t5IGFuZCB3b3JsZC13cml0YWJsZS4gKi9cbiBcdGlmICgobmQtXHUwMDNlZGlyX21vZGUgXHUwMDI2IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG4rXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovXG4tXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVx1MDAzZWRpcl92ZnN1aWQpIFx1MDAyNlx1MDAyNiB2ZnN1aWRfZXEobmQtXHUwMDNlZGlyX3Zmc3VpZCwgdmZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSlcbiBcdFx0cmV0dXJuIC1FQ0hJTEQ7XG5AQCAtMTM4OSwxMiArMTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxuICAqXG4gICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XG4tICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICogICAtIHdlIGRvbid0IG93biB0aGUgZmlsZVxuKyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsXG4rICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLFxuKyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LFxuKyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLFxuKyAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGUgYW5kXG4gICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3Qgb3duIHRoZSBmaWxlXG4tICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGVcbiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMlxuICAqIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsXG4gICogYmUgZW5vdWdoLlxuQEAgLTE0MDUsMTMgKzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqXG4rICogRm9yIGEgZmlsZXN5c3RlbSAoZS5nLiBhIG5ldHdvcmsgZmlsZXN5c3RlbSkgdGhhdCBoYXMgYSBzZXBhcmF0ZSBJRCBzcGFjZVxuKyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXG4rICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cbisgKiBJbnN0ZWFkLCB0aGUgZmlsZXN5c3RlbSBpcyBhc2tlZCB0byBwZXJmb3JtIHRoZSBjb21wYXJpc29ucy4gIFdpdGggbmV0d29ya1xuKyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXG4rICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXG4rICpcbisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuKyAqXG4rICpcdFVTRVJcdERJUlx0RklMRVx0RklMRVx0QUxMT1dFRFxuKyAqXHRcdE9XTkVSXHRPV05FUlx0U1RBVEVcbisgKlx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVxuKyAqXHRBXHRBXHQtXHROZXdcdFllc1xuKyAqXHRBXHRBXHRBXHRFeGlzdHNcdFllc1xuKyAqXHRBXHRBXHRDXHRFeGlzdHNcdE5vXG4rICpcdEFcdEJcdC1cdE5ld1x0WWVzXG4rICpcdEFcdEJcdEFcdEV4aXN0c1x0WWVzLCBGTz09VVxuKyAqXHRBXHRCXHRCXHRFeGlzdHNcdFllcywgRk89PURPXG4rICpcdEFcdEJcdENcdEV4aXN0c1x0Tm9cbisgKlx0QVx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbisgKlx0QVx0YW5vblsxXVx0QVx0RXhpc3RzXHRZZXNcbisgKlx0QVx0YW5vblsxXVx0Q1x0RXhpc3RzXHROb1xuKyAqXHRhbm9uXHRBXHQtXHROZXdcdFllc1xuKyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4rICpcdGFub25cdGFub25bMV1cdC1cdE5ld1x0WWVzXG4rICpcdGFub25cdGFub25bMV1cdC1cdEV4aXN0c1x0Tm9cbisgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuKyAqXHRhbm9uXHRBXHRDXHRFeGlzdHNcdE5vXG4rICpcdGFub25cdEFcdGFub25cdEV4aXN0c1x0Tm9cbisgKlxuKyAqIFsxXSBDYW4gYW5vbnltb3VzbHktb3duZWQgZGlycyBiZSBzdGlja3k/XG4rICpcbiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLVx0XHRcdFx0c3RydWN0IGlub2RlICpjb25zdCBpbm9kZSlcbitcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVx1MDAzZWRpcl9tb2RlO1xuLVx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVx1MDAzZWRpcl92ZnN1aWQsIGlfdmZzdWlkO1xuK1x0aW50IHJldDtcbiBcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNDIyLDEzICsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cbi1cdGlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KGRpcl9tb2RlIFx1MDAyNiAwMDAyKSkge1xuIFx0XHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwgXCJzdGlja3lfY3JlYXRlXCIpO1xuQEAgLTM2NDUsMTIgKzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xuIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuLVx0a3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpO1xuK1x0aW50IHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0cmV0dXJuICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfRk9XTkVSKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzIuLjllZWU5M2MyNzAwMTIgMTAwNjQ0XG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXG4rKysgYi9mcy9yZW1hcF9yYW5nZS5jXG5AQCAtNDEzLDIwICs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggKzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVQRVJNO1xuLVx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxuK1x0cmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmLi44MDEzYzEzYTM1M2Q2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXHQweDAyMDBcdC8qIFVzZSAtXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVx1MDAzZWhhdmVfc2FtZV9vd25lcigpICovXG4gXG4gLypcbiAgKiBJbm9kZSBzdGF0ZSBiaXRzLiAgUHJvdGVjdGVkIGJ5IGlub2RlLVx1MDAzZWlfbG9ja1xuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHNiX3dyaXRlX25vdF9zdGFydGVkKGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYik7XG4gfVxuIFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7XG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XG4gXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0c3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1x0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gXG4gLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjA4LjgwNjY2ODE5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0Nzk0OTg2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBJbm9kZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB0aGUgVkZTIGxheWVyIGhhbmRsZXMgZmlsZSBvd25lcnNoaXAsIHNwZWNpZmljYWxseSBmb3IgZmlsZXN5c3RlbXMgbGlrZSBBRlMgdGhhdCB1c2UgdG9rZW5zIGluc3RlYWQgb2YgdGhlIHRyYWRpdGlvbmFsIFVJRC9HSUQgbW9kZWwuIFdlJ3ZlIGdvdCB0d28gbmV3IGBpbm9kZV9vcGVyYXRpb25zYDogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBvdmVycmlkZSB0aGUgc3RhbmRhcmQgb3duZXJzaGlwIGNoZWNrcyB3aXRoaW4gdGhlIFZGUywgd2hpY2ggaXMga2V5IGZvciBBRlMuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZXNlIGluIEFGUyBhcyBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLlxuXG5UaGUgYmlnIHBpY3R1cmUgaGVyZSBpcyB0aGF0IGEgd2hvbGUgc2xldyBvZiBWRlMgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCB0byB1c2UgdGhlc2UgbmV3IGhlbHBlcnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGFuZCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCBhbmQgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYC4gSXQncyB0b3VjaGluZyBjb3JlIG9wZXJhdGlvbnMgbGlrZSBgY2hvd25gLCBgY2hncnBgLCBgY29yZWR1bXBgLCBsZWFzZSBtYW5hZ2VtZW50LCBzeW1saW5rIGZvbGxvd2luZywgc3RpY2t5IGJpdCBjaGVja3MsIGFuZCBldmVuIGZpbGUgZGVkdXBsaWNhdGlvbiEgVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIGZpbGUgc3lzdGVtIGJlaGF2aW9yIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIG5vdyBpcyBwaW5wb2ludGluZyB0aGUgbW9zdCB2dWxuZXJhYmxlIGFyZWFzIGZvciBmdXp6aW5nLiBXZSBoYXZlIHRocmVlIG5ld2x5IGludHJvZHVjZWQgVkZTIGhlbHBlcnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCBhbmQgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYC4gT24gdGhlIEFGUyBzaWRlLCB3ZSd2ZSBnb3QgYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZpcnN0LlxuXG5CZXlvbmQgdGhhdCwgdGhlIHBhdGNoZWQgVkZTIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgZnVuIGxpZXM6IGBzZXRhdHRyX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAgKG5vdCBhIHByaW1hcnkgZnV6emluZyB0YXJnZXQgZGlyZWN0bHksIGJ1dCBpdCBwcm92aWRlcyBhIHBhdGh3YXkpLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGFuZCBgX19jaGVja19zdGlja3lgLiBUaGUgZGVkdXBlIGltcGxlbWVudGF0aW9uIHZpYSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKHdoaWNoIGNhbGxzIGBtYXlfZGVkdXBlX2ZpbGVgKSBhbHNvIG5lZWRzIGEgbG9vay4gYG1heV9mb2xsb3dfbGlua2AgYW5kIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgYXJlIG1hcmtlZCBhcyBzdGF0aWMgZnVuY3Rpb25zIHNvIG15IHRlYW0gd2lsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2hlbmFuaWdhbnMgaGVyZSwgc28gSSdsbCBjaGVjayBmb3IgYW55IG5lY2Vzc2FyeSBgQ09ORklHYCBvcHRpb25zLiBBRlMgbG9va3MgbGlrZSBpdCdzIGdhdGVkIGJ5IGBDT05GSUdfQUZTX0ZTYCwgYnV0IHRoZSBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIGVuYWJsZWQuXG5cbkZpbmFsbHksIEknbGwgZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBmb3IgYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYCBqdXN0IHRvIGJlIGRvdWJseSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIGluIHRoZSBjb2RlYmFzZS4gVGhlbiBpdCdzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSBmdXp6aW5nIGhhcm5lc3Nlcy4gVGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OToxOC4yODYxNjkyMzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1OTI4OTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfaXNfb3duZWRfYnlfbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpci5jPTYwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Fmcy9kaXIuYy03MS1cXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuZnMvYWZzL2Rpci5jOjcyOlxcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbmZzL2Fmcy9kaXIuYy03My1cXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4tLVxcbmZzL2Fmcy9maWxlLmM9NDg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Fmcy9maWxlLmMtNTEtXFx0LnBlcm1pc3Npb25cXHQ9IGFmc19wZXJtaXNzaW9uLFxcbmZzL2Fmcy9maWxlLmM6NTI6XFx0LmlzX293bmVkX2J5X21lXFx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXFxuZnMvYWZzL2ZpbGUuYy01My1cXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTE1MzM9ZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1MzQ6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1pbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXFxuLS1cXG5mcy9hZnMvc2VjdXJpdHkuYz00MzE9aW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvYWZzL3NlY3VyaXR5LmMtNTE4LSAqL1xcbmZzL2Fmcy9zZWN1cml0eS5jOjUxOTppbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XFxuLS1cXG5mcy9hZnMvc3ltbGluay5jPTI3MT1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYy0yNzMtXFx0LnJlYWRsaW5rXFx0PSBhZnNfcmVhZGxpbmssXFxuZnMvYWZzL3N5bWxpbmsuYzoyNzQ6XFx0LmlzX293bmVkX2J5X21lXFx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXFxuZnMvYWZzL3N5bWxpbmsuYy0yNzUtXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjIwLjk0NTQ2NDQ0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzk1ODU0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZpbGUgT3duZXJzaGlwIGFuZCBBY2Nlc3MgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gSSBzZWUgYSBmb2N1c2VkIHNldCBoZXJlIHJlbGF0ZWQgdG8gZmlsZSBvd25lcnNoaXAgYW5kIGFjY2VzcyBjb250cm9sLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgdmlydHVhbCBmaWxlc3lzdGVtIGFuZCBBRlMgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIHZlcmlmeWluZyBwZXJtaXNzaW9ucywgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZmlsZSBsZWFzZXMgb3IgZGVkdXBsaWNhdGlvbi4gSSdtIG5vdGluZyB0aGUgZnVuY3Rpb25zIGNhcmVmdWxseTogYGFmc19pc19vd25lZF9ieV9tZWAsIGBhZnNfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb25zIHN1Z2dlc3QgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIEFGUy1zcGVjaWZpYyBsb2dpYyBhbmQgbW9yZSBnZW5lcmFsIFZGUyBmdW5jdGlvbnMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGhhcyBhIG1vcmUgY29tcGxleCBmaWxlLW93bmVyc2hpcCBtYW5hZ2VtZW50IHN5c3RlbSB0aGFuIGEgYmFzaWMgc3lzdGVtLlxuXG5UaGUgcHJlc2VuY2Ugb2YgYGFmc18qYCBmdW5jdGlvbnMgaXMgdGhlIGtleSB0aGluZyBJIGFtIHNlZWluZyBoZXJlLiBJIHdpbGwgbG9vayB0byBzZWUgaWYgQUZTX0ZTIGlzIHRoZSBvbmx5IGNvbmZpZyBwcmVzZW50IGJlY2F1c2UgdGhhdCBzdWdnZXN0cyB0aGF0IHRoaXMgY29kZSBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGZpbGUgc3lzdGVtIHdpdGggYSBudW1iZXIgb2YgZGlmZmVyZW50IGZpbGUgc3lzdGVtcyB0aGF0IGhhdmUgZGlmZmVyaW5nIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MjUuMjI1MDU0MDE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDQwNDQ0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MjcuNTY5MTExMDczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzk3ODQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrIGZvciBBRlNfRlMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIGBBRlNfRlNgIGZpbGVzeXN0ZW0gZmVhdHVyZSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gY2hlY2sgaXMgYGZzL2Fmcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcy4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIG9yIGRlZmluZWQgYmVmb3JlIGBBRlNfRlNgIGNhbiBiZSBwcm9wZXJseSBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjMwLjgwMzA5MTc1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQUZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBBRl9SWFJQQ1xcbiAgIDY6XFx0XFx0c2VsZWN0IEROU19SRVNPTFZFUlxcbiAgIDc6XFx0XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IGFuIGV4cGVyaW1lbnRhbCBBbmRyZXcgRmlsZSBTeXN0ZW1cXG4gIDExOlxcdFxcdCAgZHJpdmVyLiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1bnNlY3VyZWQgcmVhZC1vbmx5IEFGUyBhY2Nlc3MuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFGU19ERUJVR1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiQUZTIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBBRlNfRlNcXG4gIDIwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MzAuODAzMTQ5MTA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1MTgzMDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEFGU19GU2AgY29uZmlndXJhdGlvbiwgYW5kIGl0J3MgY29udGluZ2VudCBvbiBgSU5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGF0IGEgaGlnaCBsZXZlbC4gTm93LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBoZXJlLiBMZXQncyBzZWUuLi4gd2UndmUgZ290IGEgbWl4IG9mIHRoaW5ncyByZWxhdGVkIHRvIG93bmVyc2hpcCBjaGVja3Mgd2l0aGluIHRoZSBBRlMgZmlsZSBzeXN0ZW0gLSBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYXMgd2VsbCBhcyBtb3JlIGdlbmVyYWwgVkZTIGZ1bmN0aW9uYWxpdHkgbGlrZSBgc2V0YXR0cl9wcmVwYXJlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiBBRlMsIHdoaWNoIG9mdGVuIGludm9sdmVzIGRpc3RyaWJ1dGVkIG93bmVyc2hpcCBhbmQgcG90ZW50aWFsbHkgbW9yZSBjb21wbGV4IGFjY2VzcyBjb250cm9sLCB0aGVzZSBzZWVtIGxpa2UgcmVsZXZhbnQgcGllY2VzLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBvd25lcnNoaXAgaXMgbWFuYWdlZCwgYW5kIGl0IHNlZW1zIHRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIHRoaXMuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIHRoZSBvbmUgdGhhdCByZWFsbHkgc3RpY2tzIG91dC5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3MganVzdCBtYWtlIHN1cmUgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2ssIGJ1dCBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGF0IGl0J3MgYWNjZXNzaWJsZSB3aGVyZSBJIG5lZWQgaXQuIEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGtlcm5lbCdzIHN5bWJvbCB0YWJsZSB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MzcuMTU0OTgyNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDIzMDIxNDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MzkuODk3Mjk2MjI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTM5NDc5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipEZWVwIERpdmUgaW50byBLZXJuZWwgT3duZXJzaGlwIENoZWNrcyoqXG5cbkFscmlnaHQsIHNvIEknbSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3duZXJzaGlwLCBidXQgaXQncyBub3QgYSBzdHJhaWdodGZvcndhcmQgZXhwb3J0ZWQgZnVuY3Rpb24gb3IgYSBzaW1wbGUgc3RhdGljIHZhbHVlLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIG1lYW5pbmcgSSBwcm9iYWJseSBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUga2VybmVsJ3MgaW50ZXJuYWxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSByZWxhdGVkIGNvZGUgbGl2ZXMgaW4gYGZzL25hbWVpLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGtlcm5lbCBkZXRlcm1pbmVzIGlmIGFuIGlub2RlIGlzIFwib3duZWRcIiBieSB0aGUgY3VycmVudCBwcm9jZXNzLCBmb3Igd2hhdGV2ZXIgcmVhc29uLlxuXG5UaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvbmFtZWkuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhIGZ1bmN0aW9uIOKAkyBJJ20gYmV0dGluZyBpdCdzIGFwdGx5IG5hbWVkIOKAkyBsaWtlIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGNoZWNrIEknbSBpbnRlcmVzdGVkIGluLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MDAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OTo0My41OTEyNDY4MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODUzNTQ0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEwMC1cXG5mcy9hdHRyLmM6MTAxOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMDItXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEyOS1cXG5mcy9hdHRyLmM6MTMwOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05NTYtXFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG5mcy9jb3JlZHVtcC5jOjk1NzpcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbmZzL2NvcmVkdW1wLmMtOTU4LVxcdFxcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFxcXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcXFwiLCBjbi1cXHUwMDNlY29yZW5hbWUpO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtMjc1OC1cXG5mcy9pbm9kZS5jOjI3NTk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvaW5vZGUuYy0yNzYwLVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbi0tXFxuZnMvbG9ja3MuYy0yMTQxLVxcbmZzL2xvY2tzLmM6MjE0MjpcXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbmZzL2xvY2tzLmMtMjE0My1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuLS1cXG5mcy9uYW1laS5jLTEyNjItICovXFxuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMjY0LXtcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXFx0XFx0cmV0dXJuIDA7XFxuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OTo0NS43NzY2MDczMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTkzMTg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmlsZSBPd25lcnNoaXAgYW5kIEFjY2VzcyBDb250cm9sIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBzZXQgb2YgZnVuY3Rpb25zLiBJJ20gc2VlaW5nIGEgY29yZSBncm91cCBoZXJlIHRoYXQgZGVhbHMgd2l0aCBjaGVja2luZyBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zIOKAkyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYGFmc19pc19vd25lZF9ieV9tZWAsIGFuZCBgYWZzX2hhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSB0aGUgYmFzaWNzLCBJIGV4cGVjdC4gV2UndmUgYWxzbyBnb3QgYHNldGF0dHJfcHJlcGFyZWAsIHdoaWNoIGxpa2VseSBoYW5kbGVzIHByZXBhcmluZyBhdHRyaWJ1dGUgY2hhbmdlcywgYW5kIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IGl0IHNvdW5kcyBsaWtlIOKAkyBjaGVja2luZyBvd25lcnNoaXAgb3IgY2FwYWJpbGl0eS4gVGhlbiB3ZSBoYXZlIHNvbWUgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbnMgc3VjaCBhcyBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYCB0aGF0IEkgbmVlZCB0byBwbGFjZSBpbnRvIHRoZSBsYXJnZXIgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcCBvZiBzb21lIG90aGVyLCByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXNlIG1pZ2h0IGZpdC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEFoYSwgdGhleSdyZSBzdGF0aWMgaW4gYGZzL25hbWVpLmNgLiBHb29kIHRvIGtub3csIHRoYXQgcGxhY2VzIHRoZW0gd2l0aGluIHRoZSBWRlMgbmFtZXNwYWNlLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIEkgYnVpbGQgdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5JIHdhcyBhbHNvIHRoaW5raW5nIG9mIGluY2x1ZGluZyBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGFuZCBgbWF5X2ZvbGxvd19saW5rYCBpbiBteSBhbmFseXNpcywgYnV0IHNpbmNlIHRoZXkgYXJlIGFsc28gc3RhdGljIGZ1bmN0aW9ucywgdGhhdCBtaWdodCBub3QgYmUgYXMgaW1wb3J0YW50LCBidXQgZ29vZCB0byBrZWVwIGluIG1pbmQuIFdhaXQsIGlzIGBtYXlfbGlua2F0YCBjYWxsaW5nIGBtYXlfZm9sbG93X2xpbmtgPyBObywgbm8sIGBtYXlfZm9sbG93X2xpbmtgIGlzIGNhbGxlZCBmcm9tIGBmb2xsb3dfbGlua2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBzdHJhaWdodCBoZXJlLiBHaXZlbiB0aGUgdXNlIG9mIGBtYXlfZm9sbG93X2xpbmtgLCBJIHdpbGwgbm93IG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMDYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6NTEuMzM4NTQyNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg1ODgwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF5X2ZvbGxvd19saW5rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAucnN0PTExMzA9Y29tcG9uZW50IG9mIHRoZSBsb29rdXAsIHNvIHdlIHdpbGwgY2hlY2sgdXNlcnNwYWNlIGZsYWcgYGBMT09LVVBfRk9MTE9XYGAgdG9cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdDoxMTMxOmRlY2lkZSB3aGV0aGVyIGZvbGxvdyBpdCB3aGVuIGl0IGlzIGEgc3ltbGluayBhbmQgY2FsbCBgYG1heV9mb2xsb3dfbGluaygpYGAgdG9cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdC0xMTMyLWNoZWNrIGlmIHdlIGhhdmUgcHJpdmlsZWdlIHRvIGZvbGxvdyBpdC5cXG4tLVxcbmZzL25hbWVpLmM9MTMxMz1zdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvbmFtZWkuYy0xMzI0LS8qKlxcbmZzL25hbWVpLmM6MTMyNTogKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcXG5mcy9uYW1laS5jLTEzMjYtICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbi0tXFxuZnMvbmFtZWkuYy0xMzM5LSAqL1xcbmZzL25hbWVpLmM6MTM0MDpzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMzQxLXtcXG4tLVxcbmZzL25hbWVpLmM9MjEwNj1zdGF0aWMgbm9pbmxpbmUgY29uc3QgY2hhciAqcGlja19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgcGF0aCAqbGluayxcXG4tLVxcbmZzL25hbWVpLmMtMjEzMy1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBXQUxLX1RSQUlMSU5HKSB7XFxuZnMvbmFtZWkuYzoyMTM0OlxcdFxcdGVycm9yID0gbWF5X2ZvbGxvd19saW5rKG5kLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0yMTM1LVxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjUzLjYyNzEzNzg1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzMzM3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipBbmFseXppbmcgTGluayBUcmF2ZXJzYWwgTG9naWMqKlxuXG5Pa2F5LCBzbyBgcGlja19saW5rYCBpcyByZXNwb25zaWJsZSBmb3IsIHdlbGwsIHBpY2tpbmcgYSBsaW5rLiBBbmQgaXQgYXBwZWFycyB0aGF0IGl0J3MgY2FsbGluZyBgbWF5X2ZvbGxvd19saW5rYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdlIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gYWN0dWFsbHkgKmZvbGxvdyogdGhlIGxpbmsgYWZ0ZXIgd2UndmUgcGlja2VkIGl0LiBOb3csIHdoYXQncyBjcnVjaWFsIGhlcmUgaXMgaG93IHdlIGRlZmluZSB0aGUgcGFyYW1ldGVycyBmb3IgcGlja2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBsaW5rIGlzIGRlZW1lZCAnZm9sbG93YWJsZS4nXG5cbkJlZm9yZSBkaWdnaW5nIGludG8gYG1heV9mb2xsb3dfbGlua2AncyBjb2RlIGRpcmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGVyIHBpY3R1cmUsIGFzIGluLCB3aG8gYXJlIHRoZSBjYWxsZXJzIG9mIGBtYXlfY3JlYXRlX2luX3N0aWNreWA/IEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaW5mbHVlbmNlcyB0aGUgZGVjaXNpb24gdG8gY3JlYXRlIGEgc3RpY2t5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGJyb2FkZXIgY29udGV4dHMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBsb2dpYyBtb3JlIGVmZmVjdGl2ZWx5LiBGcm9tIHRoaXMsIEkgd2lsbCBiZSBhYmxlIHRvIGNoZWNrIGZvciBhbnkgbGlua3MgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3RpY2t5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjU3LjI2MDQ4NzcyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNzM0MjY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXlfY3JlYXRlX2luX3N0aWNreVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbi0tXFxuZnMvbmFtZWkuYy0xNDUwLS8qKlxcbmZzL25hbWVpLmM6MTQ1MTogKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbmZzL25hbWVpLmMtMTQ1Mi0gKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMgdGhhdCBhbHJlYWR5XFxuLS1cXG5mcy9uYW1laS5jLTE1MDgtICovXFxuZnMvbmFtZWkuYzoxNTA5OnN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbmZzL25hbWVpLmMtMTUxMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbmFtZWkuYz00NzUzPXN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4tLVxcbmZzL25hbWVpLmMtNDc3NC1cXHRcXHRcXHRyZXR1cm4gLUVJU0RJUjtcXG5mcy9uYW1laS5jOjQ3NzU6XFx0XFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXFxuZnMvbmFtZWkuYy00Nzc2LVxcdFxcdFxcdFxcdFxcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVxcdTAwM2VwYXRoLmRlbnRyeSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1MDowMC4wOTc4MzY3NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3OTA2NDc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNlY3VyaXR5IEltcGxpY2F0aW9ucyBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gYGRvX29wZW5gIGNhbGxzIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMuIEkndmUgZ290IGEgZ29vZCBsaXN0IGhlcmU6IGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBsb2NhdGlvbiBvZiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4gWWVzLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBmcy9uYW1laS5jYC4gR29vZC4gTmV4dCwgaXMgYEFGU19GU2AgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG5lZWRlZD8gU2VlbXMgdGhhdCB3YXk7IHRoZSBBRlMtc3BlY2lmaWMgcGFydCBpcyBlbmFibGVkIGJ5IGBBRlNfRlNgLCBhbmQgdGhlIFZGUyBwb3J0aW9uIGlzIGFsd2F5cyBhY3RpdmUuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSB0byBsaXN0IGBBRlNfRlNgIHVuZGVyIGBFbmFibGVDb25maWdzYC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGUyBpbm9kZSBvcGVyYXRpb25zLCBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCwgdG8gYWxsb3cgZmlsZXN5c3RlbXMgbGlrZSBBRlMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgZm9yIEFGUyBhbmQgYWxzbyBtb2RpZmllcyBzZXZlcmFsIGNvcmUgVkZTIGZ1bmN0aW9ucyBzdWNoIGFzIGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIGFuZCBzeW1saW5rIGZvbGxvd2luZyB0byBsZXZlcmFnZSB0aGUgbmV3IGhlbHBlcnMuIFRoaXMgaXMgYSAqc2lnbmlmaWNhbnQqIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFZGUyBhbmQgQUZTLCBhbmQgaXQgZnVuZGFtZW50YWxseSBpbXBhY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MuIFRoaXMgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLlxuXG5UbyBzdW1tYXJpemUsIGhlcmUncyBteSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnM6XG5cbkZvY3VzIHN5bWJvbHM6XG4tIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4tIGBhZnNfaGF2ZV9zYW1lX293bmVyYFxuLSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuLSBgc2V0YXR0cl9wcmVwYXJlYFxuLSBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWBcbi0gYHZmc19zZXRsZWFzZWBcbi0gYF9fY2hlY2tfc3RpY2t5YFxuLSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWBcblxuQ29uZmlnczpcbi0gYEFGU19GU2BcblxuQWxyaWdodCwgdGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjAxLCJPdXRwdXRUb2tlbnMiOjIyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1MDowOC4wNzY5MDY3MThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg2MjA1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcImlub2RlX293bmVyX29yX2NhcGFibGVcIixcbiAgICBcInZmc19zZXRsZWFzZVwiLFxuICAgIFwiX19jaGVja19zdGlja3lcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwic2V0YXR0cl9wcmVwYXJlXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZTIGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIGZvciBBRlMgYW5kIG1vZGlmaWVzIHNldmVyYWwgY29yZSBWRlMgZnVuY3Rpb25zIChjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBzeW1saW5rIGZvbGxvd2luZykgdG8gdXNlIHRoZSBuZXcgaGVscGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBhZmZlY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow55zps[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 18:24:52 +0000 UTC FinishedAt: 2026-07-29 18:50:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d1c8241d856919a1731822f129fc628f71547d96", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "d1c8241d856919a1731822f129fc628f71547d96", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "0e327424-72af-47ac-a55a-e3629e4925fd" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "afs_is_owned_by_me", "afs_have_same_owner", "vfs_inode_is_owned_by_me", "setattr_prepare", "inode_owner_or_capable", "vfs_setlease", "__check_sticky", "vfs_dedupe_file_range_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjOTlhOTc4ZTcxODBjYjI0ZDlhZTE1MWQ3NTJiY2I5N2VjNDRkYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxODo0OTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbmluZGV4IDdjNzUzMTQ4YWY4ODguLjg5MzQxOWUwMDNlYWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDkgQEAgQXMgb2Yga2VybmVsIDIuNi4yMiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOlxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdFx0aW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1x0XHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIFx0fTtcbiBcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcbkBAIC02MzQsNiAmIzQzOzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbiYjNDM7YGBpc19vd25lZF9ieV9tZWBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgZmlsZSBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSAmIzM5O293bmVkJiMzOTsgYnlcbiYjNDM7XHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcbiYjNDM7XHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4mIzQzO1x0dG8gY3VycmVudF9mc3VpZCgpIC0gYnV0IHRoaXMgbWF5IGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWVcbiYjNDM7XHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcbiYjNDM7XHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4mIzQzO1x0ZXZlbiBiZSBmcm9tIHRoZSBzYW1lIElEIHNwYWNlIGFzIGN1cnJlbnRfdWlkKCkuXG4mIzQzO1xuJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgXG4mIzQzO1x0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxuJiM0MztcdHBhcmVudCBvbiB0aGUgcGF0aCB3YWxrZWQuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gc2ltcGx5XG4mIzQzO1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuJiM0MztcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcbiYjNDM7XHRub3QgZml0IGludG8gYSBrdWlkX3QgYW5kIGNpZnMgaGFzIEdVSURzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkIHRvXG4mIzQzO1x0a3VpZF90LlxuJiM0MztcbiYjNDM7XG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXG5pbmRleCA2ZGY1NmZlOTE2M2ZkLi5lZTJmNWVjMGIyYzY3IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyLmNcbkBAIC02OSw2ICYjNDM7NjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQucGVybWlzc2lvblx0PSBhZnNfcGVybWlzc2lvbixcbiBcdC5nZXRhdHRyXHQ9IGFmc19nZXRhdHRyLFxuIFx0LnNldGF0dHJcdD0gYWZzX3NldGF0dHIsXG4mIzQzO1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbiYjNDM7XHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jXG5pbmRleCAwNDY3NzQyYmZlZWUzLi5iYTQ0NDkzY2NhZjZlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZpbGUuY1xuQEAgLTQ5LDYgJiM0Mzs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4mIzQzO1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbiYjNDM7XHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZpbGVfYW9wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW5vZGUuYyBiL2ZzL2Fmcy9pbm9kZS5jXG5pbmRleCAxNGYzOWE5YmVhNmNmLi5hZjg1YTg4ZDk0M2RkIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbm9kZS5jXG5AQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wZmxhZ3MgfD0gSU9QX09XTkVSU0hJUF9PVkVSUklERTtcbiBcdHNldF9ubGluayhcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVx1MDAzZW5saW5rKTtcbiBcbiBcdGlfc2l6ZV93cml0ZShpbm9kZSwgc3RhdHVzLVx1MDAzZXNpemUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLmYxNWRiYmM4ZGQyNjQgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xNTMxLDYgJiM0MzsxNTMxLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XG4gZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleV9yY3Uoc3RydWN0IGFmc19jZWxsICopO1xuIGV4dGVybiBpbnQgYWZzX2NoZWNrX3Blcm1pdChzdHJ1Y3QgYWZzX3Zub2RlICosIHN0cnVjdCBrZXkgKiwgYWZzX2FjY2Vzc190ICopO1xuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbiYjNDM7aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xuIGV4dGVybiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlY3VyaXR5LmMgYi9mcy9hZnMvc2VjdXJpdHkuY1xuaW5kZXggNmQwMGQ2MmE2NWVkZi4uNzA5MmY1YWNkY2Q2YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc2VjdXJpdHkuY1xuQEAgLTUxMCw2ICYjNDM7NTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgJiMzOTttZSYjMzk7IC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlXG4mIzQzOyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGVcbiYjNDM7ICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXG4mIzQzOyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7XG4mIzQzO1x0YWZzX2FjY2Vzc190IGFjY2VzcztcbiYjNDM7XHRzdHJ1Y3Qga2V5ICprZXk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdHJldHVybiAxOyAvKiBUaGUgQURNSU4gcmlnaHQgY2hlY2sgZG9lc24mIzM5O3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXG4mIzQzO1xuJiM0MztcdGtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS1cdTAwM2V2b2x1bWUtXHUwMDNlY2VsbCk7XG4mIzQzO1x0aWYgKElTX0VSUihrZXkpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbiYjNDM7XG4mIzQzO1x0LyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi9cbiYjNDM7XHRyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksIFx1MDAyNmFjY2Vzcyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGdldCB0aGUgQURNSU5JU1RFUiBiaXQgaWYgd2Ugb3duIHRoZSBmaWxlLiAqL1xuJiM0MztcdHJldCA9IChhY2Nlc3MgXHUwMDI2IEFGU19BQ0VfQURNSU5JU1RFUikgPyAwIDogMTtcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0a2V5X3B1dChrZXkpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhIGZpbGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgLSB3aGF0ZXZlciB0aGF0IG1lYW5zXG4mIzQzOyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTXG4mIzQzOyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7aW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMSA9IEFGU19GU19JKGlub2RlMSk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZub2RlMS1cdTAwM2VzdGF0dXMub3duZXIgIT0gdm5vZGUyLVx1MDAzZXN0YXR1cy5vd25lcjtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpXG4ge1xuIFx0aW50IGk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N5bWxpbmsuYyBiL2ZzL2Fmcy9zeW1saW5rLmNcbmluZGV4IDE2YjQ4MjNjYjdiN2UuLmVkODM0YmE5MGU4NWEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc3ltbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc3ltbGluay5jXG5AQCAtMjcxLDYgJiM0MzsyNzEsOCBAQCBpbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LmdldF9saW5rXHQ9IGFmc19nZXRfbGluayxcbiBcdC5yZWFkbGlua1x0PSBhZnNfcmVhZGxpbmssXG4mIzQzO1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbiYjNDM7XHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbiB9O1xuIFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfYW9wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmNcbmluZGV4IDRmNDM3ZmFiYjdmMGYuLmI3ZThiNWQ0OWE5ZmUgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2F0dHIuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbiAvKipcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxuQEAgLTkxLDE5ICYjNDM7OTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4mIzQzO3N0YXRpYyBpbnQgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxuIHtcbiBcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdGlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuc19jYXBhYmxlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIC8qKlxuQEAgLTExOCwyMyAmIzQzOzEyMSwyNyBAQCBzdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXG4gICogcGVyZm9ybWVkIG9uIHRoZSByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXG4gICovXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxuJiM0MztzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbiB7XG4gXHR2ZnNnaWRfdCB2ZnNnaWQgPSBpX2dpZF9pbnRvX3Zmc2dpZChpZG1hcCwgaW5vZGUpO1xuLVx0dmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmV0ID09IDApIHtcbiBcdFx0aWYgKHZmc2dpZF9lcShpYV92ZnNnaWQsIHZmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFx0XHRpZiAodmZzZ2lkX2luX2dyb3VwX3AoaWFfdmZzZ2lkKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzZ2lkX3ZhbGlkKHZmc2dpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xNjMsNiAmIzQzOzE3MCw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cdTAwM2VpYV92YWxpZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LypcbiBcdCAqIEZpcnN0IGNoZWNrIHNpemUgY29uc3RyYWludHMuICBUaGVzZSBjYW4mIzM5O3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xuQEAgLTE4OSwxNCAmIzQzOzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdGdvdG8ga2lsbF9wcml2O1xuIFxuIFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cbi1cdGlmICgoaWFfdmFsaWQgXHUwMDI2IEFUVFJfVUlEKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCkpXG4tXHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0aWYgKGlhX3ZhbGlkIFx1MDAyNiBBVFRSX1VJRCkge1xuJiM0MztcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfR0lEKSB7XG4mIzQzO1x0XHRyZXQgPSBjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG1vZC4gKi9cbiBcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9NT0RFKSB7XG5kaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmNcbmluZGV4IGU2OGE3NmZmOTJhMzguLjNmMzJlNzNhYWVkYTIgMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jXG5AQCAtOTU0LDcgJiM0Mzs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuJiM0MztcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG4gXHRcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFwmIzM0O0NvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclwmIzM0OywgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWQuLmE3ZWM4MzBhYjY4M2YgMTAwNjQ0XG4tLS0gYS9mcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pbm9kZS5jXG5AQCAtMjc1MCwxNiAmIzQzOzI3NTAsMTkgQEAgRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X293bmVyKTtcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQ7XG4gXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0ID09IDApXG4gXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4mIzQzO1x0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbiBcdG5zID0gY3VycmVudF91c2VyX25zKCk7XG4gXHRpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpIFx1MDAyNlx1MDAyNiBuc19jYXBhYmxlKG5zLCBDQVBfRk9XTkVSKSlcbiBcdFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcbmluZGV4IDM1NWQ5M2Y5MjIwODYuLmJlNDVjYzYzODg2MTkgMTAwNjQ0XG4tLS0gYS9mcy9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pbnRlcm5hbC5oXG5AQCAtNTEsNiAmIzQzOzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIC8qXG4gICogbmFtZWkuY1xuICAqL1xuJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGZpbGVuYW1lX2xvb2t1cChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLFxuIFx0XHRcdCAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7XG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmNcbmluZGV4IDZlNGZmN2ZjZWMwNTMuLjAyZjgxMGRjOWU3ZTcgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbiB7XG5AQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuJiM0MztcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4mIzQzO1x0aWYgKGVycm9yIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcdGlmIChlcnJvciAhPSAwIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XG4gXHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDE5Y2U0M2M5YTZlNjYuLjcyZjk0ZDIwNGY5M2YgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtNTUsOCAmIzQzOzU1LDggQEBcbiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGhcbiAgKiBhbiBpdGVyYXRpdmUgb25lIChpbiBjYXNlIG9mIG5vbi1uZXN0ZWQgc3ltbGluayBjaGFpbnMpLiAgSXQgZG9lc1xuICAqIHRoaXMgd2l0aCBjYWxscyB0byBcdTAwM2Nmc1x1MDAzZV9mb2xsb3dfbGluaygpLlxuLSAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93IFxuLSAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGwgXG4mIzQzOyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93XG4mIzQzOyAqIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gbG9va3VwX2RlbnRyeSgpIHRoYXQgY2FuIGhhbmRsZSBhbGxcbiAgKiB0aGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgZm9ybWVyIGNvZGUuXG4gICpcbiAgKiBXaXRoIHRoZSBuZXcgZGNhY2hlLCB0aGUgcGF0aG5hbWUgaXMgc3RvcmVkIGF0IGVhY2ggaW5vZGUsIGF0IGxlYXN0IGFzXG5AQCAtMTI1NSw2ICYjNDM7MTI1NSw3MiBAQCBmc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuIFxuICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXG4gXG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSB0aGUgcHJvY2VzcyAoYWxsb3dpbmcgZm9yIGZzdWlkIG92ZXJyaWRlKSxcbiYjNDM7ICogcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbVxuJiM0MzsgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4mIzQzOyAqL1xuJiM0MztpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4mIzQzO1x0XHRyZXR1cm4gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmdcbiYjNDM7ICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZ1xuJiM0MzsgKiB0aGUgZGV0ZXJtaW5hdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5vZGUgKmRpcjtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlub2RlICE9IG5kLVx1MDAzZWlub2RlKSB7XG4mIzQzO1x0XHRcdGRpciA9IG5kLVx1MDAzZWlub2RlO1xuJiM0MztcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSB7XG4mIzQzO1x0XHRcdHBhcmVudCA9IFJFQURfT05DRShuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4mIzQzO1x0XHRcdGRpciA9IFJFQURfT05DRShwYXJlbnQtXHUwMDNlZF9pbm9kZSk7XG4mIzQzO1x0XHRcdGlmICghZGlyKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUNISUxEO1xuJiM0MztcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJlbnQgPSBkZ2V0X3BhcmVudChuZC1cdTAwM2VwYXRoLmRlbnRyeSk7XG4mIzQzO1x0XHRcdGRpciA9IHBhcmVudC1cdTAwM2VkX2lub2RlO1xuJiM0MztcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4mIzQzO1x0XHRcdGRwdXQocGFyZW50KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmZzdWlkX3ZhbGlkKG5kLVx1MDAzZWRpcl92ZnN1aWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtXHUwMDNlZGlyX3Zmc3VpZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSBpZiB0d28gaW5vZGVzIGhhdmUgdGhlIHNhbWUgb3duZXIsIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmRcbiYjNDM7ICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcilcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseShpbm9kZS1cdTAwM2VpX29wZmxhZ3MgXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxuJiM0MztcdFx0cmV0dXJuIGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbiYjNDM7XHRpZiAodmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksXG4mIzQzO1x0XHQgICAgICBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbWF5X2ZvbGxvd19saW5rIC0gQ2hlY2sgc3ltbGluayBmb2xsb3dpbmcgZm9yIHVuc2FmZSBzaXR1YXRpb25zXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuQEAgLTEyNzEsMjcgJiM0MzsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbi1cdHZmc3VpZF90IHZmc3VpZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlkbWFwID0gbW50X2lkbWFwKG5kLVx1MDAzZXBhdGgubW50KTtcbi1cdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4tXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IG5vdCBzdGlja3kgYW5kIHdvcmxkLXdyaXRhYmxlLiAqL1xuIFx0aWYgKChuZC1cdTAwM2VkaXJfbW9kZSBcdTAwMjYgKFNfSVNWVFh8U19JV09USCkpICE9IChTX0lTVlRYfFNfSVdPVEgpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG4mIzQzO1x0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG4mIzQzO1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvd25lciBtYXRjaC4gKi9cbi1cdGlmICh2ZnN1aWRfdmFsaWQobmQtXHUwMDNlZGlyX3Zmc3VpZCkgXHUwMDI2XHUwMDI2IHZmc3VpZF9lcShuZC1cdTAwM2VkaXJfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKVxuIFx0XHRyZXR1cm4gLUVDSElMRDtcbkBAIC0xMzg5LDEyICYjNDM7MTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxuICAqXG4gICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XG4tICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGVcbiYjNDM7ICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZCxcbiYjNDM7ICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLFxuJiM0MzsgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSxcbiYjNDM7ICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUsXG4mIzQzOyAqICAgLSB3ZSBkb24mIzM5O3Qgb3duIHRoZSBmaWxlIGFuZFxuICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBvd24gdGhlIGZpbGVcbi0gKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZVxuICAqIElmIHRoZSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIHNldCB0byAyXG4gICogdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsXG4gICogYmUgZW5vdWdoLlxuQEAgLTE0MDUsMTMgJiM0MzsxNDcyLDQ1IEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxuICAqIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKlxuJiM0MzsgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlXG4mIzQzOyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXG4mIzQzOyAqIHRvIGN1cnJlbnRfZnN1aWQoKSBhbmQgbWF5IG5vdCBiZSBkaXJlY3RseSBjb21wYXJhYmxlIHRvIGFub3RoZXIgaV91aWQuXG4mIzQzOyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrXG4mIzQzOyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXG4mIzQzOyAqIG9wZXJhdGlvbnMgYW5kIGhhdmluZyBhbm9ueW1vdXNseS1vd25lZCBvYmplY3RzLlxuJiM0MzsgKlxuJiM0MzsgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuJiM0MzsgKlxuJiM0MzsgKlx0VVNFUlx0RElSXHRGSUxFXHRGSUxFXHRBTExPV0VEXG4mIzQzOyAqXHRcdE9XTkVSXHRPV05FUlx0U1RBVEVcbiYjNDM7ICpcdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cdD09PT09PT1cbiYjNDM7ICpcdEFcdEFcdC1cdE5ld1x0WWVzXG4mIzQzOyAqXHRBXHRBXHRBXHRFeGlzdHNcdFllc1xuJiM0MzsgKlx0QVx0QVx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0QVx0Qlx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdEJcdEFcdEV4aXN0c1x0WWVzLCBGTz09VVxuJiM0MzsgKlx0QVx0Qlx0Qlx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0QVx0Qlx0Q1x0RXhpc3RzXHROb1xuJiM0MzsgKlx0QVx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdEFcdGFub25bMV1cdEFcdEV4aXN0c1x0WWVzXG4mIzQzOyAqXHRBXHRhbm9uWzFdXHRDXHRFeGlzdHNcdE5vXG4mIzQzOyAqXHRhbm9uXHRBXHQtXHROZXdcdFllc1xuJiM0MzsgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuJiM0MzsgKlx0YW5vblx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbiYjNDM7ICpcdGFub25cdGFub25bMV1cdC1cdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdEFcdEV4aXN0c1x0WWVzLCBGTz09RE9cbiYjNDM7ICpcdGFub25cdEFcdENcdEV4aXN0c1x0Tm9cbiYjNDM7ICpcdGFub25cdEFcdGFub25cdEV4aXN0c1x0Tm9cbiYjNDM7ICpcbiYjNDM7ICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT9cbiYjNDM7ICpcbiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLVx0XHRcdFx0c3RydWN0IGlub2RlICpjb25zdCBpbm9kZSlcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHVtb2RlX3QgZGlyX21vZGUgPSBuZC1cdTAwM2VkaXJfbW9kZTtcbi1cdHZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC1cdTAwM2VkaXJfdmZzdWlkLCBpX3Zmc3VpZDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE0MjIsMTMgJiM0MzsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cbi1cdGlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KGRpcl9tb2RlIFx1MDAyNiAwMDAyKSkge1xuIFx0XHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwgXCYjMzQ7c3RpY2t5X2NyZWF0ZVwmIzM0Oyk7XG5AQCAtMzY0NSwxMiAmIzQzOzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xuIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuLVx0a3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdHJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19jaGVja19zdGlja3kpO1xuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXG5pbmRleCAyNmFmYmJiZmIxMGMyLi45ZWVlOTNjMjcwMDEyIDEwMDY0NFxuLS0tIGEvZnMvcmVtYXBfcmFuZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcmVtYXBfcmFuZ2UuY1xuQEAgLTQxMywyMCAmIzQzOzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4gRVhQT1JUX1NZTUJPTCh2ZnNfY2xvbmVfZmlsZV9yYW5nZSk7XG4gXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cbi1zdGF0aWMgYm9vbCBtYXlfZGVkdXBlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4tXHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcbkBAIC00NTksOCAmIzQzOzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVQRVJNO1xuLVx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxuJiM0MztcdHJldCA9IG1heV9kZWR1cGVfZmlsZShkc3RfZmlsZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfZHJvcF93cml0ZTtcbiBcbiBcdHJldCA9IC1FWERFVjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDUwY2U3MzFhMmI3OGYuLjgwMTNjMTNhMzUzZDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTYyOCw2ICYjNDM7NjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4mIzQzOyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVx0MHgwMjAwXHQvKiBVc2UgLVx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoKSAqL1xuIFxuIC8qXG4gICogSW5vZGUgc3RhdGUgYml0cy4gIFByb3RlY3RlZCBieSBpbm9kZS1cdTAwM2VpX2xvY2tcbkBAIC0xNzU1LDggJiM0MzsxNzU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZpbGVfd3JpdGVfbm90X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gc2Jfd3JpdGVfbm90X3N0YXJ0ZWQoZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiKTtcbiB9XG4gXG4tYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7Ym9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xuIFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiYjNDM7XHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuJiM0MztcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICppbm9kZTIpO1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIC8qIERpZCB0aGUgZHJpdmVyIHByb3ZpZGUgdmFsaWQgbW1hcCBob29rIGNvbmZpZ3VyYXRpb24/ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjOTlhOTc4ZTcxODBjYjI0ZDlhZTE1MWQ3NTJiY2I5N2VjNDRkYWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxODo0OTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdAppbmRleCA3Yzc1MzE0OGFmODg4Li44OTM0MTllMDAzZWFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0CkBAIC00NDUsNiAmIzQzOzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDoKIAkJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogCQlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAkgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsJCWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CQlpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAl9OwogCiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3MKQEAgLTYzNCw2ICYjNDM7NjM3LDI0IEBAIG90aGVyd2lzZSBub3RlZC4KICAgICAgICAgZmlsZXN5c3RlbSBtdXN0IGRlZmluZSB0aGlzIG9wZXJhdGlvbiB0byB1c2UKICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy4KIAomIzQzO2BgaXNfb3duZWRfYnlfbWVgYAomIzQzOwljYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlICYjMzk7b3duZWQmIzM5OyBieQomIzQzOwl0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHMKJiM0MzsJaXQgb3duZXJzaGlwIHByaXZpbGVnZXMuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gY29tcGFyZSBpX3VpZAomIzQzOwl0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZQomIzQzOwluZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXMKJiM0MzsJb3duZXJzaGlwIGVudGlyZWx5IGFjY29yZGluZyB0byBhbiBvYnRhaW5lZCB0b2tlbiBhbmQgaV91aWQgbWF5IG5vdAomIzQzOwlldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS4KJiM0MzsKJiM0MztgYGhhdmVfc2FtZV9vd25lcmBgCiYjNDM7CWNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBpbW1lZGlhdGUKJiM0MzsJcGFyZW50IG9uIHRoZSBwYXRoIHdhbGtlZC4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBzaW1wbHkKJiM0MzsJY29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEcwomIzQzOwlvZiBib3RoIC0gYnV0IHRoZXNlIGFyZSBhIDY0LWJpdCB2YWx1ZXMgb24gc29tZSB2YXJpYW50cyB0aGF0IG1pZ2h0CiYjNDM7CW5vdCBmaXQgaW50byBhIGt1aWRfdCBhbmQgY2lmcyBoYXMgR1VJRHMgdGhhdCBjYW5ub3QgYmUgY29tcGFyZWQgdG8KJiM0MzsJa3VpZF90LgomIzQzOwomIzQzOwogVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0CiA9PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDZkZjU2ZmU5MTYzZmQuLmVlMmY1ZWMwYjJjNjcgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyLmMKQEAgLTY5LDYgJiM0Mzs2OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkucGVybWlzc2lvbgk9IGFmc19wZXJtaXNzaW9uLAogCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBhZnNfc2V0YXR0ciwKJiM0MzsJLmlzX293bmVkX2J5X21lCT0gYWZzX2lzX293bmVkX2J5X21lLAomIzQzOwkuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lciwKIH07CiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmMKaW5kZXggMDQ2Nzc0MmJmZWVlMy4uYmE0NDQ5M2NjYWY2ZSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZmlsZS5jCkBAIC00OSw2ICYjNDM7NDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsCiAJLnNldGF0dHIJPSBhZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IGFmc19wZXJtaXNzaW9uLAomIzQzOwkuaXNfb3duZWRfYnlfbWUJPSBhZnNfaXNfb3duZWRfYnlfbWUsCiYjNDM7CS5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLAogfTsKIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZmlsZV9hb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCAxNGYzOWE5YmVhNmNmLi5hZjg1YTg4ZDk0M2RkIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW5vZGUuYwpAQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsCiAJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gU19OT0FUSU1FOwogCWlub2RlLSZndDtpX3VpZCA9IG1ha2Vfa3VpZCgmYW1wO2luaXRfdXNlcl9ucywgc3RhdHVzLSZndDtvd25lcik7CiAJaW5vZGUtJmd0O2lfZ2lkID0gbWFrZV9rZ2lkKCZhbXA7aW5pdF91c2VyX25zLCBzdGF0dXMtJmd0O2dyb3VwKTsKJiM0MzsJaW5vZGUtJmd0O2lfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFOwogCXNldF9ubGluaygmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSwgc3RhdHVzLSZndDtubGluayk7CiAKIAlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy0mZ3Q7c2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDI5MDg3M2JhYzg5YjMuLmYxNWRiYmM4ZGQyNjQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xNTMxLDYgJiM0MzsxNTMxLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gc3RydWN0IGtleSAqYWZzX3JlcXVlc3Rfa2V5X3JjdShzdHJ1Y3QgYWZzX2NlbGwgKik7CiBleHRlcm4gaW50IGFmc19jaGVja19wZXJtaXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGFmc19hY2Nlc3NfdCAqKTsKIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKJiM0MztpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MztpbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsCiYjNDM7CQkJc3RydWN0IGlub2RlICppbm9kZTIpOwogZXh0ZXJuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jCmluZGV4IDZkMDBkNjJhNjVlZGYuLjcwOTJmNWFjZGNkNmEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZWN1cml0eS5jCkBAIC01MTAsNiAmIzQzOzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICYjMzk7bWUmIzM5OyAtIHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZQomIzQzOyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGUKJiM0MzsgKiBBRlMgdXNlciByZXByZXNlbnRlZCBieSB0aGUgUnggU2VjdXJpdHkgQ2xhc3MgdG9rZW4gaGVsZCBpbiBhIGtleS4gIFJldHVybnMKJiM0MzsgKiAwIGlmIG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGlub2RlKTsKJiM0MzsJYWZzX2FjY2Vzc190IGFjY2VzczsKJiM0MzsJc3RydWN0IGtleSAqa2V5OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCXJldHVybiAxOyAvKiBUaGUgQURNSU4gcmlnaHQgY2hlY2sgZG9lc24mIzM5O3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovCiYjNDM7CiYjNDM7CWtleSA9IGFmc19yZXF1ZXN0X2tleSh2bm9kZS0mZ3Q7dm9sdW1lLSZndDtjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihrZXkpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoa2V5KTsKJiM0MzsKJiM0MzsJLyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi8KJiM0MzsJcmV0ID0gYWZzX2NoZWNrX3Blcm1pdCh2bm9kZSwga2V5LCAmYW1wO2FjY2Vzcyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsKJiM0MzsJLyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBpZiB3ZSBvd24gdGhlIGZpbGUuICovCiYjNDM7CXJldCA9IChhY2Nlc3MgJmFtcDsgQUZTX0FDRV9BRE1JTklTVEVSKSA/IDAgOiAxOwomIzQzO2Vycm9yOgomIzQzOwlrZXlfcHV0KGtleSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnMKJiM0MzsgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGUwomIzQzOyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlMikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMSA9IEFGU19GU19JKGlub2RlMSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlMiA9IEFGU19GU19JKGlub2RlMik7CiYjNDM7CiYjNDM7CXJldHVybiB2bm9kZTEtJmd0O3N0YXR1cy5vd25lciAhPSB2bm9kZTItJmd0O3N0YXR1cy5vd25lcjsKJiM0Mzt9CiYjNDM7CiB2b2lkIF9fZXhpdCBhZnNfY2xlYW5fdXBfcGVybWl0X2NhY2hlKHZvaWQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9mcy9hZnMvc3ltbGluay5jIGIvZnMvYWZzL3N5bWxpbmsuYwppbmRleCAxNmI0ODIzY2I3YjdlLi5lZDgzNGJhOTBlODVhIDEwMDY0NAotLS0gYS9mcy9hZnMvc3ltbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zeW1saW5rLmMKQEAgLTI3MSw2ICYjNDM7MjcxLDggQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5nZXRfbGluawk9IGFmc19nZXRfbGluaywKIAkucmVhZGxpbmsJPSBhZnNfcmVhZGxpbmssCiYjNDM7CS5pc19vd25lZF9ieV9tZQk9IGFmc19pc19vd25lZF9ieV9tZSwKJiM0MzsJLmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsCiB9OwogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19zeW1saW5rX2FvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggNGY0MzdmYWJiN2YwZi4uYjdlOGI1ZDQ5YTlmZSAxMDA2NDQKLS0tIGEvZnMvYXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2F0dHIuYwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VjdXJpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiAvKioKICAqIHNldGF0dHJfc2hvdWxkX2Ryb3Bfc2dpZCAtIGRldGVybWluZSB3aGV0aGVyIHRoZSBzZXRnaWQgYml0IG5lZWRzIHRvIGJlCkBAIC05MSwxOSAmIzQzOzkyLDIxIEBAIEVYUE9SVF9TWU1CT0woc2V0YXR0cl9zaG91bGRfZHJvcF9zdWlkZ2lkKTsKICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUKICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpCiYjNDM7c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpCiB7CiAJdmZzdWlkX3QgdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpICZhbXA7JmFtcDsKLQkgICAgdmZzdWlkX2VxKGlhX3Zmc3VpZCwgdmZzdWlkKSkKLQkJcmV0dXJuIHRydWU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCWlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwogCWlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgJmFtcDsmYW1wOwogCSAgICBuc19jYXBhYmxlKGlub2RlLSZndDtpX3NiLSZndDtzX3VzZXJfbnMsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVQRVJNOwogfQogCiAvKioKQEAgLTExOCwyMyAmIzQzOzEyMSwyNyBAQCBzdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUKICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1zdGF0aWMgYm9vbCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKLQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpCiYjNDM7c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnNnaWRfdCBpYV92ZnNnaWQpCiB7CiAJdmZzZ2lkX3QgdmZzZ2lkID0gaV9naWRfaW50b192ZnNnaWQoaWRtYXAsIGlub2RlKTsKLQl2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiAJCWlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKQotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJcmV0dXJuIDA7CiAJCWlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKQotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJcmV0dXJuIDA7CiAJfQogCWlmIChjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfQ0hPV04pKQotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwogCWlmICghdmZzZ2lkX3ZhbGlkKHZmc2dpZCkgJmFtcDsmYW1wOwogCSAgICBuc19jYXBhYmxlKGlub2RlLSZndDtpX3NiLSZndDtzX3VzZXJfbnMsIENBUF9DSE9XTikpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVQRVJNOwogfQogCiAvKioKQEAgLTE2Myw2ICYjNDM7MTcwLDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CiAJdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci0mZ3Q7aWFfdmFsaWQ7CiYjNDM7CWludCByZXQ7CiAKIAkvKgogCSAqIEZpcnN0IGNoZWNrIHNpemUgY29uc3RyYWludHMuICBUaGVzZSBjYW4mIzM5O3QgYmUgb3ZlcnJpZGRlbiB1c2luZwpAQCAtMTg5LDE0ICYjNDM7MTk3LDE4IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJZ290byBraWxsX3ByaXY7CiAKIAkvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNob3duLiAqLwotCWlmICgoaWFfdmFsaWQgJmFtcDsgQVRUUl9VSUQpICZhbXA7JmFtcDsKLQkgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci0mZ3Q7aWFfdmZzdWlkKSkKLQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJaWYgKGlhX3ZhbGlkICZhbXA7IEFUVFJfVUlEKSB7CiYjNDM7CQlyZXQgPSBjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc3VpZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKIAkvKiBNYWtlIHN1cmUgY2FsbGVyIGNhbiBjaGdycC4gKi8KLQlpZiAoKGlhX3ZhbGlkICZhbXA7IEFUVFJfR0lEKSAmYW1wOyZhbXA7Ci0JICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItJmd0O2lhX3Zmc2dpZCkpCi0JCXJldHVybiAtRVBFUk07CiYjNDM7CWlmIChpYV92YWxpZCAmYW1wOyBBVFRSX0dJRCkgewomIzQzOwkJcmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLSZndDtpYV92ZnNnaWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJLyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG1vZC4gKi8KIAlpZiAoaWFfdmFsaWQgJmFtcDsgQVRUUl9NT0RFKSB7CmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuYwppbmRleCBlNjhhNzZmZjkyYTM4Li4zZjMyZTczYWFlZGEyIDEwMDY0NAotLS0gYS9mcy9jb3JlZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmMKQEAgLTk1NCw3ICYjNDM7OTU0LDcgQEAgc3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAkgKiBmaWxlc3lzdGVtLgogCSAqLwogCWlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7Ci0JaWYgKCF2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKSB7CiYjNDM7CWlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7CiAJCWNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyJiMzNDssIGNuLSZndDtjb3JlbmFtZSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAzMWM1YjllZTNhODFkLi5hN2VjODMwYWI2ODNmIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmMKQEAgLTI3NTAsMTYgJiM0MzsyNzUwLDE5IEBAIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9vd25lcik7CiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICovCi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCi0JCQkgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mztib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdmZzdWlkX3QgdmZzdWlkOwogCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7CiYjNDM7CWludCByZXQ7CiAKLQl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwotCWlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpCiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ID09IDApCiAJCXJldHVybiB0cnVlOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAomIzQzOwl2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpOwogCW5zID0gY3VycmVudF91c2VyX25zKCk7CiAJaWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSAmYW1wOyZhbXA7IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDM1NWQ5M2Y5MjIwODYuLmJlNDVjYzYzODg2MTkgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW50ZXJuYWwuaApAQCAtNTEsNiAmIzQzOzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpOwogLyoKICAqIG5hbWVpLmMKICAqLwomIzQzO2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncywKIAkJCSAgIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCk7CiBpbnQgZmlsZW5hbWVfcm1kaXIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDZlNGZmN2ZjZWMwNTMuLjAyZjgxMGRjOWU3ZTcgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbG9ja3MuYwpAQCAtNjgsNiAmIzQzOzY4LDcgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvZmlsZWxvY2suaCZndDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiBzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKQogewpAQCAtMjEzNiwxMCAmIzQzOzIxMzcsMTIgQEAgaW50CiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwotCXZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiAJaW50IGVycm9yOwogCi0JaWYgKCghdmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9MRUFTRSkpCiYjNDM7CWVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7CiYjNDM7CWlmIChlcnJvciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CWlmIChlcnJvciAhPSAwICZhbXA7JmFtcDsgIWNhcGFibGUoQ0FQX0xFQVNFKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAxOWNlNDNjOWE2ZTY2Li43MmY5NGQyMDRmOTNmIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTU1LDggJiM0Mzs1NSw4IEBACiAgKiBUaGUgbmV3IGNvZGUgcmVwbGFjZXMgdGhlIG9sZCByZWN1cnNpdmUgc3ltbGluayByZXNvbHV0aW9uIHdpdGgKICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzCiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gJmx0O2ZzJmd0O19mb2xsb3dfbGluaygpLgotICogQXMgYSBzaWRlIGVmZmVjdCwgZGlyX25hbWVpKCksIF9uYW1laSgpIGFuZCBmb2xsb3dfbGluaygpIGFyZSBub3cgCi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIAomIzQzOyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93CiYjNDM7ICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbAogICogdGhlIHNwZWNpYWwgY2FzZXMgb2YgdGhlIGZvcm1lciBjb2RlLgogICoKICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXMKQEAgLTEyNTUsNiAmIzQzOzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTsKIAogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLAomIzQzOyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0KJiM0MzsgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uCiYjNDM7ICovCiYjNDM7aW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKQomIzQzOwkJcmV0dXJuIGlub2RlLSZndDtpX29wLSZndDtpc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IGRpcmVjdG9yeSwgcmV0dXJuaW5nCiYjNDM7ICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZwomIzQzOyAqIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShpbm9kZS0mZ3Q7aV9vcGZsYWdzICZhbXA7IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKSB7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKmRpcjsKJiM0MzsJCWludCByZXQ7CiYjNDM7CiYjNDM7CQlpZiAoaW5vZGUgIT0gbmQtJmd0O2lub2RlKSB7CiYjNDM7CQkJZGlyID0gbmQtJmd0O2lub2RlOwomIzQzOwkJCXJldCA9IGlub2RlLSZndDtpX29wLSZndDtoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpOwomIzQzOwkJfSBlbHNlIGlmIChuZC0mZ3Q7ZmxhZ3MgJmFtcDsgTE9PS1VQX1JDVSkgewomIzQzOwkJCXBhcmVudCA9IFJFQURfT05DRShuZC0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwkJCWRpciA9IFJFQURfT05DRShwYXJlbnQtJmd0O2RfaW5vZGUpOwomIzQzOwkJCWlmICghZGlyKQomIzQzOwkJCQlyZXR1cm4gLUVDSElMRDsKJiM0MzsJCQlyZXQgPSBpbm9kZS0mZ3Q7aV9vcC0mZ3Q7aGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcGFyZW50ID0gZGdldF9wYXJlbnQobmQtJmd0O3BhdGguZGVudHJ5KTsKJiM0MzsJCQlkaXIgPSBwYXJlbnQtJmd0O2RfaW5vZGU7CiYjNDM7CQkJcmV0ID0gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CQkJZHB1dChwYXJlbnQpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmZzdWlkX3ZhbGlkKG5kLSZndDtkaXJfdmZzdWlkKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtJmd0O2Rpcl92ZnN1aWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi8KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kCiYjNDM7ICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGlub2RlLSZndDtpX29wZmxhZ3MgJmFtcDsgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpCiYjNDM7CQlyZXR1cm4gaW5vZGUtJmd0O2lfb3AtJmd0O2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7CiYjNDM7CWlmICh2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwKJiM0MzsJCSAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMTsgLyogTm90IHNhbWUuICovCiYjNDM7fQomIzQzOwogLyoqCiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnMKICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKQEAgLTEyNzEsMjcgJiM0MzsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7CiAgKgogICogUmV0dXJucyAwIGlmIGZvbGxvd2luZyB0aGUgc3ltbGluayBpcyBhbGxvd2VkLCAtdmUgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1heV9mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IG1udF9pZG1hcCAqaWRtYXA7Ci0JdmZzdWlkX3QgdmZzdWlkOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKCFzeXNjdGxfcHJvdGVjdGVkX3N5bWxpbmtzKQogCQlyZXR1cm4gMDsKIAotCWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7Ci0JdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQkvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi8KLQlpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKLQogCS8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBub3Qgc3RpY2t5IGFuZCB3b3JsZC13cml0YWJsZS4gKi8KIAlpZiAoKG5kLSZndDtkaXJfbW9kZSAmYW1wOyAoU19JU1ZUWHxTX0lXT1RIKSkgIT0gKFNfSVNWVFh8U19JV09USCkpCiAJCXJldHVybiAwOwogCiYjNDM7CWlkbWFwID0gbW50X2lkbWFwKG5kLSZndDtwYXRoLm1udCk7CiYjNDM7CS8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqLwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAkvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovCi0JaWYgKHZmc3VpZF92YWxpZChuZC0mZ3Q7ZGlyX3Zmc3VpZCkgJmFtcDsmYW1wOyB2ZnN1aWRfZXEobmQtJmd0O2Rpcl92ZnN1aWQsIHZmc3VpZCkpCi0JCXJldHVybiAwOwomIzQzOwlyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobmQtJmd0O2ZsYWdzICZhbXA7IExPT0tVUF9SQ1UpCiAJCXJldHVybiAtRUNISUxEOwpAQCAtMTM4OSwxMiAmIzQzOzE0NTYsMTIgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKQogICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlbgogICoKICAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOgotICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAotICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCi0gKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICogICAtIHdlIGRvbiYjMzk7dCBvd24gdGhlIGZpbGUKJiM0MzsgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkLAomIzQzOyAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywKJiM0MzsgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSwKJiM0MzsgKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZSwKJiM0MzsgKiAgIC0gd2UgZG9uJiMzOTt0IG93biB0aGUgZmlsZSBhbmQKICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBvd24gdGhlIGZpbGUKLSAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlCiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMgogICogdGhlIGRpcmVjdG9yeSBkb2VzbiYjMzk7dCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsCiAgKiBiZSBlbm91Z2guCkBAIC0xNDA1LDEzICYjNDM7MTQ3Miw0NSBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZQogICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLgogICoKJiM0MzsgKiBGb3IgYSBmaWxlc3lzdGVtIChlLmcuIGEgbmV0d29yayBmaWxlc3lzdGVtKSB0aGF0IGhhcyBhIHNlcGFyYXRlIElEIHNwYWNlCiYjNDM7ICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWQKJiM0MzsgKiB0byBjdXJyZW50X2ZzdWlkKCkgYW5kIG1heSBub3QgYmUgZGlyZWN0bHkgY29tcGFyYWJsZSB0byBhbm90aGVyIGlfdWlkLgomIzQzOyAqIEluc3RlYWQsIHRoZSBmaWxlc3lzdGVtIGlzIGFza2VkIHRvIHBlcmZvcm0gdGhlIGNvbXBhcmlzb25zLiAgV2l0aCBuZXR3b3JrCiYjNDM7ICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXMKJiM0MzsgKiBvcGVyYXRpb25zIGFuZCBoYXZpbmcgYW5vbnltb3VzbHktb3duZWQgb2JqZWN0cy4KJiM0MzsgKgomIzQzOyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CiYjNDM7ICoKJiM0MzsgKglVU0VSCURJUglGSUxFCUZJTEUJQUxMT1dFRAomIzQzOyAqCQlPV05FUglPV05FUglTVEFURQomIzQzOyAqCT09PT09PT0JPT09PT09PQk9PT09PT09CT09PT09PT0JPT09PT09PQomIzQzOyAqCUEJQQktCU5ldwlZZXMKJiM0MzsgKglBCUEJQQlFeGlzdHMJWWVzCiYjNDM7ICoJQQlBCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlCCS0JTmV3CVllcwomIzQzOyAqCUEJQglBCUV4aXN0cwlZZXMsIEZPPT1VCiYjNDM7ICoJQQlCCUIJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJQQlCCUMJRXhpc3RzCU5vCiYjNDM7ICoJQQlhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCUEJYW5vblsxXQlBCUV4aXN0cwlZZXMKJiM0MzsgKglBCWFub25bMV0JQwlFeGlzdHMJTm8KJiM0MzsgKglhbm9uCUEJLQlOZXcJWWVzCiYjNDM7ICoJYW5vbglBCUEJRXhpc3RzCVllcywgRk89PURPCiYjNDM7ICoJYW5vbglhbm9uWzFdCS0JTmV3CVllcwomIzQzOyAqCWFub24JYW5vblsxXQktCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlBCUV4aXN0cwlZZXMsIEZPPT1ETwomIzQzOyAqCWFub24JQQlDCUV4aXN0cwlObwomIzQzOyAqCWFub24JQQlhbm9uCUV4aXN0cwlObwomIzQzOyAqCiYjNDM7ICogWzFdIENhbiBhbm9ueW1vdXNseS1vd25lZCBkaXJzIGJlIHN0aWNreT8KJiM0MzsgKgogICogUmV0dXJucyAwIGlmIHRoZSBvcGVuIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCi0JCQkJc3RydWN0IGlub2RlICpjb25zdCBpbm9kZSkKJiM0MzsJCQkJc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bW9kZV90IGRpcl9tb2RlID0gbmQtJmd0O2Rpcl9tb2RlOwotCXZmc3VpZF90IGRpcl92ZnN1aWQgPSBuZC0mZ3Q7ZGlyX3Zmc3VpZCwgaV92ZnN1aWQ7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKQEAgLTE0MjIsMTMgJiM0MzsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChTX0lTRklGTyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKQogCQlyZXR1cm4gMDsKIAotCWlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTsKLQotCWlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgbmQpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCi0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlpZiAobGlrZWx5KGRpcl9tb2RlICZhbXA7IDAwMDIpKSB7CiAJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULCAmIzM0O3N0aWNreV9jcmVhdGUmIzM0Oyk7CkBAIC0zNjQ1LDEyICYjNDM7Mzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7CiBpbnQgX19jaGVja19zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWt1aWRfdCBmc3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKJiM0MzsJaW50IHJldDsKIAotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpCi0JCXJldHVybiAwOwotCWlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKQotCQlyZXR1cm4gMDsKJiM0MzsJcmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTsKJiM0MzsJaWYgKHJldCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIHJldDsKIAlyZXR1cm4gIWNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9GT1dORVIpOwogfQogRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7CmRpZmYgLS1naXQgYS9mcy9yZW1hcF9yYW5nZS5jIGIvZnMvcmVtYXBfcmFuZ2UuYwppbmRleCAyNmFmYmJiZmIxMGMyLi45ZWVlOTNjMjcwMDEyIDEwMDY0NAotLS0gYS9mcy9yZW1hcF9yYW5nZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3JlbWFwX3JhbmdlLmMKQEAgLTQxMywyMCAmIzQzOzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sCiBFWFBPUlRfU1lNQk9MKHZmc19jbG9uZV9maWxlX3JhbmdlKTsKIAogLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi8KLXN0YXRpYyBib29sIG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0MztzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlpbnQgcmV0OwogCiAJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiAJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9XUklURSkKLQkJcmV0dXJuIHRydWU7Ci0JaWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpCi0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpOwomIzQzOwlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gcmV0OwogCWlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVQRVJNOwogfQogCiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLApAQCAtNDU5LDggJiM0Mzs0NjEsOCBAQCBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSAtRVBFUk07Ci0JaWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKQomIzQzOwlyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKIAogCXJldCA9IC1FWERFVjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA1MGNlNzMxYTJiNzhmLi44MDEzYzEzYTM1M2Q2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02MjgsNiAmIzQzOzYyOCw3IEBAIGlzX3VuY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiAjZGVmaW5lIElPUF9DQUNIRURfTElOSwkJMHgwMDQwCiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQwkweDAwODAKICNkZWZpbmUgSU9QX0ZMQ1RYCQkweDAxMDAKJiM0MzsjZGVmaW5lIElPUF9PV05FUlNISVBfT1ZFUlJJREUJMHgwMjAwCS8qIFVzZSAtJmd0O2lzX293bmVkX2J5X21lKCkgYW5kIC0mZ3Q7aGF2ZV9zYW1lX293bmVyKCkgKi8KIAogLyoKICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtJmd0O2lfbG9jawpAQCAtMTc1NSw4ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiBzYl93cml0ZV9ub3Rfc3RhcnRlZChmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiKTsKIH0KIAotYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwomIzQzO2Jvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qCiAgKiBWRlMgaGVscGVyIGZ1bmN0aW9ucy4uCkBAIC0yMDM2LDYgJiM0MzsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewogCQkJICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAlzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CWludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBJbm9kZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB0aGUgVkZTIGxheWVyIGhhbmRsZXMgZmlsZSBvd25lcnNoaXAsIHNwZWNpZmljYWxseSBmb3IgZmlsZXN5c3RlbXMgbGlrZSBBRlMgdGhhdCB1c2UgdG9rZW5zIGluc3RlYWQgb2YgdGhlIHRyYWRpdGlvbmFsIFVJRC9HSUQgbW9kZWwuIFdlJiMzOTt2ZSBnb3QgdHdvIG5ldyBgaW5vZGVfb3BlcmF0aW9uc2A6IGBpc19vd25lZF9ieV9tZWAgYW5kIGBoYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgY3J1Y2lhbCBiZWNhdXNlIHRoZXkgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIG93bmVyc2hpcCBjaGVja3Mgd2l0aGluIHRoZSBWRlMsIHdoaWNoIGlzIGtleSBmb3IgQUZTLiBUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGVzZSBpbiBBRlMgYXMgYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYC4KClRoZSBiaWcgcGljdHVyZSBoZXJlIGlzIHRoYXQgYSB3aG9sZSBzbGV3IG9mIFZGUyBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSB0aGVzZSBuZXcgaGVscGVyczogYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgYW5kIGB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXJgIGFuZCBgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXJgLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIG9wZXJhdGlvbnMgbGlrZSBgY2hvd25gLCBgY2hncnBgLCBgY29yZWR1bXBgLCBsZWFzZSBtYW5hZ2VtZW50LCBzeW1saW5rIGZvbGxvd2luZywgc3RpY2t5IGJpdCBjaGVja3MsIGFuZCBldmVuIGZpbGUgZGVkdXBsaWNhdGlvbiEgVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIGZpbGUgc3lzdGVtIGJlaGF2aW9yIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBub3cgaXMgcGlucG9pbnRpbmcgdGhlIG1vc3QgdnVsbmVyYWJsZSBhcmVhcyBmb3IgZnV6emluZy4gV2UgaGF2ZSB0aHJlZSBuZXdseSBpbnRyb2R1Y2VkIFZGUyBoZWxwZXJzOiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAuIE9uIHRoZSBBRlMgc2lkZSwgd2UmIzM5O3ZlIGdvdCBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0byB0YXJnZXQgZmlyc3QuCgpCZXlvbmQgdGhhdCwgdGhlIHBhdGNoZWQgVkZTIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgZnVuIGxpZXM6IGBzZXRhdHRyX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAgKG5vdCBhIHByaW1hcnkgZnV6emluZyB0YXJnZXQgZGlyZWN0bHksIGJ1dCBpdCBwcm92aWRlcyBhIHBhdGh3YXkpLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGFuZCBgX19jaGVja19zdGlja3lgLiBUaGUgZGVkdXBlIGltcGxlbWVudGF0aW9uIHZpYSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKHdoaWNoIGNhbGxzIGBtYXlfZGVkdXBlX2ZpbGVgKSBhbHNvIG5lZWRzIGEgbG9vay4gYG1heV9mb2xsb3dfbGlua2AgYW5kIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgYXJlIG1hcmtlZCBhcyBzdGF0aWMgZnVuY3Rpb25zIHNvIG15IHRlYW0gd2lsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNoZW5hbmlnYW5zIGhlcmUsIHNvIEkmIzM5O2xsIGNoZWNrIGZvciBhbnkgbmVjZXNzYXJ5IGBDT05GSUdgIG9wdGlvbnMuIEFGUyBsb29rcyBsaWtlIGl0JiMzOTtzIGdhdGVkIGJ5IGBDT05GSUdfQUZTX0ZTYCwgYnV0IHRoZSBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIGVuYWJsZWQuCgpGaW5hbGx5LCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgIGp1c3QgdG8gYmUgZG91Ymx5IHN1cmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgaW4gdGhlIGNvZGViYXNlLiBUaGVuIGl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSBmdXp6aW5nIGhhcm5lc3Nlcy4gVGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTYwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvZGlyLmMtNzEtXHQuc2V0YXR0clx0PSBhZnNfc2V0YXR0cixcbmZzL2Fmcy9kaXIuYzo3MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZGlyLmMtNzMtXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcbi0tXG5mcy9hZnMvZmlsZS5jPTQ4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvYWZzL2ZpbGUuYy01MS1cdC5wZXJtaXNzaW9uXHQ9IGFmc19wZXJtaXNzaW9uLFxuZnMvYWZzL2ZpbGUuYzo1MjpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvZmlsZS5jLTUzLVx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTUzMz1leHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XG5mcy9hZnMvaW50ZXJuYWwuaDoxNTM0OmludCBhZnNfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1pbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvYWZzL3NlY3VyaXR5LmM9NDMxPWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9hZnMvc2VjdXJpdHkuYy01MTgtICovXG5mcy9hZnMvc2VjdXJpdHkuYzo1MTk6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XG4tLVxuZnMvYWZzL3N5bWxpbmsuYz0yNzE9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9hZnMvc3ltbGluay5jLTI3My1cdC5yZWFkbGlua1x0PSBhZnNfcmVhZGxpbmssXG5mcy9hZnMvc3ltbGluay5jOjI3NDpcdC5pc19vd25lZF9ieV9tZVx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXG5mcy9hZnMvc3ltbGluay5jLTI3NS1cdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaWxlIE93bmVyc2hpcCBhbmQgQWNjZXNzIENvbnRyb2wgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gSSBzZWUgYSBmb2N1c2VkIHNldCBoZXJlIHJlbGF0ZWQgdG8gZmlsZSBvd25lcnNoaXAgYW5kIGFjY2VzcyBjb250cm9sLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgdmlydHVhbCBmaWxlc3lzdGVtIGFuZCBBRlMgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIHZlcmlmeWluZyBwZXJtaXNzaW9ucywgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZmlsZSBsZWFzZXMgb3IgZGVkdXBsaWNhdGlvbi4gSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyBjYXJlZnVsbHk6IGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC4gVGhlIG5hbWluZyBjb252ZW50aW9ucyBzdWdnZXN0IGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiBBRlMtc3BlY2lmaWMgbG9naWMgYW5kIG1vcmUgZ2VuZXJhbCBWRlMgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgdGhpcyBpcyBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBoYXMgYSBtb3JlIGNvbXBsZXggZmlsZS1vd25lcnNoaXAgbWFuYWdlbWVudCBzeXN0ZW0gdGhhbiBhIGJhc2ljIHN5c3RlbS4KClRoZSBwcmVzZW5jZSBvZiBgYWZzXypgIGZ1bmN0aW9ucyBpcyB0aGUga2V5IHRoaW5nIEkgYW0gc2VlaW5nIGhlcmUuIEkgd2lsbCBsb29rIHRvIHNlZSBpZiBBRlNfRlMgaXMgdGhlIG9ubHkgY29uZmlnIHByZXNlbnQgYmVjYXVzZSB0aGF0IHN1Z2dlc3RzIHRoYXQgdGhpcyBjb2RlIGlzIHBhcnQgb2YgYSBsYXJnZXIgZmlsZSBzeXN0ZW0gd2l0aCBhIG51bWJlciBvZiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIHRoYXQgaGF2ZSBkaWZmZXJpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRlNfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xuZnMvYWZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXCYjMzQ7XG4tLVxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xuLS1cbmZzL2Fmcy9LY29uZmlnLTI2LVxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXG5mcy9hZnMvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTY2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrIGZvciBBRlNfRlMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgQUZTX0ZTYCBmaWxlc3lzdGVtIGZlYXR1cmUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBjaGVjayBpcyBgZnMvYWZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcy4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBkZWZpbmVkIGJlZm9yZSBgQUZTX0ZTYCBjYW4gYmUgcHJvcGVybHkgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBBRlNfRlNgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBjb250aW5nZW50IG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoZSBkZXBlbmRlbmNpZXMgYXQgYSBoaWdoIGxldmVsLiBOb3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTt2ZSBnb3QgYSBtaXggb2YgdGhpbmdzIHJlbGF0ZWQgdG8gb3duZXJzaGlwIGNoZWNrcyB3aXRoaW4gdGhlIEFGUyBmaWxlIHN5c3RlbSAtIGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBhcyB3ZWxsIGFzIG1vcmUgZ2VuZXJhbCBWRlMgZnVuY3Rpb25hbGl0eSBsaWtlIGBzZXRhdHRyX3ByZXBhcmVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiBBRlMsIHdoaWNoIG9mdGVuIGludm9sdmVzIGRpc3RyaWJ1dGVkIG93bmVyc2hpcCBhbmQgcG90ZW50aWFsbHkgbW9yZSBjb21wbGV4IGFjY2VzcyBjb250cm9sLCB0aGVzZSBzZWVtIGxpa2UgcmVsZXZhbnQgcGllY2VzLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBvd25lcnNoaXAgaXMgbWFuYWdlZCwgYW5kIGl0IHNlZW1zIHRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIHRoaXMuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIHRoZSBvbmUgdGhhdCByZWFsbHkgc3RpY2tzIG91dC4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGJhc2ljIHNhbml0eSBjaGVjaywgYnV0IGltcG9ydGFudCB0byBjb25maXJtIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aGVyZSBJIG5lZWQgaXQuIEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGtlcm5lbCYjMzk7cyBzeW1ib2wgdGFibGUgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnZmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTAwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkRlZXAgRGl2ZSBpbnRvIEtlcm5lbCBPd25lcnNoaXAgQ2hlY2tzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIG93bmVyc2hpcCwgYnV0IGl0JiMzOTtzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBleHBvcnRlZCBmdW5jdGlvbiBvciBhIHNpbXBsZSBzdGF0aWMgdmFsdWUuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIG1lYW5pbmcgSSBwcm9iYWJseSBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUga2VybmVsJiMzOTtzIGludGVybmFscy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgcmVsYXRlZCBjb2RlIGxpdmVzIGluIGBmcy9uYW1laS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBrZXJuZWwgZGV0ZXJtaW5lcyBpZiBhbiBpbm9kZSBpcyAmIzM0O293bmVkJiMzNDsgYnkgdGhlIGN1cnJlbnQgcHJvY2VzcywgZm9yIHdoYXRldmVyIHJlYXNvbi4KClRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvbmFtZWkuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhIGZ1bmN0aW9uIOKAkyBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgYXB0bHkgbmFtZWQg4oCTIGxpa2UgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGNoZWNrIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hdHRyLmM9OTU9c3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTAwLVxuZnMvYXR0ci5jOjEwMTpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEwMi1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL2F0dHIuYz0xMjQ9c3RhdGljIGludCBjaGdycF9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9hdHRyLmMtMTI5LVxuZnMvYXR0ci5jOjEzMDpcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuZnMvYXR0ci5jLTEzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTk1Ni1cdGlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG5mcy9jb3JlZHVtcC5jOjk1NzpcdGlmICh2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKSAhPSAwKSB7XG5mcy9jb3JlZHVtcC5jLTk1OC1cdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCYjMzQ7Q29yZSBkdW1wIHRvICVzIGFib3J0ZWQ6IGNhbm5vdCBwcmVzZXJ2ZSBmaWxlIG93bmVyXCYjMzQ7LCBjbi1cdTAwM2Vjb3JlbmFtZSk7XG4tLVxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9pbm9kZS5jLTI3NTgtXG5mcy9pbm9kZS5jOjI3NTk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL2lub2RlLmMtMjc2MC1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pbnRlcm5hbC5oPTQ5PWV4dGVybiBpbnQgZmluaXNoX2NsZWFuX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcbi0tXG5mcy9pbnRlcm5hbC5oLTUzLSAqL1xuZnMvaW50ZXJuYWwuaDo1NDppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcbi0tXG5mcy9sb2Nrcy5jPTIxMzc9dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbi0tXG5mcy9sb2Nrcy5jLTIxNDEtXG5mcy9sb2Nrcy5jOjIxNDI6XHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xuZnMvbG9ja3MuYy0yMTQzLVx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLS1cbmZzL25hbWVpLmM9MTI1ND1mc19pbml0Y2FsbChpbml0X2ZzX25hbWVpX3N5c2N0bHMpO1xuLS1cbmZzL25hbWVpLmMtMTI2Mi0gKi9cbmZzL25hbWVpLmM6MTI2MzppbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbmFtZWkuYy0xMjY0LXtcbi0tXG5mcy9uYW1laS5jPTEzNDA9c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmMtMTM1My1cdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xuZnMvbmFtZWkuYzoxMzU0Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTEzNTUtXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tLVxuZnMvbmFtZWkuYy0xNTI3LVxuZnMvbmFtZWkuYzoxNTI4Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9uYW1laS5jLTE1MjktXHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9uYW1laS5jLTM3NDgtXG5mcy9uYW1laS5jOjM3NDk6XHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbmZzL25hbWVpLmMtMzc1MC1cdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3JlbWFwX3JhbmdlLmMtNDI1LVx0XHRyZXR1cm4gMDtcbmZzL3JlbWFwX3JhbmdlLmM6NDI2Olx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG5mcy9yZW1hcF9yYW5nZS5jLTQyNy1cdGlmIChyZXQgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAwNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmlsZSBPd25lcnNoaXAgYW5kIEFjY2VzcyBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHNldCBvZiBmdW5jdGlvbnMuIEkmIzM5O20gc2VlaW5nIGEgY29yZSBncm91cCBoZXJlIHRoYXQgZGVhbHMgd2l0aCBjaGVja2luZyBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zIOKAkyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYGFmc19pc19vd25lZF9ieV9tZWAsIGFuZCBgYWZzX2hhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSB0aGUgYmFzaWNzLCBJIGV4cGVjdC4gV2UmIzM5O3ZlIGFsc28gZ290IGBzZXRhdHRyX3ByZXBhcmVgLCB3aGljaCBsaWtlbHkgaGFuZGxlcyBwcmVwYXJpbmcgYXR0cmlidXRlIGNoYW5nZXMsIGFuZCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBpdCBzb3VuZHMgbGlrZSDigJMgY2hlY2tpbmcgb3duZXJzaGlwIG9yIGNhcGFiaWxpdHkuIFRoZW4gd2UgaGF2ZSBzb21lIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zIHN1Y2ggYXMgYHZmc19zZXRsZWFzZWAsIGBfX2NoZWNrX3N0aWNreWAsIGFuZCBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgdGhhdCBJIG5lZWQgdG8gcGxhY2UgaW50byB0aGUgbGFyZ2VyIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsYXRpb25zaGlwIG9mIHNvbWUgb3RoZXIsIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBob3cgdGhlc2UgbWlnaHQgZml0LiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBBaGEsIHRoZXkmIzM5O3JlIHN0YXRpYyBpbiBgZnMvbmFtZWkuY2AuIEdvb2QgdG8ga25vdywgdGhhdCBwbGFjZXMgdGhlbSB3aXRoaW4gdGhlIFZGUyBuYW1lc3BhY2UuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgSSBidWlsZCB0aGUgbGFyZ2VyIHBpY3R1cmUuCgpJIHdhcyBhbHNvIHRoaW5raW5nIG9mIGluY2x1ZGluZyBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGFuZCBgbWF5X2ZvbGxvd19saW5rYCBpbiBteSBhbmFseXNpcywgYnV0IHNpbmNlIHRoZXkgYXJlIGFsc28gc3RhdGljIGZ1bmN0aW9ucywgdGhhdCBtaWdodCBub3QgYmUgYXMgaW1wb3J0YW50LCBidXQgZ29vZCB0byBrZWVwIGluIG1pbmQuIFdhaXQsIGlzIGBtYXlfbGlua2F0YCBjYWxsaW5nIGBtYXlfZm9sbG93X2xpbmtgPyBObywgbm8sIGBtYXlfZm9sbG93X2xpbmtgIGlzIGNhbGxlZCBmcm9tIGBmb2xsb3dfbGlua2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBzdHJhaWdodCBoZXJlLiBHaXZlbiB0aGUgdXNlIG9mIGBtYXlfZm9sbG93X2xpbmtgLCBJIHdpbGwgbm93IG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF5X2ZvbGxvd19saW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAucnN0PTExMzA9Y29tcG9uZW50IG9mIHRoZSBsb29rdXAsIHNvIHdlIHdpbGwgY2hlY2sgdXNlcnNwYWNlIGZsYWcgYGBMT09LVVBfRk9MTE9XYGAgdG9cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAucnN0OjExMzE6ZGVjaWRlIHdoZXRoZXIgZm9sbG93IGl0IHdoZW4gaXQgaXMgYSBzeW1saW5rIGFuZCBjYWxsIGBgbWF5X2ZvbGxvd19saW5rKClgYCB0b1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC5yc3QtMTEzMi1jaGVjayBpZiB3ZSBoYXZlIHByaXZpbGVnZSB0byBmb2xsb3cgaXQuXG4tLVxuZnMvbmFtZWkuYz0xMzEzPXN0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvbmFtZWkuYy0xMzI0LS8qKlxuZnMvbmFtZWkuYzoxMzI1OiAqIG1heV9mb2xsb3dfbGluayAtIENoZWNrIHN5bWxpbmsgZm9sbG93aW5nIGZvciB1bnNhZmUgc2l0dWF0aW9uc1xuZnMvbmFtZWkuYy0xMzI2LSAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbi0tXG5mcy9uYW1laS5jLTEzMzktICovXG5mcy9uYW1laS5jOjEzNDA6c3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbmFtZWkuYy0xMzQxLXtcbi0tXG5mcy9uYW1laS5jPTIxMDY9c3RhdGljIG5vaW5saW5lIGNvbnN0IGNoYXIgKnBpY2tfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKmxpbmssXG4tLVxuZnMvbmFtZWkuYy0yMTMzLVx0aWYgKGZsYWdzIFx1MDAyNiBXQUxLX1RSQUlMSU5HKSB7XG5mcy9uYW1laS5jOjIxMzQ6XHRcdGVycm9yID0gbWF5X2ZvbGxvd19saW5rKG5kLCBpbm9kZSk7XG5mcy9uYW1laS5jLTIxMzUtXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDQ3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqQW5hbHl6aW5nIExpbmsgVHJhdmVyc2FsIExvZ2ljKioKCk9rYXksIHNvIGBwaWNrX2xpbmtgIGlzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgcGlja2luZyBhIGxpbmsuIEFuZCBpdCBhcHBlYXJzIHRoYXQgaXQmIzM5O3MgY2FsbGluZyBgbWF5X2ZvbGxvd19saW5rYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdlIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gYWN0dWFsbHkgKmZvbGxvdyogdGhlIGxpbmsgYWZ0ZXIgd2UmIzM5O3ZlIHBpY2tlZCBpdC4gTm93LCB3aGF0JiMzOTtzIGNydWNpYWwgaGVyZSBpcyBob3cgd2UgZGVmaW5lIHRoZSBwYXJhbWV0ZXJzIGZvciBwaWNraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIGxpbmsgaXMgZGVlbWVkICYjMzk7Zm9sbG93YWJsZS4mIzM5OwoKQmVmb3JlIGRpZ2dpbmcgaW50byBgbWF5X2ZvbGxvd19saW5rYCYjMzk7cyBjb2RlIGRpcmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGVyIHBpY3R1cmUsIGFzIGluLCB3aG8gYXJlIHRoZSBjYWxsZXJzIG9mIGBtYXlfY3JlYXRlX2luX3N0aWNreWA/IEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaW5mbHVlbmNlcyB0aGUgZGVjaXNpb24gdG8gY3JlYXRlIGEgc3RpY2t5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGJyb2FkZXIgY29udGV4dHMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBsb2dpYyBtb3JlIGVmZmVjdGl2ZWx5LiBGcm9tIHRoaXMsIEkgd2lsbCBiZSBhYmxlIHRvIGNoZWNrIGZvciBhbnkgbGlua3MgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3RpY2t5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXlfY3JlYXRlX2luX3N0aWNreSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuLS1cbmZzL25hbWVpLmMtMTQ1MC0vKipcbmZzL25hbWVpLmM6MTQ1MTogKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuZnMvbmFtZWkuYy0xNDUyLSAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcbi0tXG5mcy9uYW1laS5jLTE1MDgtICovXG5mcy9uYW1laS5jOjE1MDk6c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXG5mcy9uYW1laS5jLTE1MTAtXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL25hbWVpLmM9NDc1Mz1zdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4tLVxuZnMvbmFtZWkuYy00Nzc0LVx0XHRcdHJldHVybiAtRUlTRElSO1xuZnMvbmFtZWkuYzo0Nzc1Olx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbmZzL25hbWVpLmMtNDc3Ni1cdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MDEKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gYGRvX29wZW5gIGNhbGxzIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSByZWxldmFudCBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGxpc3QgaGVyZTogYGFmc19pc19vd25lZF9ieV9tZWAsIGBhZnNfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbG9jYXRpb24gb2YgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAuIFllcywgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGZzL25hbWVpLmNgLiBHb29kLiBOZXh0LCBpcyBgQUZTX0ZTYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gbmVlZGVkPyBTZWVtcyB0aGF0IHdheTsgdGhlIEFGUy1zcGVjaWZpYyBwYXJ0IGlzIGVuYWJsZWQgYnkgYEFGU19GU2AsIGFuZCB0aGUgVkZTIHBvcnRpb24gaXMgYWx3YXlzIGFjdGl2ZS4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIGxpc3QgYEFGU19GU2AgdW5kZXIgYEVuYWJsZUNvbmZpZ3NgLgoKTm93LCBsZXQmIzM5O3MgcmVjYXAgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucywgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAsIHRvIGFsbG93IGZpbGVzeXN0ZW1zIGxpa2UgQUZTIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGVzZSBvcGVyYXRpb25zIGZvciBBRlMgYW5kIGFsc28gbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgc3VjaCBhcyBjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBhbmQgc3ltbGluayBmb2xsb3dpbmcgdG8gbGV2ZXJhZ2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgKnNpZ25pZmljYW50KiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBWRlMgYW5kIEFGUywgYW5kIGl0IGZ1bmRhbWVudGFsbHkgaW1wYWN0cyBmaWxlIHBlcm1pc3Npb24gY2hlY2tzLiBUaGlzIGFic29sdXRlbHkgbmVlZHMgZnV6emluZy4KClRvIHN1bW1hcml6ZSwgaGVyZSYjMzk7cyBteSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnM6CgpGb2N1cyBzeW1ib2xzOgotIGBhZnNfaXNfb3duZWRfYnlfbWVgCi0gYGFmc19oYXZlX3NhbWVfb3duZXJgCi0gYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAKLSBgc2V0YXR0cl9wcmVwYXJlYAotIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYAotIGB2ZnNfc2V0bGVhc2VgCi0gYF9fY2hlY2tfc3RpY2t5YAotIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYAoKQ29uZmlnczoKLSBgQUZTX0ZTYAoKQWxyaWdodCwgdGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7YWZzX2hhdmVfc2FtZV9vd25lciYjMzQ7LAogICAgJiMzNDt2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUmIzM0OywKICAgICYjMzQ7c2V0YXR0cl9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2lub2RlX293bmVyX29yX2NhcGFibGUmIzM0OywKICAgICYjMzQ7dmZzX3NldGxlYXNlJiMzNDssCiAgICAmIzM0O19fY2hlY2tfc3RpY2t5JiMzNDssCiAgICAmIzM0O3Zmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZTIGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIGZvciBBRlMgYW5kIG1vZGlmaWVzIHNldmVyYWwgY29yZSBWRlMgZnVuY3Rpb25zIChjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBzeW1saW5rIGZvbGxvd2luZykgdG8gdXNlIHRoZSBuZXcgaGVscGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBhZmZlY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDthZnNfaGF2ZV9zYW1lX293bmVyJiMzNDssCiAgICAmIzM0O3Zmc19pbm9kZV9pc19vd25lZF9ieV9tZSYjMzQ7LAogICAgJiMzNDtzZXRhdHRyX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7aW5vZGVfb3duZXJfb3JfY2FwYWJsZSYjMzQ7LAogICAgJiMzNDt2ZnNfc2V0bGVhc2UmIzM0OywKICAgICYjMzQ7X19jaGVja19zdGlja3kmIzM0OywKICAgICYjMzQ7dmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjA4LjA1NjE2MDQ5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTQ5MzgxNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcImlub2RlX293bmVyX29yX2NhcGFibGVcIixcbiAgICBcInZmc19zZXRsZWFzZVwiLFxuICAgIFwiX19jaGVja19zdGlja3lcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MDguMDU2MTY3OTMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk0NzU1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzk5YTk3OGU3MTgwY2IyNGQ5YWUxNTFkNzUyYmNiOTdlYzQ0ZGFiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDE4OjQ5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxcbmluZGV4IDdjNzUzMTQ4YWY4ODguLjg5MzQxOWUwMDNlYWYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XFxuQEAgLTQ0NSw2ICs0NDUsOSBAQCBBcyBvZiBrZXJuZWwgMi42LjIyLCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6XFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuIFxcdFxcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHQgICAgICAgIHN0cnVjdCBvZmZzZXRfY3R4ICooKmdldF9vZmZzZXRfY3R4KShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFx0XFx0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rXFx0XFx0aW50ICgqaGF2ZV9zYW1lX293bmVyKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIFxcdH07XFxuIFxcbiBBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3NcXG5AQCAtNjM0LDYgKzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXFxuICAgICAgICAgZmlsZXN5c3RlbSBtdXN0IGRlZmluZSB0aGlzIG9wZXJhdGlvbiB0byB1c2VcXG4gICAgICAgICBzaW1wbGVfb2Zmc2V0X2Rpcl9vcGVyYXRpb25zLlxcbiBcXG4rYGBpc19vd25lZF9ieV9tZWBgXFxuK1xcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJ293bmVkJyBieVxcbitcXHR0aGUgb3duZXIgb2YgdGhlIHByb2Nlc3Mgb3IgaWYgdGhlIHByb2Nlc3MgaGFzIGEgdG9rZW4gdGhhdCBncmFudHNcXG4rXFx0aXQgb3duZXJzaGlwIHByaXZpbGVnZXMuICBJZiB1bnNldCwgdGhlIGRlZmF1bHQgaXMgdG8gY29tcGFyZSBpX3VpZFxcbitcXHR0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZVxcbitcXHRuZXR3b3JrIG9yIHBsdWctaW4gYmxvY2sgZmlsZXN5c3RlbXMuICBGb3IgZXhhbXBsZSwgQUZTIGRldGVybWluZXNcXG4rXFx0b3duZXJzaGlwIGVudGlyZWx5IGFjY29yZGluZyB0byBhbiBvYnRhaW5lZCB0b2tlbiBhbmQgaV91aWQgbWF5IG5vdFxcbitcXHRldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS5cXG4rXFxuK2BgaGF2ZV9zYW1lX293bmVyYGBcXG4rXFx0Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIGltbWVkaWF0ZVxcbitcXHRwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseVxcbitcXHRjb21wYXJlIHRoZSBpX3VpZCBvZiBib3RoLiAgRm9yIGV4YW1wbGUsIEFGUyBjb21wYXJlcyB0aGUgb3duZXIgSURzXFxuK1xcdG9mIGJvdGggLSBidXQgdGhlc2UgYXJlIGEgNjQtYml0IHZhbHVlcyBvbiBzb21lIHZhcmlhbnRzIHRoYXQgbWlnaHRcXG4rXFx0bm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0b1xcbitcXHRrdWlkX3QuXFxuK1xcbitcXG4gVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0XFxuID09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jXFxuaW5kZXggNmRmNTZmZTkxNjNmZC4uZWUyZjVlYzBiMmM2NyAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyLmNcXG4rKysgYi9mcy9hZnMvZGlyLmNcXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5wZXJtaXNzaW9uXFx0PSBhZnNfcGVybWlzc2lvbixcXG4gXFx0LmdldGF0dHJcXHQ9IGFmc19nZXRhdHRyLFxcbiBcXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2Rpcl9hb3BzID0ge1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xcbmluZGV4IDA0Njc3NDJiZmVlZTMuLmJhNDQ0OTNjY2FmNmUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ZpbGUuY1xcbisrKyBiL2ZzL2Fmcy9maWxlLmNcXG5AQCAtNDksNiArNDksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbiBcXHQuZ2V0YXR0clxcdD0gYWZzX2dldGF0dHIsXFxuIFxcdC5zZXRhdHRyXFx0PSBhZnNfc2V0YXR0cixcXG4gXFx0LnBlcm1pc3Npb25cXHQ9IGFmc19wZXJtaXNzaW9uLFxcbitcXHQuaXNfb3duZWRfYnlfbWVcXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcXG4rXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuIH07XFxuIFxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbm9kZS5jIGIvZnMvYWZzL2lub2RlLmNcXG5pbmRleCAxNGYzOWE5YmVhNmNmLi5hZjg1YTg4ZDk0M2RkIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbm9kZS5jXFxuKysrIGIvZnMvYWZzL2lub2RlLmNcXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFmc19pbm9kZV9pbml0X2Zyb21fc3RhdHVzKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZmxhZ3MgfD0gU19OT0FUSU1FO1xcbiBcXHRpbm9kZS1cXHUwMDNlaV91aWQgPSBtYWtlX2t1aWQoXFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVxcdTAwM2Vvd25lcik7XFxuIFxcdGlub2RlLVxcdTAwM2VpX2dpZCA9IG1ha2Vfa2dpZChcXHUwMDI2aW5pdF91c2VyX25zLCBzdGF0dXMtXFx1MDAzZWdyb3VwKTtcXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xcbiBcXHRzZXRfbmxpbmsoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSwgc3RhdHVzLVxcdTAwM2VubGluayk7XFxuIFxcbiBcXHRpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXR1cy1cXHUwMDNlc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcXG5pbmRleCAyOTA4NzNiYWM4OWIzLi5mMTVkYmJjOGRkMjY0IDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcXG5AQCAtMTUzMSw2ICsxNTMxLDkgQEAgZXh0ZXJuIHN0cnVjdCBrZXkgKmFmc19yZXF1ZXN0X2tleShzdHJ1Y3QgYWZzX2NlbGwgKik7XFxuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcXG4gZXh0ZXJuIGludCBhZnNfY2hlY2tfcGVybWl0KHN0cnVjdCBhZnNfdm5vZGUgKiwgc3RydWN0IGtleSAqLCBhZnNfYWNjZXNzX3QgKik7XFxuIGV4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpO1xcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5pbmRleCA2ZDAwZDYyYTY1ZWRmLi43MDkyZjVhY2RjZDZhIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jXFxuKysrIGIvZnMvYWZzL3NlY3VyaXR5LmNcXG5AQCAtNTEwLDYgKzUxMCw1MiBAQCBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIERldGVybWluZSBpZiBhbiBpbm9kZSBpcyBvd25lZCBieSAnbWUnIC0gd2hhdGV2ZXIgdGhhdCBtZWFucyBmb3IgdGhlXFxuKyAqIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZmlsZSBpcyBvd25lZCBieSB0aGVcXG4rICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXFxuKyAqIDAgaWYgb3duZWQgYnkgbWUsIDEgaWYgbm90OyBjYW4gYWxzbyByZXR1cm4gYW4gZXJyb3IuXFxuKyAqL1xcbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xcbitcXHRhZnNfYWNjZXNzX3QgYWNjZXNzO1xcbitcXHRzdHJ1Y3Qga2V5ICprZXk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDE7IC8qIFRoZSBBRE1JTiByaWdodCBjaGVjayBkb2Vzbid0IHdvcmsgZm9yIGRpcmVjdG9yaWVzLiAqL1xcbitcXG4rXFx0a2V5ID0gYWZzX3JlcXVlc3Rfa2V5KHZub2RlLVxcdTAwM2V2b2x1bWUtXFx1MDAzZWNlbGwpO1xcbitcXHRpZiAoSVNfRVJSKGtleSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGtleSk7XFxuK1xcbitcXHQvKiBHZXQgdGhlIGFjY2VzcyByaWdodHMgZm9yIHRoZSBrZXkgb24gdGhpcyBmaWxlLiAqL1xcbitcXHRyZXQgPSBhZnNfY2hlY2tfcGVybWl0KHZub2RlLCBrZXksIFxcdTAwMjZhY2Nlc3MpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdC8qIFdlIGdldCB0aGUgQURNSU5JU1RFUiBiaXQgaWYgd2Ugb3duIHRoZSBmaWxlLiAqL1xcbitcXHRyZXQgPSAoYWNjZXNzIFxcdTAwMjYgQUZTX0FDRV9BRE1JTklTVEVSKSA/IDAgOiAxO1xcbitlcnJvcjpcXG4rXFx0a2V5X3B1dChrZXkpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgYSBmaWxlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgcGFyZW50IC0gd2hhdGV2ZXIgdGhhdCBtZWFuc1xcbisgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xcbisgKiBVSURzLiAgUmV0dXJucyAwIGlmIHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cXG4rICovXFxuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTIpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUxID0gQUZTX0ZTX0koaW5vZGUxKTtcXG4rXFx0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcXG4rXFxuK1xcdHJldHVybiB2bm9kZTEtXFx1MDAzZXN0YXR1cy5vd25lciAhPSB2bm9kZTItXFx1MDAzZXN0YXR1cy5vd25lcjtcXG4rfVxcbitcXG4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKVxcbiB7XFxuIFxcdGludCBpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvc3ltbGluay5jIGIvZnMvYWZzL3N5bWxpbmsuY1xcbmluZGV4IDE2YjQ4MjNjYjdiN2UuLmVkODM0YmE5MGU4NWEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3N5bWxpbmsuY1xcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcXG5AQCAtMjcxLDYgKzI3MSw4IEBAIGludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbiBcXHQuZ2V0X2xpbmtcXHQ9IGFmc19nZXRfbGluayxcXG4gXFx0LnJlYWRsaW5rXFx0PSBhZnNfcmVhZGxpbmssXFxuK1xcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbitcXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4gfTtcXG4gXFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfYW9wcyA9IHtcXG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXFxuaW5kZXggNGY0MzdmYWJiN2YwZi4uYjdlOGI1ZDQ5YTlmZSAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuIC8qKlxcbiAgKiBzZXRhdHRyX3Nob3VsZF9kcm9wX3NnaWQgLSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2V0Z2lkIGJpdCBuZWVkcyB0byBiZVxcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbitzdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzdWlkX3QgaWFfdmZzdWlkKVxcbiB7XFxuIFxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZmc3VpZF9lcShpYV92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnN1aWRfdmFsaWQodmZzdWlkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExOCwyMyArMTIxLDI3IEBAIHN0YXRpYyBib29sIGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiAgKiBwZXJtaXNzaW9ucy4gT24gbm9uLWlkbWFwcGVkIG1vdW50cyBvciBpZiBwZXJtaXNzaW9uIGNoZWNraW5nIGlzIHRvIGJlXFxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgY2hncnBfb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxcbiB7XFxuIFxcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdGlmICh2ZnNnaWRfZXEoaWFfdmZzZ2lkLCB2ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmICh2ZnNnaWRfaW5fZ3JvdXBfcChpYV92ZnNnaWQpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FUEVSTTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2Myw2ICsxNzAsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0dW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci1cXHUwMDNlaWFfdmFsaWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xcbkBAIC0xODksMTQgKzE5NywxOCBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdGdvdG8ga2lsbF9wcml2O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi9cXG4tXFx0aWYgKChpYV92YWxpZCBcXHUwMDI2IEFUVFJfVUlEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIWNob3duX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0aWYgKGlhX3ZhbGlkIFxcdTAwMjYgQVRUUl9VSUQpIHtcXG4rXFx0XFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVxcdTAwM2VpYV92ZnN1aWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovXFxuLVxcdGlmICgoaWFfdmFsaWQgXFx1MDAyNiBBVFRSX0dJRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXFx1MDAzZWlhX3Zmc2dpZCkpXFxuLVxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfR0lEKSB7XFxuK1xcdFxcdHJldCA9IGNoZ3JwX29rKGlkbWFwLCBpbm9kZSwgYXR0ci1cXHUwMDNlaWFfdmZzZ2lkKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXFxuIFxcdGlmIChpYV92YWxpZCBcXHUwMDI2IEFUVFJfTU9ERSkge1xcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzguLjNmMzJlNzNhYWVkYTIgMTAwNjQ0XFxuLS0tIGEvZnMvY29yZWR1bXAuY1xcbisrKyBiL2ZzL2NvcmVkdW1wLmNcXG5AQCAtOTU0LDcgKzk1NCw3IEBAIHN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuIFxcdCAqIGZpbGVzeXN0ZW0uXFxuIFxcdCAqL1xcbiBcXHRpZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbi1cXHRpZiAoIXZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGN1cnJlbnRfZnN1aWQoKSkpIHtcXG4rXFx0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcXG4gXFx0XFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXFxcIkNvcmUgZHVtcCB0byAlcyBhYm9ydGVkOiBjYW5ub3QgcHJlc2VydmUgZmlsZSBvd25lclxcXCIsIGNuLVxcdTAwM2Vjb3JlbmFtZSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuY1xcbmluZGV4IDMxYzViOWVlM2E4MWQuLmE3ZWM4MzBhYjY4M2YgMTAwNjQ0XFxuLS0tIGEvZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2lub2RlLmNcXG5AQCAtMjc1MCwxNiArMjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXFxuICAqL1xcbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0dmZzdWlkX3QgdmZzdWlkO1xcbiBcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0dmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgPT0gMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbiBcXHRucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xcbiBcXHRpZiAodmZzdWlkX2hhc19tYXBwaW5nKG5zLCB2ZnN1aWQpIFxcdTAwMjZcXHUwMDI2IG5zX2NhcGFibGUobnMsIENBUF9GT1dORVIpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5kaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmhcXG5pbmRleCAzNTVkOTNmOTIyMDg2Li5iZTQ1Y2M2Mzg4NjE5IDEwMDY0NFxcbi0tLSBhL2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9pbnRlcm5hbC5oXFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbiAvKlxcbiAgKiBuYW1laS5jXFxuICAqL1xcbitpbnQgdmZzX2lub2RlX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcXG4gaW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXFxuaW5kZXggNmU0ZmY3ZmNlYzA1My4uMDJmODEwZGM5ZTdlNyAxMDA2NDRcXG4tLS0gYS9mcy9sb2Nrcy5jXFxuKysrIGIvZnMvbG9ja3MuY1xcbkBAIC02OCw2ICs2OCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvZmlsZWxvY2suaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG4gc3RhdGljIHN0cnVjdCBmaWxlX2xvY2sgKmZpbGVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcXG4ge1xcbkBAIC0yMTM2LDEwICsyMTM3LDEyIEBAIGludFxcbiB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbi1cXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbiBcXHRpbnQgZXJyb3I7XFxuIFxcbi1cXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFxcdTAwMjZcXHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXFxuK1xcdGVycm9yID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XFxuK1xcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFx0aWYgKGVycm9yICE9IDAgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX0xFQVNFKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdGVycm9yID0gc2VjdXJpdHlfZmlsZV9sb2NrKGZpbHAsIGFyZyk7XFxuIFxcdGlmIChlcnJvcilcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcXG5pbmRleCAxOWNlNDNjOWE2ZTY2Li43MmY5NGQyMDRmOTNmIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTU1LDggKzU1LDggQEBcXG4gICogVGhlIG5ldyBjb2RlIHJlcGxhY2VzIHRoZSBvbGQgcmVjdXJzaXZlIHN5bWxpbmsgcmVzb2x1dGlvbiB3aXRoXFxuICAqIGFuIGl0ZXJhdGl2ZSBvbmUgKGluIGNhc2Ugb2Ygbm9uLW5lc3RlZCBzeW1saW5rIGNoYWlucykuICBJdCBkb2VzXFxuICAqIHRoaXMgd2l0aCBjYWxscyB0byBcXHUwMDNjZnNcXHUwMDNlX2ZvbGxvd19saW5rKCkuXFxuLSAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93IFxcbi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIFxcbisgKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vd1xcbisgKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsXFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cXG4gICpcXG4gICogV2l0aCB0aGUgbmV3IGRjYWNoZSwgdGhlIHBhdGhuYW1lIGlzIHN0b3JlZCBhdCBlYWNoIGlub2RlLCBhdCBsZWFzdCBhc1xcbkBAIC0xMjU1LDYgKzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXFxuIFxcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgdGhlIHByb2Nlc3MgKGFsbG93aW5nIGZvciBmc3VpZCBvdmVycmlkZSksXFxuKyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW1cXG4rICogbWFraW5nIHRoZSBkZXRlcm1pbmF0aW9uLlxcbisgKi9cXG4raW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRpZiAodW5saWtlbHkoaW5vZGUtXFx1MDAzZWlfb3BmbGFncyBcXHUwMDI2IElPUF9PV05FUlNISVBfT1ZFUlJJREUpKVxcbitcXHRcXHRyZXR1cm4gaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmdcXG4rICogMCBpZiBzbywgMSBpZiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZ1xcbisgKiB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuYW1laWRhdGEgKm5kKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShpbm9kZS1cXHUwMDNlaV9vcGZsYWdzIFxcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqcGFyZW50O1xcbitcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcjtcXG4rXFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdGlmIChpbm9kZSAhPSBuZC1cXHUwMDNlaW5vZGUpIHtcXG4rXFx0XFx0XFx0ZGlyID0gbmQtXFx1MDAzZWlub2RlO1xcbitcXHRcXHRcXHRyZXQgPSBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKSB7XFxuK1xcdFxcdFxcdHBhcmVudCA9IFJFQURfT05DRShuZC1cXHUwMDNlcGF0aC5kZW50cnkpO1xcbitcXHRcXHRcXHRkaXIgPSBSRUFEX09OQ0UocGFyZW50LVxcdTAwM2VkX2lub2RlKTtcXG4rXFx0XFx0XFx0aWYgKCFkaXIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUNISUxEO1xcbitcXHRcXHRcXHRyZXQgPSBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGFyZW50ID0gZGdldF9wYXJlbnQobmQtXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlyID0gcGFyZW50LVxcdTAwM2VkX2lub2RlO1xcbitcXHRcXHRcXHRyZXQgPSBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0XFx0XFx0ZHB1dChwYXJlbnQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2ZnN1aWRfdmFsaWQobmQtXFx1MDAzZWRpcl92ZnN1aWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB2ZnN1aWRfZXEoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgbmQtXFx1MDAzZWRpcl92ZnN1aWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDE7IC8qIE5vdCBzYW1lLiAqL1xcbit9XFxuK1xcbisvKlxcbisgKiBEZXRlcm1pbmUgaWYgdHdvIGlub2RlcyBoYXZlIHRoZSBzYW1lIG93bmVyLCByZXR1cm5pbmcgMCBpZiBzbywgMSBpZiBub3QgYW5kXFxuKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShpbm9kZS1cXHUwMDNlaV9vcGZsYWdzIFxcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXFxuK1xcdFxcdHJldHVybiBpbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcXG4rXFx0aWYgKHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLFxcbitcXHRcXHQgICAgICBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXFxuK31cXG4rXFxuIC8qKlxcbiAgKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbkBAIC0xMjcxLDI3ICsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBmb2xsb3dpbmcgdGhlIHN5bWxpbmsgaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XFxuLVxcdHZmc3VpZF90IHZmc3VpZDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghc3lzY3RsX3Byb3RlY3RlZF9zeW1saW5rcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cXHUwMDNlcGF0aC5tbnQpO1xcbi1cXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xcbi1cXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbiBcXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3Rvcnkgbm90IHN0aWNreSBhbmQgd29ybGQtd3JpdGFibGUuICovXFxuIFxcdGlmICgobmQtXFx1MDAzZWRpcl9tb2RlIFxcdTAwMjYgKFNfSVNWVFh8U19JV09USCkpICE9IChTX0lTVlRYfFNfSVdPVEgpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdGlkbWFwID0gbW50X2lkbWFwKG5kLVxcdTAwM2VwYXRoLm1udCk7XFxuK1xcdC8qIEFsbG93ZWQgaWYgb3duZXIgYW5kIGZvbGxvd2VyIG1hdGNoLiAqL1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0LyogQWxsb3dlZCBpZiBwYXJlbnQgZGlyZWN0b3J5IGFuZCBsaW5rIG93bmVyIG1hdGNoLiAqL1xcbi1cXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVxcdTAwM2VkaXJfdmZzdWlkKSBcXHUwMDI2XFx1MDAyNiB2ZnN1aWRfZXEobmQtXFx1MDAzZWRpcl92ZnN1aWQsIHZmc3VpZCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGlmIChuZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBMT09LVVBfUkNVKVxcbiBcXHRcXHRyZXR1cm4gLUVDSElMRDtcXG5AQCAtMTM4OSwxMiArMTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXFxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cXG4gICpcXG4gICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XFxuLSAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcXG4tICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzXFxuLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGVcXG4rICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZCxcXG4rICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLFxcbisgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeSxcXG4rICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGUsXFxuKyAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGUgYW5kXFxuICAqICAgLSB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IG93biB0aGUgZmlsZVxcbi0gKiAgIC0gdGhlIGRpcmVjdG9yeSBpcyB3b3JsZCB3cml0YWJsZVxcbiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMlxcbiAgKiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSB0byBiZSB3b3JsZCB3cml0YWJsZTogYmVpbmcgZ3JvdXAgd3JpdGFibGUgd2lsbFxcbiAgKiBiZSBlbm91Z2guXFxuQEAgLTE0MDUsMTMgKzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiAgKiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZVxcbiAgKiByYXcgaW5vZGUgc2ltcGx5IHBhc3MgQG5vcF9tbnRfaWRtYXAuXFxuICAqXFxuKyAqIEZvciBhIGZpbGVzeXN0ZW0gKGUuZy4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0pIHRoYXQgaGFzIGEgc2VwYXJhdGUgSUQgc3BhY2VcXG4rICogYW5kIGhhcyBmb3JlaWduIElEcyAobWF5YmUgZXZlbiBub24taW50ZWdlciBJRHMpLCBpX3VpZCBjYW5ub3QgYmUgY29tcGFyZWRcXG4rICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cXG4rICogSW5zdGVhZCwgdGhlIGZpbGVzeXN0ZW0gaXMgYXNrZWQgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvbnMuICBXaXRoIG5ldHdvcmtcXG4rICogZmlsZXN5c3RlbXMsIHRoZXJlIGFsc28gZXhpc3RzIHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBhbm9ueW1vdXNcXG4rICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXFxuKyAqXFxuKyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6XFxuKyAqXFxuKyAqXFx0VVNFUlxcdERJUlxcdEZJTEVcXHRGSUxFXFx0QUxMT1dFRFxcbisgKlxcdFxcdE9XTkVSXFx0T1dORVJcXHRTVEFURVxcbisgKlxcdD09PT09PT1cXHQ9PT09PT09XFx0PT09PT09PVxcdD09PT09PT1cXHQ9PT09PT09XFxuKyAqXFx0QVxcdEFcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0QVxcdEFcXHRBXFx0RXhpc3RzXFx0WWVzXFxuKyAqXFx0QVxcdEFcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRBXFx0QlxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRBXFx0QlxcdEFcXHRFeGlzdHNcXHRZZXMsIEZPPT1VXFxuKyAqXFx0QVxcdEJcXHRCXFx0RXhpc3RzXFx0WWVzLCBGTz09RE9cXG4rICpcXHRBXFx0QlxcdENcXHRFeGlzdHNcXHROb1xcbisgKlxcdEFcXHRhbm9uWzFdXFx0LVxcdE5ld1xcdFllc1xcbisgKlxcdEFcXHRhbm9uWzFdXFx0QVxcdEV4aXN0c1xcdFllc1xcbisgKlxcdEFcXHRhbm9uWzFdXFx0Q1xcdEV4aXN0c1xcdE5vXFxuKyAqXFx0YW5vblxcdEFcXHQtXFx0TmV3XFx0WWVzXFxuKyAqXFx0YW5vblxcdEFcXHRBXFx0RXhpc3RzXFx0WWVzLCBGTz09RE9cXG4rICpcXHRhbm9uXFx0YW5vblsxXVxcdC1cXHROZXdcXHRZZXNcXG4rICpcXHRhbm9uXFx0YW5vblsxXVxcdC1cXHRFeGlzdHNcXHROb1xcbisgKlxcdGFub25cXHRBXFx0QVxcdEV4aXN0c1xcdFllcywgRk89PURPXFxuKyAqXFx0YW5vblxcdEFcXHRDXFx0RXhpc3RzXFx0Tm9cXG4rICpcXHRhbm9uXFx0QVxcdGFub25cXHRFeGlzdHNcXHROb1xcbisgKlxcbisgKiBbMV0gQ2FuIGFub255bW91c2x5LW93bmVkIGRpcnMgYmUgc3RpY2t5P1xcbisgKlxcbiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxcbiAgKi9cXG4gc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqY29uc3QgaW5vZGUpXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVxcdTAwM2VkaXJfbW9kZTtcXG4tXFx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVxcdTAwM2VkaXJfdmZzdWlkLCBpX3Zmc3VpZDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcXHUwMDI2IFNfSVNWVFgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTE0MjIsMTMgKzE1MjEsMTMgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChTX0lTRklGTyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiAhc3lzY3RsX3Byb3RlY3RlZF9maWZvcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpX3Zmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XFxuLVxcbi1cXHRpZiAodmZzdWlkX2VxKGlfdmZzdWlkLCBkaXJfdmZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGlmIChsaWtlbHkoZGlyX21vZGUgXFx1MDAyNiAwMDAyKSkge1xcbiBcXHRcXHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwgXFxcInN0aWNreV9jcmVhdGVcXFwiKTtcXG5AQCAtMzY0NSwxMiArMzc0NCwxNCBAQCBFWFBPUlRfU1lNQk9MKHVzZXJfcGF0aF9hdCk7XFxuIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4tXFx0a3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksIGZzdWlkKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgZGlyKSwgZnN1aWQpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gdmZzX2lub2Rlc19oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdHJldHVybiAhY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0ZPV05FUik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3JlbWFwX3JhbmdlLmMgYi9mcy9yZW1hcF9yYW5nZS5jXFxuaW5kZXggMjZhZmJiYmZiMTBjMi4uOWVlZTkzYzI3MDAxMiAxMDA2NDRcXG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXFxuKysrIGIvZnMvcmVtYXBfcmFuZ2UuY1xcbkBAIC00MTMsMjAgKzQxMywyMiBAQCBsb2ZmX3QgdmZzX2Nsb25lX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xcbiBcXG4gLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkZWR1cGUgdGhlIGRlc3RpbmF0aW9uIGZpbGUgKi9cXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbitzdGF0aWMgaW50IG1heV9kZWR1cGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVQRVJNO1xcbiB9XFxuIFxcbiBsb2ZmX3QgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZShzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIGxvZmZfdCBzcmNfcG9zLFxcbkBAIC00NTksOCArNDYxLDggQEAgbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IC1FUEVSTTtcXG4tXFx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxcbitcXHRyZXQgPSBtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfZHJvcF93cml0ZTtcXG4gXFxuIFxcdHJldCA9IC1FWERFVjtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuaW5kZXggNTBjZTczMWEyYjc4Zi4uODAxM2MxM2EzNTNkNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtNjI4LDYgKzYyOCw3IEBAIGlzX3VuY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICphY2wpXFxuICNkZWZpbmUgSU9QX0NBQ0hFRF9MSU5LXFx0XFx0MHgwMDQwXFxuICNkZWZpbmUgSU9QX0ZBU1RQRVJNX01BWV9FWEVDXFx0MHgwMDgwXFxuICNkZWZpbmUgSU9QX0ZMQ1RYXFx0XFx0MHgwMTAwXFxuKyNkZWZpbmUgSU9QX09XTkVSU0hJUF9PVkVSUklERVxcdDB4MDIwMFxcdC8qIFVzZSAtXFx1MDAzZWlzX293bmVkX2J5X21lKCkgYW5kIC1cXHUwMDNlaGF2ZV9zYW1lX293bmVyKCkgKi9cXG4gXFxuIC8qXFxuICAqIElub2RlIHN0YXRlIGJpdHMuICBQcm90ZWN0ZWQgYnkgaW5vZGUtXFx1MDAzZWlfbG9ja1xcbkBAIC0xNzU1LDggKzE3NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV93cml0ZV9ub3Rfc3RhcnRlZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHNiX3dyaXRlX25vdF9zdGFydGVkKGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2IpO1xcbiB9XFxuIFxcbi1ib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIC8qXFxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cXG5AQCAtMjAzNiw2ICsyMDM2LDkgQEAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xcbiBcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBcXHRpbnQgKCpmaWxlYXR0cl9nZXQpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFx0c3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXHRpbnQgKCppc19vd25lZF9ieV9tZSkoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXHRpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUyKTtcXG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XFxuIFxcbiAvKiBEaWQgdGhlIGRyaXZlciBwcm92aWRlIHZhbGlkIG1tYXAgaG9vayBjb25maWd1cmF0aW9uPyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OTowOC44MDY2NjYyMDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTM5ODg2NTk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwic2V0YXR0cl9wcmVwYXJlXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZTIGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIGZvciBBRlMgYW5kIG1vZGlmaWVzIHNldmVyYWwgY29yZSBWRlMgZnVuY3Rpb25zIChjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBzeW1saW5rIGZvbGxvd2luZykgdG8gdXNlIHRoZSBuZXcgaGVscGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBhZmZlY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjOTlhOTc4ZTcxODBjYjI0ZDlhZTE1MWQ3NTJiY2I5N2VjNDRkYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxODo0OTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuaW5kZXggN2M3NTMxNDhhZjg4OC4uODkzNDE5ZTAwM2VhZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMucnN0XG5AQCAtNDQ1LDYgKzQ0NSw5IEBAIEFzIG9mIGtlcm5lbCAyLjYuMjIsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDpcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gXHRcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0ICAgICAgICBzdHJ1Y3Qgb2Zmc2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmlzX293bmVkX2J5X21lKShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4rXHRcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBcdH07XG4gXG4gQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzXG5AQCAtNjM0LDYgKzYzNywyNCBAQCBvdGhlcndpc2Ugbm90ZWQuXG4gICAgICAgICBmaWxlc3lzdGVtIG11c3QgZGVmaW5lIHRoaXMgb3BlcmF0aW9uIHRvIHVzZVxuICAgICAgICAgc2ltcGxlX29mZnNldF9kaXJfb3BlcmF0aW9ucy5cbiBcbitgYGlzX293bmVkX2J5X21lYGBcbitcdGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgJ293bmVkJyBieVxuK1x0dGhlIG93bmVyIG9mIHRoZSBwcm9jZXNzIG9yIGlmIHRoZSBwcm9jZXNzIGhhcyBhIHRva2VuIHRoYXQgZ3JhbnRzXG4rXHRpdCBvd25lcnNoaXAgcHJpdmlsZWdlcy4gIElmIHVuc2V0LCB0aGUgZGVmYXVsdCBpcyB0byBjb21wYXJlIGlfdWlkXG4rXHR0byBjdXJyZW50X2ZzdWlkKCkgLSBidXQgdGhpcyBtYXkgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc29tZVxuK1x0bmV0d29yayBvciBwbHVnLWluIGJsb2NrIGZpbGVzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIEFGUyBkZXRlcm1pbmVzXG4rXHRvd25lcnNoaXAgZW50aXJlbHkgYWNjb3JkaW5nIHRvIGFuIG9idGFpbmVkIHRva2VuIGFuZCBpX3VpZCBtYXkgbm90XG4rXHRldmVuIGJlIGZyb20gdGhlIHNhbWUgSUQgc3BhY2UgYXMgY3VycmVudF91aWQoKS5cbitcbitgYGhhdmVfc2FtZV9vd25lcmBgXG4rXHRjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIGlub2RlIGhhcyB0aGUgc2FtZSBvd25lciBhcyBpdHMgaW1tZWRpYXRlXG4rXHRwYXJlbnQgb24gdGhlIHBhdGggd2Fsa2VkLiAgSWYgdW5zZXQsIHRoZSBkZWZhdWx0IGlzIHRvIHNpbXBseVxuK1x0Y29tcGFyZSB0aGUgaV91aWQgb2YgYm90aC4gIEZvciBleGFtcGxlLCBBRlMgY29tcGFyZXMgdGhlIG93bmVyIElEc1xuK1x0b2YgYm90aCAtIGJ1dCB0aGVzZSBhcmUgYSA2NC1iaXQgdmFsdWVzIG9uIHNvbWUgdmFyaWFudHMgdGhhdCBtaWdodFxuK1x0bm90IGZpdCBpbnRvIGEga3VpZF90IGFuZCBjaWZzIGhhcyBHVUlEcyB0aGF0IGNhbm5vdCBiZSBjb21wYXJlZCB0b1xuK1x0a3VpZF90LlxuK1xuK1xuIFRoZSBBZGRyZXNzIFNwYWNlIE9iamVjdFxuID09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIuYyBiL2ZzL2Fmcy9kaXIuY1xuaW5kZXggNmRmNTZmZTkxNjNmZC4uZWUyZjVlYzBiMmM2NyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXIuY1xuKysrIGIvZnMvYWZzL2Rpci5jXG5AQCAtNjksNiArNjksOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQucGVybWlzc2lvblx0PSBhZnNfcGVybWlzc2lvbixcbiBcdC5nZXRhdHRyXHQ9IGFmc19nZXRhdHRyLFxuIFx0LnNldGF0dHJcdD0gYWZzX3NldGF0dHIsXG4rXHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuK1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19kaXJfYW9wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuY1xuaW5kZXggMDQ2Nzc0MmJmZWVlMy4uYmE0NDQ5M2NjYWY2ZSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9maWxlLmNcbisrKyBiL2ZzL2Fmcy9maWxlLmNcbkBAIC00OSw2ICs0OSw4IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4gXHQuZ2V0YXR0clx0PSBhZnNfZ2V0YXR0cixcbiBcdC5zZXRhdHRyXHQ9IGFmc19zZXRhdHRyLFxuIFx0LnBlcm1pc3Npb25cdD0gYWZzX3Blcm1pc3Npb24sXG4rXHQuaXNfb3duZWRfYnlfbWVcdD0gYWZzX2lzX293bmVkX2J5X21lLFxuK1x0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19maWxlX2FvcHMgPSB7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuY1xuaW5kZXggMTRmMzlhOWJlYTZjZi4uYWY4NWE4OGQ5NDNkZCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbm9kZS5jXG4rKysgYi9mcy9hZnMvaW5vZGUuY1xuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhZnNfaW5vZGVfaW5pdF9mcm9tX3N0YXR1cyhzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsXG4gXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlub2RlLVx1MDAzZWlfdWlkID0gbWFrZV9rdWlkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZW93bmVyKTtcbiBcdGlub2RlLVx1MDAzZWlfZ2lkID0gbWFrZV9rZ2lkKFx1MDAyNmluaXRfdXNlcl9ucywgc3RhdHVzLVx1MDAzZWdyb3VwKTtcbitcdGlub2RlLVx1MDAzZWlfb3BmbGFncyB8PSBJT1BfT1dORVJTSElQX09WRVJSSURFO1xuIFx0c2V0X25saW5rKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCBzdGF0dXMtXHUwMDNlbmxpbmspO1xuIFxuIFx0aV9zaXplX3dyaXRlKGlub2RlLCBzdGF0dXMtXHUwMDNlc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggMjkwODczYmFjODliMy4uZjE1ZGJiYzhkZDI2NCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTE1MzEsNiArMTUzMSw5IEBAIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXkoc3RydWN0IGFmc19jZWxsICopO1xuIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlfcmN1KHN0cnVjdCBhZnNfY2VsbCAqKTtcbiBleHRlcm4gaW50IGFmc19jaGVja19wZXJtaXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGFmc19hY2Nlc3NfdCAqKTtcbiBleHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XG4raW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XG4raW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUyKTtcbiBleHRlcm4gdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZWN1cml0eS5jIGIvZnMvYWZzL3NlY3VyaXR5LmNcbmluZGV4IDZkMDBkNjJhNjVlZGYuLjcwOTJmNWFjZGNkNmEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VjdXJpdHkuY1xuKysrIGIvZnMvYWZzL3NlY3VyaXR5LmNcbkBAIC01MTAsNiArNTEwLDUyIEBAIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5ICdtZScgLSB3aGF0ZXZlciB0aGF0IG1lYW5zIGZvciB0aGVcbisgKiBmaWxlc3lzdGVtLiAgSW4gdGhlIGNhc2Ugb2YgQUZTLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlXG4rICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIFJ4IFNlY3VyaXR5IENsYXNzIHRva2VuIGhlbGQgaW4gYSBrZXkuICBSZXR1cm5zXG4rICogMCBpZiBvd25lZCBieSBtZSwgMSBpZiBub3Q7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci5cbisgKi9cbitpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpO1xuK1x0YWZzX2FjY2Vzc190IGFjY2VzcztcbitcdHN0cnVjdCBrZXkgKmtleTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRyZXR1cm4gMTsgLyogVGhlIEFETUlOIHJpZ2h0IGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGlyZWN0b3JpZXMuICovXG4rXG4rXHRrZXkgPSBhZnNfcmVxdWVzdF9rZXkodm5vZGUtXHUwMDNldm9sdW1lLVx1MDAzZWNlbGwpO1xuK1x0aWYgKElTX0VSUihrZXkpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihrZXkpO1xuK1xuK1x0LyogR2V0IHRoZSBhY2Nlc3MgcmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi9cbitcdHJldCA9IGFmc19jaGVja19wZXJtaXQodm5vZGUsIGtleSwgXHUwMDI2YWNjZXNzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyb3I7XG4rXG4rXHQvKiBXZSBnZXQgdGhlIEFETUlOSVNURVIgYml0IGlmIHdlIG93biB0aGUgZmlsZS4gKi9cbitcdHJldCA9IChhY2Nlc3MgXHUwMDI2IEFGU19BQ0VfQURNSU5JU1RFUikgPyAwIDogMTtcbitlcnJvcjpcbitcdGtleV9wdXQoa2V5KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGEgZmlsZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVhbnNcbisgKiBmb3IgdGhlIGZpbGVzeXN0ZW0uICBJbiB0aGUgY2FzZSBvZiBBRlMsIHRoaXMgbWVhbnMgY29tcGFyaW5nIHRoZWlyIEFGU1xuKyAqIFVJRHMuICBSZXR1cm5zIDAgaWYgc2FtZSwgMSBpZiBub3Qgc2FtZTsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLlxuKyAqL1xuK2ludCBhZnNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlMilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTEgPSBBRlNfRlNfSShpbm9kZTEpO1xuK1x0Y29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUyID0gQUZTX0ZTX0koaW5vZGUyKTtcbitcbitcdHJldHVybiB2bm9kZTEtXHUwMDNlc3RhdHVzLm93bmVyICE9IHZub2RlMi1cdTAwM2VzdGF0dXMub3duZXI7XG4rfVxuK1xuIHZvaWQgX19leGl0IGFmc19jbGVhbl91cF9wZXJtaXRfY2FjaGUodm9pZClcbiB7XG4gXHRpbnQgaTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvc3ltbGluay5jIGIvZnMvYWZzL3N5bWxpbmsuY1xuaW5kZXggMTZiNDgyM2NiN2I3ZS4uZWQ4MzRiYTkwZTg1YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zeW1saW5rLmNcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcbkBAIC0yNzEsNiArMjcxLDggQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5nZXRfbGlua1x0PSBhZnNfZ2V0X2xpbmssXG4gXHQucmVhZGxpbmtcdD0gYWZzX3JlYWRsaW5rLFxuK1x0LmlzX293bmVkX2J5X21lXHQ9IGFmc19pc19vd25lZF9ieV9tZSxcbitcdC5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19hb3BzID0ge1xuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xuaW5kZXggNGY0MzdmYWJiN2YwZi4uYjdlOGI1ZDQ5YTlmZSAxMDA2NDRcbi0tLSBhL2ZzL2F0dHIuY1xuKysrIGIvZnMvYXR0ci5jXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gLyoqXG4gICogc2V0YXR0cl9zaG91bGRfZHJvcF9zZ2lkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNldGdpZCBiaXQgbmVlZHMgdG8gYmVcbkBAIC05MSwxOSArOTIsMjEgQEAgRVhQT1JUX1NZTUJPTChzZXRhdHRyX3Nob3VsZF9kcm9wX3N1aWRnaWQpO1xuICAqIHBlcm1pc3Npb25zLiBPbiBub24taWRtYXBwZWQgbW91bnRzIG9yIGlmIHBlcm1pc3Npb24gY2hlY2tpbmcgaXMgdG8gYmVcbiAgKiBwZXJmb3JtZWQgb24gdGhlIHJhdyBpbm9kZSBzaW1wbHkgcGFzcyBAbm9wX21udF9pZG1hcC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2ZnN1aWRfdCBpYV92ZnN1aWQpXG4rc3RhdGljIGludCBjaG93bl9vayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc3VpZF90IGlhX3Zmc3VpZClcbiB7XG4gXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2ZnN1aWRfZXEoaWFfdmZzdWlkLCB2ZnN1aWQpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKGNhcGFibGVfd3J0X2lub2RlX3VpZGdpZChpZG1hcCwgaW5vZGUsIENBUF9DSE9XTikpXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbiBcdGlmICghdmZzdWlkX3ZhbGlkKHZmc3VpZCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbnNfY2FwYWJsZShpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdXNlcl9ucywgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIC1FUEVSTTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE4LDIzICsxMjEsMjcgQEAgc3RhdGljIGJvb2wgY2hvd25fb2soc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICogcGVybWlzc2lvbnMuIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZVxuICAqIHBlcmZvcm1lZCBvbiB0aGUgcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLXN0YXRpYyBib29sIGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZmc2dpZF90IGlhX3Zmc2dpZClcbitzdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgdmZzZ2lkX3QgaWFfdmZzZ2lkKVxuIHtcbiBcdHZmc2dpZF90IHZmc2dpZCA9IGlfZ2lkX2ludG9fdmZzZ2lkKGlkbWFwLCBpbm9kZSk7XG4tXHR2ZnN1aWRfdCB2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXQgPT0gMCkge1xuIFx0XHRpZiAodmZzZ2lkX2VxKGlhX3Zmc2dpZCwgdmZzZ2lkKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbiBcdFx0aWYgKHZmc2dpZF9pbl9ncm91cF9wKGlhX3Zmc2dpZCkpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpZiAoY2FwYWJsZV93cnRfaW5vZGVfdWlkZ2lkKGlkbWFwLCBpbm9kZSwgQ0FQX0NIT1dOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKCF2ZnNnaWRfdmFsaWQodmZzZ2lkKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuc19jYXBhYmxlKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc191c2VyX25zLCBDQVBfQ0hPV04pKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdHJldHVybiBmYWxzZTtcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVQRVJNO1xuIH1cbiBcbiAvKipcbkBAIC0xNjMsNiArMTcwLDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHR1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLVx1MDAzZWlhX3ZhbGlkO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qXG4gXHQgKiBGaXJzdCBjaGVjayBzaXplIGNvbnN0cmFpbnRzLiAgVGhlc2UgY2FuJ3QgYmUgb3ZlcnJpZGRlbiB1c2luZ1xuQEAgLTE4OSwxNCArMTk3LDE4IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0Z290byBraWxsX3ByaXY7XG4gXG4gXHQvKiBNYWtlIHN1cmUgYSBjYWxsZXIgY2FuIGNob3duLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaG93bl9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzdWlkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9VSUQpIHtcbitcdFx0cmV0ID0gY2hvd25fb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc3VpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBjYWxsZXIgY2FuIGNoZ3JwLiAqL1xuLVx0aWYgKChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFjaGdycF9vayhpZG1hcCwgaW5vZGUsIGF0dHItXHUwMDNlaWFfdmZzZ2lkKSlcbi1cdFx0cmV0dXJuIC1FUEVSTTtcbitcdGlmIChpYV92YWxpZCBcdTAwMjYgQVRUUl9HSUQpIHtcbitcdFx0cmV0ID0gY2hncnBfb2soaWRtYXAsIGlub2RlLCBhdHRyLVx1MDAzZWlhX3Zmc2dpZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovXG4gXHRpZiAoaWFfdmFsaWQgXHUwMDI2IEFUVFJfTU9ERSkge1xuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBlNjhhNzZmZjkyYTM4Li4zZjMyZTczYWFlZGEyIDEwMDY0NFxuLS0tIGEvZnMvY29yZWR1bXAuY1xuKysrIGIvZnMvY29yZWR1bXAuY1xuQEAgLTk1NCw3ICs5NTQsNyBAQCBzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0ICogZmlsZXN5c3RlbS5cbiBcdCAqL1xuIFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcbi1cdGlmICghdmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSkge1xuK1x0aWYgKHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpICE9IDApIHtcbiBcdFx0Y29yZWR1bXBfcmVwb3J0X2ZhaWx1cmUoXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcIiwgY24tXHUwMDNlY29yZW5hbWUpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IDMxYzViOWVlM2E4MWQuLmE3ZWM4MzBhYjY4M2YgMTAwNjQ0XG4tLS0gYS9mcy9pbm9kZS5jXG4rKysgYi9mcy9pbm9kZS5jXG5AQCAtMjc1MCwxNiArMjc1MCwxOSBAQCBFWFBPUlRfU1lNQk9MKGlub2RlX2luaXRfb3duZXIpO1xuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqL1xuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbitib29sIGlub2RlX293bmVyX29yX2NhcGFibGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dmZzdWlkX3QgdmZzdWlkO1xuIFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpucztcbitcdGludCByZXQ7XG4gXG4tXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKHZmc3VpZCwgY3VycmVudF9mc3VpZCgpKSlcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCA9PSAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7XG4gXHRucyA9IGN1cnJlbnRfdXNlcl9ucygpO1xuIFx0aWYgKHZmc3VpZF9oYXNfbWFwcGluZyhucywgdmZzdWlkKSBcdTAwMjZcdTAwMjYgbnNfY2FwYWJsZShucywgQ0FQX0ZPV05FUikpXG4gXHRcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oXG5pbmRleCAzNTVkOTNmOTIyMDg2Li5iZTQ1Y2M2Mzg4NjE5IDEwMDY0NFxuLS0tIGEvZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvaW50ZXJuYWwuaFxuQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuIC8qXG4gICogbmFtZWkuY1xuICAqL1xuK2ludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgZmxhZ3MsXG4gXHRcdFx0ICAgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBwYXRoICpyb290KTtcbiBpbnQgZmlsZW5hbWVfcm1kaXIoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKTtcbmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuY1xuaW5kZXggNmU0ZmY3ZmNlYzA1My4uMDJmODEwZGM5ZTdlNyAxMDA2NDRcbi0tLSBhL2ZzL2xvY2tzLmNcbisrKyBiL2ZzL2xvY2tzLmNcbkBAIC02OCw2ICs2OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2ZpbGVsb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbisjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpmaWxlX2xvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG4ge1xuQEAgLTIxMzYsMTAgKzIxMzcsMTIgQEAgaW50XG4gdmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbi1cdHZmc3VpZF90IHZmc3VpZCA9IGlfdWlkX2ludG9fdmZzdWlkKGZpbGVfbW50X2lkbWFwKGZpbHApLCBpbm9kZSk7XG4gXHRpbnQgZXJyb3I7XG4gXG4tXHRpZiAoKCF2ZnN1aWRfZXFfa3VpZCh2ZnN1aWQsIGN1cnJlbnRfZnN1aWQoKSkpIFx1MDAyNlx1MDAyNiAhY2FwYWJsZShDQVBfTEVBU0UpKVxuK1x0ZXJyb3IgPSB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoZmlsZV9tbnRfaWRtYXAoZmlscCksIGlub2RlKTtcbitcdGlmIChlcnJvciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1x0aWYgKGVycm9yICE9IDAgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9MRUFTRSkpXG4gXHRcdHJldHVybiAtRUFDQ0VTO1xuIFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgYXJnKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMTljZTQzYzlhNmU2Ni4uNzJmOTRkMjA0ZjkzZiAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC01NSw4ICs1NSw4IEBAXG4gICogVGhlIG5ldyBjb2RlIHJlcGxhY2VzIHRoZSBvbGQgcmVjdXJzaXZlIHN5bWxpbmsgcmVzb2x1dGlvbiB3aXRoXG4gICogYW4gaXRlcmF0aXZlIG9uZSAoaW4gY2FzZSBvZiBub24tbmVzdGVkIHN5bWxpbmsgY2hhaW5zKS4gIEl0IGRvZXNcbiAgKiB0aGlzIHdpdGggY2FsbHMgdG8gXHUwMDNjZnNcdTAwM2VfZm9sbG93X2xpbmsoKS5cbi0gKiBBcyBhIHNpZGUgZWZmZWN0LCBkaXJfbmFtZWkoKSwgX25hbWVpKCkgYW5kIGZvbGxvd19saW5rKCkgYXJlIG5vdyBcbi0gKiByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGxvb2t1cF9kZW50cnkoKSB0aGF0IGNhbiBoYW5kbGUgYWxsIFxuKyAqIEFzIGEgc2lkZSBlZmZlY3QsIGRpcl9uYW1laSgpLCBfbmFtZWkoKSBhbmQgZm9sbG93X2xpbmsoKSBhcmUgbm93XG4rICogcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBsb29rdXBfZGVudHJ5KCkgdGhhdCBjYW4gaGFuZGxlIGFsbFxuICAqIHRoZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBmb3JtZXIgY29kZS5cbiAgKlxuICAqIFdpdGggdGhlIG5ldyBkY2FjaGUsIHRoZSBwYXRobmFtZSBpcyBzdG9yZWQgYXQgZWFjaCBpbm9kZSwgYXQgbGVhc3QgYXNcbkBAIC0xMjU1LDYgKzEyNTUsNzIgQEAgZnNfaW5pdGNhbGwoaW5pdF9mc19uYW1laV9zeXNjdGxzKTtcbiBcbiAjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xuIFxuKy8qXG4rICogRGV0ZXJtaW5lIGlmIGFuIGlub2RlIGlzIG93bmVkIGJ5IHRoZSBwcm9jZXNzIChhbGxvd2luZyBmb3IgZnN1aWQgb3ZlcnJpZGUpLFxuKyAqIHJldHVybmluZyAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW1cbisgKiBtYWtpbmcgdGhlIGRldGVybWluYXRpb24uXG4rICovXG4raW50IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRpZiAodW5saWtlbHkoaW5vZGUtXHUwMDNlaV9vcGZsYWdzIFx1MDAyNiBJT1BfT1dORVJTSElQX09WRVJSSURFKSlcbitcdFx0cmV0dXJuIGlub2RlLVx1MDAzZWlfb3AtXHUwMDNlaXNfb3duZWRfYnlfbWUoaWRtYXAsIGlub2RlKTtcbitcdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBjdXJyZW50X2ZzdWlkKCkpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAxOyAvKiBOb3Qgc2FtZS4gKi9cbit9XG4rXG4rLypcbisgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaGFzIHRoZSBzYW1lIG93bmVyIGFzIGl0cyBwYXJlbnQgZGlyZWN0b3J5LCByZXR1cm5pbmdcbisgKiAwIGlmIHNvLCAxIGlmIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gbWFraW5nXG4rICogdGhlIGRldGVybWluYXRpb24uXG4rICovXG4rc3RhdGljIGludCB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4re1xuK1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpIHtcbitcdFx0c3RydWN0IGRlbnRyeSAqcGFyZW50O1xuK1x0XHRzdHJ1Y3QgaW5vZGUgKmRpcjtcbitcdFx0aW50IHJldDtcbitcbitcdFx0aWYgKGlub2RlICE9IG5kLVx1MDAzZWlub2RlKSB7XG4rXHRcdFx0ZGlyID0gbmQtXHUwMDNlaW5vZGU7XG4rXHRcdFx0cmV0ID0gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0XHR9IGVsc2UgaWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSB7XG4rXHRcdFx0cGFyZW50ID0gUkVBRF9PTkNFKG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbitcdFx0XHRkaXIgPSBSRUFEX09OQ0UocGFyZW50LVx1MDAzZWRfaW5vZGUpO1xuK1x0XHRcdGlmICghZGlyKVxuK1x0XHRcdFx0cmV0dXJuIC1FQ0hJTEQ7XG4rXHRcdFx0cmV0ID0gaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VoYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBkaXIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmVudCA9IGRnZXRfcGFyZW50KG5kLVx1MDAzZXBhdGguZGVudHJ5KTtcbitcdFx0XHRkaXIgPSBwYXJlbnQtXHUwMDNlZF9pbm9kZTtcbitcdFx0XHRyZXQgPSBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRcdFx0ZHB1dChwYXJlbnQpO1xuK1x0XHR9XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVx1MDAzZWRpcl92ZnN1aWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHZmc3VpZF9lcShpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBuZC1cdTAwM2VkaXJfdmZzdWlkKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4rfVxuK1xuKy8qXG4rICogRGV0ZXJtaW5lIGlmIHR3byBpbm9kZXMgaGF2ZSB0aGUgc2FtZSBvd25lciwgcmV0dXJuaW5nIDAgaWYgc28sIDEgaWYgbm90IGFuZFxuKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIG1ha2luZyB0aGUgZGV0ZXJtaW5hdGlvbi5cbisgKi9cbitzdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIpXG4re1xuK1x0aWYgKHVubGlrZWx5KGlub2RlLVx1MDAzZWlfb3BmbGFncyBcdTAwMjYgSU9QX09XTkVSU0hJUF9PVkVSUklERSkpXG4rXHRcdHJldHVybiBpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWhhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIGRpcik7XG4rXHRpZiAodmZzdWlkX2VxKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSksXG4rXHRcdCAgICAgIGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gMTsgLyogTm90IHNhbWUuICovXG4rfVxuK1xuIC8qKlxuICAqIG1heV9mb2xsb3dfbGluayAtIENoZWNrIHN5bWxpbmsgZm9sbG93aW5nIGZvciB1bnNhZmUgc2l0dWF0aW9uc1xuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbkBAIC0xMjcxLDI3ICsxMzM3LDI4IEBAIGZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgZm9sbG93aW5nIHRoZSBzeW1saW5rIGlzIGFsbG93ZWQsIC12ZSBvbiBlcnJvci5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgbWF5X2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuLVx0dmZzdWlkX3QgdmZzdWlkO1xuK1x0aW50IHJldDtcbiBcbiBcdGlmICghc3lzY3RsX3Byb3RlY3RlZF9zeW1saW5rcylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG4tXHR2ZnN1aWQgPSBpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpO1xuLVx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXG4tXHRpZiAodmZzdWlkX2VxX2t1aWQodmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdC8qIEFsbG93ZWQgaWYgcGFyZW50IGRpcmVjdG9yeSBub3Qgc3RpY2t5IGFuZCB3b3JsZC13cml0YWJsZS4gKi9cbiBcdGlmICgobmQtXHUwMDNlZGlyX21vZGUgXHUwMDI2IChTX0lTVlRYfFNfSVdPVEgpKSAhPSAoU19JU1ZUWHxTX0lXT1RIKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZG1hcCA9IG1udF9pZG1hcChuZC1cdTAwM2VwYXRoLm1udCk7XG4rXHQvKiBBbGxvd2VkIGlmIG93bmVyIGFuZCBmb2xsb3dlciBtYXRjaC4gKi9cbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHQvKiBBbGxvd2VkIGlmIHBhcmVudCBkaXJlY3RvcnkgYW5kIGxpbmsgb3duZXIgbWF0Y2guICovXG4tXHRpZiAodmZzdWlkX3ZhbGlkKG5kLVx1MDAzZWRpcl92ZnN1aWQpIFx1MDAyNlx1MDAyNiB2ZnN1aWRfZXEobmQtXHUwMDNlZGlyX3Zmc3VpZCwgdmZzdWlkKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRyZXQgPSB2ZnNfaW5vZGVfYW5kX2Rpcl9oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBuZCk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmIChuZC1cdTAwM2VmbGFncyBcdTAwMjYgTE9PS1VQX1JDVSlcbiBcdFx0cmV0dXJuIC1FQ0hJTEQ7XG5AQCAtMTM4OSwxMiArMTQ1NiwxMiBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxuICAqXG4gICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XG4tICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuLSAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuLSAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICogICAtIHdlIGRvbid0IG93biB0aGUgZmlsZVxuKyAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWQsXG4rICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLFxuKyAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5LFxuKyAqICAgLSB0aGUgZGlyZWN0b3J5IGlzIHdvcmxkIHdyaXRhYmxlLFxuKyAqICAgLSB3ZSBkb24ndCBvd24gdGhlIGZpbGUgYW5kXG4gICogICAtIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3Qgb3duIHRoZSBmaWxlXG4tICogICAtIHRoZSBkaXJlY3RvcnkgaXMgd29ybGQgd3JpdGFibGVcbiAgKiBJZiB0aGUgc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBzZXQgdG8gMlxuICAqIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBoYXZlIHRvIGJlIHdvcmxkIHdyaXRhYmxlOiBiZWluZyBncm91cCB3cml0YWJsZSB3aWxsXG4gICogYmUgZW5vdWdoLlxuQEAgLTE0MDUsMTMgKzE0NzIsNDUgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuICAqIE9uIG5vbi1pZG1hcHBlZCBtb3VudHMgb3IgaWYgcGVybWlzc2lvbiBjaGVja2luZyBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlXG4gICogcmF3IGlub2RlIHNpbXBseSBwYXNzIEBub3BfbW50X2lkbWFwLlxuICAqXG4rICogRm9yIGEgZmlsZXN5c3RlbSAoZS5nLiBhIG5ldHdvcmsgZmlsZXN5c3RlbSkgdGhhdCBoYXMgYSBzZXBhcmF0ZSBJRCBzcGFjZVxuKyAqIGFuZCBoYXMgZm9yZWlnbiBJRHMgKG1heWJlIGV2ZW4gbm9uLWludGVnZXIgSURzKSwgaV91aWQgY2Fubm90IGJlIGNvbXBhcmVkXG4rICogdG8gY3VycmVudF9mc3VpZCgpIGFuZCBtYXkgbm90IGJlIGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gYW5vdGhlciBpX3VpZC5cbisgKiBJbnN0ZWFkLCB0aGUgZmlsZXN5c3RlbSBpcyBhc2tlZCB0byBwZXJmb3JtIHRoZSBjb21wYXJpc29ucy4gIFdpdGggbmV0d29ya1xuKyAqIGZpbGVzeXN0ZW1zLCB0aGVyZSBhbHNvIGV4aXN0cyB0aGUgcG9zc2liaWxpdHkgb2YgZG9pbmcgYW5vbnltb3VzXG4rICogb3BlcmF0aW9ucyBhbmQgaGF2aW5nIGFub255bW91c2x5LW93bmVkIG9iamVjdHMuXG4rICpcbisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuKyAqXG4rICpcdFVTRVJcdERJUlx0RklMRVx0RklMRVx0QUxMT1dFRFxuKyAqXHRcdE9XTkVSXHRPV05FUlx0U1RBVEVcbisgKlx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVx0PT09PT09PVxuKyAqXHRBXHRBXHQtXHROZXdcdFllc1xuKyAqXHRBXHRBXHRBXHRFeGlzdHNcdFllc1xuKyAqXHRBXHRBXHRDXHRFeGlzdHNcdE5vXG4rICpcdEFcdEJcdC1cdE5ld1x0WWVzXG4rICpcdEFcdEJcdEFcdEV4aXN0c1x0WWVzLCBGTz09VVxuKyAqXHRBXHRCXHRCXHRFeGlzdHNcdFllcywgRk89PURPXG4rICpcdEFcdEJcdENcdEV4aXN0c1x0Tm9cbisgKlx0QVx0YW5vblsxXVx0LVx0TmV3XHRZZXNcbisgKlx0QVx0YW5vblsxXVx0QVx0RXhpc3RzXHRZZXNcbisgKlx0QVx0YW5vblsxXVx0Q1x0RXhpc3RzXHROb1xuKyAqXHRhbm9uXHRBXHQtXHROZXdcdFllc1xuKyAqXHRhbm9uXHRBXHRBXHRFeGlzdHNcdFllcywgRk89PURPXG4rICpcdGFub25cdGFub25bMV1cdC1cdE5ld1x0WWVzXG4rICpcdGFub25cdGFub25bMV1cdC1cdEV4aXN0c1x0Tm9cbisgKlx0YW5vblx0QVx0QVx0RXhpc3RzXHRZZXMsIEZPPT1ET1xuKyAqXHRhbm9uXHRBXHRDXHRFeGlzdHNcdE5vXG4rICpcdGFub25cdEFcdGFub25cdEV4aXN0c1x0Tm9cbisgKlxuKyAqIFsxXSBDYW4gYW5vbnltb3VzbHktb3duZWQgZGlycyBiZSBzdGlja3k/XG4rICpcbiAgKiBSZXR1cm5zIDAgaWYgdGhlIG9wZW4gaXMgYWxsb3dlZCwgLXZlIG9uIGVycm9yLlxuICAqL1xuIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuLVx0XHRcdFx0c3RydWN0IGlub2RlICpjb25zdCBpbm9kZSlcbitcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0dW1vZGVfdCBkaXJfbW9kZSA9IG5kLVx1MDAzZWRpcl9tb2RlO1xuLVx0dmZzdWlkX3QgZGlyX3Zmc3VpZCA9IG5kLVx1MDAzZWRpcl92ZnN1aWQsIGlfdmZzdWlkO1xuK1x0aW50IHJldDtcbiBcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xNDIyLDEzICsxNTIxLDEzIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlfdmZzdWlkID0gaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKTtcbi1cbi1cdGlmICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcihpZG1hcCwgaW5vZGUsIG5kKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdmZzdWlkLCBjdXJyZW50X2ZzdWlkKCkpKVxuLVx0XHRyZXR1cm4gMDtcbitcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRpZiAobGlrZWx5KGRpcl9tb2RlIFx1MDAyNiAwMDAyKSkge1xuIFx0XHRhdWRpdF9sb2dfcGF0aF9kZW5pZWQoQVVESVRfQU5PTV9DUkVBVCwgXCJzdGlja3lfY3JlYXRlXCIpO1xuQEAgLTM2NDUsMTIgKzM3NDQsMTQgQEAgRVhQT1JUX1NZTUJPTCh1c2VyX3BhdGhfYXQpO1xuIGludCBfX2NoZWNrX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuLVx0a3VpZF90IGZzdWlkID0gY3VycmVudF9mc3VpZCgpO1xuK1x0aW50IHJldDtcbiBcbi1cdGlmICh2ZnN1aWRfZXFfa3VpZChpX3VpZF9pbnRvX3Zmc3VpZChpZG1hcCwgaW5vZGUpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKHZmc3VpZF9lcV9rdWlkKGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBkaXIpLCBmc3VpZCkpXG4tXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKGlkbWFwLCBpbm9kZSwgZGlyKTtcbitcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0cmV0dXJuICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoaWRtYXAsIGlub2RlLCBDQVBfRk9XTkVSKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX2NoZWNrX3N0aWNreSk7XG5kaWZmIC0tZ2l0IGEvZnMvcmVtYXBfcmFuZ2UuYyBiL2ZzL3JlbWFwX3JhbmdlLmNcbmluZGV4IDI2YWZiYmJmYjEwYzIuLjllZWU5M2MyNzAwMTIgMTAwNjQ0XG4tLS0gYS9mcy9yZW1hcF9yYW5nZS5jXG4rKysgYi9mcy9yZW1hcF9yYW5nZS5jXG5AQCAtNDEzLDIwICs0MTMsMjIgQEAgbG9mZl90IHZmc19jbG9uZV9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuIEVYUE9SVF9TWU1CT0wodmZzX2Nsb25lX2ZpbGVfcmFuZ2UpO1xuIFxuIC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFsbG93ZWQgdG8gZGVkdXBlIHRoZSBkZXN0aW5hdGlvbiBmaWxlICovXG4tc3RhdGljIGJvb2wgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAodmZzdWlkX2VxX2t1aWQoaV91aWRfaW50b192ZnN1aWQoaWRtYXAsIGlub2RlKSwgY3VycmVudF9mc3VpZCgpKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAwO1xuK1x0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XG4rXHRpZiAocmV0IFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIHJldDtcbiBcdGlmICghaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpXG4tXHRcdHJldHVybiB0cnVlO1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRVBFUk07XG4gfVxuIFxuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG5AQCAtNDU5LDggKzQ2MSw4IEBAIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVQRVJNO1xuLVx0aWYgKCFtYXlfZGVkdXBlX2ZpbGUoZHN0X2ZpbGUpKVxuK1x0cmV0ID0gbWF5X2RlZHVwZV9maWxlKGRzdF9maWxlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X2Ryb3Bfd3JpdGU7XG4gXG4gXHRyZXQgPSAtRVhERVY7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA1MGNlNzMxYTJiNzhmLi44MDEzYzEzYTM1M2Q2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC02MjgsNiArNjI4LDcgQEAgaXNfdW5jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKmFjbClcbiAjZGVmaW5lIElPUF9DQUNIRURfTElOS1x0XHQweDAwNDBcbiAjZGVmaW5lIElPUF9GQVNUUEVSTV9NQVlfRVhFQ1x0MHgwMDgwXG4gI2RlZmluZSBJT1BfRkxDVFhcdFx0MHgwMTAwXG4rI2RlZmluZSBJT1BfT1dORVJTSElQX09WRVJSSURFXHQweDAyMDBcdC8qIFVzZSAtXHUwMDNlaXNfb3duZWRfYnlfbWUoKSBhbmQgLVx1MDAzZWhhdmVfc2FtZV9vd25lcigpICovXG4gXG4gLypcbiAgKiBJbm9kZSBzdGF0ZSBiaXRzLiAgUHJvdGVjdGVkIGJ5IGlub2RlLVx1MDAzZWlfbG9ja1xuQEAgLTE3NTUsOCArMTc1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3dyaXRlX25vdF9zdGFydGVkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHNiX3dyaXRlX25vdF9zdGFydGVkKGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYik7XG4gfVxuIFxuLWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7XG4rYm9vbCBpbm9kZV9vd25lcl9vcl9jYXBhYmxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKlxuICAqIFZGUyBoZWxwZXIgZnVuY3Rpb25zLi5cbkBAIC0yMDM2LDYgKzIwMzYsOSBAQCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XG4gXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcdGludCAoKmZpbGVhdHRyX2dldCkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFx0c3RydWN0IG9mZnNldF9jdHggKigqZ2V0X29mZnNldF9jdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuK1x0aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcdGludCAoKmhhdmVfc2FtZV9vd25lcikoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlMik7XG4gfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7XG4gXG4gLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjA4LjgwNjY2ODE5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0Nzk0OTg2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBJbm9kZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB0aGUgVkZTIGxheWVyIGhhbmRsZXMgZmlsZSBvd25lcnNoaXAsIHNwZWNpZmljYWxseSBmb3IgZmlsZXN5c3RlbXMgbGlrZSBBRlMgdGhhdCB1c2UgdG9rZW5zIGluc3RlYWQgb2YgdGhlIHRyYWRpdGlvbmFsIFVJRC9HSUQgbW9kZWwuIFdlJ3ZlIGdvdCB0d28gbmV3IGBpbm9kZV9vcGVyYXRpb25zYDogYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBvdmVycmlkZSB0aGUgc3RhbmRhcmQgb3duZXJzaGlwIGNoZWNrcyB3aXRoaW4gdGhlIFZGUywgd2hpY2ggaXMga2V5IGZvciBBRlMuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZXNlIGluIEFGUyBhcyBgYWZzX2lzX293bmVkX2J5X21lYCBhbmQgYGFmc19oYXZlX3NhbWVfb3duZXJgLlxuXG5UaGUgYmlnIHBpY3R1cmUgaGVyZSBpcyB0aGF0IGEgd2hvbGUgc2xldyBvZiBWRlMgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCB0byB1c2UgdGhlc2UgbmV3IGhlbHBlcnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGFuZCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCBhbmQgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYC4gSXQncyB0b3VjaGluZyBjb3JlIG9wZXJhdGlvbnMgbGlrZSBgY2hvd25gLCBgY2hncnBgLCBgY29yZWR1bXBgLCBsZWFzZSBtYW5hZ2VtZW50LCBzeW1saW5rIGZvbGxvd2luZywgc3RpY2t5IGJpdCBjaGVja3MsIGFuZCBldmVuIGZpbGUgZGVkdXBsaWNhdGlvbiEgVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIGZpbGUgc3lzdGVtIGJlaGF2aW9yIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIG5vdyBpcyBwaW5wb2ludGluZyB0aGUgbW9zdCB2dWxuZXJhYmxlIGFyZWFzIGZvciBmdXp6aW5nLiBXZSBoYXZlIHRocmVlIG5ld2x5IGludHJvZHVjZWQgVkZTIGhlbHBlcnM6IGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgdmZzX2lub2RlX2FuZF9kaXJfaGF2ZV9zYW1lX293bmVyYCBhbmQgYHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyYC4gT24gdGhlIEFGUyBzaWRlLCB3ZSd2ZSBnb3QgYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZpcnN0LlxuXG5CZXlvbmQgdGhhdCwgdGhlIHBhdGNoZWQgVkZTIGZ1bmN0aW9ucyBhcmUgd2hlcmUgdGhlIHJlYWwgZnVuIGxpZXM6IGBzZXRhdHRyX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgY2hvd25fb2tgIGFuZCBgY2hncnBfb2tgLCBgY29yZWR1bXBfZmlsZWAgKG5vdCBhIHByaW1hcnkgZnV6emluZyB0YXJnZXQgZGlyZWN0bHksIGJ1dCBpdCBwcm92aWRlcyBhIHBhdGh3YXkpLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBhbmQgYG1heV9mb2xsb3dfbGlua2AsIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIGFuZCBgX19jaGVja19zdGlja3lgLiBUaGUgZGVkdXBlIGltcGxlbWVudGF0aW9uIHZpYSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWAgKHdoaWNoIGNhbGxzIGBtYXlfZGVkdXBlX2ZpbGVgKSBhbHNvIG5lZWRzIGEgbG9vay4gYG1heV9mb2xsb3dfbGlua2AgYW5kIGBtYXlfY3JlYXRlX2luX3N0aWNreWAgYXJlIG1hcmtlZCBhcyBzdGF0aWMgZnVuY3Rpb25zIHNvIG15IHRlYW0gd2lsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2hlbmFuaWdhbnMgaGVyZSwgc28gSSdsbCBjaGVjayBmb3IgYW55IG5lY2Vzc2FyeSBgQ09ORklHYCBvcHRpb25zLiBBRlMgbG9va3MgbGlrZSBpdCdzIGdhdGVkIGJ5IGBDT05GSUdfQUZTX0ZTYCwgYnV0IHRoZSBWRlMgY2hhbmdlcyBhcmUgYWx3YXlzIGVuYWJsZWQuXG5cbkZpbmFsbHksIEknbGwgZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBmb3IgYGFmc19pc19vd25lZF9ieV9tZWAgYW5kIGBhZnNfaGF2ZV9zYW1lX293bmVyYCBqdXN0IHRvIGJlIGRvdWJseSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIGluIHRoZSBjb2RlYmFzZS4gVGhlbiBpdCdzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSBmdXp6aW5nIGhhcm5lc3Nlcy4gVGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OToxOC4yODYxNjkyMzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1OTI4OTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfaXNfb3duZWRfYnlfbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpci5jPTYwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Fmcy9kaXIuYy03MS1cXHQuc2V0YXR0clxcdD0gYWZzX3NldGF0dHIsXFxuZnMvYWZzL2Rpci5jOjcyOlxcdC5pc19vd25lZF9ieV9tZVxcdD0gYWZzX2lzX293bmVkX2J5X21lLFxcbmZzL2Fmcy9kaXIuYy03My1cXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4tLVxcbmZzL2Fmcy9maWxlLmM9NDg9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Fmcy9maWxlLmMtNTEtXFx0LnBlcm1pc3Npb25cXHQ9IGFmc19wZXJtaXNzaW9uLFxcbmZzL2Fmcy9maWxlLmM6NTI6XFx0LmlzX293bmVkX2J5X21lXFx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXFxuZnMvYWZzL2ZpbGUuYy01My1cXHQuaGF2ZV9zYW1lX293bmVyID0gYWZzX2hhdmVfc2FtZV9vd25lcixcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTE1MzM9ZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1MzQ6aW50IGFmc19pc19vd25lZF9ieV9tZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvYWZzL2ludGVybmFsLmgtMTUzNS1pbnQgYWZzX2hhdmVfc2FtZV9vd25lcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZTEsXFxuLS1cXG5mcy9hZnMvc2VjdXJpdHkuYz00MzE9aW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvYWZzL3NlY3VyaXR5LmMtNTE4LSAqL1xcbmZzL2Fmcy9zZWN1cml0eS5jOjUxOTppbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2Fmcy9zZWN1cml0eS5jLTUyMC17XFxuLS1cXG5mcy9hZnMvc3ltbGluay5jPTI3MT1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYy0yNzMtXFx0LnJlYWRsaW5rXFx0PSBhZnNfcmVhZGxpbmssXFxuZnMvYWZzL3N5bWxpbmsuYzoyNzQ6XFx0LmlzX293bmVkX2J5X21lXFx0PSBhZnNfaXNfb3duZWRfYnlfbWUsXFxuZnMvYWZzL3N5bWxpbmsuYy0yNzUtXFx0LmhhdmVfc2FtZV9vd25lciA9IGFmc19oYXZlX3NhbWVfb3duZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjIwLjk0NTQ2NDQ0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzk1ODU0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZpbGUgT3duZXJzaGlwIGFuZCBBY2Nlc3MgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGZ1bmN0aW9ucy4gSSBzZWUgYSBmb2N1c2VkIHNldCBoZXJlIHJlbGF0ZWQgdG8gZmlsZSBvd25lcnNoaXAgYW5kIGFjY2VzcyBjb250cm9sLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgdmlydHVhbCBmaWxlc3lzdGVtIGFuZCBBRlMgY29udGV4dC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYXJvdW5kIHZlcmlmeWluZyBwZXJtaXNzaW9ucywgc2V0dGluZyBhdHRyaWJ1dGVzLCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgZmlsZSBsZWFzZXMgb3IgZGVkdXBsaWNhdGlvbi4gSSdtIG5vdGluZyB0aGUgZnVuY3Rpb25zIGNhcmVmdWxseTogYGFmc19pc19vd25lZF9ieV9tZWAsIGBhZnNfaGF2ZV9zYW1lX293bmVyYCwgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAsIGBzZXRhdHRyX3ByZXBhcmVgLCBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWAsIGB2ZnNfc2V0bGVhc2VgLCBgX19jaGVja19zdGlja3lgLCBhbmQgYHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb25zIHN1Z2dlc3QgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIEFGUy1zcGVjaWZpYyBsb2dpYyBhbmQgbW9yZSBnZW5lcmFsIFZGUyBmdW5jdGlvbnMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGhhcyBhIG1vcmUgY29tcGxleCBmaWxlLW93bmVyc2hpcCBtYW5hZ2VtZW50IHN5c3RlbSB0aGFuIGEgYmFzaWMgc3lzdGVtLlxuXG5UaGUgcHJlc2VuY2Ugb2YgYGFmc18qYCBmdW5jdGlvbnMgaXMgdGhlIGtleSB0aGluZyBJIGFtIHNlZWluZyBoZXJlLiBJIHdpbGwgbG9vayB0byBzZWUgaWYgQUZTX0ZTIGlzIHRoZSBvbmx5IGNvbmZpZyBwcmVzZW50IGJlY2F1c2UgdGhhdCBzdWdnZXN0cyB0aGF0IHRoaXMgY29kZSBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGZpbGUgc3lzdGVtIHdpdGggYSBudW1iZXIgb2YgZGlmZmVyZW50IGZpbGUgc3lzdGVtcyB0aGF0IGhhdmUgZGlmZmVyaW5nIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MjUuMjI1MDU0MDE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDQwNDQ0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MjcuNTY5MTExMDczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzk3ODQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrIGZvciBBRlNfRlMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIGBBRlNfRlNgIGZpbGVzeXN0ZW0gZmVhdHVyZSBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gY2hlY2sgaXMgYGZzL2Fmcy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMgb3IgbW9kdWxlcy4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIG9yIGRlZmluZWQgYmVmb3JlIGBBRlNfRlNgIGNhbiBiZSBwcm9wZXJseSBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjMwLjgwMzA5MTc1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQUZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBBRl9SWFJQQ1xcbiAgIDY6XFx0XFx0c2VsZWN0IEROU19SRVNPTFZFUlxcbiAgIDc6XFx0XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IGFuIGV4cGVyaW1lbnRhbCBBbmRyZXcgRmlsZSBTeXN0ZW1cXG4gIDExOlxcdFxcdCAgZHJpdmVyLiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1bnNlY3VyZWQgcmVhZC1vbmx5IEFGUyBhY2Nlc3MuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFGU19ERUJVR1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiQUZTIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBBRlNfRlNcXG4gIDIwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MzAuODAzMTQ5MTA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1MTgzMDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEFGU19GU2AgY29uZmlndXJhdGlvbiwgYW5kIGl0J3MgY29udGluZ2VudCBvbiBgSU5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGF0IGEgaGlnaCBsZXZlbC4gTm93LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBoZXJlLiBMZXQncyBzZWUuLi4gd2UndmUgZ290IGEgbWl4IG9mIHRoaW5ncyByZWxhdGVkIHRvIG93bmVyc2hpcCBjaGVja3Mgd2l0aGluIHRoZSBBRlMgZmlsZSBzeXN0ZW0gLSBgYWZzX2lzX293bmVkX2J5X21lYCwgYGFmc19oYXZlX3NhbWVfb3duZXJgLCBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYXMgd2VsbCBhcyBtb3JlIGdlbmVyYWwgVkZTIGZ1bmN0aW9uYWxpdHkgbGlrZSBgc2V0YXR0cl9wcmVwYXJlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiBBRlMsIHdoaWNoIG9mdGVuIGludm9sdmVzIGRpc3RyaWJ1dGVkIG93bmVyc2hpcCBhbmQgcG90ZW50aWFsbHkgbW9yZSBjb21wbGV4IGFjY2VzcyBjb250cm9sLCB0aGVzZSBzZWVtIGxpa2UgcmVsZXZhbnQgcGllY2VzLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBvd25lcnNoaXAgaXMgbWFuYWdlZCwgYW5kIGl0IHNlZW1zIHRoaXMgaXMgaG93IHRoZSBzeXN0ZW0gY2hlY2tzIHRoaXMuIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgIGlzIHRoZSBvbmUgdGhhdCByZWFsbHkgc3RpY2tzIG91dC5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3MganVzdCBtYWtlIHN1cmUgYHZmc19pbm9kZV9pc19vd25lZF9ieV9tZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2ssIGJ1dCBpbXBvcnRhbnQgdG8gY29uZmlybSB0aGF0IGl0J3MgYWNjZXNzaWJsZSB3aGVyZSBJIG5lZWQgaXQuIEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGtlcm5lbCdzIHN5bWJvbCB0YWJsZSB0byB2ZXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MzcuMTU0OTgyNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDIzMDIxNDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6MzkuODk3Mjk2MjI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTM5NDc5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipEZWVwIERpdmUgaW50byBLZXJuZWwgT3duZXJzaGlwIENoZWNrcyoqXG5cbkFscmlnaHQsIHNvIEknbSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3duZXJzaGlwLCBidXQgaXQncyBub3QgYSBzdHJhaWdodGZvcndhcmQgZXhwb3J0ZWQgZnVuY3Rpb24gb3IgYSBzaW1wbGUgc3RhdGljIHZhbHVlLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIG1lYW5pbmcgSSBwcm9iYWJseSBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUga2VybmVsJ3MgaW50ZXJuYWxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSByZWxhdGVkIGNvZGUgbGl2ZXMgaW4gYGZzL25hbWVpLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGtlcm5lbCBkZXRlcm1pbmVzIGlmIGFuIGlub2RlIGlzIFwib3duZWRcIiBieSB0aGUgY3VycmVudCBwcm9jZXNzLCBmb3Igd2hhdGV2ZXIgcmVhc29uLlxuXG5UaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvbmFtZWkuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciBhIGZ1bmN0aW9uIOKAkyBJJ20gYmV0dGluZyBpdCdzIGFwdGx5IG5hbWVkIOKAkyBsaWtlIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGNoZWNrIEknbSBpbnRlcmVzdGVkIGluLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MDAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OTo0My41OTEyNDY4MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODUzNTQ0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2F0dHIuYz05NT1zdGF0aWMgaW50IGNob3duX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEwMC1cXG5mcy9hdHRyLmM6MTAxOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMDItXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZnMvYXR0ci5jPTEyND1zdGF0aWMgaW50IGNoZ3JwX29rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvYXR0ci5jLTEyOS1cXG5mcy9hdHRyLmM6MTMwOlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL2F0dHIuYy0xMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05NTYtXFx0aWRtYXAgPSBmaWxlX21udF9pZG1hcChmaWxlKTtcXG5mcy9jb3JlZHVtcC5jOjk1NzpcXHRpZiAodmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSkgIT0gMCkge1xcbmZzL2NvcmVkdW1wLmMtOTU4LVxcdFxcdGNvcmVkdW1wX3JlcG9ydF9mYWlsdXJlKFxcXCJDb3JlIGR1bXAgdG8gJXMgYWJvcnRlZDogY2Fubm90IHByZXNlcnZlIGZpbGUgb3duZXJcXFwiLCBjbi1cXHUwMDNlY29yZW5hbWUpO1xcbi0tXFxuZnMvaW5vZGUuYz0yNzUzPWJvb2wgaW5vZGVfb3duZXJfb3JfY2FwYWJsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtMjc1OC1cXG5mcy9pbm9kZS5jOjI3NTk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvaW5vZGUuYy0yNzYwLVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbmZzL2ludGVybmFsLmg9NDk9ZXh0ZXJuIGludCBmaW5pc2hfY2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC01My0gKi9cXG5mcy9pbnRlcm5hbC5oOjU0OmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2ludGVybmFsLmgtNTUtZXh0ZXJuIGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25lZCBmbGFncyxcXG4tLVxcbmZzL2xvY2tzLmM9MjEzNz12ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbi0tXFxuZnMvbG9ja3MuYy0yMTQxLVxcbmZzL2xvY2tzLmM6MjE0MjpcXHRlcnJvciA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShmaWxlX21udF9pZG1hcChmaWxwKSwgaW5vZGUpO1xcbmZzL2xvY2tzLmMtMjE0My1cXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz0xMjU0PWZzX2luaXRjYWxsKGluaXRfZnNfbmFtZWlfc3lzY3Rscyk7XFxuLS1cXG5mcy9uYW1laS5jLTEyNjItICovXFxuZnMvbmFtZWkuYzoxMjYzOmludCB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMjY0LXtcXG4tLVxcbmZzL25hbWVpLmM9MTM0MD1zdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9uYW1laS5jLTEzNTMtXFx0LyogQWxsb3dlZCBpZiBvd25lciBhbmQgZm9sbG93ZXIgbWF0Y2guICovXFxuZnMvbmFtZWkuYzoxMzU0OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTM1NS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTE1MDk9c3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTE1MjctXFxuZnMvbmFtZWkuYzoxNTI4OlxcdHJldCA9IHZmc19pbm9kZV9pc19vd25lZF9ieV9tZShpZG1hcCwgaW5vZGUpO1xcbmZzL25hbWVpLmMtMTUyOS1cXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5mcy9uYW1laS5jPTM3NDQ9aW50IF9fY2hlY2tfc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL25hbWVpLmMtMzc0OC1cXG5mcy9uYW1laS5jOjM3NDk6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0zNzUwLVxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4tLVxcbmZzL3JlbWFwX3JhbmdlLmM9NDE2PXN0YXRpYyBpbnQgbWF5X2RlZHVwZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcmVtYXBfcmFuZ2UuYy00MjUtXFx0XFx0cmV0dXJuIDA7XFxuZnMvcmVtYXBfcmFuZ2UuYzo0MjY6XFx0cmV0ID0gdmZzX2lub2RlX2lzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7XFxuZnMvcmVtYXBfcmFuZ2UuYy00MjctXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo0OTo0NS43NzY2MDczMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTkzMTg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmlsZSBPd25lcnNoaXAgYW5kIEFjY2VzcyBDb250cm9sIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBzZXQgb2YgZnVuY3Rpb25zLiBJJ20gc2VlaW5nIGEgY29yZSBncm91cCBoZXJlIHRoYXQgZGVhbHMgd2l0aCBjaGVja2luZyBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zIOKAkyBmdW5jdGlvbnMgbGlrZSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYCwgYGFmc19pc19vd25lZF9ieV9tZWAsIGFuZCBgYWZzX2hhdmVfc2FtZV9vd25lcmAuIFRoZXNlIGFyZSB0aGUgYmFzaWNzLCBJIGV4cGVjdC4gV2UndmUgYWxzbyBnb3QgYHNldGF0dHJfcHJlcGFyZWAsIHdoaWNoIGxpa2VseSBoYW5kbGVzIHByZXBhcmluZyBhdHRyaWJ1dGUgY2hhbmdlcywgYW5kIGBpbm9kZV9vd25lcl9vcl9jYXBhYmxlYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IGl0IHNvdW5kcyBsaWtlIOKAkyBjaGVja2luZyBvd25lcnNoaXAgb3IgY2FwYWJpbGl0eS4gVGhlbiB3ZSBoYXZlIHNvbWUgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbnMgc3VjaCBhcyBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYCB0aGF0IEkgbmVlZCB0byBwbGFjZSBpbnRvIHRoZSBsYXJnZXIgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcCBvZiBzb21lIG90aGVyLCByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXNlIG1pZ2h0IGZpdC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYHZmc19pbm9kZV9hbmRfZGlyX2hhdmVfc2FtZV9vd25lcmAgYW5kIGB2ZnNfaW5vZGVzX2hhdmVfc2FtZV9vd25lcmAgYW5kIGhvdyB0aGV5J3JlIHVzZWQuIEFoYSwgdGhleSdyZSBzdGF0aWMgaW4gYGZzL25hbWVpLmNgLiBHb29kIHRvIGtub3csIHRoYXQgcGxhY2VzIHRoZW0gd2l0aGluIHRoZSBWRlMgbmFtZXNwYWNlLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIEkgYnVpbGQgdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5JIHdhcyBhbHNvIHRoaW5raW5nIG9mIGluY2x1ZGluZyBgbWF5X2NyZWF0ZV9pbl9zdGlja3lgIGFuZCBgbWF5X2ZvbGxvd19saW5rYCBpbiBteSBhbmFseXNpcywgYnV0IHNpbmNlIHRoZXkgYXJlIGFsc28gc3RhdGljIGZ1bmN0aW9ucywgdGhhdCBtaWdodCBub3QgYmUgYXMgaW1wb3J0YW50LCBidXQgZ29vZCB0byBrZWVwIGluIG1pbmQuIFdhaXQsIGlzIGBtYXlfbGlua2F0YCBjYWxsaW5nIGBtYXlfZm9sbG93X2xpbmtgPyBObywgbm8sIGBtYXlfZm9sbG93X2xpbmtgIGlzIGNhbGxlZCBmcm9tIGBmb2xsb3dfbGlua2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga2VlcCB0aGUgY29udGV4dCBzdHJhaWdodCBoZXJlLiBHaXZlbiB0aGUgdXNlIG9mIGBtYXlfZm9sbG93X2xpbmtgLCBJIHdpbGwgbm93IG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMDYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTg6NDk6NTEuMzM4NTQyNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg1ODgwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF5X2ZvbGxvd19saW5rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAucnN0PTExMzA9Y29tcG9uZW50IG9mIHRoZSBsb29rdXAsIHNvIHdlIHdpbGwgY2hlY2sgdXNlcnNwYWNlIGZsYWcgYGBMT09LVVBfRk9MTE9XYGAgdG9cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdDoxMTMxOmRlY2lkZSB3aGV0aGVyIGZvbGxvdyBpdCB3aGVuIGl0IGlzIGEgc3ltbGluayBhbmQgY2FsbCBgYG1heV9mb2xsb3dfbGluaygpYGAgdG9cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnJzdC0xMTMyLWNoZWNrIGlmIHdlIGhhdmUgcHJpdmlsZWdlIHRvIGZvbGxvdyBpdC5cXG4tLVxcbmZzL25hbWVpLmM9MTMxMz1zdGF0aWMgaW50IHZmc19pbm9kZXNfaGF2ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvbmFtZWkuYy0xMzI0LS8qKlxcbmZzL25hbWVpLmM6MTMyNTogKiBtYXlfZm9sbG93X2xpbmsgLSBDaGVjayBzeW1saW5rIGZvbGxvd2luZyBmb3IgdW5zYWZlIHNpdHVhdGlvbnNcXG5mcy9uYW1laS5jLTEzMjYtICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxcbi0tXFxuZnMvbmFtZWkuYy0xMzM5LSAqL1xcbmZzL25hbWVpLmM6MTM0MDpzdGF0aWMgaW5saW5lIGludCBtYXlfZm9sbG93X2xpbmsoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbmFtZWkuYy0xMzQxLXtcXG4tLVxcbmZzL25hbWVpLmM9MjEwNj1zdGF0aWMgbm9pbmxpbmUgY29uc3QgY2hhciAqcGlja19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgcGF0aCAqbGluayxcXG4tLVxcbmZzL25hbWVpLmMtMjEzMy1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBXQUxLX1RSQUlMSU5HKSB7XFxuZnMvbmFtZWkuYzoyMTM0OlxcdFxcdGVycm9yID0gbWF5X2ZvbGxvd19saW5rKG5kLCBpbm9kZSk7XFxuZnMvbmFtZWkuYy0yMTM1LVxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjUzLjYyNzEzNzg1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzMzM3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipBbmFseXppbmcgTGluayBUcmF2ZXJzYWwgTG9naWMqKlxuXG5Pa2F5LCBzbyBgcGlja19saW5rYCBpcyByZXNwb25zaWJsZSBmb3IsIHdlbGwsIHBpY2tpbmcgYSBsaW5rLiBBbmQgaXQgYXBwZWFycyB0aGF0IGl0J3MgY2FsbGluZyBgbWF5X2ZvbGxvd19saW5rYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdlIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdG8gYWN0dWFsbHkgKmZvbGxvdyogdGhlIGxpbmsgYWZ0ZXIgd2UndmUgcGlja2VkIGl0LiBOb3csIHdoYXQncyBjcnVjaWFsIGhlcmUgaXMgaG93IHdlIGRlZmluZSB0aGUgcGFyYW1ldGVycyBmb3IgcGlja2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBsaW5rIGlzIGRlZW1lZCAnZm9sbG93YWJsZS4nXG5cbkJlZm9yZSBkaWdnaW5nIGludG8gYG1heV9mb2xsb3dfbGlua2AncyBjb2RlIGRpcmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHdpZGVyIHBpY3R1cmUsIGFzIGluLCB3aG8gYXJlIHRoZSBjYWxsZXJzIG9mIGBtYXlfY3JlYXRlX2luX3N0aWNreWA/IEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaW5mbHVlbmNlcyB0aGUgZGVjaXNpb24gdG8gY3JlYXRlIGEgc3RpY2t5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGJyb2FkZXIgY29udGV4dHMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBsb2dpYyBtb3JlIGVmZmVjdGl2ZWx5LiBGcm9tIHRoaXMsIEkgd2lsbCBiZSBhYmxlIHRvIGNoZWNrIGZvciBhbnkgbGlua3MgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3RpY2t5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE4OjQ5OjU3LjI2MDQ4NzcyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNzM0MjY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXlfY3JlYXRlX2luX3N0aWNreVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTE0Mjc9aW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbi0tXFxuZnMvbmFtZWkuYy0xNDUwLS8qKlxcbmZzL25hbWVpLmM6MTQ1MTogKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbmZzL25hbWVpLmMtMTQ1Mi0gKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMgdGhhdCBhbHJlYWR5XFxuLS1cXG5mcy9uYW1laS5jLTE1MDgtICovXFxuZnMvbmFtZWkuYzoxNTA5OnN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxcbmZzL25hbWVpLmMtMTUxMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbmFtZWkuYz00NzUzPXN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG4tLVxcbmZzL25hbWVpLmMtNDc3NC1cXHRcXHRcXHRyZXR1cm4gLUVJU0RJUjtcXG5mcy9uYW1laS5jOjQ3NzU6XFx0XFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXFxuZnMvbmFtZWkuYy00Nzc2LVxcdFxcdFxcdFxcdFxcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVxcdTAwM2VwYXRoLmRlbnRyeSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1MDowMC4wOTc4MzY3NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3OTA2NDc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNlY3VyaXR5IEltcGxpY2F0aW9ucyBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gYGRvX29wZW5gIGNhbGxzIGBtYXlfY3JlYXRlX2luX3N0aWNreWAsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50IGZvY3VzIHN5bWJvbHMuIEkndmUgZ290IGEgZ29vZCBsaXN0IGhlcmU6IGBhZnNfaXNfb3duZWRfYnlfbWVgLCBgYWZzX2hhdmVfc2FtZV9vd25lcmAsIGB2ZnNfaW5vZGVfaXNfb3duZWRfYnlfbWVgLCBgc2V0YXR0cl9wcmVwYXJlYCwgYGlub2RlX293bmVyX29yX2NhcGFibGVgLCBgdmZzX3NldGxlYXNlYCwgYF9fY2hlY2tfc3RpY2t5YCwgYW5kIGB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lYC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBsb2NhdGlvbiBvZiBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYC4gWWVzLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBmcy9uYW1laS5jYC4gR29vZC4gTmV4dCwgaXMgYEFGU19GU2AgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIG5lZWRlZD8gU2VlbXMgdGhhdCB3YXk7IHRoZSBBRlMtc3BlY2lmaWMgcGFydCBpcyBlbmFibGVkIGJ5IGBBRlNfRlNgLCBhbmQgdGhlIFZGUyBwb3J0aW9uIGlzIGFsd2F5cyBhY3RpdmUuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSB0byBsaXN0IGBBRlNfRlNgIHVuZGVyIGBFbmFibGVDb25maWdzYC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGUyBpbm9kZSBvcGVyYXRpb25zLCBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCwgdG8gYWxsb3cgZmlsZXN5c3RlbXMgbGlrZSBBRlMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZXNlIG9wZXJhdGlvbnMgZm9yIEFGUyBhbmQgYWxzbyBtb2RpZmllcyBzZXZlcmFsIGNvcmUgVkZTIGZ1bmN0aW9ucyBzdWNoIGFzIGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIGFuZCBzeW1saW5rIGZvbGxvd2luZyB0byBsZXZlcmFnZSB0aGUgbmV3IGhlbHBlcnMuIFRoaXMgaXMgYSAqc2lnbmlmaWNhbnQqIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFZGUyBhbmQgQUZTLCBhbmQgaXQgZnVuZGFtZW50YWxseSBpbXBhY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MuIFRoaXMgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLlxuXG5UbyBzdW1tYXJpemUsIGhlcmUncyBteSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnM6XG5cbkZvY3VzIHN5bWJvbHM6XG4tIGBhZnNfaXNfb3duZWRfYnlfbWVgXG4tIGBhZnNfaGF2ZV9zYW1lX293bmVyYFxuLSBgdmZzX2lub2RlX2lzX293bmVkX2J5X21lYFxuLSBgc2V0YXR0cl9wcmVwYXJlYFxuLSBgaW5vZGVfb3duZXJfb3JfY2FwYWJsZWBcbi0gYHZmc19zZXRsZWFzZWBcbi0gYF9fY2hlY2tfc3RpY2t5YFxuLSBgdmZzX2RlZHVwZV9maWxlX3JhbmdlX29uZWBcblxuQ29uZmlnczpcbi0gYEFGU19GU2BcblxuQWxyaWdodCwgdGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjAxLCJPdXRwdXRUb2tlbnMiOjIyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxODo1MDowOC4wNzY5MDY3MThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg2MjA1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19pc19vd25lZF9ieV9tZVwiLFxuICAgIFwiYWZzX2hhdmVfc2FtZV9vd25lclwiLFxuICAgIFwidmZzX2lub2RlX2lzX293bmVkX2J5X21lXCIsXG4gICAgXCJzZXRhdHRyX3ByZXBhcmVcIixcbiAgICBcImlub2RlX293bmVyX29yX2NhcGFibGVcIixcbiAgICBcInZmc19zZXRsZWFzZVwiLFxuICAgIFwiX19jaGVja19zdGlja3lcIixcbiAgICBcInZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRlMgaW5vZGUgb3BlcmF0aW9ucyBgaXNfb3duZWRfYnlfbWVgIGFuZCBgaGF2ZV9zYW1lX293bmVyYCB0byBhbGxvdyBmaWxlc3lzdGVtcyAobGlrZSBBRlMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgVUlELWJhc2VkIG93bmVyc2hpcCBjaGVja3MuIEl0IGltcGxlbWVudHMgdGhlc2UgZm9yIEFGUyBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBjb3JlIFZGUyBmdW5jdGlvbnMgKGNob3duLCBjaGdycCwgbGVhc2UsIHN0aWNreSBiaXQgY2hlY2tzLCBkZWR1cGUsIHN5bWxpbmsgZm9sbG93aW5nKSB0byB1c2UgdGhlIG5ldyBoZWxwZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMgYW5kIEFGUyB0aGF0IGFmZmVjdHMgZmlsZSBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfaXNfb3duZWRfYnlfbWVcIixcbiAgICBcImFmc19oYXZlX3NhbWVfb3duZXJcIixcbiAgICBcInZmc19pbm9kZV9pc19vd25lZF9ieV9tZVwiLFxuICAgIFwic2V0YXR0cl9wcmVwYXJlXCIsXG4gICAgXCJpbm9kZV9vd25lcl9vcl9jYXBhYmxlXCIsXG4gICAgXCJ2ZnNfc2V0bGVhc2VcIixcbiAgICBcIl9fY2hlY2tfc3RpY2t5XCIsXG4gICAgXCJ2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZTIGlub2RlIG9wZXJhdGlvbnMgYGlzX293bmVkX2J5X21lYCBhbmQgYGhhdmVfc2FtZV9vd25lcmAgdG8gYWxsb3cgZmlsZXN5c3RlbXMgKGxpa2UgQUZTKSB0byBvdmVycmlkZSBkZWZhdWx0IFVJRC1iYXNlZCBvd25lcnNoaXAgY2hlY2tzLiBJdCBpbXBsZW1lbnRzIHRoZXNlIGZvciBBRlMgYW5kIG1vZGlmaWVzIHNldmVyYWwgY29yZSBWRlMgZnVuY3Rpb25zIChjaG93biwgY2hncnAsIGxlYXNlLCBzdGlja3kgYml0IGNoZWNrcywgZGVkdXBlLCBzeW1saW5rIGZvbGxvd2luZykgdG8gdXNlIHRoZSBuZXcgaGVscGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTIGFuZCBBRlMgdGhhdCBhZmZlY3RzIGZpbGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow55zps[1] Phase: Succeeded StartedAt: 2026-07-29 18:50:21 +0000 UTC FinishedAt: 2026-07-29 18:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 18:50:22 +0000 UTC FinishedAt: 2026-07-29 18:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2] Phase: Succeeded StartedAt: 2026-07-29 18:50:22 +0000 UTC FinishedAt: 2026-07-29 22:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 18:50:22 +0000 UTC FinishedAt: 2026-07-29 22:38:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 18:50:22 +0000 UTC FinishedAt: 2026-07-29 18:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 18:50:22 +0000 UTC FinishedAt: 2026-07-29 18:50:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow55zps/series-workflow55zps-convert-artifact-2025567530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 18:50:34 +0000 UTC FinishedAt: 2026-07-29 19:13:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 18:50:34 +0000 UTC FinishedAt: 2026-07-29 19:13:38 +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:*d7e18c3c-e4d8-4041-89a2-98ca642d5242,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-workflow55zps/series-workflow55zps-convert-artifact-2025567530/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": "1073b8d2-1443-43c1-8a09-394d08427bc0", "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-workflow55zps/series-workflow55zps-build-action-3707842200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 18:50:34 +0000 UTC FinishedAt: 2026-07-29 19:13:28 +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:*d7e18c3c-e4d8-4041-89a2-98ca642d5242,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-workflow55zps/series-workflow55zps-convert-artifact-2025567530/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": "1073b8d2-1443-43c1-8a09-394d08427bc0", "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-workflow55zps/series-workflow55zps-build-action-3707842200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 19:13:38 +0000 UTC FinishedAt: 2026-07-29 19:13:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 19:13:38 +0000 UTC FinishedAt: 2026-07-29 19:13:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 19:13:38 +0000 UTC FinishedAt: 2026-07-29 19:13:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 19:13:38 +0000 UTC FinishedAt: 2026-07-29 19:13:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow55zps/series-workflow55zps-convert-artifact-1265659205/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 19:13:49 +0000 UTC FinishedAt: 2026-07-29 19:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 19:13:49 +0000 UTC FinishedAt: 2026-07-29 19:15:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1073b8d2-1443-43c1-8a09-394d08427bc0,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-workflow55zps/series-workflow55zps-build-action-3707842200/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-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 19:15:51 +0000 UTC FinishedAt: 2026-07-29 19:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 19:15:51 +0000 UTC FinishedAt: 2026-07-29 19:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 19:15:51 +0000 UTC FinishedAt: 2026-07-29 19:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 19:15:51 +0000 UTC FinishedAt: 2026-07-29 19:34: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:*d7e18c3c-e4d8-4041-89a2-98ca642d5242,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-workflow55zps/series-workflow55zps-convert-artifact-1265659205/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": "92785fd6-f1c6-465f-86f9-ba817889e3a7", "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-workflow55zps/series-workflow55zps-build-action-3107705233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 19:15:51 +0000 UTC FinishedAt: 2026-07-29 19:34:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d7e18c3c-e4d8-4041-89a2-98ca642d5242,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-workflow55zps/series-workflow55zps-convert-artifact-1265659205/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": "92785fd6-f1c6-465f-86f9-ba817889e3a7", "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-workflow55zps/series-workflow55zps-build-action-3107705233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 19:34:56 +0000 UTC FinishedAt: 2026-07-29 19:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 19:34:56 +0000 UTC FinishedAt: 2026-07-29 19:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 19:34:56 +0000 UTC FinishedAt: 2026-07-29 19:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 19:34:56 +0000 UTC FinishedAt: 2026-07-29 19:36:44 +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:*92785fd6-f1c6-465f-86f9-ba817889e3a7,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-workflow55zps/series-workflow55zps-build-action-3107705233/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-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 19:36:54 +0000 UTC FinishedAt: 2026-07-29 22:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 19:36:54 +0000 UTC FinishedAt: 2026-07-29 22:38:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1073b8d2-1443-43c1-8a09-394d08427bc0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92785fd6-f1c6-465f-86f9-ba817889e3a7,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-workflow55zps/series-workflow55zps-build-action-3707842200/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-workflow55zps/series-workflow55zps-build-action-3107705233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 19:36:54 +0000 UTC FinishedAt: 2026-07-29 19:37:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 19:36:54 +0000 UTC FinishedAt: 2026-07-29 19:36:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow55zps/series-workflow55zps-convert-artifact-4133061066/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 19:36:54 +0000 UTC FinishedAt: 2026-07-29 19:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 19:36:54 +0000 UTC FinishedAt: 2026-07-29 19:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 19:36:54 +0000 UTC FinishedAt: 2026-07-29 19:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 19:37:04 +0000 UTC FinishedAt: 2026-07-29 22:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55zps[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_is_owned_by_me","afs_have_same_owner","vfs_inode_is_owned_by_me","setattr_prepare","inode_owner_or_capable","vfs_setlease","__check_sticky","vfs_dedupe_file_range_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1c8241d856919a1731822f129fc628f71547d96","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"0e327424-72af-47ac-a55a-e3629e4925fd","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 19:37:04 +0000 UTC FinishedAt: 2026-07-29 22:38:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1073b8d2-1443-43c1-8a09-394d08427bc0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92785fd6-f1c6-465f-86f9-ba817889e3a7,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-workflow55zps/series-workflow55zps-build-action-3707842200/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-workflow55zps/series-workflow55zps-build-action-3107705233/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-workflow55zps/series-workflow55zps-convert-artifact-4133061066/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,}