Name: series-workflowkd4qm Phase: Succeeded StartedAt: 2026-09-02 02:06:48 +0000 UTC FinishedAt: 2026-09-02 05:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[0] Phase: Succeeded StartedAt: 2026-09-02 02:06:48 +0000 UTC FinishedAt: 2026-09-02 02:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 02:06:48 +0000 UTC FinishedAt: 2026-09-02 02:09:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES" ], "series_id": "85415732-119e-4324-9d4a-5f94f876fe4e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "security_inode_create", "security_inode_link", "security_inode_symlink", "security_inode_mkdir", "security_inode_mknod", "security_inode_permission" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGlub2RlIExTTSBob29rcyAoc2VjdXJpdHlfaW5vZGVfY3JlYXRlLCBzZWN1cml0eV9pbm9kZV9saW5rLCBzZWN1cml0eV9pbm9kZV9zeW1saW5rLCBzZWN1cml0eV9pbm9kZV9ta2Rpciwgc2VjdXJpdHlfaW5vZGVfbWtub2QsIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24pIGFsb25nIHdpdGggVkZTIGNhbGxlcnMgdG8gcGFzcyBkb3duIG1vdW50IGlkbWFwcyAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGVuYWJsZXMgTFNNcyBhbmQgQlBGIExTTSBwcm9ncmFtcyB0byBpbnNwZWN0IGlkbWFwcGVkIG1vdW50cyBkdXJpbmcgZmlsZSBvcGVyYXRpb25zLCBhbHRlcmluZyByZWFjaGFibGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5YzI4MjE4YjJkNWU1N2Q3NzJhNjgyZTAyYTU4N2JmYTM0NzBiNDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAyOjA4OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5AQCAtNTEsMTQgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiYjNDM7XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7U2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFwmIzM0OyxcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiYjNDM7XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHByX2VycihcJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXCYjMzQ7LFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKHVubGlrZWx5KHJldHZhbCkpXG4gXHRcdHJldHVybiByZXR2YWw7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XG4mIzQzO1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcbiBcbkBAIC02OTUsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbkBAIC00MTg4LDcgJiM0Mzs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcdC8qIHNob3VsZG4mIzM5O3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbkBAIC00MjEyLDcgJiM0Mzs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcbiBcdG1vZGUgXHUwMDI2PSBTX0lBTExVR087XG4gXHRtb2RlIHw9IFNfSUZSRUc7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuIH1cbiBcbiAvKipcbkBAIC01MjU4LDcgJiM0Mzs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICYjNDM7NTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWRpci1cdTAwM2VpX29wLVx1MDAzZXN5bWxpbmspXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTkwNyw3ICYjNDM7NTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTIwLDI2ICYjNDM7MTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgaW50ICp4YXR0cl9jb3VudClcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNDA0LDI0ICYjNDM7NDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgICAgIGJvb2wgcmN1KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgdW1vZGVfdCBtb2RlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTEzLDkgJiM0Mzs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkyNiwxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NDYsOSAmIzQzOzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcbkBAIC0xNjIyLDEyICYjNDM7MTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICYjNDM7MTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xuQEAgLTE2NTYsMTIgJiM0MzsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICYjNDM7MTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxuQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnlcbiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlXG5AQCAtMTcwOSwxMSAmIzQzOzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuIFxuQEAgLTE3MzUsNiAmIzQzOzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZmlsZVxuICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlXG5AQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4mIzQzO1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IGlub2RlXG4gICogQG1hc2s6IGFjY2VzcyBtYXNrXG4gICpcbkBAIC0xODM1LDExICYjNDM7MTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0ICAgICAgaW50IG1hc2spXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7XG4mIzQzO1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0zMDc0LDEyICYjNDM7MzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7XG4gfVxuQEAgLTMwODksMTIgJiM0MzszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICYjNDM7MzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyAmIzQzOzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcbiBcbiAvKipcbiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGVcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxuICAqXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuIHtcbiBcdGludCBtYXNrO1xuIFx0dTMyIHBlcm1zO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbkBAIC0xMDg5LDE0ICYjNDM7MTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbkBAIC0xMjI2LDYgJiM0MzsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb25cbiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWRcbiAgKlxuQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgaW50IG1hc2spXG4ge1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5pbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuQEAgLTEsMTggJiM0MzsxLDMwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7bHNtLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xzbV90YWlsY2FsbC5za2VsLmhcJiMzNDtcbiBcbiBjaGFyICpDTURfQVJHU1tdID0ge1wmIzM0O3RydWVcJiMzNDssIE5VTEx9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbiYjNDM7fTtcbiYjNDM7XG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiB7XG4gXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XG5AQCAtMzAsNiAmIzQzOzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4mIzQzO1x0fSB3aGlsZSAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xuJiM0MztcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRlbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pXG4mIzQzO1x0XHRzYXZlZF9lcnJubyA9IEVJTztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKHNhdmVkX2Vycm5vKSB7XG4mIzQzO1x0XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoWzY0XTtcbiYjNDM7XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jLyVkLyVzXCYjMzQ7LCBwaWQsIG5hbWUpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbiYjNDM7XHRcdGVycm5vID0gRU9WRVJGTE9XO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFs2NF07XG4mIzQzO1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4mIzQzO1x0aW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0cGlkID0gZm9yaygpO1xuJiM0MztcdGlmIChwaWQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSlcbiYjNDM7XHRcdFx0X2V4aXQoMSk7XG4mIzQzO1x0XHRyYWlzZShTSUdTVE9QKTtcbiYjNDM7XHRcdF9leGl0KDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcbiYjNDM7XHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XHRpZiAod2FpdGVkICE9IHBpZClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4mIzQzO1x0XHRwaWQgPSAtMTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cbiYjNDM7XHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcJiMzNDtzZXRncm91cHNcJiMzNDssIFwmIzM0O2RlbnlcJiMzNDspIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFTk9FTlQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcJiMzNDt1aWRfbWFwXCYjMzQ7LCBcJiMzNDswIDAgMVwmIzM0OykgfHxcbiYjNDM7XHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcJiMzNDtnaWRfbWFwXCYjMzQ7LCBcJiMzNDswIDAgMVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDsvcHJvYy8lZC9ucy91c2VyXCYjMzQ7LCBwaWQpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbiYjNDM7XHRcdGVycm5vID0gRU9WRVJGTE9XO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRpZiAocGlkIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbiYjNDM7XHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdH1cbiYjNDM7XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuJiM0MztcdHJldHVybiBmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XG4mIzQzO1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xuJiM0MztcbiYjNDM7XHR1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7XG4mIzQzO1x0aWYgKHVzZXJuc19mZCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xuJiM0MztcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcJiMzNDt0bXBmc1wmIzM0OywgRlNPUEVOX0NMT0VYRUMpO1xuJiM0MztcdGlmIChmc2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcbiYjNDM7XHRpZiAobW50ZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4mIzQzO1x0aWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgXCYjMzQ7XCYjMzQ7LCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuJiM0MztcdFx0ICAgIHNpemVvZihhdHRyKSkpIHtcbiYjNDM7XHRcdGNsb3NlKG1udGZkKTtcbiYjNDM7XHRcdG1udGZkID0gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHNhdmVkX2Vycm5vID0gZXJybm87XG4mIzQzO1x0aWYgKGZzZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZnNmZCk7XG4mIzQzO1x0aWYgKHVzZXJuc19mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZSh1c2VybnNfZmQpO1xuJiM0MztcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0cmV0dXJuIG1udGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZClcbiYjNDM7e1xuJiM0MztcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQyxcbiYjNDM7XHRcdCAgICAwNjAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7Y3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRmZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCBcJiMzNDtkaXJcJiMzNDssIDA3MDApLCBcJiMzNDtta2RpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoXCYjMzQ7dGFyZ2V0XCYjMzQ7LCBkaXJmZCwgXCYjMzQ7c3ltbGlua1wmIzM0OyksIFwmIzM0O3N5bWxpbmtcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcJiMzNDtmaWxlXCYjMzQ7LCBkaXJmZCwgXCYjMzQ7bGlua1wmIzM0OywgMCksIFwmIzM0O2xpbmtcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFwmIzM0O2ZpZm9cJiMzNDssIDA2MDApLCBcJiMzNDtta25vZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2xpbmtcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtmaWZvXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7c3ltbGlua1wmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtkaXJcJiMzNDssIEFUX1JFTU9WRURJUik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciB0bXBkaXJbXSA9IFwmIzM0Oy92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWFwmIzM0OztcbiYjNDM7XHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbiYjNDM7XHRpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksIFwmIzM0O21rZHRlbXBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgXCYjMzQ7b3Blbl90bXBkaXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsIFwmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCYjMzQ7aWRlbnRpdHlfaWRtYXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O2lkbWFwcGVkX21vdW50XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbiYjNDM7XHRcdFx0XCYjMzQ7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblwmIzM0OykgPyAwIDogLTE7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGlkbWFwcGVkX2RpcmZkKTtcbiYjNDM7XHRpZiAoZGlyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZGlyZmQpO1xuJiM0MztcdHJtZGlyKHRtcGRpcik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuQEAgLTUzLDYgJiM0MzsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuIFxuJiM0MztcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xuIFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXCYjMzQ7c3RhY2tfbXByb3RlY3RcJiMzNDspIHx8XG4gXHQgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sIFwmIzM0O3N0YWNrX21wcm90ZWN0XCYjMzQ7KSlcbkBAIC03MSw2ICYjNDM7MzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV90ZXN0ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fY291bnQgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbXByb3RlY3RfY291bnQgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiAmIzQzOzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XG4gaW50IGJwcm1fY291bnQgPSAwO1xuJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbiYjNDM7X191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRJTk9ERV9JRE1BUF9DUkVBVEVcdD0gMVUgXHUwMDNjXHUwMDNjIDAsXG4mIzQzO1x0SU5PREVfSURNQVBfTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMSxcbiYjNDM7XHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuJiM0MztcdElOT0RFX0lETUFQX01LRElSXHQ9IDFVIFx1MDAzY1x1MDAzYyAzLFxuJiM0MztcdElOT0RFX0lETUFQX01LTk9EXHQ9IDFVIFx1MDAzY1x1MDAzYyA0LFxuJiM0MztcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuJiM0Mzt7XG4mIzQzO1x0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgXHUwMDI2XHUwMDI2IGlkbWFwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGlkbWFwLVx1MDAzZWdpZF9tYXAubnJfZXh0ZW50cyA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbiYjNDM7XHRcdGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vaztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfY3JlYXRlXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX2xpbmtcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9zeW1saW5rXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9ta2RpclwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfbWtub2RcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvblwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XG4mIzQzO31cbiBcbiBTRUMoXCYjMzQ7bHNtL2ZpbGVfbXByb3RlY3RcJiMzNDspXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgc2V2ZXJhbCBpbm9kZSBMU00gaG9va3MgKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSwgc2VjdXJpdHlfaW5vZGVfbGluaywgc2VjdXJpdHlfaW5vZGVfc3ltbGluaywgc2VjdXJpdHlfaW5vZGVfbWtkaXIsIHNlY3VyaXR5X2lub2RlX21rbm9kLCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKSBhbG9uZyB3aXRoIFZGUyBjYWxsZXJzIHRvIHBhc3MgZG93biBtb3VudCBpZG1hcHMgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBlbmFibGVzIExTTXMgYW5kIEJQRiBMU00gcHJvZ3JhbXMgdG8gaW5zcGVjdCBpZG1hcHBlZCBtb3VudHMgZHVyaW5nIGZpbGUgb3BlcmF0aW9ucywgYWx0ZXJpbmcgcmVhY2hhYmxlIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBzdWJzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOWMyODIxOGIyZDVlNTdkNzcyYTY4MmUwMmE1ODdiZmEzNDcwYjQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwMjowODo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwppbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCkBAIC01MSwxNCAmIzQzOzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAogewogCWludCByZXQ7CiAKLQlyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcigmYW1wO25vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJcHJfZXJyKCYjMzQ7U2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZCYjMzQ7LAogCQkgICAgICAgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKJiM0MzsJcmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcHJfZXJyKCYjMzQ7U2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZCYjMzQ7LAogCQkgICAgICAgcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDIwYTY1MzRlYTNlZmYuLjk5Zjg5NGYzZjdlMTMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtNjU4LDcgJiM0Mzs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAodW5saWtlbHkocmV0dmFsKSkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7CiAKQEAgLTY5NSw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWQKIAlpZiAodW5saWtlbHkoKChpbm9kZS0mZ3Q7aV9tb2RlICZhbXA7IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSkKIAkJcmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCkBAIC00MTg4LDcgJiM0Mzs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCQlyZXR1cm4gLUVBQ0NFUzsJLyogc2hvdWxkbiYjMzk7dCBpdCBiZSBFTk9TWVM/ICovCiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKQEAgLTQyMTIsNyAmIzQzOzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCiAJbW9kZSAmYW1wOz0gU19JQUxMVUdPOwogCW1vZGUgfD0gU19JRlJFRzsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCZhbXA7bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7CkBAIC00MzI4LDcgJiM0Mzs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKIH0KIAogLyoqCkBAIC01MjU4LDcgJiM0Mzs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTM5NSw3ICYjNDM7NTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCWdvdG8gZXJyOwogCiAJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyOwogCkBAIC01NzgzLDcgJiM0Mzs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoIWRpci0mZ3Q7aV9vcC0mZ3Q7c3ltbGluaykKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01OTA3LDcgJiM0Mzs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaApAQCAtMTIwLDI2ICYjNDM7MTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGludCAqeGF0dHJfY291bnQpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkgc3RydWN0IGlub2RlICppbm9kZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZWFkbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBib29sIHJjdSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNDA0LDI0ICYjNDM7NDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwogaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTsKIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCQkJICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksCiAJCQkgIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgICAgYm9vbCByY3UpOwotaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKTsKIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKQEAgLTkwMiw5ICYjNDM7OTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSB1bW9kZV90IG1vZGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQl1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05MTMsOSAmIzQzOzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQKIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7IH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAotCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkyNiwxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQkgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkgICAgICAgaW50IG1vZGUpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05NDYsOSAmIzQzOzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJaW50IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkgICAgICAgaW50IG1vZGUsIGRldl90IGRldikKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk3NCw3ICYjNDM7OTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCAyZWUyNzZhYjE1YzViLi5hOTE5MGRhMzM0MWRkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTE2MTQsNiAmIzQzOzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZAogICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGUKQEAgLTE2MjIsMTIgJiM0MzsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpOwogCkBAIC0xNjQ4LDYgJiM0MzsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGUKICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmsKQEAgLTE2NTYsMTIgJiM0MzsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiB9CiAKIC8qKgpAQCAtMTY4Miw2ICYjNDM7MTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rCiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lCkBAIC0xNjkwLDE2ICYjNDM7MTY5MywxNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwogfQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5CiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlCkBAIC0xNzA5LDExICYjNDM7MTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7CiAKQEAgLTE3MzUsNiAmIzQzOzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBuZXcgZmlsZQogICogQG1vZGU6IG5ldyBmaWxlIG1vZGUKQEAgLTE3NDcsMTIgJiM0MzsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogfQogCiAvKioKQEAgLTE4MjMsNiAmIzQzOzE4MjksNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogaW5vZGUKICAqIEBtYXNrOiBhY2Nlc3MgbWFzawogICoKQEAgLTE4MzUsMTEgJiM0MzsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgbWFzaykKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTMwNzQsMTIgJiM0MzszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAmYW1wO2FkKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJcmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspOwogfQpAQCAtMzA4OSwxMiAmIzQzOzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0RJUik7CiB9CkBAIC0zMTA0LDcgJiM0MzszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhtb2RlKSk7CiB9CkBAIC0zMjM2LDEzICYjNDM7MzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLAogCiAvKioKICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZQomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkCiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkCiAgKgogICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvCiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKQogewogCWludCBtYXNrOwogCXUzMiBwZXJtczsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTEwODksMTQgJiM0MzsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGluawomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdAogICogQGRpcjogdW51c2VkCiAgKiBAbmV3X2RlbnRyeTogdGhlIG5ldyBvYmplY3QKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDsKIAlzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7CkBAIC0xMjI2LDYgJiM0MzsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsCiAKIC8qKgogICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uCiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWQKICAqCkBAIC0xMjMzLDcgJiM0MzsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsCiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgaW50IG1hc2spCiB7CiAJc3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLSZndDtpX3NiKTsKIAlzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwppbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKQEAgLTEsMTggJiM0MzsxLDMwIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKIAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDLgogICovCiAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vdW50LmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O2xzbS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtsc21fdGFpbGNhbGwuc2tlbC5oJiMzNDsKIAogY2hhciAqQ01EX0FSR1NbXSA9IHsmIzM0O3RydWUmIzM0OywgTlVMTH07CiAKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQUxMID0gKDFVICZsdDsmbHQ7IDYpIC0gMSwKJiM0Mzt9OwomIzQzOwogaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIHsKIAlpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7CkBAIC0zMCw2ICYjNDM7NDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7CiYjNDM7CX0gd2hpbGUgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpOwomIzQzOwlpbnQgZmQsIHNhdmVkX2Vycm5vID0gMDsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKQomIzQzOwkJc2F2ZWRfZXJybm8gPSBFSU87CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJaWYgKHNhdmVkX2Vycm5vKSB7CiYjNDM7CQllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlpbnQgbGVuOwomIzQzOwomIzQzOwlsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvJXMmIzM0OywgcGlkLCBuYW1lKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJcGlkX3QgcGlkLCB3YWl0ZWQ7CiYjNDM7CWludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKHBpZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChwaWQgPT0gMCkgewomIzQzOwkJaWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpCiYjNDM7CQkJX2V4aXQoMSk7CiYjNDM7CQlyYWlzZShTSUdTVE9QKTsKJiM0MzsJCV9leGl0KDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgV1VOVFJBQ0VEKTsKJiM0MzsJfSB3aGlsZSAod2FpdGVkICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsJaWYgKHdhaXRlZCAhPSBwaWQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHsKJiM0MzsJCXBpZCA9IC0xOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi8KJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtzZXRncm91cHMmIzM0OywgJiMzNDtkZW55JiMzNDspICZhbXA7JmFtcDsgZXJybm8gIT0gRU5PRU5UKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7dWlkX21hcCYjMzQ7LCAmIzM0OzAgMCAxJiMzNDspIHx8CiYjNDM7CSAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7Z2lkX21hcCYjMzQ7LCAmIzM0OzAgMCAxJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC9ucy91c2VyJiMzNDssIHBpZCk7CiYjNDM7CWlmIChsZW4gJmx0OyAwIHx8IChzaXplX3QpbGVuICZndDs9IHNpemVvZihwYXRoKSkgewomIzQzOwkJZXJybm8gPSBFT1ZFUkZMT1c7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKHBpZCAmZ3Q7IDApIHsKJiM0MzsJCWtpbGwocGlkLCBTSUdLSUxMKTsKJiM0MzsJCWRvIHsKJiM0MzsJCQl3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7CiYjNDM7CQl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwl9CiYjNDM7CWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7CiYjNDM7CQkuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLAomIzQzOwl9OwomIzQzOwlpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTsKJiM0MzsJaWYgKHVzZXJuc19mZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi8KJiM0MzsJZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sICYjMzQ7dG1wZnMmIzM0OywgRlNPUEVOX0NMT0VYRUMpOwomIzQzOwlpZiAoZnNmZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTsKJiM0MzsJaWYgKG1udGZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDsKJiM0MzsJaWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgJiMzNDsmIzM0OywgQVRfRU1QVFlfUEFUSCwgJmFtcDthdHRyLAomIzQzOwkJICAgIHNpemVvZihhdHRyKSkpIHsKJiM0MzsJCWNsb3NlKG1udGZkKTsKJiM0MzsJCW1udGZkID0gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWlmIChmc2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShmc2ZkKTsKJiM0MzsJaWYgKHVzZXJuc19mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UodXNlcm5zX2ZkKTsKJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIG1udGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZCkKJiM0Mzt7CiYjNDM7CWludCBmZCA9IC0xLCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsCiYjNDM7CQkgICAgMDYwMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWZkID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsICYjMzQ7ZGlyJiMzNDssIDA3MDApLCAmIzM0O21rZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKHN5bWxpbmthdCgmIzM0O3RhcmdldCYjMzQ7LCBkaXJmZCwgJiMzNDtzeW1saW5rJiMzNDspLCAmIzM0O3N5bWxpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgZGlyZmQsICYjMzQ7bGluayYjMzQ7LCAwKSwgJiMzNDtsaW5rJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMDYwMCksICYjMzQ7bWtub2QmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gMDsKJiM0MztvdXQ6CiYjNDM7CWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtmaWZvJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtzeW1saW5rJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtkaXImIzM0OywgQVRfUkVNT1ZFRElSKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKQomIzQzO3sKJiM0MzsJY2hhciB0bXBkaXJbXSA9ICYjMzQ7L3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYJiMzNDs7CiYjNDM7CV9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMOwomIzQzOwlpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCAmIzM0O21rZHRlbXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgJiMzNDtvcGVuX3RtcGRpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZG1hcHBlZF9kaXJmZCA9IGNyZWF0ZV9pZG1hcHBlZF90bXBmcygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgJiMzNDtjcmVhdGVfaWRtYXBwZWRfdG1wZnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCAmIzM0O2lkZW50aXR5X2lkbWFwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSwKJiM0MzsJCSAgICAgICAmIzM0O2lkbWFwcGVkX21vdW50JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkgICAgICAgJiMzNDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IEFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLAomIzQzOwkJCSYjMzQ7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiYjMzQ7KSA/IDAgOiAtMTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChpZG1hcHBlZF9kaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoaWRtYXBwZWRfZGlyZmQpOwomIzQzOwlpZiAoZGlyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGRpcmZkKTsKJiM0MzsJcm1kaXIodG1wZGlyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiB7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rOwpAQCAtNTMsNiAmIzQzOzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAKIAlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKIAomIzQzOwllcnIgPSB0ZXN0X2xzbV9pbm9kZV9pZG1hcChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfbHNtX2lub2RlX2lkbWFwJiMzNDspKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKIAllcnIgPSBzdGFja19tcHJvdGVjdCgpOwogCWlmICghQVNTRVJUX0VRKGVyciwgLTEsICYjMzQ7c3RhY2tfbXByb3RlY3QmIzM0OykgfHwKIAkgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sICYjMzQ7c3RhY2tfbXByb3RlY3QmIzM0OykpCkBAIC03MSw2ICYjNDM7MzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogCXNrZWwtJmd0O2Jzcy0mZ3Q7Y29weV90ZXN0ID0gMDsKIAlza2VsLSZndDtic3MtJmd0O2Jwcm1fY291bnQgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7bXByb3RlY3RfY291bnQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwpAQCAtODQsNiAmIzQzOzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKIGludCBtb25pdG9yZWRfcGlkID0gMDsKIGludCBtcHJvdGVjdF9jb3VudCA9IDA7CiBpbnQgYnBybV9jb3VudCA9IDA7CiYjNDM7X191MzIgaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7X191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CUlOT0RFX0lETUFQX0NSRUFURQk9IDFVICZsdDsmbHQ7IDAsCiYjNDM7CUlOT0RFX0lETUFQX0xJTksJPSAxVSAmbHQ7Jmx0OyAxLAomIzQzOwlJTk9ERV9JRE1BUF9TWU1MSU5LCT0gMVUgJmx0OyZsdDsgMiwKJiM0MzsJSU5PREVfSURNQVBfTUtESVIJPSAxVSAmbHQ7Jmx0OyAzLAomIzQzOwlJTk9ERV9JRE1BUF9NS05PRAk9IDFVICZsdDsmbHQ7IDQsCiYjNDM7CUlOT0RFX0lETUFQX1BFUk1JU1NJT04JPSAxVSAmbHQ7Jmx0OyA1LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX21vbml0b3JlZF9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkKJiM0Mzt7CiYjNDM7CV9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgJmFtcDsmYW1wOyBpZG1hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlkbWFwLSZndDt1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpZG1hcC0mZ3Q7Z2lkX21hcC5ucl9leHRlbnRzID09IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpCiYjNDM7ewomIzQzOwlpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSkKJiM0MzsJCWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vazsKJiM0MzsJZWxzZQomIzQzOwkJaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiB8PSBob29rOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2NyZWF0ZSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbGluayYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfc3ltbGluayYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX21rZGlyJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtub2QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX3Blcm1pc3Npb24mIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7CiYjNDM7fQogCiBTRUMoJiMzNDtsc20vZmlsZV9tcHJvdGVjdCYjMzQ7KQogaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogV29ydGggRnV6emluZz8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGxvdCBvZiBpbXBvcnRhbnQgYXJlYXM6IGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgZnMvbmFtZWkuY2AsIGNyaXRpY2FsIGluY2x1ZGUgZmlsZXMsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgc2VjdXJpdHkgZnJhbWV3b3JrIGl0c2VsZiwgaW5jbHVkaW5nIFNFTGludXgsIFNtYWNrLCBhbmQgZXZlbiB0aGUgQlBGIExTTSB0ZXN0cy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGEgcmVmYWN0b3JpbmcsIGludHJvZHVjaW5nIHRoZSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rczogYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBgaW5vZGVfcGVybWlzc2lvbmAuCgpGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZSBoZXJlLCBvciBpZiB0aGlzIGlzIGp1c3QgcGx1bWJpbmcuIFNjYW5uaW5nIGBmcy9uYW1laS5jYCwgSSBzZWUgYGlkbWFwYCBpcyBnZXR0aW5nIHBhc3NlZCBpbnRvIHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgY2FsbHMgY29ycmVjdGx5LiBUaGUgd3JhcHBlciBmdW5jdGlvbnMgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFyZSBhbHNvIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBgaWRtYXBgIHBhcmFtZXRlciBhbmQgcGFzcyBpdCBvbiB2aWEgYGNhbGxfaW50X2hvb2soLi4uKWAuICBTRUxpbnV4IGFuZCBTbWFjayBhcmUgaGF2aW5nIHRoZWlyIGhvb2sgc2lnbmF0dXJlcyB1cGRhdGVkLCBidXQgaXQgbG9va3MgbGlrZSB0aGV5IGFyZW4mIzM5O3QgKnVzaW5nKiB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIgcmlnaHQgbm93LiBIb3dldmVyLCB0aGUgQlBGIExTTSB0ZXN0cyBhcmUgKnJlY2VpdmluZyogYGlkbWFwYCBub3csIHdoaWNoIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb246IElzIHRoaXMganVzdCBhbiBBUEkgY2hhbmdlIHRvIHN1cHBvcnQgaWRtYXBwZWQgbW91bnRzIGJldHRlciAoZXNwZWNpYWxseSBmb3IgQlBGIExTTSBvciBmdXR1cmUgTFNNcyksIG9yIGRvZXMgaXQgKmZ1bmN0aW9uYWxseSogY2hhbmdlIHNlY3VyaXR5IHBvbGljeSBiZWhhdmlvcj8KCkxldCYjMzk7cyBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3Igd2hhdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGp1c3QgZG9jdW1lbnRhdGlvbiwgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBjb25zdGFudCB1cGRhdGVzLCBvciB1bnJlYWNoYWJsZSBjb2RlLiAgVGhpcyBkZWZpbml0ZWx5ICppc24mIzM5O3QqIGRvY3VtZW50YXRpb24sIGFuZCBpdCBpc24mIzM5O3QganVzdCBsb2dnaW5nLiBUaGlzIGlzIG1vZGlmeWluZyBMU00gaG9vayBkZWZpbml0aW9ucyBhbmQgdGhlIFZGUyBsYXllci4KCk5vdywgdGhpcyBpcyBnZXR0aW5nIGludGVyZXN0aW5nLiAgTFNNIGhvb2tzIGFyZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHRoZSBCUEYgTFNNICpjYW4qIGF0dGFjaCB0byB0aGVzZSBob29rcyBhbmQgbm93IHJlY2VpdmVzIHRoZSBgaWRtYXBgIGFyZ3VtZW50LiBUaGF0IG1lYW5zIGEgQlBGIHByb2dyYW0gY2FuIG5vdyBwb3RlbnRpYWxseSBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbiBtb3VudCBJRCBtYXBwaW5nIGluZm9ybWF0aW9uLCBjaGFuZ2luZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgpUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYXJlYSBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCAqc2VlbXMqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBkb3VibGUtY2hlY2ssIHRob3VnaC4gIEkgbmVlZCB0byB1c2UgbXkgdG9vbHMgKGBncmVwcGVyYCwgZ2l0IGxvZywgZ2l0IHNob3csIGV0Yy4pIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBjaGFuZ2VzIGluIG90aGVyIExTTXMgKEFwcEFybW9yLCBMYW5kbG9jaywgZXRjLikgb3IgYW55IG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZXNlIGhvb2tzLiBJIGhhdmUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGJlZm9yZSBJIGZsYWcgaXQgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZV9wZXJtaXNzaW9uLiptbnRfaWRtYXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUzMDg9c3RhdGljIGludCB1YmxrX2NoYXJfZGV2X3Blcm1pc3Npb24oc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTMyNi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzI3Olx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMjgtXHRcdFx0ZF9iYWNraW5nX2lub2RlKHBhdGguZGVudHJ5KSwgbWFzayk7XG4tLVxuZnMvYmFkX2lub2RlLmM9ODY9c3RhdGljIGludCBiYWRfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbmZzL2JhZF9pbm9kZS5jLTkxLVxuZnMvYmFkX2lub2RlLmM6OTI6c3RhdGljIGludCBiYWRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2JhZF9pbm9kZS5jLTkzLVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTEwMz1zdGF0aWMgaW50IGJwZl94YXR0cl9yZWFkX3Blcm1pc3Npb24oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTEyLVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjExMzpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfUkVBRCk7XG5mcy9icGZfZnNfa2Z1bmNzLmMtMTE0LX1cbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmM9MTczPXN0YXRpYyBpbnQgYnBmX3hhdHRyX3dyaXRlX3Blcm1pc3Npb24oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTgxLVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjE4MjpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpO1xuZnMvYnBmX2ZzX2tmdW5jcy5jLTE4My19XG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yNDMwPXN0YXRpYyBpbnQgYnRyZnNfaW9jdGxfZGVmcmFnKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTI0NjAtXHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSBcdTAwMjZcdTAwMjZcbmZzL2J0cmZzL2lvY3RsLmM6MjQ2MTpcdFx0ICAgIGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpIHtcbmZzL2J0cmZzL2lvY3RsLmMtMjQ2Mi1cdFx0XHRyZXQgPSAtRVBFUk07XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jPTEzNT1pbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE5Mi1cdGVsc2VcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxOTM6XHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE5NC1cdFx0XHRcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4tLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYz04NTI9ZWNyeXB0ZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTg1NC17XG5mcy9lY3J5cHRmcy9pbm9kZS5jOjg1NTpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTg1Ni1cdFx0XHRcdGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGlub2RlKSwgbWFzayk7XG4tLVxuZnMvbmFtZWkuYz01NjU9RVhQT1JUX1NZTUJPTChnZW5lcmljX3Blcm1pc3Npb24pO1xuLS1cbmZzL25hbWVpLmMtNTc3LSAqL1xuZnMvbmFtZWkuYzo1Nzg6c3RhdGljIGlubGluZSBpbnQgZG9faW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL25hbWVpLmMtNTc5LVx0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4tLVxuZnMvbmFtZWkuYz02MDQ9c3RhdGljIGludCBzYl9wZXJtaXNzaW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmZzL25hbWVpLmMtNjI3LSAqL1xuZnMvbmFtZWkuYzo2Mjg6aW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9uYW1laS5jLTYyOS1cdFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbi0tXG5mcy9uYW1laS5jPTY2Mz1FWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuLS1cbmZzL25hbWVpLmMtNjgyLSAqL1xuZnMvbmFtZWkuYzo2ODM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9uYW1laS5jLTY4NC1cdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmZzL25hbWVpLmM9NjA3NT1pbnQgdmZzX3JlbmFtZShzdHJ1Y3QgcmVuYW1lZGF0YSAqcmQpXG4tLVxuZnMvbmFtZWkuYy02MTIyLVx0XHRpZiAoaXNfZGlyKSB7XG5mcy9uYW1laS5jOjYxMjM6XHRcdFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKHJkLVx1MDAzZW1udF9pZG1hcCwgc291cmNlLFxuZnMvbmFtZWkuYy02MTI0LVx0XHRcdFx0XHRcdCBNQVlfV1JJVEUpO1xuLS1cbmZzL25hbWVpLmMtNjEyOC1cdFx0aWYgKChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2lzX2Rpcikge1xuZnMvbmFtZWkuYzo2MTI5Olx0XHRcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihyZC1cdTAwM2VtbnRfaWRtYXAsIHRhcmdldCxcbmZzL25hbWVpLmMtNjEzMC1cdFx0XHRcdFx0XHQgTUFZX1dSSVRFKTtcbi0tXG5mcy9uZnNkL25mc2ZoLmM9MzE9c3RhdGljIGludCBuZnNkX2FjY2VwdGFibGUodm9pZCAqZXhwdiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL25mc2QvbmZzZmguYy00NS1cdFx0cGFyZW50ID0gZGdldF9wYXJlbnQodGRlbnRyeSk7XG5mcy9uZnNkL25mc2ZoLmM6NDY6XHRcdGVyciA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCxcbmZzL25mc2QvbmZzZmguYy00Ny1cdFx0XHRcdCAgICAgICBkX2lub2RlKHBhcmVudCksIE1BWV9FWEVDKTtcbi0tXG5mcy9uZnNkL3Zmcy5jPTI4NDM9bmZzZF9wZXJtaXNzaW9uKHN0cnVjdCBzdmNfY3JlZCAqY3JlZCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTI5MDItXHQvKiBUaGlzIGFzc3VtZXMgIE5GU0RfTUFZX3tSRUFELFdSSVRFLEVYRUN9ID09IE1BWV97UkVBRCxXUklURSxFWEVDfSAqL1xuZnMvbmZzZC92ZnMuYzoyOTAzOlx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSxcbmZzL25mc2QvdmZzLmMtMjkwNC1cdFx0XHQgICAgICAgYWNjIFx1MDAyNiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpO1xuLS1cbmZzL25mc2QvdmZzLmMtMjkwOS1cdCAgICAgIChhY2MgXHUwMDI2IChORlNEX01BWV9PV05FUl9PVkVSUklERSB8IE5GU0RfTUFZX1JFQURfSUZfRVhFQykpKSlcbmZzL25mc2QvdmZzLmM6MjkxMDpcdFx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX0VYRUMpO1xuZnMvbmZzZC92ZnMuYy0yOTExLVxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQzNTU9c3RhdGljIGlubGluZSBpbnQgb2NmczJfbWF5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDM2MC1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MzYxOlx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MzYyLX1cbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzcyPXN0YXRpYyBpbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQxNC1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0MTU6XHRcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1JFQUQpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQxNi1cdFx0aWYgKGVycm9yKVxuLS1cbmZzL29wZW4uYz00NjM9c3RhdGljIGludCBkb19mYWNjZXNzYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwgaW50IGZsYWdzKVxuLS1cbmZzL29wZW4uYy01MDMtXG5mcy9vcGVuLmM6NTA0Olx0cmVzID0gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC5tbnQpLCBpbm9kZSwgbW9kZSB8IE1BWV9BQ0NFU1MpO1xuZnMvb3Blbi5jLTUwNS1cdC8qIFN1UyB2MiByZXF1aXJlcyB3ZSByZXBvcnQgYSByZWFkIG9ubHkgZnMgdG9vICovXG4tLVxuZnMvb3ZlcmxheWZzL2lub2RlLmM9MzA2PWludCBvdmxfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMzYtXHR3aXRoX292bF9jcmVkcyhpbm9kZS1cdTAwM2VpX3NiKVxuZnMvb3ZlcmxheWZzL2lub2RlLmM6MzM3Olx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocmVhbHBhdGgubW50KSwgcmVhbGlub2RlLCBtYXNrKTtcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTMzOC19XG4tLVxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM9NjAwOD1pbnQgc21iMl9xdWVyeV9kaXIoc3RydWN0IGtzbWJkX3dvcmsgKndvcmspXG4tLVxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtNjA2MS1cdGlmICghKGRpcl9mcC1cdTAwM2VkYWNjZXNzIFx1MDAyNiBGSUxFX0xJU1RfRElSRUNUT1JZX0xFKSB8fFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM6NjA2MjpcdCAgICBpbm9kZV9wZXJtaXNzaW9uKGZpbGVfbW50X2lkbWFwKGRpcl9mcC1cdTAwM2VmaWxwKSxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTYwNjMtXHRcdFx0ICAgICBmaWxlX2lub2RlKGRpcl9mcC1cdTAwM2VmaWxwKSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjcxMD1pbnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbmluY2x1ZGUvbGludXgvZnMuaC0yNzExLVx0XHQgIHN0cnVjdCBpYXR0ciAqLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xuaW5jbHVkZS9saW51eC9mcy5oOjI3MTI6aW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbmluY2x1ZGUvbGludXgvZnMuaC0yNzEzLWludCBnZW5lcmljX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbmluY2x1ZGUvbGludXgvZnMuaD0yNzE0PXN0YXRpYyBpbmxpbmUgaW50IGZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcxNS17XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjcxNjpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGZpbGVfbW50X2lkbWFwKGZpbGUpLFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MTctXHRcdFx0XHRmaWxlX2lub2RlKGZpbGUpLCBtYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjcxOT1zdGF0aWMgaW5saW5lIGludCBwYXRoX3Blcm1pc3Npb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKVxuaW5jbHVkZS9saW51eC9mcy5oLTI3MjAte1xuaW5jbHVkZS9saW51eC9mcy5oOjI3MjE6XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC1cdTAwM2VtbnQpLFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MjItXHRcdFx0XHRkX2lub2RlKHBhdGgtXHUwMDNlZGVudHJ5KSwgbWFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg9MTQwPUxTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTE0MS1cdCBib29sIHJjdSlcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjE0MjpMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMTQzLVx0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MjU9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MjYtXHRcdFx0ICAgICAgIGJvb2wgcmN1KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Mjc6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDI4LVx0XHRcdCAgICAgIGludCBtYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9OTc5PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtOTg1LVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjk4NjpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTk4Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmlwYy9tcXVldWUuYz04NjA9c3RhdGljIGludCBwcmVwYXJlX29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb2ZsYWcsIGludCBybyxcbi0tXG5pcGMvbXF1ZXVlLmMtODgzLVx0YWNjID0gb2ZsYWcyYWNjW29mbGFnIFx1MDAyNiBPX0FDQ01PREVdO1xuaXBjL21xdWV1ZS5jOjg4NDpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfaW5vZGUoZGVudHJ5KSwgYWNjKTtcbmlwYy9tcXVldWUuYy04ODUtfVxuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz02MTE9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqX19nZXRfcHJvZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2lub2RlLmMtNjEzLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xua2VybmVsL2JwZi9pbm9kZS5jOjYxNDpcdGludCByZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfUkVBRCk7XG5rZXJuZWwvYnBmL2lub2RlLmMtNjE1LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTU0MTA9c3RhdGljIGludCBjZ3JvdXBfbWF5X3dyaXRlKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01NDIwLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzo1NDIxOlx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKTtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNTQyMi1cdGlwdXQoaW5vZGUpO1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTgyMj1pbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg0NTppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cdFx0XHQgICAgICBpbnQgbWFzaylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNTE6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTEyMDM9c3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzNy0gKi9cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMzg6c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzOS1cdFx0XHRcdCAgaW50IG1hc2spXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jPTE2MD1TRUMoXCYjMzQ7bHNtL2lub2RlX3Blcm1pc3Npb25cJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmM6MTYxOmludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jLTE2Mi1cdCAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIElETUFQIFN0cnVjdHVyZSBpbiBMU00gSG9va3MqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgc2l0dWF0aW9uOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVjZW50IGNoYW5nZXMgaW1wYWN0IHRoZSBzZWN1cml0eSBtb2R1bGUgaW1wbGVtZW50YXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHVwZGF0ZXMgdG8gdGhlIExTTSBob29rcy4gVGhlIGNvcmUgaG9va3MgSSYjMzk7bSBsb29raW5nIGF0IGFyZSBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAsIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9ta25vZGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBiZWluZyBwYXNzZWQgZG93biBmcm9tIHRoZSBWRlMuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBkaXJlY3RseSBhZmZlY3RzIGhvdyB3ZSBoYW5kbGUgaWRlbnRpdHkgbWFwcGluZyB3aXRoaW4gdGhlIExTTS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB0aGUgZmFjdCB0aGF0IEJQRiBMU00gaG9va3MgKmFsc28qIGhhdmUgYWNjZXNzIHRvIHRoaXMgYGlkbWFwYCBpcyBjcnVjaWFsLiBUaGlzIGlzIGEgZ2FtZSBjaGFuZ2VyIGZvciBCUEYtYmFzZWQgc2VjdXJpdHkgcG9saWNpZXMuIEJQRiBhbHJlYWR5IGdpdmVzIHVzIGZpbmUtZ3JhaW5lZCBjb250cm9sLCBidXQgaGF2aW5nIHRoZSBJRCBtYXAgYXZhaWxhYmxlIG9wZW5zIHVwIGV2ZW4gbW9yZSBwb3NzaWJpbGl0aWVzIGZvciBjb250ZXh0LWF3YXJlIHNlY3VyaXR5IGVuZm9yY2VtZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5hbWVzcGFjZWQgZmlsZSBzeXN0ZW1zIGFuZCB1c2VyIElEIG1hcHBpbmcgc2NlbmFyaW9zLgoKU28sIHdoZXJlIGRvIEkgZ28gZnJvbSBoZXJlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgc2VjdXJpdHkvS2NvbmZpZ2AgYW5kIGBmcy9LY29uZmlnYCB0byBzZWUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlc2UgZmVhdHVyZXMgYW5kIGVuc3VyZSBJJiMzOTttIGF3YXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb24gZGlmZmVyZW50IHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpZG1hcGAgaW50ZWdyYXRpb24gY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBpdCB3aWxsIGltcGFjdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kdWxlcy4gVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgZm9jdXNlZCByZXNlYXJjaCB0byB1bmRlcnN0YW5kIGhvdyBiZXN0IHRvIGFwcHJvYWNoIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDkyLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhbmQgcGVyaGFwcyBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBhcmVhcyBmb3IgZnVydGhlciBleHBsb3JhdGlvbiB3aXRoaW4gdGhlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdCAgc3RpbGwgcmVlbmFibGUgaXQgYnkgc2V0dGluZyBpdCB0byAwIGxhdGVyIG9uLCBvciBwZXJtYW5lbnRseVxuICA4MTpcdFx0ICBkaXNhYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMSAoZnJvbSB3aGljaCBubyBvdGhlciB0cmFuc2l0aW9uIHRvXG4gIDgyOlx0XHQgIDAgaXMgcG9zc2libGUgYW55bW9yZSkuXG4gIDgzOlx0XG4gIDg0Olx0XHQgIFVucHJpdmlsZWdlZCBCUEYgY291bGQgYmUgdXNlZCB0byBleHBsb2l0IGNlcnRhaW4gcG90ZW50aWFsXG4gIDg1Olx0XHQgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzIG9uIHVubWl0aWdhdGVkXG4gIDg2Olx0XHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxuICA4NzpcdFxuICA4ODpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBZLlxuICA4OTpcdFxuICA5MDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBCUEZfTFNNXG4gIDkzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk1Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gIDk2Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gIDk3Olx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAgOTg6XHRcdGhlbHBcbiAgOTk6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwMDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwMTpcdFxuIDEwMjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwMzpcdFxuIDEwNDpcdGVuZG1lbnUgIyBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMTkKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgTFNNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY3VycmVudCBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYHNlY3VyaXR5L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3RpbmcgTFNNIHNldHRpbmdzIHJlc2lkZSwgcmlnaHQ/IEkgZXhwZWN0IHRvIGZpbmQgdGhlIHVzdWFsIHN1c3BlY3RzIGRlZmluZWQgaW4gdGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIExTTSBjb25maWd1cmF0aW9uczogdGhlIG1hc3RlciBgU0VDVVJJVFlgIHN3aXRjaCwgb2YgY291cnNlLiBUaGVuLCBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgc3BlY2lmaWNzLiBJJiMzOTtsbCBleHBlY3QgdG8gc2VlIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIHdoYXRldmVyIGVsc2UgaXMgYmVpbmcgc3VwcG9ydGVkIG9yIGNvbnNpZGVyZWQgZm9yIHRoaXMga2VybmVsIGJ1aWxkLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNpc2lvbnMgcmVnYXJkaW5nIHRoZSBzZWN1cml0eSBwb3N0dXJlIG9mIHRoaXMga2VybmVsIGFyZSB1bHRpbWF0ZWx5IG1hZGUsIGFuZCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgd2Ugc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9LY29uZmlnPTg9c291cmNlIFwmIzM0O3NlY3VyaXR5L2tleXMvS2NvbmZpZ1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZy05LVxuc2VjdXJpdHkvS2NvbmZpZzoxMDpjb25maWcgU0VDVVJJVFlfRE1FU0dfUkVTVFJJQ1RcbnNlY3VyaXR5L0tjb25maWctMTEtXHRib29sIFwmIzM0O1Jlc3RyaWN0IHVucHJpdmlsZWdlZCBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBzeXNsb2dcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnPTUyPWNvbmZpZyBNU0VBTF9TWVNURU1fTUFQUElOR1Ncbi0tXG5zZWN1cml0eS9LY29uZmlnLTcyLVxuc2VjdXJpdHkvS2NvbmZpZzo3Mzpjb25maWcgU0VDVVJJVFlcbnNlY3VyaXR5L0tjb25maWctNzQtXHRib29sIFwmIzM0O0VuYWJsZSBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kZWxzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZz04Nj1jb25maWcgSEFTX1NFQ1VSSVRZX0FVRElUXG4tLVxuc2VjdXJpdHkvS2NvbmZpZy05MC1cbnNlY3VyaXR5L0tjb25maWc6OTE6Y29uZmlnIFNFQ1VSSVRZRlNcbnNlY3VyaXR5L0tjb25maWctOTItXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy05OC1cbnNlY3VyaXR5L0tjb25maWc6OTk6Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcbnNlY3VyaXR5L0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDtTb2NrZXQgYW5kIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTEwNy1cbnNlY3VyaXR5L0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9JTkZJTklCQU5EXG5zZWN1cml0eS9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7SW5maW5pYmFuZCBTZWN1cml0eSBIb29rc1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWctMTE2LVxuc2VjdXJpdHkvS2NvbmZpZzoxMTc6Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktfWEZSTVxuc2VjdXJpdHkvS2NvbmZpZy0xMTgtXHRib29sIFwmIzM0O1hGUk0gKElQU2VjKSBOZXR3b3JraW5nIFNlY3VyaXR5IEhvb2tzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0xMjktXG5zZWN1cml0eS9LY29uZmlnOjEzMDpjb25maWcgU0VDVVJJVFlfUEFUSFxuc2VjdXJpdHkvS2NvbmZpZy0xMzEtXHRib29sIFwmIzM0O1NlY3VyaXR5IGhvb2tzIGZvciBwYXRobmFtZSBiYXNlZCBhY2Nlc3MgY29udHJvbFwmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9MjY4PWNvbmZpZyBMU01cbi0tXG5zZWN1cml0eS9LY29uZmlnLTI4NC1cbnNlY3VyaXR5L0tjb25maWc6Mjg1OmNvbmZpZyBTRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxuc2VjdXJpdHkvS2NvbmZpZy0yODYtXHRib29sIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBjb21tb25jYXBcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7QXBwQXJtb3Igc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjE4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1ZyBjb2RlXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXHRib29sIFwmIzM0O0J1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzozODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfTUVTU0FHRVNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXHRib29sIFwmIzM0O0RlYnVnIG1lc3NhZ2VzIGVuYWJsZWQgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDYtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7QWxsb3cgbG9hZGVkIHBvbGljeSB0byBiZSBpbnRyb3NwZWN0ZWRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzE6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hfREVGQVVMVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcJiMzNDtFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6ODQ6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXHRib29sIFwmIzM0O0FsbG93IGV4cG9ydGluZyB0aGUgcmF3IGJpbmFyeSBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5Njpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1lcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTctXHRib29sIFwmIzM0O0FsbG93IGxvYWRpbmcgcG9saWN5IGluIGEgY29tcHJlc3NlZCBmb3JtYXRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBmdWxsIHZlcmlmaWNhdGlvbiBvZiBsb2FkZWQgcG9saWN5XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMTgtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjExOTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMjAtXHR0cmlzdGF0ZSBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxuc2VjdXJpdHkvaXBlL0tjb25maWc6NjptZW51Y29uZmlnIFNFQ1VSSVRZX0lQRVxuc2VjdXJpdHkvaXBlL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7SW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKVwmIzM0O1xuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnPTk4PWVuZG1lbnVcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTk5LVxuc2VjdXJpdHkvaXBlL0tjb25maWc6MTAwOmNvbmZpZyBTRUNVUklUWV9JUEVfS1VOSVRfVEVTVFxuc2VjdXJpdHkvaXBlL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgSVBFXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjM6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTQtXHRib29sIFwmIzM0O0xhbmRsb2NrIHN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTIzLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzoyNDpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tfTE9HXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVx0Ym9vbFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjgtXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI5OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19LVU5JVF9URVNUXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgTGFuZGxvY2tcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX0xPQURQSU5cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtQaW4gbG9hZCBvZiBrZXJuZWwgZmlsZXMgKG1vZHVsZXMsIGZ3LCBldGMpIHRvIG9uZSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTEzLVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjE0OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX0VORk9SQ0VcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBMb2FkUGluIGF0IGJvb3RcJiMzNDtcbi0tXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjQtXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6MjU6Y29uZmlnIFNFQ1VSSVRZX0xPQURQSU5fVkVSSVRZXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjYtXHRib29sIFwmIzM0O0FsbG93IHJlYWRpbmcgZmlsZXMgZnJvbSBjZXJ0YWluIG90aGVyIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGRtLXZlcml0eVwmIzM0O1xuLS1cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWc6MTpjb25maWcgU0VDVVJJVFlfTE9DS0RPV05fTFNNXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTItXHRib29sIFwmIzM0O0Jhc2ljIG1vZHVsZSBmb3IgZW5mb3JjaW5nIGtlcm5lbCBsb2NrZG93blwmIzM0O1xuLS1cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctOC1cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWc6OTpjb25maWcgU0VDVVJJVFlfTE9DS0RPV05fTFNNX0VBUkxZXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTEwLVx0Ym9vbCBcJiMzNDtFbmFibGUgbG9ja2Rvd24gTFNNIGVhcmx5IGluIGluaXRcJiMzNDtcbi0tXG5zZWN1cml0eS9zYWZlc2V0aWQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0FGRVNFVElEXG5zZWN1cml0eS9zYWZlc2V0aWQvS2NvbmZpZy0zLSAgICAgICAgYm9vbCBcJiMzNDtHYXRlIHNldGlkIHRyYW5zaXRpb25zIHRvIGxpbWl0IENBUF9TRVR7VS9HfUlEIGNhcGFiaWxpdGllc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtTRUxpbnV4IFN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MTI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTMtXHRib29sIFwmIzM0O1NFTGludXggYm9vdCBwYXJhbWV0ZXJcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjUtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMzktXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDEtXHRib29sIFwmIzM0O1NFTGludXggQVZDIFN0YXRpc3RpY3NcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDk6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUU1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTUwLVx0aW50IFwmIzM0O1NFTGludXggc2lkdGFiIGhhc2h0YWJsZSBzaXplXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYwLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYxOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVx0aW50IFwmIzM0O1NFTGludXggU0lEIHRvIGNvbnRleHQgc3RyaW5nIHRyYW5zbGF0aW9uIGNhY2hlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzEtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTczLVx0aW50IFwmIzM0O1NFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjgzOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0RFQlVHXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODQtXHRib29sIFwmIzM0O1NFTGludXgga2VybmVsIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TTUFDS1xuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBLZXJuZWwgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTUtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzozNDpjb25maWcgU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtQYWNrZXQgbWFya2luZyB1c2luZyBzZWNtYXJrcyBmb3IgbmV0ZmlsdGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00NC1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6NDU6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0FQUEVORF9TSUdOQUxTXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtUcmVhdCBkZWxpdmVyaW5nIHNpZ25hbHMgYXMgYW4gYXBwZW5kIG9wZXJhdGlvblwmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9UT01PWU9cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTMtXHRib29sIFwmIzM0O1RPTU9ZTyBMaW51eCBTdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTUtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoxNjpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BQ0NFUFRfRU5UUllcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTE3LVx0aW50IFwmIzM0O0RlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgbGVhcm5pbmcgbW9kZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTI4LVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Mjk6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19NQVhfQVVESVRfTE9HXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zMC1cdGludCBcJiMzNDtEZWZhdWx0IG1heGltYWwgY291bnQgZm9yIGF1ZGl0IGxvZ1wmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTM5LVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVJcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtBY3RpdmF0ZSB3aXRob3V0IGNhbGxpbmcgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXIuXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTUtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo1Njpjb25maWcgU0VDVVJJVFlfVE9NT1lPX1BPTElDWV9MT0FERVJcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTU3LVx0c3RyaW5nIFwmIzM0O0xvY2F0aW9uIG9mIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjUtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo2Njpjb25maWcgU0VDVVJJVFlfVE9NT1lPX0FDVElWQVRJT05fVFJJR0dFUlxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjctXHRzdHJpbmcgXCYjMzQ7VHJpZ2dlciBmb3IgY2FsbGluZyB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTc2LVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Nzc6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19JTlNFQ1VSRV9CVUlMVElOX1NFVFRJTkdcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtVc2UgaW5zZWN1cmUgYnVpbHQtaW4gc2V0dGluZ3MgZm9yIGZ1enppbmcgdGVzdHMuXCYjMzQ7XG4tLVxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS95YW1hL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfWUFNQVxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTMtXHRib29sIFwmIzM0O1lhbWEgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM4OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBDYWNoZWZpbGVzIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBmcy9jYWNoZWZpbGVzL0tjb25maWdgIOKAkyByaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgY2FjaGVmaWxlcyBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29udHJvbGxhYmxlIGF0IGNvbXBpbGUgdGltZS4gV2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgbGlrZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgb3IgbmFtZXNwYWNlIGNhcGFiaWxpdGllcz8KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SSBuZWVkIHRvIGxvb2sgZm9yIHRoZSBjb3JlIGZlYXR1cmVzIGZpcnN0LiYjMzQ7IFdoYXQgYXJlIHRoZSBjcml0aWNhbCBib29sZWFucyB0aGF0IGRpY3RhdGUgd2hldGhlciB0aGUgY2FjaGVmaWxlcyBjb2RlIGlzIGV2ZW4gKmluY2x1ZGVkKiBpbiB0aGUgYnVpbGQ/IFRoZW4sIEkgc2hvdWxkIHNjYW4gZm9yIGFueSBmdXJ0aGVyIG9wdGlvbnMgdGhhdCBhbGxvdyBhIGZpbmUtZ3JhaW5lZCB0dW5pbmcgb2YgdGhlIGNhY2hlJiMzOTtzIGJlaGF2aW9yLiBJIHdpbGwgcHJvYmFibHkgbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBjYXRjaCBteSBleWUsIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSB0dW5hYmxlcy4gTWF5YmUgc29tZSBvcHRpb25zIGZvciBkZWJ1Z2dpbmcgdGhhdCB3aWxsIGNvbWUgaW4gaGFuZHkuIEkga25vdyB0aGUgS2NvbmZpZyBzeW50YXggd2VsbCwgc28gSSYjMzk7bGwgYmUgcXVpY2tseSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IGBib29sYCwgYHRyaXN0YXRlYCwgYGludGAsIGFuZCBgc3RyaW5nYCB0eXBlcy4gRGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgZmlsZSBpcyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBQ0hFRklMRVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9LY29uZmlnLTItXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6Mzpjb25maWcgQ0FDSEVGSUxFU1xuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtGaWxlc3lzdGVtIGNhY2hpbmcgb24gZmlsZXNcJiMzNDtcbi0tXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTMtXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7RGVidWcgQ2FjaGVGaWxlc1wmIzM0O1xuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoyMzpjb25maWcgQ0FDSEVGSUxFU19FUlJPUl9JTkpFQ1RJT05cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBlcnJvciBpbmplY3Rpb24gZm9yIGNhY2hlZmlsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NjEKCQkJCQkJCW91dHB1dDogMjA5CgkJCQkJCQl0aG91Z2h0czogMTI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgbW50X2lkbWFwYCBwYXJhbWV0ZXIgdG8gYSBidW5jaCBvZiBjcml0aWNhbCBzZWN1cml0eS1yZWxhdGVkIFZGUyBob29rczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLiBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIHRoZSBWRlMgY2FsbGVycyBhbmQgdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcywgaW5jbHVkaW5nIEJQRiBzZWxmdGVzdHMuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCBtb2RpZmllcyAmIzM0O3JlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OwoKWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBWRlMgZnVuY3Rpb25zIChgaW5vZGVfcGVybWlzc2lvbmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGV0Yy4pIGFuZCBMU00gaG9vayB3cmFwcGVycyAoYHNlY3VyaXR5X2lub2RlXypgKS4gVGhlc2UgYXJlIGVudHJ5IHBvaW50cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlci1zcGFjZSB2aWEgc3lzdGVtIGNhbGxzIGxpa2UgYG9wZW5gLCBgbWtkaXJgLCBhbmQgb3RoZXJzLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgJiMzOTtGb2N1c1N5bWJvbHMmIzM5Oy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGluY2x1ZGUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1lYW5zIHdlIHNob3VsZCBleGNsdWRlIHRoaW5ncyBsaWtlIGBpbm9kZV9wZXJtaXNzaW9uYCAod2hpY2ggaXMgcHJhY3RpY2FsbHkgY2FsbGVkIG9uIGV2ZXJ5IGZpbGUgYWNjZXNzKS4gU28gdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBiZWNhdXNlIHRob3NlIGFyZSBjYWxsZWQgYXQgY3JlYXRpb24gdGltZS4KCk5leHQsIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFdlJiMzOTtsbCBuZWVkIGBTRUNVUklUWWAgdG8gZW5hYmxlIHRoZSBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSBhbmQgTFNNIGhvb2tzLiAgYEJQRl9MU01gIGlzIGFsc28gcmVxdWlyZWQgYmVjYXVzZSBpdCBsZXZlcmFnZXMgdGhlIGBpZG1hcGAgYXJndW1lbnQsIGFuZCB0aGVuIGVpdGhlciBgU0VDVVJJVFlfU0VMSU5VWGAgb3IgYFNFQ1VSSVRZX1NNQUNLYCBmb3IgYSBwcmFjdGljYWwgTFNNLgoKVGhlIGBCUEZfTFNNYCBkZXBlbmRlbmN5IG5lZWRzIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYFNFQ1VSSVRZYCwgYEJQRl9KSVRgLgoKU28sIHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBhcmUgYFNFQ1VSSVRZYCwgYEJQRl9MU01gLCBhbmQgZWl0aGVyIGBTRUNVUklUWV9TRUxJTlVYYCBvciBgU0VDVVJJVFlfU01BQ0tgLiAgTGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlIGFuZCBqdXN0IGxpc3QgYFNFQ1VSSVRZYCwgYEJQRl9MU01gLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGFuZCBgU0VDVVJJVFlfU01BQ0tgLgoKTm93LCBmb3IgYHNldC1yZXN1bHRzYDoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLCBkZWZpbml0ZWx5LgoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBleHRlbmRzIFZGUyBMU00gaG9va3MgYW5kIHRoZWlyIGNhbGxlcnMgdG8gcHJvcGFnYXRlIG1vdW50IGlkbWFwcGluZ3MgKGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGApLiBUaGlzIGFsbG93cyBzZWN1cml0eSBtb2R1bGVzIChpbmNsdWRpbmcgQlBGIExTTSwgU0VMaW51eCwgU21hY2spIHRvIHBlcmZvcm0gcGVybWlzc2lvbnMgY2hlY2tzIGF3YXJlIG9mIGlkbWFwcGVkIG1vdW50cy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBpbnRlcmZhY2VzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLgoqICAgKipFbmFibGVDb25maWdzKio6IGBTRUNVUklUWWAsIGBCUEZfTFNNYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLgoKVGhhdCBzaG91bGQgYmUgaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIChzZWN1cml0eV9pbm9kZV9jcmVhdGUsIHNlY3VyaXR5X2lub2RlX2xpbmssIHNlY3VyaXR5X2lub2RlX3N5bWxpbmssIHNlY3VyaXR5X2lub2RlX21rZGlyLCBzZWN1cml0eV9pbm9kZV9ta25vZCwgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbikgYWxvbmcgd2l0aCBWRlMgY2FsbGVycyB0byBwYXNzIGRvd24gbW91bnQgaWRtYXBzIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgZW5hYmxlcyBMU01zIGFuZCBCUEYgTFNNIHByb2dyYW1zIHRvIGluc3BlY3QgaWRtYXBwZWQgbW91bnRzIGR1cmluZyBmaWxlIG9wZXJhdGlvbnMsIGFsdGVyaW5nIHJlYWNoYWJsZSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIChzZWN1cml0eV9pbm9kZV9jcmVhdGUsIHNlY3VyaXR5X2lub2RlX2xpbmssIHNlY3VyaXR5X2lub2RlX3N5bWxpbmssIHNlY3VyaXR5X2lub2RlX21rZGlyLCBzZWN1cml0eV9pbm9kZV9ta25vZCwgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbikgYWxvbmcgd2l0aCBWRlMgY2FsbGVycyB0byBwYXNzIGRvd24gbW91bnQgaWRtYXBzIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgZW5hYmxlcyBMU01zIGFuZCBCUEYgTFNNIHByb2dyYW1zIHRvIGluc3BlY3QgaWRtYXBwZWQgbW91bnRzIGR1cmluZyBmaWxlIG9wZXJhdGlvbnMsIGFsdGVyaW5nIHJlYWNoYWJsZSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTljMjgyMThiMmQ1ZTU3ZDc3MmE2ODJlMDJhNTg3YmZhMzQ3MGI0OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDI6MDg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwpAQCAtNTEsMTQgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKJiM0MzsJcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKHVubGlrZWx5KHJldHZhbCkpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pOwogCkBAIC02OTUsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkCiAJaWYgKHVubGlrZWx5KCgoaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpCiAJCXJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiAKIC8qKgpAQCAtNDE4OCw3ICYjNDM7NDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAkJcmV0dXJuIC1FQUNDRVM7CS8qIHNob3VsZG4mIzM5O3QgaXQgYmUgRU5PU1lTPyAqLwogCiAJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CkBAIC00MjEyLDcgJiM0Mzs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAogCW1vZGUgJmFtcDs9IFNfSUFMTFVHTzsKIAltb2RlIHw9IFNfSUZSRUc7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpOwpAQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiB9CiAKIC8qKgpAQCAtNTI1OCw3ICYjNDM7NTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlnb3RvIGVycjsKIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIApAQCAtNTc4Myw3ICYjNDM7NTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFkaXItJmd0O2lfb3AtJmd0O3N5bWxpbmspCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTkwNyw3ICYjNDM7NTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTEyMCwyNiAmIzQzOzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBpbnQgKnhhdHRyX2NvdW50KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgYm9vbCByY3UpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgc3RydWN0IGlhdHRyICphdHRyKQogTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTQwNCwyNCAmIzQzOzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpOwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwogdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgY29uc3QgY2hhciAqb2xkX25hbWUpOwotaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkJCSAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LAogCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgIGJvb2wgcmN1KTsKLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgbWFzayk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQkgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCXN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJdW1vZGVfdCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTEzLDkgJiM0Mzs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkCiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeyB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKLQkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjYsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJaW50IG1vZGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTQ2LDkgJiM0Mzs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWQKICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlCkBAIC0xNjIyLDEyICYjNDM7MTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgIHVtb2RlX3QgbW9kZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTsKIApAQCAtMTY0OCw2ICYjNDM7MTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlCiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeQogICogQG5ld19kZW50cnk6IG5ldyBsaW5rCkBAIC0xNjU2LDEyICYjNDM7MTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogfQogCiAvKioKQEAgLTE2ODIsNiAmIzQzOzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogc3ltYm9saWMgbGluawogICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZQpAQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKIH0KIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeQogICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZQpAQCAtMTcwOSwxMSAmIzQzOzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGZpbGUKICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlCkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIH0KIAogLyoqCkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IGlub2RlCiAgKiBAbWFzazogYWNjZXNzIG1hc2sKICAqCkBAIC0xODM1LDExICYjNDM7MTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zMDc0LDEyICYjNDM7MzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgJmFtcDthZCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTsKIH0KQEAgLTMwODksMTIgJiM0MzszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpOwogfQpAQCAtMzEwNCw3ICYjNDM7MzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpOwogfQpAQCAtMzIzNiwxMyAmIzQzOzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYywKIAogLyoqCiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGUKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZAogICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZAogICoKICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0bwogICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKIHsKIAlpbnQgbWFzazsKIAl1MzIgcGVybXM7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0xMDg5LDE0ICYjNDM7MTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAKIC8qKgogICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmsKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3QKICAqIEBkaXI6IHVudXNlZAogICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0CiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJc3RydWN0IHNtYWNrX2tub3duICppc3A7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpAQCAtMTIyNiw2ICYjNDM7MTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogCiAvKioKICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKQomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCiAgKgpAQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgIGludCBtYXNrKQogewogCXN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS0mZ3Q7aV9zYik7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCkBAIC0xLDE4ICYjNDM7MSwzMCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtsc20uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaCYjMzQ7CiAKIGNoYXIgKkNNRF9BUkdTW10gPSB7JiMzNDt0cnVlJiMzNDssIE5VTEx9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUlOT0RFX0lETUFQX0FMTCA9ICgxVSAmbHQ7Jmx0OyA2KSAtIDEsCiYjNDM7fTsKJiM0MzsKIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpCiB7CiAJaW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzOwpAQCAtMzAsNiAmIzQzOzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogCXJldHVybiAtRUlOVkFMOwogfQogCiYjNDM7c3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpOwomIzQzOwl9IHdoaWxlIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpCiYjNDM7ewomIzQzOwlzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTsKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubyA9IDA7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbikKJiM0MzsJCXNhdmVkX2Vycm5vID0gRUlPOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChzYXZlZF9lcnJubykgewomIzQzOwkJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkLyVzJiMzNDssIHBpZCwgbmFtZSk7CiYjNDM7CWlmIChsZW4gJmx0OyAwIHx8IChzaXplX3QpbGVuICZndDs9IHNpemVvZihwYXRoKSkgewomIzQzOwkJZXJybm8gPSBFT1ZFUkZMT1c7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CXBpZF90IHBpZCwgd2FpdGVkOwomIzQzOwlpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmIChwaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJcmFpc2UoU0lHU1RPUCk7CiYjNDM7CQlfZXhpdCgwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQl3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIFdVTlRSQUNFRCk7CiYjNDM7CX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CWlmICh3YWl0ZWQgIT0gcGlkKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7CiYjNDM7CQlwaWQgPSAtMTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovCiYjNDM7CWlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7c2V0Z3JvdXBzJiMzNDssICYjMzQ7ZGVueSYjMzQ7KSAmYW1wOyZhbXA7IGVycm5vICE9IEVOT0VOVCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3VpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSB8fAomIzQzOwkgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O2dpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvbnMvdXNlciYjMzQ7LCBwaWQpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWlmIChwaWQgJmd0OyAwKSB7CiYjNDM7CQlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJd2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApOwomIzQzOwkJfSB3aGlsZSAod2FpdGVkICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsJfQomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0gewomIzQzOwkJLmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCwKJiM0MzsJfTsKJiM0MzsJaW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xOwomIzQzOwomIzQzOwl1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovCiYjNDM7CWZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCAmIzM0O3RtcGZzJiMzNDssIEZTT1BFTl9DTE9FWEVDKTsKJiM0MzsJaWYgKGZzZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7CiYjNDM7CWlmIChtbnRmZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsICYjMzQ7JiMzNDssIEFUX0VNUFRZX1BBVEgsICZhbXA7YXR0ciwKJiM0MzsJCSAgICBzaXplb2YoYXR0cikpKSB7CiYjNDM7CQljbG9zZShtbnRmZCk7CiYjNDM7CQltbnRmZCA9IC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAoZnNmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZnNmZCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHVzZXJuc19mZCk7CiYjNDM7CWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CXJldHVybiBtbnRmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSAtMSwgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLAomIzQzOwkJICAgIDA2MDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlmZCA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCAwNzAwKSwgJiMzNDtta2RpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoJiMzNDt0YXJnZXQmIzM0OywgZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7KSwgJiMzNDtzeW1saW5rJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCksICYjMzQ7bGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgJiMzNDtmaWZvJiMzNDssIDA2MDApLCAmIzM0O21rbm9kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IDA7CiYjNDM7b3V0OgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7bGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZGlyJiMzNDssIEFUX1JFTU9WRURJUik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgdG1wZGlyW10gPSAmIzM0Oy92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWCYjMzQ7OwomIzQzOwlfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDsKJiM0MzsJaW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7CiYjNDM7CWludCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgJiMzNDtta2R0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsICYjMzQ7b3Blbl90bXBkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsICYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgJiMzNDtpZGVudGl0eV9pZG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksCiYjNDM7CQkgICAgICAgJiMzNDtpZG1hcHBlZF9tb3VudCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLAomIzQzOwkJICAgICAgICYjMzQ7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCQkmIzM0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4mIzM0OykgPyAwIDogLTE7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoaWRtYXBwZWRfZGlyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGlkbWFwcGVkX2RpcmZkKTsKJiM0MzsJaWYgKGRpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShkaXJmZCk7CiYjNDM7CXJtZGlyKHRtcGRpcik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogewogCXN0cnVjdCBicGZfbGluayAqbGluazsKQEAgLTUzLDYgJiM0MzsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogCiAJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiAKJiM0MzsJZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcCYjMzQ7KSkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gc3RhY2tfbXByb3RlY3QoKTsKIAlpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspIHx8CiAJICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspKQpAQCAtNzEsNiAmIzQzOzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAlza2VsLSZndDtic3MtJmd0O2NvcHlfdGVzdCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDticHJtX2NvdW50ID0gMDsKIAlza2VsLSZndDtic3MtJmd0O21wcm90ZWN0X2NvdW50ID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKQEAgLTg0LDYgJiM0Mzs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7CiBpbnQgbXByb3RlY3RfY291bnQgPSAwOwogaW50IGJwcm1fY291bnQgPSAwOwomIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzO19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9DUkVBVEUJPSAxVSAmbHQ7Jmx0OyAwLAomIzQzOwlJTk9ERV9JRE1BUF9MSU5LCT0gMVUgJmx0OyZsdDsgMSwKJiM0MzsJSU5PREVfSURNQVBfU1lNTElOSwk9IDFVICZsdDsmbHQ7IDIsCiYjNDM7CUlOT0RFX0lETUFQX01LRElSCT0gMVUgJmx0OyZsdDsgMywKJiM0MzsJSU5PREVfSURNQVBfTUtOT0QJPSAxVSAmbHQ7Jmx0OyA0LAomIzQzOwlJTk9ERV9JRE1BUF9QRVJNSVNTSU9OCT0gMVUgJmx0OyZsdDsgNSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkICZhbXA7JmFtcDsgaWRtYXA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBpZG1hcC0mZ3Q7dWlkX21hcC5ucl9leHRlbnRzID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgaWRtYXAtJmd0O2dpZF9tYXAubnJfZXh0ZW50cyA9PSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJaWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpCiYjNDM7CQlpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vazsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9jcmVhdGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2xpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX3N5bWxpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta2RpciYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX21rbm9kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpOwomIzQzO30KIAogU0VDKCYjMzQ7bHNtL2ZpbGVfbXByb3RlY3QmIzM0OykKIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIExTTSBIb29rIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGNvbW1pdCBtZXNzYWdlIHNpbXBseSBpbmRpY2F0ZXMgaXQmIzM5O3MgYSBwYXRjaCB1bmRlciByZXZpZXcgcmVsYXRlZCB0byBzeXotY2x1c3Rlci4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBmZXcgY29yZSBhcmVhczogYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYSBjb3VwbGUgb2YgaW5jbHVkZSBmaWxlcyAoYGxpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBsaW51eC9zZWN1cml0eS5oYCksIGFuZCB0aGUgYHNlY3VyaXR5YCBkaXJlY3RvcnkgaXRzZWxmIHdpdGggYHNlY3VyaXR5LmNgLCBgc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzbWFjay9zbWFja19sc20uY2AuICBJJiMzOTttIGFsc28gc2VlaW5nIGEgY2hhbmdlIGluIHRoZSBicGYgc2VsZnRlc3RzLgoKV2hhdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgcGFzc2luZyBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgZG93biBpbnRvIGEgaGFuZGZ1bCBvZiBMU00gaG9va3MuIFNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZyBhcmUgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IHRoZSBgaWRtYXBgOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGFuZCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAuCgpUYWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wYWN0ZWQgTFNNIGltcGxlbWVudGF0aW9ucywgSSBzZWUgYSBwYXR0ZXJuLiAgU0VMaW51WCAoYHNlbGludXhfaW5vZGVfLi4uYCkgYW5kIFNtYWNrIChgc21hY2tfaW5vZGVfLi4uYCkgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2ltcGx5IGFjY2VwdCB0aGUgbmV3IGBpZG1hcGAgcGFyYW1ldGVyIHRvIG1hdGNoIHRoZSBmdW5jdGlvbiBwcm90b3R5cGU7IGl0JiMzOTtzIGEgc3RyYWlnaHQtZm9yd2FyZCBhZGRpdGlvbiB0byB0aGVpciBzaWduYXR1cmVzLiAgSW4gYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGl0JiMzOTtzIHBhc3NpbmcgYCZhbXA7bm9wX21udF9pZG1hcGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgZnMvbmFtZWkuY2Agc2VlbXMgdG8gYmUgcGFzc2luZyBlaXRoZXIgdGhlIGBpZG1hcGAgb3IgYCZhbXA7bm9wX21udF9pZG1hcGAgYXMgd2VsbC4gVGhlIGJwZiBzZWxmdGVzdHMgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBob29rIHNpZ25hdHVyZXMuCgpNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGFyZSB0aGUgb25seSBMU00gaW1wbGVtZW50YXRpb25zIGFmZmVjdGVkIGFuZCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0IG1lIHF1aWNrbHkgcnVuIGEgYGdyZXBgIHRvIGVuc3VyZSBubyBvdGhlciBMU00gaG9va3Mgb3IgY2FsbGVycyBhcmUgbHVya2luZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtaXNzZWQuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSBoZXJlIHRvIGVuc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9pbm9kZV9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jPTQ5PXN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuLS1cbmZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYy02MC1cbmZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYzo2MTpcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jLTYyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9uYW1laS5jPTQxNzc9aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL25hbWVpLmMtNDE5MC1cdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG5mcy9uYW1laS5jOjQxOTE6XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuZnMvbmFtZWkuYy00MTkyLVx0aWYgKGVycm9yKVxuLS1cbmZzL25hbWVpLmM9NDIwND1pbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL25hbWVpLmMtNDIxNC1cdG1vZGUgfD0gU19JRlJFRztcbmZzL25hbWVpLmM6NDIxNTpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbmZzL25hbWVpLmMtNDIxNi1cdGlmIChlcnJvcilcbi0tXG5mcy9uYW1laS5jPTQzMTU9c3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvbmFtZWkuYy00MzMwLVxuZnMvbmFtZWkuYzo0MzMxOlx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuZnMvbmFtZWkuYy00MzMyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDA0PWludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA2LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDc6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA4LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD05MDI9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTkwOC1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo5MDk6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTkxMC1cdFx0XHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjA5PWludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTUtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MTY6ICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjMyLX1cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYzMzpFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQyMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNlY3VyaXR5LUZvY3VzZWQgUmV2aWV3KioKCk9rYXksIHRpbWUgdG8gbWV0aG9kaWNhbGx5IGRpZyBpbnRvIHRoaXMgc2VjdXJpdHkgYXNwZWN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgc3lzdGVtIGhhbmRsZXMgaW5vZGUgcGVybWlzc2lvbnMgYW5kIGNyZWF0aW9uLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGNvcmUgc2VjdXJpdHkgbWVjaGFuaXNtcy4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBhdWRpdCB0aGUgc3RhbmRhcmQgTFNNIGhvb2tzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZDogc3BlY2lmaWNhbGx5LCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYC4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkJ1dCBJIGFsc28gbmVlZCB0byB0aGluayBtb3JlIGJyb2FkbHkuIEFyZSB0aGVyZSAqYW55KiBvdGhlciBMU00gaW1wbGVtZW50YXRpb25zIGFjdGl2ZSBvbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIG9yIG92ZXJsYXBwaW5nIGJlaGF2aW9ycyBmcm9tIHRoaW5ncyBsaWtlIEFwcEFybW9yLCBMYW5kbG9jaywgVG9tb3lvLCBvciBhbnkgb3RoZXIgY3VzdG9tIExTTXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gZGVwbG95ZWQuIFRoYXQmIzM5O3MgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGFjcm9zcyB0aGUgb3RoZXIgTFNNcyBmb3IgcmVsZXZhbnQgaG9va3MsIGZvY3VzaW5nIG9uIGBpbm9kZV9wZXJtaXNzaW9uYCBvciBgaW5vZGVfY3JlYXRlYC4gRmluZGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIGltcGxlbWVudGF0aW9ucyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2VjdXJpdHkgcGljdHVyZSBoZXJlLiBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhIHNpbmdsZSBsYXllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5vZGVfcGVybWlzc2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTEyMjU9c3RhdGljIHZvaWQgaW5vZGVfZnJlZV9ieV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0MS0gKiBzZWN1cml0eV9pbm9kZV9mcmVlKCksIEBpbm9kZSBtYXkgc3RpbGwgYmUgcmVmZXJlbmNlZCBpbiBhIFZGUyBwYXRoIHdhbGtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0MjogKiBhbmQgY2FsbHMgdG8gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIG1heSBiZSBtYWRlIGR1cmluZywgb3IgYWZ0ZXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTEyNDMtICogYSBjYWxsIHRvIHNlY3VyaXR5X2lub2RlX2ZyZWUoKS4gIEZvciB0aGlzIHJlYXNvbiB0aGUgaW5vZGUtXHUwMDNlaV9zZWN1cml0eVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ0LSAqIGZpZWxkIGlzIHJlbGVhc2VkIHZpYSBhIGNhbGxfcmN1KCkgY2FsbGJhY2sgYW5kIGFueSBMU01zIHdoaWNoIG5lZWQgdG9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0NTogKiByZXRhaW4gaW5vZGUgc3RhdGUgZm9yIHVzZSBpbiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgc2hvdWxkIG9ubHlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0Ni0gKiByZWxlYXNlIHRoYXQgc3RhdGUgaW4gdGhlIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1KCkgTFNNIGhvb2sgY2FsbGJhY2suXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xODIyPWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODMwLS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODMxOiAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDYtXHRcdFx0ICAgICAgaW50IG1hc2spXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ5LVx0XHRyZXR1cm4gMDtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg1MDpcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NTEtfVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MjcyNz1pbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczNi0gKiBTYXZlIG9wZW4tdGltZSBwZXJtaXNzaW9uIGNoZWNraW5nIHN0YXRlIGZvciBsYXRlciB1c2UgdXBvbiBmaWxlX3Blcm1pc3Npb24sXG5zZWN1cml0eS9zZWN1cml0eS5jOjI3Mzc6ICogYW5kIHJlY2hlY2sgYWNjZXNzIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkIHNpbmNlIGlub2RlX3Blcm1pc3Npb24uXG5zZWN1cml0eS9zZWN1cml0eS5jLTI3MzgtICpcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEzMD1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxNDY6c3RhdGljIG5vaW5saW5lIGludCBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE0Ny1cdFx0XHRcdFx0ICAgdTMyIHBlcm1zLCB1MzIgYXVkaXRlZCwgdTMyIGRlbmllZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjQyLS8qKlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI0NC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNTE6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjk5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XHRyYzIgPSBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBwZXJtcywgYXVkaXRlZCwgZGVuaWVkLCByYyk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwMS1cdGlmIChyYzIpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQyNjM9c3RhdGljIGludCBzZWxpbnV4X2ZpbGVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDI4MC1cdCAqIFNpbmNlIHRoZSBpbm9kZSBsYWJlbCBvciBwb2xpY3kgc2Vxbm8gbWF5IGhhdmUgY2hhbmdlZFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XHQgKiBiZXR3ZWVuIHRoZSBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gY2hlY2sgYW5kIHRoZSBzYXZpbmdcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgyLVx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTY3PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTctXHRMU01fSE9PS19JTklUKGlub2RlX2ZvbGxvd19saW5rLCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE4Olx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24pLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTktXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNlbGludXhfaW5vZGVfc2V0YXR0ciksXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTAyMD1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzMy1cdCAqIFVOSVggZG9tYWluIHNvY2tldHMgdXNlIGxvd2VyIGxldmVsIHNvY2tldCBkYXRhLiBMZXRcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMzQ6XHQgKiBVRFMgaW5vZGUgaGF2ZSBmaXhlZCAqIGxhYmVsIHRvIGtlZXAgc21hY2tfaW5vZGVfcGVybWlzc2lvbigpIGNhbG1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMzUtXHQgKiB3aGVuIGNhbGxlZCBmcm9tIHVuaXhfZmluZF9ic2QoKVxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTEyMDM9c3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIyOC0vKipcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMjk6ICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjMwLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzNy0gKi9cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMzg6c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzOS1cdFx0XHRcdCAgaW50IG1hc2spXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9NTE1OD1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzbWFja19ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNtYWNrX2lub2RlX3JlbmFtZSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTgxOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxODItXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNtYWNrX2lub2RlX3NldGF0dHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5NwoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA3MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhIHJlZmFjdG9yLCBwcmltYXJpbHkgY29uY2VybmluZyB0aGUgcHJvcGFnYXRpb24gb2YgdGhlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgdGhyb3VnaCBzZXZlcmFsIGlub2RlIExTTSBob29rcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBjYWxsZXJzLiBNeSB0aG91Z2h0IHByb2Nlc3MgaXMgY2xlYXI6CgpGaXJzdCwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBpbm9kZSBMU00gaG9va3PigJRgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmDigJR0byBpbmNsdWRlIHRoZSBgaWRtYXBgIHBhcmFtZXRlci4gVGhlIFZGUyBjYWxsZXJzIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYXJlIHVwZGF0ZWQgdG8gY29ycmVjdGx5IHBhc3MgdGhlIGBpZG1hcGAgKG9yIGAmYW1wO25vcF9tbnRfaWRtYXBgKSBpbnRvIHRoZSByZWxldmFudCBzZWN1cml0eSB3cmFwcGVycy4gVGhpcyBjaGFuZ2UgYWxzbyBleHRlbmRzIHRvIGltcGxlbWVudGF0aW9ucyBzdWNoIGFzIFNFTGludXgsIFNtYWNrIGFuZCBMU00gQlBGIHdoaWNoIGFsc28gdXBkYXRlIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgcGFyYW1ldGVyLiBJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnZvbHZlZCwgc28gSSBnbyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcjoqKiBOb3RoaW5nIG5ldyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIGNoYW5nZXMgdG8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RsIGFyZSBoYXBwZW5pbmcgaGVyZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSBgaWRtYXBgIHBvaW50ZXIgYmVpbmcgcGFzc2VkIGFyb3VuZCBpcyBhIHZhbGlkIHBvaW50ZXIgb3JpZ2luYXRpbmcgZnJvbSBWRlMgY2FsbGVycywgb3IgdGhlIHNhZmUgYCZhbXA7bm9wX21udF9pZG1hcGAuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgc2NlbmFyaW9zIHdoZXJlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbjoqKiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb2RlIHBhdGguCjQuICAqKkJvdW5kcyBjaGVja3Mgb3Igb3RoZXIgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogVGhlcmUmIzM5O3Mgbm8gbWFuaXB1bGF0aW9uIG9mIG1lbW9yeSwgYm91bmRzIGNoZWNrcywgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gdGhpcywgS01TQU4gaXMgdW5saWtlbHkgdG8gaWRlbnRpZnkgYW55IGlzc3Vlcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBpcyBwcmltYXJpbHkgY2hhbmdpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBwcm9wYWdhdGUgYW4gZXhpc3RpbmcgcGFyYW1ldGVyLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdGhhdCBLTVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGluY29ycmVjdCBwb2ludGVycyB3aGljaCBhcmUgdHlwZXMgb2YgbWVtb3J5IGVycm9ycyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBncmVhdCBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGlzbiYjMzk7dCBwcmVzZW50IGhlcmUuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBgZmFsc2VgLgoKTm93LCBJJiMzOTtsbCBzb2xpZGlmeSB0aGUgcmVhc29uaW5nOgoKKiAgIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIGV4dGVuZGluZyBMU00gaG9va3Mgd2l0aCB0aGUgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBwYXJhbWV0ZXIuCiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLgoqICAgTm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyBvciBpbnRlcmFjdGlvbnMgYXJlIG1vZGlmaWVkIG9yIGFkZGVkLgoqICAgVGhlIGNoYW5nZSBpcyBhYm91dCBwbHVtYmluZyBhbiBleGlzdGluZyBwb2ludGVyIChgaWRtYXBgIC8gYCZhbXA7bm9wX21udF9pZG1hcGApLgoqICAgQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGxpa2VseSBiZSBwb2ludGVyLXJlbGF0ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIGZhdWx0IGhhbmRsaW5nIHdvdWxkIGNhdGNoIHRoZW0uCiogICBUaHVzLCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4KSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCBhbmQgbm93IEkmIzM5O2xsIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgc2V2ZXJhbCBpbm9kZS1yZWxhdGVkIExTTSBob29rcyAoYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBhbmQgYGlub2RlX3Blcm1pc3Npb25gKSBhbmQgdGhlaXIgd3JhcHBlcnMgYnkgcGFzc2luZyBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgLiBJdCBhbHNvIHVwZGF0ZXMgU0VMaW51eCBhbmQgU21hY2sgaW1wbGVtZW50YXRpb25zIGFuZCBhZGRzIEJQRiBMU00gc2VsZnRlc3RzIGZvciBpZG1hcHBlZCBtb3VudHMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcGFyYW1ldGVyIHBsdW1iaW5nIHVwZGF0ZSBhY3Jvc3MgVkZTIGFuZCBMU00gaW50ZXJmYWNlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCwgYW5kIG5vIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciBkZXJlZmVyZW5jaW5nIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZGV0ZWN0ZWQgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA4OjQ5Ljk3MDc4ODc2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTUwNDI5NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIHNldmVyYWwgaW5vZGUtcmVsYXRlZCBMU00gaG9va3MgKGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYCkgYW5kIHRoZWlyIHdyYXBwZXJzIGJ5IHBhc3NpbmcgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYC4gSXQgYWxzbyB1cGRhdGVzIFNFTGludXggYW5kIFNtYWNrIGltcGxlbWVudGF0aW9ucyBhbmQgYWRkcyBCUEYgTFNNIHNlbGZ0ZXN0cyBmb3IgaWRtYXBwZWQgbW91bnRzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcGFyYW1ldGVyIHBsdW1iaW5nIHVwZGF0ZSBhY3Jvc3MgVkZTIGFuZCBMU00gaW50ZXJmYWNlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCwgYW5kIG5vIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciBkZXJlZmVyZW5jaW5nIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZGV0ZWN0ZWQgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGlub2RlIExTTSBob29rcyAoc2VjdXJpdHlfaW5vZGVfY3JlYXRlLCBzZWN1cml0eV9pbm9kZV9saW5rLCBzZWN1cml0eV9pbm9kZV9zeW1saW5rLCBzZWN1cml0eV9pbm9kZV9ta2Rpciwgc2VjdXJpdHlfaW5vZGVfbWtub2QsIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24pIGFsb25nIHdpdGggVkZTIGNhbGxlcnMgdG8gcGFzcyBkb3duIG1vdW50IGlkbWFwcyAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGVuYWJsZXMgTFNNcyBhbmQgQlBGIExTTSBwcm9ncmFtcyB0byBpbnNwZWN0IGlkbWFwcGVkIG1vdW50cyBkdXJpbmcgZmlsZSBvcGVyYXRpb25zLCBhbHRlcmluZyByZWFjaGFibGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDg6NDkuOTcwNzk4MDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY0MzA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlOWMyODIxOGIyZDVlNTdkNzcyYTY4MmUwMmE1ODdiZmEzNDcwYjQ4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDI6MDg6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXFxuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcXG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcXG4rKysgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcXG5AQCAtNTEsMTQgKzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbitcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihcXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXFxcIixcXG4gXFx0XFx0ICAgICAgIHJldCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbitcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRwcl9lcnIoXFxcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcXFwiLFxcbiBcXHRcXHQgICAgICAgcmV0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKHVubGlrZWx5KHJldHZhbCkpXFxuIFxcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XFxuK1xcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcXG4gXFxuQEAgLTY5NSw3ICs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZFxcbiBcXHRpZiAodW5saWtlbHkoKChpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xcbitcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNDE4OCw3ICs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xcbiBcXG4gXFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXFxuIFxcbiBcXHRtb2RlIFxcdTAwMjY9IFNfSUFMTFVHTztcXG4gXFx0bW9kZSB8PSBTX0lGUkVHO1xcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xcbkBAIC00MzI4LDcgKzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTUyNTgsNyArNTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbkBAIC01NzgzLDcgKzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoIWRpci1cXHUwMDNlaV9vcC1cXHUwMDNlc3ltbGluaylcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG5AQCAtMTIwLDI2ICsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGludCAqeGF0dHJfY291bnQpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCB1bW9kZV90IG1vZGUpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IHVtb2RlX3QgbW9kZSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGJvb2wgcmN1KVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbkBAIC00MDQsMjQgKzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XFxuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcXG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXFxuIFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCAgICAgICBib29sIHJjdSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgICAgIGludCBtYXNrKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTtcXG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0IHVtb2RlX3QgbW9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTEzLDkgKzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4geyB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTkyNiwxNiArOTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IG1vZGUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05NDYsOSArOTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IG1vZGUsIGRldl90IGRldilcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxcbkBAIC0xNjIyLDEyICsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSlcXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XFxuIFxcbkBAIC0xNjQ4LDYgKzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcXG5AQCAtMTY1NiwxMiArMTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2ODIsNiArMTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xcbiB9XFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxcbiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlXFxuQEAgLTE3MDksMTEgKzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xcbiBcXG5AQCAtMTczNSw2ICsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBuZXcgZmlsZVxcbiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZVxcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGlub2RlOiBpbm9kZVxcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcXG4gICpcXG5AQCAtMTgzNSwxMSArMTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgICAgIGludCBtYXNrKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbkBAIC0zMDc0LDEyICszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ICAgIFxcdTAwMjZhZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcXG4gfVxcbkBAIC0zMDg5LDEyICszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcXG4gfVxcbkBAIC0zMTA0LDcgKzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcXG4gfVxcbkBAIC0zMjM2LDEzICszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsXFxuIFxcbiAvKipcXG4gICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxcbiAgKlxcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxcbiAgKi9cXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbiB7XFxuIFxcdGludCBtYXNrO1xcbiBcXHR1MzIgcGVybXM7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5AQCAtMTA4OSwxNCArMTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcbiAvKipcXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3RcXG4gICogQGRpcjogdW51c2VkXFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcXG4gICovXFxuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xcbiBcXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XFxuQEAgLTEyMjYsNiArMTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbiBcXG4gLyoqXFxuICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKVxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxcbiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWRcXG4gICpcXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxcbiAgKi9cXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgaW50IG1hc2spXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcXG5AQCAtMSwxOCArMSwzMCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuIFxcbiAvKlxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImxzbS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsc21fdGFpbGNhbGwuc2tlbC5oXFxcIlxcbiBcXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcXFwidHJ1ZVxcXCIsIE5VTEx9O1xcbiBcXG4rZW51bSB7XFxuK1xcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSAtIDEsXFxuK307XFxuK1xcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxcbiB7XFxuIFxcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcXG5AQCAtMzAsNiArNDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpO1xcbitcXHR9IHdoaWxlIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcXG4re1xcbitcXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcXG4rXFx0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcXG4rXFx0XFx0c2F2ZWRfZXJybm8gPSBFSU87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKHNhdmVkX2Vycm5vKSB7XFxuK1xcdFxcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF07XFxuK1xcdGludCBsZW47XFxuK1xcbitcXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy8lZC8lc1xcXCIsIHBpZCwgbmFtZSk7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFxcdTAwM2U9IHNpemVvZihwYXRoKSkge1xcbitcXHRcXHRlcnJubyA9IEVPVkVSRkxPVztcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF07XFxuK1xcdHBpZF90IHBpZCwgd2FpdGVkO1xcbitcXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xcbitcXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRpZiAocGlkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpXFxuK1xcdFxcdFxcdF9leGl0KDEpO1xcbitcXHRcXHRyYWlzZShTSUdTVE9QKTtcXG4rXFx0XFx0X2V4aXQoMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XFxuK1xcdH0gd2hpbGUgKHdhaXRlZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xcbitcXHRpZiAod2FpdGVkICE9IHBpZClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XFxuK1xcdFxcdHBpZCA9IC0xO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cXG4rXFx0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXFxcInNldGdyb3Vwc1xcXCIsIFxcXCJkZW55XFxcIikgXFx1MDAyNlxcdTAwMjYgZXJybm8gIT0gRU5PRU5UKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXFxcInVpZF9tYXBcXFwiLCBcXFwiMCAwIDFcXFwiKSB8fFxcbitcXHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcXFwiZ2lkX21hcFxcXCIsIFxcXCIwIDAgMVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIi9wcm9jLyVkL25zL3VzZXJcXFwiLCBwaWQpO1xcbitcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcXG4rXFx0XFx0ZXJybm8gPSBFT1ZFUkZMT1c7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcbitvdXQ6XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGlmIChwaWQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGtpbGwocGlkLCBTSUdLSUxMKTtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XFxuK1xcdFxcdH0gd2hpbGUgKHdhaXRlZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xcbitcXHR9XFxuK1xcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuK1xcdHJldHVybiBmZDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xcbitcXHRcXHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxcbitcXHR9O1xcbitcXHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XFxuK1xcbitcXHR1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7XFxuK1xcdGlmICh1c2VybnNfZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXFxuK1xcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcXFwidG1wZnNcXFwiLCBGU09QRU5fQ0xPRVhFQyk7XFxuK1xcdGlmIChmc2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XFxuK1xcdGlmIChtbnRmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XFxuK1xcdGlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsIFxcXCJcXFwiLCBBVF9FTVBUWV9QQVRILCBcXHUwMDI2YXR0cixcXG4rXFx0XFx0ICAgIHNpemVvZihhdHRyKSkpIHtcXG4rXFx0XFx0Y2xvc2UobW50ZmQpO1xcbitcXHRcXHRtbnRmZCA9IC0xO1xcbitcXHR9XFxuK1xcbitvdXQ6XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGlmIChmc2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZzZmQpO1xcbitcXHRpZiAodXNlcm5zX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHVzZXJuc19mZCk7XFxuK1xcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuK1xcdHJldHVybiBtbnRmZDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpXFxuK3tcXG4rXFx0aW50IGZkID0gLTEsIHJldCA9IC0xO1xcbitcXG4rXFx0ZmQgPSBvcGVuYXQoZGlyZmQsIFxcXCJmaWxlXFxcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxcbitcXHRcXHQgICAgMDYwMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcXFwiY3JlYXRlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdGZkID0gLTE7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCBcXFwiZGlyXFxcIiwgMDcwMCksIFxcXCJta2RpclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KFxcXCJ0YXJnZXRcXFwiLCBkaXJmZCwgXFxcInN5bWxpbmtcXFwiKSwgXFxcInN5bWxpbmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgXFxcImZpbGVcXFwiLCBkaXJmZCwgXFxcImxpbmtcXFwiLCAwKSwgXFxcImxpbmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcXFwiZmlmb1xcXCIsIDA2MDApLCBcXFwibWtub2RcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSAwO1xcbitvdXQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwibGlua1xcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImZpZm9cXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJzeW1saW5rXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwiZmlsZVxcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImRpclxcXCIsIEFUX1JFTU9WRURJUik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbClcXG4re1xcbitcXHRjaGFyIHRtcGRpcltdID0gXFxcIi92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWFxcXCI7XFxuK1xcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xcbitcXHRpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXFxcIm1rZHRlbXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0ZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcXFwib3Blbl90bXBkaXJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZG1hcHBlZF9kaXJmZCA9IGNyZWF0ZV9pZG1hcHBlZF90bXBmcygpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXFxcImNyZWF0ZV9pZG1hcHBlZF90bXBmc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksIFxcXCJpZGVudGl0eV9pZG1hcFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLFxcbitcXHRcXHQgICAgICAgXFxcImlkbWFwcGVkX21vdW50XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCxcXG4rXFx0XFx0ICAgICAgIFxcXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXQgPSBBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcXG4rXFx0XFx0XFx0XFxcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cXFwiKSA/IDAgOiAtMTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGlkbWFwcGVkX2RpcmZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGlkbWFwcGVkX2RpcmZkKTtcXG4rXFx0aWYgKGRpcmZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGRpcmZkKTtcXG4rXFx0cm1kaXIodG1wZGlyKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcXG4gXFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xcbiBcXG4rXFx0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfbHNtX2lub2RlX2lkbWFwXFxcIikpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xcbiBcXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcXFwic3RhY2tfbXByb3RlY3RcXFwiKSB8fFxcbiBcXHQgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sIFxcXCJzdGFja19tcHJvdGVjdFxcXCIpKVxcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY29weV90ZXN0ID0gMDtcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VicHJtX2NvdW50ID0gMDtcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbkBAIC04NCw2ICs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xcbiBpbnQgYnBybV9jb3VudCA9IDA7XFxuK19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcXG4rXFxuK2VudW0ge1xcbitcXHRJTk9ERV9JRE1BUF9DUkVBVEVcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDAsXFxuK1xcdElOT0RFX0lETUFQX0xJTktcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDEsXFxuK1xcdElOT0RFX0lETUFQX1NZTUxJTktcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDIsXFxuK1xcdElOT0RFX0lETUFQX01LRElSXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAzLFxcbitcXHRJTk9ERV9JRE1BUF9NS05PRFxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgNCxcXG4rXFx0SU5PREVfSURNQVBfUEVSTUlTU0lPTlxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgNSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXFxuK3tcXG4rXFx0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcbitcXHRyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgXFx1MDAyNlxcdTAwMjYgaWRtYXA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcXG4re1xcbitcXHRyZXR1cm4gaWRtYXAtXFx1MDAzZXVpZF9tYXAubnJfZXh0ZW50cyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpZG1hcC1cXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcXG4re1xcbitcXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxcbitcXHRcXHRpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiB8PSBob29rO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfY3JlYXRlXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9saW5rXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9zeW1saW5rXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfbWtkaXJcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9ta25vZFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfcGVybWlzc2lvblxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XFxuK31cXG4gXFxuIFNFQyhcXFwibHNtL2ZpbGVfbXByb3RlY3RcXFwiKVxcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA4OjUwLjUxODA1MjE5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzc4MzY4MTUzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCIsXG4gICAgXCJDQUNIRUZJTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW5vZGVfY3JlYXRlXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9zeW1saW5rXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta2RpclwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtub2RcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIChzZWN1cml0eV9pbm9kZV9jcmVhdGUsIHNlY3VyaXR5X2lub2RlX2xpbmssIHNlY3VyaXR5X2lub2RlX3N5bWxpbmssIHNlY3VyaXR5X2lub2RlX21rZGlyLCBzZWN1cml0eV9pbm9kZV9ta25vZCwgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbikgYWxvbmcgd2l0aCBWRlMgY2FsbGVycyB0byBwYXNzIGRvd24gbW91bnQgaWRtYXBzIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgZW5hYmxlcyBMU01zIGFuZCBCUEYgTFNNIHByb2dyYW1zIHRvIGluc3BlY3QgaWRtYXBwZWQgbW91bnRzIGR1cmluZyBmaWxlIG9wZXJhdGlvbnMsIGFsdGVyaW5nIHJlYWNoYWJsZSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOWMyODIxOGIyZDVlNTdkNzcyYTY4MmUwMmE1ODdiZmEzNDcwYjQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwMjowODo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5AQCAtNTEsMTQgKzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXCIsXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmICh1bmxpa2VseShyZXR2YWwpKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcbiBcbkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNDE4OCw3ICs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcdC8qIHNob3VsZG4ndCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG5AQCAtNDIxMiw3ICs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcbiBcdG1vZGUgXHUwMDI2PSBTX0lBTExVR087XG4gXHRtb2RlIHw9IFNfSUZSRUc7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuIH1cbiBcbiAvKipcbkBAIC01MjU4LDcgKzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTM5NSw3ICs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgKzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFkaXItXHUwMDNlaV9vcC1cdTAwM2VzeW1saW5rKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTkwNyw3ICs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTEyMCwyNiArMTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgaW50ICp4YXR0cl9jb3VudClcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHQgc3RydWN0IGlub2RlICppbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNDA0LDI0ICs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0XHRcdCAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LFxuIFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCAgICAgICBib29sIHJjdSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spO1xuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSArOTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0IHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTEzLDkgKzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MjYsMTYgKzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTQ2LDkgKzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyArOTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgKzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcbkBAIC0xNjIyLDEyICsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgKzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xuQEAgLTE2NTYsMTIgKzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgKzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxuQEAgLTE2OTAsMTYgKzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5XG4gICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZVxuQEAgLTE3MDksMTEgKzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuIFxuQEAgLTE3MzUsNiArMTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGZpbGVcbiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZVxuQEAgLTE3NDcsMTIgKzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTgyMyw2ICsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiBpbm9kZVxuICAqIEBtYXNrOiBhY2Nlc3MgbWFza1xuICAqXG5AQCAtMTgzNSwxMSArMTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0zMDc0LDEyICszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspO1xuIH1cbkBAIC0zMDg5LDEyICszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgKzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsXG4gXG4gLyoqXG4gICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxuICAqXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiB7XG4gXHRpbnQgbWFzaztcbiBcdHUzMiBwZXJtcztcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtMTA4OSwxNCArMTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbkBAIC0xMjI2LDYgKzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uXG4gICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkXG4gICpcbkBAIC0xMjMzLDcgKzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgIGludCBtYXNrKVxuIHtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbkBAIC0xLDE4ICsxLDMwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwibHNtLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJsc21fdGFpbGNhbGwuc2tlbC5oXCJcbiBcbiBjaGFyICpDTURfQVJHU1tdID0ge1widHJ1ZVwiLCBOVUxMfTtcbiBcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuK307XG4rXG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiB7XG4gXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XG5AQCAtMzAsNiArNDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbitcdH0gd2hpbGUgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xuK1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0ZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKVxuK1x0XHRzYXZlZF9lcnJubyA9IEVJTztcbitcdGNsb3NlKGZkKTtcbitcdGlmIChzYXZlZF9lcnJubykge1xuK1x0XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkLyVzXCIsIHBpZCwgbmFtZSk7XG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XG4rXHRcdGVycm5vID0gRU9WRVJGTE9XO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRwaWRfdCBwaWQsIHdhaXRlZDtcbitcdGludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAocGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpXG4rXHRcdFx0X2V4aXQoMSk7XG4rXHRcdHJhaXNlKFNJR1NUT1ApO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcbitcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0aWYgKHdhaXRlZCAhPSBwaWQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbitcdFx0cGlkID0gLTE7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwic2V0Z3JvdXBzXCIsIFwiZGVueVwiKSBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRU5PRU5UKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwidWlkX21hcFwiLCBcIjAgMCAxXCIpIHx8XG4rXHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcImdpZF9tYXBcIiwgXCIwIDAgMVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvbnMvdXNlclwiLCBwaWQpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xuK1xuK291dDpcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRpZiAocGlkIFx1MDAzZSAwKSB7XG4rXHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbitcdFx0ZG8ge1xuK1x0XHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbitcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXHR9XG4rXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0cmV0dXJuIGZkO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XG4rXHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4rXHR9O1xuK1x0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xuK1xuK1x0dXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpO1xuK1x0aWYgKHVzZXJuc19mZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xuK1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwidG1wZnNcIiwgRlNPUEVOX0NMT0VYRUMpO1xuK1x0aWYgKGZzZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcbitcdGlmIChtbnRmZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbitcdGlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsIFwiXCIsIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4rXHRcdCAgICBzaXplb2YoYXR0cikpKSB7XG4rXHRcdGNsb3NlKG1udGZkKTtcbitcdFx0bW50ZmQgPSAtMTtcbitcdH1cbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKGZzZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmc2ZkKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZSh1c2VybnNfZmQpO1xuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBtbnRmZDtcbit9XG4rXG4rc3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpXG4re1xuK1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuK1xuK1x0ZmQgPSBvcGVuYXQoZGlyZmQsIFwiZmlsZVwiLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsXG4rXHRcdCAgICAwNjAwKTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRjbG9zZShmZCk7XG4rXHRmZCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgXCJkaXJcIiwgMDcwMCksIFwibWtkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KFwidGFyZ2V0XCIsIGRpcmZkLCBcInN5bWxpbmtcIiksIFwic3ltbGlua1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwiZmlsZVwiLCBkaXJmZCwgXCJsaW5rXCIsIDApLCBcImxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFwiZmlmb1wiLCAwNjAwKSwgXCJta25vZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSAwO1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWZvXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwic3ltbGlua1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImZpbGVcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJkaXJcIiwgQVRfUkVNT1ZFRElSKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbClcbit7XG4rXHRjaGFyIHRtcGRpcltdID0gXCIvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFhcIjtcbitcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuK1x0aW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCBcIm1rZHRlbXBcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsIFwib3Blbl90bXBkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbitcdGlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCBcImNyZWF0ZV9pZG1hcHBlZF90bXBmc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcImlkZW50aXR5X2lkbWFwXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSxcbitcdFx0ICAgICAgIFwiaWRtYXBwZWRfbW91bnRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsXG4rXHRcdCAgICAgICBcImlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuK1x0XHRcdFwiaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblwiKSA/IDAgOiAtMTtcbitcbitvdXQ6XG4rXHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpZG1hcHBlZF9kaXJmZCk7XG4rXHRpZiAoZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShkaXJmZCk7XG4rXHRybWRpcih0bXBkaXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIHtcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbkBAIC01Myw2ICsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuIFxuK1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9sc21faW5vZGVfaWRtYXBcIikpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xuIFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXCJzdGFja19tcHJvdGVjdFwiKSB8fFxuIFx0ICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCBcInN0YWNrX21wcm90ZWN0XCIpKVxuQEAgLTcxLDYgKzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfdGVzdCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2NvdW50ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1wcm90ZWN0X2NvdW50ID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XG4gaW50IGJwcm1fY291bnQgPSAwO1xuK19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK2VudW0ge1xuK1x0SU5PREVfSURNQVBfQ1JFQVRFXHQ9IDFVIFx1MDAzY1x1MDAzYyAwLFxuK1x0SU5PREVfSURNQVBfTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMSxcbitcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4rXHRJTk9ERV9JRE1BUF9NS0RJUlx0PSAxVSBcdTAwM2NcdTAwM2MgMyxcbitcdElOT0RFX0lETUFQX01LTk9EXHQ9IDFVIFx1MDAzY1x1MDAzYyA0LFxuK1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbit9O1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4re1xuK1x0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1xuK1x0cmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkIFx1MDAyNlx1MDAyNiBpZG1hcDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpZG1hcC1cdTAwM2VnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxuK3tcbitcdGlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuK1x0XHRpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7XG4rXHRlbHNlXG4rXHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfY3JlYXRlXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2xpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX3N5bWxpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX21rZGlyXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta25vZFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9wZXJtaXNzaW9uXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XG4rfVxuIFxuIFNFQyhcImxzbS9maWxlX21wcm90ZWN0XCIpXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDg6NTAuNTE4MDU0ODg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI1ODc3NTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBXb3J0aCBGdXp6aW5nPyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGxvdCBvZiBpbXBvcnRhbnQgYXJlYXM6IGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgZnMvbmFtZWkuY2AsIGNyaXRpY2FsIGluY2x1ZGUgZmlsZXMsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgc2VjdXJpdHkgZnJhbWV3b3JrIGl0c2VsZiwgaW5jbHVkaW5nIFNFTGludXgsIFNtYWNrLCBhbmQgZXZlbiB0aGUgQlBGIExTTSB0ZXN0cy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGEgcmVmYWN0b3JpbmcsIGludHJvZHVjaW5nIHRoZSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rczogYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBgaW5vZGVfcGVybWlzc2lvbmAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55ICpmdW5jdGlvbmFsKiBjaGFuZ2UgaGVyZSwgb3IgaWYgdGhpcyBpcyBqdXN0IHBsdW1iaW5nLiBTY2FubmluZyBgZnMvbmFtZWkuY2AsIEkgc2VlIGBpZG1hcGAgaXMgZ2V0dGluZyBwYXNzZWQgaW50byB0aGUgYHNlY3VyaXR5X2lub2RlXypgIGNhbGxzIGNvcnJlY3RseS4gVGhlIHdyYXBwZXIgZnVuY3Rpb25zIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhcmUgYWxzbyB1cGRhdGVkIHRvIGhhbmRsZSB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIgYW5kIHBhc3MgaXQgb24gdmlhIGBjYWxsX2ludF9ob29rKC4uLilgLiAgU0VMaW51eCBhbmQgU21hY2sgYXJlIGhhdmluZyB0aGVpciBob29rIHNpZ25hdHVyZXMgdXBkYXRlZCwgYnV0IGl0IGxvb2tzIGxpa2UgdGhleSBhcmVuJ3QgKnVzaW5nKiB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIgcmlnaHQgbm93LiBIb3dldmVyLCB0aGUgQlBGIExTTSB0ZXN0cyBhcmUgKnJlY2VpdmluZyogYGlkbWFwYCBub3csIHdoaWNoIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbjogSXMgdGhpcyBqdXN0IGFuIEFQSSBjaGFuZ2UgdG8gc3VwcG9ydCBpZG1hcHBlZCBtb3VudHMgYmV0dGVyIChlc3BlY2lhbGx5IGZvciBCUEYgTFNNIG9yIGZ1dHVyZSBMU01zKSwgb3IgZG9lcyBpdCAqZnVuY3Rpb25hbGx5KiBjaGFuZ2Ugc2VjdXJpdHkgcG9saWN5IGJlaGF2aW9yP1xuXG5MZXQncyBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3Igd2hhdCdzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBub3QganVzdCBkb2N1bWVudGF0aW9uLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50IHVwZGF0ZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuICBUaGlzIGRlZmluaXRlbHkgKmlzbid0KiBkb2N1bWVudGF0aW9uLCBhbmQgaXQgaXNuJ3QganVzdCBsb2dnaW5nLiBUaGlzIGlzIG1vZGlmeWluZyBMU00gaG9vayBkZWZpbml0aW9ucyBhbmQgdGhlIFZGUyBsYXllci5cblxuTm93LCB0aGlzIGlzIGdldHRpbmcgaW50ZXJlc3RpbmcuICBMU00gaG9va3MgYXJlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIEJQRiBMU00gKmNhbiogYXR0YWNoIHRvIHRoZXNlIGhvb2tzIGFuZCBub3cgcmVjZWl2ZXMgdGhlIGBpZG1hcGAgYXJndW1lbnQuIFRoYXQgbWVhbnMgYSBCUEYgcHJvZ3JhbSBjYW4gbm93IHBvdGVudGlhbGx5IG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uIG1vdW50IElEIG1hcHBpbmcgaW5mb3JtYXRpb24sIGNoYW5naW5nIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc28gaXQgKnNlZW1zKiB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLCB0aG91Z2guICBJIG5lZWQgdG8gdXNlIG15IHRvb2xzIChgZ3JlcHBlcmAsIGdpdCBsb2csIGdpdCBzaG93LCBldGMuKSB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsYXRlZCBjaGFuZ2VzIGluIG90aGVyIExTTXMgKEFwcEFybW9yLCBMYW5kbG9jaywgZXRjLikgb3IgYW55IG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZXNlIGhvb2tzLiBJIGhhdmUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGJlZm9yZSBJIGZsYWcgaXQgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowODo1Ni43NzY4MzMyNTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMDU0MDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbm9kZV9wZXJtaXNzaW9uLiptbnRfaWRtYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUzMDg9c3RhdGljIGludCB1YmxrX2NoYXJfZGV2X3Blcm1pc3Npb24oc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzI2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzI3OlxcdGVyciA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMjgtXFx0XFx0XFx0ZF9iYWNraW5nX2lub2RlKHBhdGguZGVudHJ5KSwgbWFzayk7XFxuLS1cXG5mcy9iYWRfaW5vZGUuYz04Nj1zdGF0aWMgaW50IGJhZF9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iYWRfaW5vZGUuYy05MS1cXG5mcy9iYWRfaW5vZGUuYzo5MjpzdGF0aWMgaW50IGJhZF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2JhZF9pbm9kZS5jLTkzLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTEwMz1zdGF0aWMgaW50IGJwZl94YXR0cl9yZWFkX3Blcm1pc3Npb24oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy0xMTItXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjExMzpcXHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE1BWV9SRUFEKTtcXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTE0LX1cXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz0xNzM9c3RhdGljIGludCBicGZfeGF0dHJfd3JpdGVfcGVybWlzc2lvbihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTE4MS1cXG5mcy9icGZfZnNfa2Z1bmNzLmM6MTgyOlxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKTtcXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTgzLX1cXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MjQzMD1zdGF0aWMgaW50IGJ0cmZzX2lvY3RsX2RlZnJhZyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTI0NjAtXFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIFxcdTAwMjZcXHUwMDI2XFxuZnMvYnRyZnMvaW9jdGwuYzoyNDYxOlxcdFxcdCAgICBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKSkge1xcbmZzL2J0cmZzL2lvY3RsLmMtMjQ2Mi1cXHRcXHRcXHRyZXQgPSAtRVBFUk07XFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM9MTM1PWludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xOTItXFx0ZWxzZVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxOTM6XFx0XFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xOTQtXFx0XFx0XFx0XFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4tLVxcbmZzL2VjcnlwdGZzL2lub2RlLmM9ODUyPWVjcnlwdGZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTg1NC17XFxuZnMvZWNyeXB0ZnMvaW5vZGUuYzo4NTU6XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYy04NTYtXFx0XFx0XFx0XFx0ZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoaW5vZGUpLCBtYXNrKTtcXG4tLVxcbmZzL25hbWVpLmM9NTY1PUVYUE9SVF9TWU1CT0woZ2VuZXJpY19wZXJtaXNzaW9uKTtcXG4tLVxcbmZzL25hbWVpLmMtNTc3LSAqL1xcbmZzL25hbWVpLmM6NTc4OnN0YXRpYyBpbmxpbmUgaW50IGRvX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvbmFtZWkuYy01NzktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5mcy9uYW1laS5jPTYwND1zdGF0aWMgaW50IHNiX3Blcm1pc3Npb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5mcy9uYW1laS5jLTYyNy0gKi9cXG5mcy9uYW1laS5jOjYyODppbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9uYW1laS5jLTYyOS1cXHRcXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuZnMvbmFtZWkuYz02NjM9RVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcXG4tLVxcbmZzL25hbWVpLmMtNjgyLSAqL1xcbmZzL25hbWVpLmM6NjgzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL25hbWVpLmMtNjg0LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuZnMvbmFtZWkuYz02MDc1PWludCB2ZnNfcmVuYW1lKHN0cnVjdCByZW5hbWVkYXRhICpyZClcXG4tLVxcbmZzL25hbWVpLmMtNjEyMi1cXHRcXHRpZiAoaXNfZGlyKSB7XFxuZnMvbmFtZWkuYzo2MTIzOlxcdFxcdFxcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihyZC1cXHUwMDNlbW50X2lkbWFwLCBzb3VyY2UsXFxuZnMvbmFtZWkuYy02MTI0LVxcdFxcdFxcdFxcdFxcdFxcdCBNQVlfV1JJVEUpO1xcbi0tXFxuZnMvbmFtZWkuYy02MTI4LVxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IG5ld19pc19kaXIpIHtcXG5mcy9uYW1laS5jOjYxMjk6XFx0XFx0XFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKHJkLVxcdTAwM2VtbnRfaWRtYXAsIHRhcmdldCxcXG5mcy9uYW1laS5jLTYxMzAtXFx0XFx0XFx0XFx0XFx0XFx0IE1BWV9XUklURSk7XFxuLS1cXG5mcy9uZnNkL25mc2ZoLmM9MzE9c3RhdGljIGludCBuZnNkX2FjY2VwdGFibGUodm9pZCAqZXhwdiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbmZzZC9uZnNmaC5jLTQ1LVxcdFxcdHBhcmVudCA9IGRnZXRfcGFyZW50KHRkZW50cnkpO1xcbmZzL25mc2QvbmZzZmguYzo0NjpcXHRcXHRlcnIgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLFxcbmZzL25mc2QvbmZzZmguYy00Ny1cXHRcXHRcXHRcXHQgICAgICAgZF9pbm9kZShwYXJlbnQpLCBNQVlfRVhFQyk7XFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTI4NDM9bmZzZF9wZXJtaXNzaW9uKHN0cnVjdCBzdmNfY3JlZCAqY3JlZCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMjkwMi1cXHQvKiBUaGlzIGFzc3VtZXMgIE5GU0RfTUFZX3tSRUFELFdSSVRFLEVYRUN9ID09IE1BWV97UkVBRCxXUklURSxFWEVDfSAqL1xcbmZzL25mc2QvdmZzLmM6MjkwMzpcXHRlcnIgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSxcXG5mcy9uZnNkL3Zmcy5jLTI5MDQtXFx0XFx0XFx0ICAgICAgIGFjYyBcXHUwMDI2IChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSk7XFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTI5MDktXFx0ICAgICAgKGFjYyBcXHUwMDI2IChORlNEX01BWV9PV05FUl9PVkVSUklERSB8IE5GU0RfTUFZX1JFQURfSUZfRVhFQykpKSlcXG5mcy9uZnNkL3Zmcy5jOjI5MTA6XFx0XFx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE1BWV9FWEVDKTtcXG5mcy9uZnNkL3Zmcy5jLTI5MTEtXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzU1PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21heV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDM2MC1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MzYxOlxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MzYyLX1cXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQzNzI9c3RhdGljIGludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MTQtXFx0aWYgKCFwcmVzZXJ2ZSkge1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0MTU6XFx0XFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1JFQUQpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MTYtXFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvb3Blbi5jPTQ2Mz1zdGF0aWMgaW50IGRvX2ZhY2Nlc3NhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBtb2RlLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9vcGVuLmMtNTAzLVxcbmZzL29wZW4uYzo1MDQ6XFx0cmVzID0gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC5tbnQpLCBpbm9kZSwgbW9kZSB8IE1BWV9BQ0NFU1MpO1xcbmZzL29wZW4uYy01MDUtXFx0LyogU3VTIHYyIHJlcXVpcmVzIHdlIHJlcG9ydCBhIHJlYWQgb25seSBmcyB0b28gKi9cXG4tLVxcbmZzL292ZXJsYXlmcy9pbm9kZS5jPTMwNj1pbnQgb3ZsX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMzYtXFx0d2l0aF9vdmxfY3JlZHMoaW5vZGUtXFx1MDAzZWlfc2IpXFxuZnMvb3ZlcmxheWZzL2lub2RlLmM6MzM3OlxcdFxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKG1udF9pZG1hcChyZWFscGF0aC5tbnQpLCByZWFsaW5vZGUsIG1hc2spO1xcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTMzOC19XFxuLS1cXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYz02MDA4PWludCBzbWIyX3F1ZXJ5X2RpcihzdHJ1Y3Qga3NtYmRfd29yayAqd29yaylcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTYwNjEtXFx0aWYgKCEoZGlyX2ZwLVxcdTAwM2VkYWNjZXNzIFxcdTAwMjYgRklMRV9MSVNUX0RJUkVDVE9SWV9MRSkgfHxcXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYzo2MDYyOlxcdCAgICBpbm9kZV9wZXJtaXNzaW9uKGZpbGVfbW50X2lkbWFwKGRpcl9mcC1cXHUwMDNlZmlscCksXFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtNjA2My1cXHRcXHRcXHQgICAgIGZpbGVfaW5vZGUoZGlyX2ZwLVxcdTAwM2VmaWxwKSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0yNzEwPWludCBub3RpZnlfY2hhbmdlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLFxcbmluY2x1ZGUvbGludXgvZnMuaC0yNzExLVxcdFxcdCAgc3RydWN0IGlhdHRyICosIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XFxuaW5jbHVkZS9saW51eC9mcy5oOjI3MTI6aW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcxMy1pbnQgZ2VuZXJpY19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XFxuaW5jbHVkZS9saW51eC9mcy5oPTI3MTQ9c3RhdGljIGlubGluZSBpbnQgZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaylcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcxNS17XFxuaW5jbHVkZS9saW51eC9mcy5oOjI3MTY6XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oZmlsZV9tbnRfaWRtYXAoZmlsZSksXFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MTctXFx0XFx0XFx0XFx0ZmlsZV9pbm9kZShmaWxlKSwgbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjcxOT1zdGF0aWMgaW5saW5lIGludCBwYXRoX3Blcm1pc3Npb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNzIwLXtcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjcyMTpcXHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC1cXHUwMDNlbW50KSxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcyMi1cXHRcXHRcXHRcXHRkX2lub2RlKHBhdGgtXFx1MDAzZWRlbnRyeSksIG1hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg9MTQwPUxTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0xNDEtXFx0IGJvb2wgcmN1KVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjE0MjpMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTE0My1cXHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDI1PWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyNi1cXHRcXHRcXHQgICAgICAgYm9vbCByY3UpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Mjc6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyOC1cXHRcXHRcXHQgICAgICBpbnQgbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9OTc5PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05ODUtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjk4NjpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05ODctXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuaXBjL21xdWV1ZS5jPTg2MD1zdGF0aWMgaW50IHByZXBhcmVfb3BlbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvZmxhZywgaW50IHJvLFxcbi0tXFxuaXBjL21xdWV1ZS5jLTg4My1cXHRhY2MgPSBvZmxhZzJhY2Nbb2ZsYWcgXFx1MDAyNiBPX0FDQ01PREVdO1xcbmlwYy9tcXVldWUuYzo4ODQ6XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfaW5vZGUoZGVudHJ5KSwgYWNjKTtcXG5pcGMvbXF1ZXVlLmMtODg1LX1cXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYz02MTE9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqX19nZXRfcHJvZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYy02MTMtXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbmtlcm5lbC9icGYvaW5vZGUuYzo2MTQ6XFx0aW50IHJldCA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfUkVBRCk7XFxua2VybmVsL2JwZi9pbm9kZS5jLTYxNS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz01NDEwPXN0YXRpYyBpbnQgY2dyb3VwX21heV93cml0ZShjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01NDIwLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6NTQyMTpcXHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKTtcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTU0MjItXFx0aXB1dChpbm9kZSk7XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ2LVxcdFxcdFxcdCAgICAgIGludCBtYXNrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMyMjM9c3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTIwMz1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzctICovXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTIzODpzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzOS1cXHRcXHRcXHRcXHQgIGludCBtYXNrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jPTE2MD1TRUMoXFxcImxzbS9pbm9kZV9wZXJtaXNzaW9uXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmM6MTYxOmludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYy0xNjItXFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDg6NTkuMTg3MzgwMzk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MDc0MjczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgSURNQVAgU3RydWN0dXJlIGluIExTTSBIb29rcyoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVjZW50IGNoYW5nZXMgaW1wYWN0IHRoZSBzZWN1cml0eSBtb2R1bGUgaW1wbGVtZW50YXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgdXBkYXRlcyB0byB0aGUgTFNNIGhvb2tzLiBUaGUgY29yZSBob29rcyBJJ20gbG9va2luZyBhdCBhcmUgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLCBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGFuZCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYmVpbmcgcGFzc2VkIGRvd24gZnJvbSB0aGUgVkZTLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgZGlyZWN0bHkgYWZmZWN0cyBob3cgd2UgaGFuZGxlIGlkZW50aXR5IG1hcHBpbmcgd2l0aGluIHRoZSBMU00uXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB0aGUgZmFjdCB0aGF0IEJQRiBMU00gaG9va3MgKmFsc28qIGhhdmUgYWNjZXNzIHRvIHRoaXMgYGlkbWFwYCBpcyBjcnVjaWFsLiBUaGlzIGlzIGEgZ2FtZSBjaGFuZ2VyIGZvciBCUEYtYmFzZWQgc2VjdXJpdHkgcG9saWNpZXMuIEJQRiBhbHJlYWR5IGdpdmVzIHVzIGZpbmUtZ3JhaW5lZCBjb250cm9sLCBidXQgaGF2aW5nIHRoZSBJRCBtYXAgYXZhaWxhYmxlIG9wZW5zIHVwIGV2ZW4gbW9yZSBwb3NzaWJpbGl0aWVzIGZvciBjb250ZXh0LWF3YXJlIHNlY3VyaXR5IGVuZm9yY2VtZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5hbWVzcGFjZWQgZmlsZSBzeXN0ZW1zIGFuZCB1c2VyIElEIG1hcHBpbmcgc2NlbmFyaW9zLlxuXG5Tbywgd2hlcmUgZG8gSSBnbyBmcm9tIGhlcmU/IFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYHNlY3VyaXR5L0tjb25maWdgIGFuZCBgZnMvS2NvbmZpZ2AgdG8gc2VlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZXNlIGZlYXR1cmVzIGFuZCBlbnN1cmUgSSdtIGF3YXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb24gZGlmZmVyZW50IHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpZG1hcGAgaW50ZWdyYXRpb24gY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBpdCB3aWxsIGltcGFjdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kdWxlcy4gVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCBJJ2xsIG5lZWQgdG8gZG8gc29tZSBmb2N1c2VkIHJlc2VhcmNoIHRvIHVuZGVyc3RhbmQgaG93IGJlc3QgdG8gYXBwcm9hY2ggdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MDMuNTc4MTI1NDk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc4NDY4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjA1LjI4NTk3NzMwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMTUwMDc5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgOTIuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgc2V0IHVwIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uIHdpdGhpbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MDguNTAwOTg4NDM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHQgIHN0aWxsIHJlZW5hYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMCBsYXRlciBvbiwgb3IgcGVybWFuZW50bHlcXG4gIDgxOlxcdFxcdCAgZGlzYWJsZSBpdCBieSBzZXR0aW5nIGl0IHRvIDEgKGZyb20gd2hpY2ggbm8gb3RoZXIgdHJhbnNpdGlvbiB0b1xcbiAgODI6XFx0XFx0ICAwIGlzIHBvc3NpYmxlIGFueW1vcmUpLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIFVucHJpdmlsZWdlZCBCUEYgY291bGQgYmUgdXNlZCB0byBleHBsb2l0IGNlcnRhaW4gcG90ZW50aWFsXFxuICA4NTpcXHRcXHQgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzIG9uIHVubWl0aWdhdGVkXFxuICA4NjpcXHRcXHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIFkuXFxuICA4OTpcXHRcXG4gIDkwOlxcdHNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOTowOC41MDExNjk2ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTI5MTM4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgTFNNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjdXJyZW50IExpbnV4IFNlY3VyaXR5IE1vZHVsZXMgKExTTSkgY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBgc2VjdXJpdHkvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBMU00gc2V0dGluZ3MgcmVzaWRlLCByaWdodD8gSSBleHBlY3QgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHMgZGVmaW5lZCBpbiB0aGVyZS4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIExTTSBjb25maWd1cmF0aW9uczogdGhlIG1hc3RlciBgU0VDVVJJVFlgIHN3aXRjaCwgb2YgY291cnNlLiBUaGVuLCBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBzcGVjaWZpY3MuIEknbGwgZXhwZWN0IHRvIHNlZSBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCB3aGF0ZXZlciBlbHNlIGlzIGJlaW5nIHN1cHBvcnRlZCBvciBjb25zaWRlcmVkIGZvciB0aGlzIGtlcm5lbCBidWlsZC4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjaXNpb25zIHJlZ2FyZGluZyB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGlzIGtlcm5lbCBhcmUgdWx0aW1hdGVseSBtYWRlLCBhbmQgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHdlIHN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDExOSwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MTMuMDMwMzEzMDM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0ODA5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9LY29uZmlnPTg9c291cmNlIFxcXCJzZWN1cml0eS9rZXlzL0tjb25maWdcXFwiXFxuc2VjdXJpdHkvS2NvbmZpZy05LVxcbnNlY3VyaXR5L0tjb25maWc6MTA6Y29uZmlnIFNFQ1VSSVRZX0RNRVNHX1JFU1RSSUNUXFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJSZXN0cmljdCB1bnByaXZpbGVnZWQgYWNjZXNzIHRvIHRoZSBrZXJuZWwgc3lzbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz01Mj1jb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTcyLVxcbnNlY3VyaXR5L0tjb25maWc6NzM6Y29uZmlnIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy03NC1cXHRib29sIFxcXCJFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9ODY9Y29uZmlnIEhBU19TRUNVUklUWV9BVURJVFxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy05MC1cXG5zZWN1cml0eS9LY29uZmlnOjkxOmNvbmZpZyBTRUNVUklUWUZTXFxuc2VjdXJpdHkvS2NvbmZpZy05Mi1cXHRib29sIFxcXCJFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctOTgtXFxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xcbnNlY3VyaXR5L0tjb25maWctMTAwLVxcdGJvb2wgXFxcIlNvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTA3LVxcbnNlY3VyaXR5L0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9JTkZJTklCQU5EXFxuc2VjdXJpdHkvS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiSW5maW5pYmFuZCBTZWN1cml0eSBIb29rc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTE2LVxcbnNlY3VyaXR5L0tjb25maWc6MTE3OmNvbmZpZyBTRUNVUklUWV9ORVRXT1JLX1hGUk1cXG5zZWN1cml0eS9LY29uZmlnLTExOC1cXHRib29sIFxcXCJYRlJNIChJUFNlYykgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTI5LVxcbnNlY3VyaXR5L0tjb25maWc6MTMwOmNvbmZpZyBTRUNVUklUWV9QQVRIXFxuc2VjdXJpdHkvS2NvbmZpZy0xMzEtXFx0Ym9vbCBcXFwiU2VjdXJpdHkgaG9va3MgZm9yIHBhdGhuYW1lIGJhc2VkIGFjY2VzcyBjb250cm9sXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz0yNjg9Y29uZmlnIExTTVxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0yODQtXFxuc2VjdXJpdHkvS2NvbmZpZzoyODU6Y29uZmlnIFNFQ1VSSVRZX0NPTU1PTkNBUF9LVU5JVF9URVNUXFxuc2VjdXJpdHkvS2NvbmZpZy0yODYtXFx0Ym9vbCBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIGNvbW1vbmNhcFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiQXBwQXJtb3Igc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWcgY29kZVxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXFx0Ym9vbCBcXFwiQnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1xcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzozODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfTUVTU0FHRVNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRlYnVnIG1lc3NhZ2VzIGVuYWJsZWQgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDYtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo0Nzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSU5UUk9TUEVDVF9QT0xJQ1lcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkFsbG93IGxvYWRlZCBwb2xpY3kgdG8gYmUgaW50cm9zcGVjdGVkXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy01OC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cXHRib29sIFxcXCJFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcwLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzE6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hfREVGQVVMVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzItICAgICAgIGJvb2wgXFxcIkVuYWJsZSBwb2xpY3kgaGFzaCBpbnRyb3NwZWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6ODQ6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIkFsbG93IGV4cG9ydGluZyB0aGUgcmF3IGJpbmFyeSBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6OTY6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJBbGxvdyBsb2FkaW5nIHBvbGljeSBpbiBhIGNvbXByZXNzZWQgZm9ybWF0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX1BBUkFOT0lEX0xPQURcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTExOC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjExOTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTIwLVxcdHRyaXN0YXRlIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjY6bWVudWNvbmZpZyBTRUNVUklUWV9JUEVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkludGVncml0eSBQb2xpY3kgRW5mb3JjZW1lbnQgKElQRSlcXFwiXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZz05OD1lbmRtZW51XFxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXFxuc2VjdXJpdHkvaXBlL0tjb25maWc6MTAwOmNvbmZpZyBTRUNVUklUWV9JUEVfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgSVBFXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cXHRib29sIFxcXCJMYW5kbG9jayBzdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yMy1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19MT0dcXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVxcdGJvb2xcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjgtXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiS1VuaXQgdGVzdHMgZm9yIExhbmRsb2NrXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfTE9BRFBJTlxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlBpbiBsb2FkIG9mIGtlcm5lbCBmaWxlcyAobW9kdWxlcywgZncsIGV0YykgdG8gb25lIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTMtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjE0OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX0VORk9SQ0VcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRW5mb3JjZSBMb2FkUGluIGF0IGJvb3RcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjQtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjI1OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX1ZFUklUWVxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNi1cXHRib29sIFxcXCJBbGxvdyByZWFkaW5nIGZpbGVzIGZyb20gY2VydGFpbiBvdGhlciBmaWxlc3lzdGVtcyB0aGF0IHVzZSBkbS12ZXJpdHlcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnOjE6Y29uZmlnIFNFQ1VSSVRZX0xPQ0tET1dOX0xTTVxcbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMi1cXHRib29sIFxcXCJCYXNpYyBtb2R1bGUgZm9yIGVuZm9yY2luZyBrZXJuZWwgbG9ja2Rvd25cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTgtXFxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzo5OmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01fRUFSTFlcXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTEwLVxcdGJvb2wgXFxcIkVuYWJsZSBsb2NrZG93biBMU00gZWFybHkgaW4gaW5pdFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0FGRVNFVElEXFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWctMy0gICAgICAgIGJvb2wgXFxcIkdhdGUgc2V0aWQgdHJhbnNpdGlvbnMgdG8gbGltaXQgQ0FQX1NFVHtVL0d9SUQgY2FwYWJpbGl0aWVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMy1cXHRib29sIFxcXCJTRUxpbnV4IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjEyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTRUxpbnV4IGJvb3QgcGFyYW1ldGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI1LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlNFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQ5OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXFx0aW50IFxcXCJTRUxpbnV4IHNpZHRhYiBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02MC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVxcdGludCBcXFwiU0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03My1cXHRpbnQgXFxcIlNFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4Mzpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTRUxpbnV4IGtlcm5lbCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNy1cXHRib29sIFxcXCJSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MzQ6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUlxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiUGFja2V0IG1hcmtpbmcgdXNpbmcgc2VjbWFya3MgZm9yIG5ldGZpbHRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDQtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlRyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9UT01PWU9cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlRPTU9ZTyBMaW51eCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19NQVhfQUNDRVBUX0VOVFJZXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTctXFx0aW50IFxcXCJEZWZhdWx0IG1heGltYWwgY291bnQgZm9yIGxlYXJuaW5nIG1vZGVcXFwiXFxuLS1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0yOC1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJVF9MT0dcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zMC1cXHRpbnQgXFxcIkRlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgYXVkaXQgbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMzktXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVJcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJBY3RpdmF0ZSB3aXRob3V0IGNhbGxpbmcgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXIuXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19QT0xJQ1lfTE9BREVSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTctXFx0c3RyaW5nIFxcXCJMb2NhdGlvbiBvZiB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTY1LVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjY2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fQUNUSVZBVElPTl9UUklHR0VSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjctXFx0c3RyaW5nIFxcXCJUcmlnZ2VyIGZvciBjYWxsaW5nIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzYtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Nzc6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19JTlNFQ1VSRV9CVUlMVElOX1NFVFRJTkdcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy03OC1cXHRib29sIFxcXCJVc2UgaW5zZWN1cmUgYnVpbHQtaW4gc2V0dGluZ3MgZm9yIGZ1enppbmcgdGVzdHMuXFxcIlxcbi0tXFxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkveWFtYS9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1lBTUFcXG5zZWN1cml0eS95YW1hL0tjb25maWctMy1cXHRib29sIFxcXCJZYW1hIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjE0LjYzNTEzMTgyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODEwNzEwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgQ2FjaGVmaWxlcyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYGZzL2NhY2hlZmlsZXMvS2NvbmZpZ2Ag4oCTIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGNhY2hlZmlsZXMgZmlsZXN5c3RlbSBhcmUgZGVmaW5lZC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY29udHJvbGxhYmxlIGF0IGNvbXBpbGUgdGltZS4gV2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgbGlrZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgb3IgbmFtZXNwYWNlIGNhcGFiaWxpdGllcz9cblxuSSdtIHRoaW5raW5nLCBcIkkgbmVlZCB0byBsb29rIGZvciB0aGUgY29yZSBmZWF0dXJlcyBmaXJzdC5cIiBXaGF0IGFyZSB0aGUgY3JpdGljYWwgYm9vbGVhbnMgdGhhdCBkaWN0YXRlIHdoZXRoZXIgdGhlIGNhY2hlZmlsZXMgY29kZSBpcyBldmVuICppbmNsdWRlZCogaW4gdGhlIGJ1aWxkPyBUaGVuLCBJIHNob3VsZCBzY2FuIGZvciBhbnkgZnVydGhlciBvcHRpb25zIHRoYXQgYWxsb3cgYSBmaW5lLWdyYWluZWQgdHVuaW5nIG9mIHRoZSBjYWNoZSdzIGJlaGF2aW9yLiBJIHdpbGwgcHJvYmFibHkgbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBjYXRjaCBteSBleWUsIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSB0dW5hYmxlcy4gTWF5YmUgc29tZSBvcHRpb25zIGZvciBkZWJ1Z2dpbmcgdGhhdCB3aWxsIGNvbWUgaW4gaGFuZHkuIEkga25vdyB0aGUgS2NvbmZpZyBzeW50YXggd2VsbCwgc28gSSdsbCBiZSBxdWlja2x5IGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogYGJvb2xgLCBgdHJpc3RhdGVgLCBgaW50YCwgYW5kIGBzdHJpbmdgIHR5cGVzLiBEZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBmaWxlIGlzIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzODksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOToxNy40NDU4NDYyMTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzgyODc3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBQ0hFRklMRVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY2FjaGVmaWxlcy9LY29uZmlnLTItXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjM6Y29uZmlnIENBQ0hFRklMRVNcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiRmlsZXN5c3RlbSBjYWNoaW5nIG9uIGZpbGVzXFxcIlxcbi0tXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTEzLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoxNDpjb25maWcgQ0FDSEVGSUxFU19ERUJVR1xcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJEZWJ1ZyBDYWNoZUZpbGVzXFxcIlxcbi0tXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTIyLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoyMzpjb25maWcgQ0FDSEVGSUxFU19FUlJPUl9JTkpFQ1RJT05cXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiUHJvdmlkZSBlcnJvciBpbmplY3Rpb24gZm9yIGNhY2hlZmlsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjE5LjE4NDE0MDg2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDg4MzI3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgbW50X2lkbWFwYCBwYXJhbWV0ZXIgdG8gYSBidW5jaCBvZiBjcml0aWNhbCBzZWN1cml0eS1yZWxhdGVkIFZGUyBob29rczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLiBJdCdzIGFsc28gdXBkYXRpbmcgdGhlIFZGUyBjYWxsZXJzIGFuZCB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyB0aGVtc2VsdmVzLCBpbmNsdWRpbmcgQlBGIHNlbGZ0ZXN0cy5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgbW9kaWZpZXMgXCJyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCJcblxuWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBWRlMgZnVuY3Rpb25zIChgaW5vZGVfcGVybWlzc2lvbmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGV0Yy4pIGFuZCBMU00gaG9vayB3cmFwcGVycyAoYHNlY3VyaXR5X2lub2RlXypgKS4gVGhlc2UgYXJlIGVudHJ5IHBvaW50cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlci1zcGFjZSB2aWEgc3lzdGVtIGNhbGxzIGxpa2UgYG9wZW5gLCBgbWtkaXJgLCBhbmQgb3RoZXJzLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlICdGb2N1c1N5bWJvbHMnLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW5jbHVkZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gV2Ugd2FudCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgd2Ugc2hvdWxkIGV4Y2x1ZGUgdGhpbmdzIGxpa2UgYGlub2RlX3Blcm1pc3Npb25gICh3aGljaCBpcyBwcmFjdGljYWxseSBjYWxsZWQgb24gZXZlcnkgZmlsZSBhY2Nlc3MpLiBTbyB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gIGJlY2F1c2UgdGhvc2UgYXJlIGNhbGxlZCBhdCBjcmVhdGlvbiB0aW1lLlxuXG5OZXh0LCB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBTRUNVUklUWWAgdG8gZW5hYmxlIHRoZSBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSBhbmQgTFNNIGhvb2tzLiAgYEJQRl9MU01gIGlzIGFsc28gcmVxdWlyZWQgYmVjYXVzZSBpdCBsZXZlcmFnZXMgdGhlIGBpZG1hcGAgYXJndW1lbnQsIGFuZCB0aGVuIGVpdGhlciBgU0VDVVJJVFlfU0VMSU5VWGAgb3IgYFNFQ1VSSVRZX1NNQUNLYCBmb3IgYSBwcmFjdGljYWwgTFNNLlxuXG5UaGUgYEJQRl9MU01gIGRlcGVuZGVuY3kgbmVlZHMgYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBgQlBGX0pJVGAuXG5cblNvLCB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYXJlIGBTRUNVUklUWWAsIGBCUEZfTFNNYCwgYW5kIGVpdGhlciBgU0VDVVJJVFlfU0VMSU5VWGAgb3IgYFNFQ1VSSVRZX1NNQUNLYC4gIExldCdzIGtlZXAgaXQgc2ltcGxlIGFuZCBqdXN0IGxpc3QgYFNFQ1VSSVRZYCwgYEJQRl9MU01gLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGFuZCBgU0VDVVJJVFlfU01BQ0tgLlxuXG5Ob3csIGZvciBgc2V0LXJlc3VsdHNgOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZSwgZGVmaW5pdGVseS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGV4dGVuZHMgVkZTIExTTSBob29rcyBhbmQgdGhlaXIgY2FsbGVycyB0byBwcm9wYWdhdGUgbW91bnQgaWRtYXBwaW5ncyAoYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCkuIFRoaXMgYWxsb3dzIHNlY3VyaXR5IG1vZHVsZXMgKGluY2x1ZGluZyBCUEYgTFNNLCBTRUxpbnV4LCBTbWFjaykgdG8gcGVyZm9ybSBwZXJtaXNzaW9ucyBjaGVja3MgYXdhcmUgb2YgaWRtYXBwZWQgbW91bnRzLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGludGVyZmFjZXMgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgU0VDVVJJVFlgLCBgQlBGX0xTTWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYC5cblxuVGhhdCBzaG91bGQgYmUgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODYxLCJPdXRwdXRUb2tlbnMiOjIwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MjguMjcyNDcwNTc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTMyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGlub2RlIExTTSBob29rcyAoc2VjdXJpdHlfaW5vZGVfY3JlYXRlLCBzZWN1cml0eV9pbm9kZV9saW5rLCBzZWN1cml0eV9pbm9kZV9zeW1saW5rLCBzZWN1cml0eV9pbm9kZV9ta2Rpciwgc2VjdXJpdHlfaW5vZGVfbWtub2QsIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24pIGFsb25nIHdpdGggVkZTIGNhbGxlcnMgdG8gcGFzcyBkb3duIG1vdW50IGlkbWFwcyAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGVuYWJsZXMgTFNNcyBhbmQgQlBGIExTTSBwcm9ncmFtcyB0byBpbnNwZWN0IGlkbWFwcGVkIG1vdW50cyBkdXJpbmcgZmlsZSBvcGVyYXRpb25zLCBhbHRlcmluZyByZWFjaGFibGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgc2V2ZXJhbCBpbm9kZSBMU00gaG9va3MgKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSwgc2VjdXJpdHlfaW5vZGVfbGluaywgc2VjdXJpdHlfaW5vZGVfc3ltbGluaywgc2VjdXJpdHlfaW5vZGVfbWtkaXIsIHNlY3VyaXR5X2lub2RlX21rbm9kLCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKSBhbG9uZyB3aXRoIFZGUyBjYWxsZXJzIHRvIHBhc3MgZG93biBtb3VudCBpZG1hcHMgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBlbmFibGVzIExTTXMgYW5kIEJQRiBMU00gcHJvZ3JhbXMgdG8gaW5zcGVjdCBpZG1hcHBlZCBtb3VudHMgZHVyaW5nIGZpbGUgb3BlcmF0aW9ucywgYWx0ZXJpbmcgcmVhY2hhYmxlIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBzdWJzeXN0ZW0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjI4LjM1NDg3NzQwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjYzMjQ1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOToyOC4zNTU0NzQ0NTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTU2NTcwMjY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHBhcmFtZXRlciBwbHVtYmluZyB1cGRhdGUgYWNyb3NzIFZGUyBhbmQgTFNNIGludGVyZmFjZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3Igc3RhY2svaGVhcCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBrZXJuZWwsIGFuZCBubyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGFjY2Vzc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgdmFsaWRpdHkgb3IgZGVyZWZlcmVuY2luZyBhcmUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGRldGVjdGVkIGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5YzI4MjE4YjJkNWU1N2Q3NzJhNjgyZTAyYTU4N2JmYTM0NzBiNDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAyOjA4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG4rKysgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbkBAIC01MSwxNCArNTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4rXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRwcl9lcnIoXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXCIsXG4gXHRcdCAgICAgICByZXQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4rXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDIwYTY1MzRlYTNlZmYuLjk5Zjg5NGYzZjdlMTMgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKHVubGlrZWx5KHJldHZhbCkpXG4gXHRcdHJldHVybiByZXR2YWw7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XG4rXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuIFxuQEAgLTY5NSw3ICs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZFxuIFx0aWYgKHVubGlrZWx5KCgoaW5vZGUtXHUwMDNlaV9tb2RlIFx1MDAyNiAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpXG4gXHRcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XG4rXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbkBAIC00MTg4LDcgKzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1x0Lyogc2hvdWxkbid0IGl0IGJlIEVOT1NZUz8gKi9cbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbkBAIC00MjEyLDcgKzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFxuIFx0bW9kZSBcdTAwMjY9IFNfSUFMTFVHTztcbiBcdG1vZGUgfD0gU19JRlJFRztcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0ZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTtcbkBAIC00MzI4LDcgKzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTUyNTgsNyArNTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01Mzk1LDcgKzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gZXJyO1xuIFxuQEAgLTU3ODMsNyArNTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWRpci1cdTAwM2VpX29wLVx1MDAzZXN5bWxpbmspXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01OTA3LDcgKzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTIwLDI2ICsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBpbnQgKnhhdHRyX2NvdW50KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZWFkbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBib29sIHJjdSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC00MDQsMjQgKzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgICAgIGJvb2wgcmN1KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7XG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0ICAgICAgaW50IG1hc2spO1xuIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuQEAgLTkwMiw5ICs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgdW1vZGVfdCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MTMsOSArOTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZFxuIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4geyB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkyNiwxNiArOTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgIGludCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NDYsOSArOTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlLCBkZXZfdCBkZXYpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk3NCw3ICs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCAyZWUyNzZhYjE1YzViLi5hOTE5MGRhMzM0MWRkIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTE2MTQsNiArMTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxuQEAgLTE2MjIsMTIgKzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xuIFxuQEAgLTE2NDgsNiArMTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXG5AQCAtMTY1NiwxMiArMTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4gfVxuIFxuIC8qKlxuQEAgLTE2ODIsNiArMTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXG5AQCAtMTY5MCwxNiArMTY5MywxNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4gfVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnlcbiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlXG5AQCAtMTcwOSwxMSArMTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XG4gXG5AQCAtMTczNSw2ICsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZmlsZVxuICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlXG5AQCAtMTc0NywxMiArMTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIH1cbiBcbiAvKipcbkBAIC0xODIzLDYgKzE4MjksNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IGlub2RlXG4gICogQG1hc2s6IGFjY2VzcyBtYXNrXG4gICpcbkBAIC0xODM1LDExICsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0ICAgICAgaW50IG1hc2spXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTMwNzQsMTIgKzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCAgICBcdTAwMjZhZCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7XG4gfVxuQEAgLTMwODksMTIgKzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0RJUik7XG4gfVxuQEAgLTMxMDQsNyArMzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhtb2RlKSk7XG4gfVxuQEAgLTMyMzYsMTMgKzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcbiBcbiAvKipcbiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGVcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXG4gICpcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuIHtcbiBcdGludCBtYXNrO1xuIFx0dTMyIHBlcm1zO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbkBAIC0xMDg5LDE0ICsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3RcbiAgKiBAZGlyOiB1bnVzZWRcbiAgKiBAbmV3X2RlbnRyeTogdGhlIG5ldyBvYmplY3RcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuQEAgLTEyMjYsNiArMTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb25cbiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWRcbiAgKlxuQEAgLTEyMzMsNyArMTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgaW50IG1hc2spXG4ge1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5pbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuQEAgLTEsMTggKzEsMzAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiBcbiAvKlxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJsc20uc2tlbC5oXCJcbiAjaW5jbHVkZSBcImxzbV90YWlsY2FsbC5za2VsLmhcIlxuIFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XCJ0cnVlXCIsIE5VTEx9O1xuIFxuK2VudW0ge1xuK1x0SU5PREVfSURNQVBfQUxMID0gKDFVIFx1MDAzY1x1MDAzYyA2KSAtIDEsXG4rfTtcbitcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIHtcbiBcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcbkBAIC0zMCw2ICs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGRvIHtcbitcdFx0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpO1xuK1x0fSB3aGlsZSAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpXG4re1xuK1x0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vID0gMDtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRlbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pXG4rXHRcdHNhdmVkX2Vycm5vID0gRUlPO1xuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKHNhdmVkX2Vycm5vKSB7XG4rXHRcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXG4re1xuK1x0Y2hhciBwYXRoWzY0XTtcbitcdGludCBsZW47XG4rXG4rXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvJXNcIiwgcGlkLCBuYW1lKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpXG4re1xuK1x0Y2hhciBwYXRoWzY0XTtcbitcdHBpZF90IHBpZCwgd2FpdGVkO1xuK1x0aW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1cztcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmIChwaWQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSlcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0cmFpc2UoU0lHU1RPUCk7XG4rXHRcdF9leGl0KDApO1xuK1x0fVxuK1xuK1x0ZG8ge1xuK1x0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xuK1x0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXHRpZiAod2FpdGVkICE9IHBpZClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkge1xuK1x0XHRwaWQgPSAtMTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xuK1x0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJzZXRncm91cHNcIiwgXCJkZW55XCIpIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFTk9FTlQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJ1aWRfbWFwXCIsIFwiMCAwIDFcIikgfHxcbitcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFwiZ2lkX21hcFwiLCBcIjAgMCAxXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC9ucy91c2VyXCIsIHBpZCk7XG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XG4rXHRcdGVycm5vID0gRU9WRVJGTE9XO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChwaWQgXHUwMDNlIDApIHtcbitcdFx0a2lsbChwaWQsIFNJR0tJTEwpO1xuK1x0XHRkbyB7XG4rXHRcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xuK1x0XHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdH1cbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpXG4re1xuK1x0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcbitcdFx0LmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCxcbitcdH07XG4rXHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XG4rXG4rXHR1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXG4rXHRmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgXCJ0bXBmc1wiLCBGU09QRU5fQ0xPRVhFQyk7XG4rXHRpZiAoZnNmZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xuK1x0aWYgKG1udGZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkO1xuK1x0aWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgXCJcIiwgQVRfRU1QVFlfUEFUSCwgXHUwMDI2YXR0cixcbitcdFx0ICAgIHNpemVvZihhdHRyKSkpIHtcbitcdFx0Y2xvc2UobW50ZmQpO1xuK1x0XHRtbnRmZCA9IC0xO1xuK1x0fVxuK1xuK291dDpcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRpZiAoZnNmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZzZmQpO1xuK1x0aWYgKHVzZXJuc19mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHVzZXJuc19mZCk7XG4rXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0cmV0dXJuIG1udGZkO1xuK31cbitcbitzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZClcbit7XG4rXHRpbnQgZmQgPSAtMSwgcmV0ID0gLTE7XG4rXG4rXHRmZCA9IG9wZW5hdChkaXJmZCwgXCJmaWxlXCIsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQyxcbitcdFx0ICAgIDA2MDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGNsb3NlKGZkKTtcbitcdGZkID0gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCBcImRpclwiLCAwNzAwKSwgXCJta2RpclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoXCJ0YXJnZXRcIiwgZGlyZmQsIFwic3ltbGlua1wiKSwgXCJzeW1saW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgXCJmaWxlXCIsIGRpcmZkLCBcImxpbmtcIiwgMCksIFwibGlua1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXCJmaWZvXCIsIDA2MDApLCBcIm1rbm9kXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IDA7XG4rb3V0OlxuK1x0aWYgKGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZmQpO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwibGlua1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImZpZm9cIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJzeW1saW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlsZVwiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImRpclwiLCBBVF9SRU1PVkVESVIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKVxuK3tcbitcdGNoYXIgdG1wZGlyW10gPSBcIi92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWFwiO1xuK1x0X191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7XG4rXHRpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTtcbitcdGludCByZXQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksIFwibWtkdGVtcFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0ZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgXCJvcGVuX3RtcGRpclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZG1hcHBlZF9kaXJmZCA9IGNyZWF0ZV9pZG1hcHBlZF90bXBmcygpO1xuK1x0aWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsIFwiY3JlYXRlX2lkbWFwcGVkX3RtcGZzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksIFwiaWRlbnRpdHlfaWRtYXBcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLFxuK1x0XHQgICAgICAgXCJpZG1hcHBlZF9tb3VudFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCxcbitcdFx0ICAgICAgIFwiaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlblwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRyZXQgPSBBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsXG4rXHRcdFx0XCJpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXCIpID8gMCA6IC0xO1xuK1xuK291dDpcbitcdGlmIChpZG1hcHBlZF9kaXJmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGlkbWFwcGVkX2RpcmZkKTtcbitcdGlmIChkaXJmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGRpcmZkKTtcbitcdHJtZGlyKHRtcGRpcik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuQEAgLTUzLDYgKzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4gXG4rXHRlcnIgPSB0ZXN0X2xzbV9pbm9kZV9pZG1hcChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X2xzbV9pbm9kZV9pZG1hcFwiKSlcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XG4gXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcInN0YWNrX21wcm90ZWN0XCIpIHx8XG4gXHQgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sIFwic3RhY2tfbXByb3RlY3RcIikpXG5AQCAtNzEsNiArMzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV90ZXN0ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fY291bnQgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbXByb3RlY3RfY291bnQgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuQEAgLTg0LDYgKzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcbiBpbnQgYnBybV9jb3VudCA9IDA7XG4rX191MzIgaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rX191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4rXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9DUkVBVEVcdD0gMVUgXHUwMDNjXHUwMDNjIDAsXG4rXHRJTk9ERV9JRE1BUF9MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAxLFxuK1x0SU5PREVfSURNQVBfU1lNTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMixcbitcdElOT0RFX0lETUFQX01LRElSXHQ9IDFVIFx1MDAzY1x1MDAzYyAzLFxuK1x0SU5PREVfSURNQVBfTUtOT0RcdD0gMVUgXHUwMDNjXHUwMDNjIDQsXG4rXHRJTk9ERV9JRE1BUF9QRVJNSVNTSU9OXHQ9IDFVIFx1MDAzY1x1MDAzYyA1LFxuK307XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX21vbml0b3JlZF9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXG4rXHRyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgXHUwMDI2XHUwMDI2IGlkbWFwO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4re1xuK1x0cmV0dXJuIGlkbWFwLVx1MDAzZXVpZF9tYXAubnJfZXh0ZW50cyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGlkbWFwLVx1MDAzZWdpZF9tYXAubnJfZXh0ZW50cyA9PSAwO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXG4re1xuK1x0aWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSlcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpXG4rXHRcdGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vaztcbitcdGVsc2VcbitcdFx0aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiB8PSBob29rO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9jcmVhdGVcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbGlua1wiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfc3ltbGlua1wiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtkaXJcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX21rbm9kXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX3Blcm1pc3Npb25cIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcbit9XG4gXG4gU0VDKFwibHNtL2ZpbGVfbXByb3RlY3RcIilcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOToyOC4zNTU0NzU3NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MDQxMDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBMU00gSG9vayBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgY29tbWl0IG1lc3NhZ2Ugc2ltcGx5IGluZGljYXRlcyBpdCdzIGEgcGF0Y2ggdW5kZXIgcmV2aWV3IHJlbGF0ZWQgdG8gc3l6LWNsdXN0ZXIuIEknbSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBmZXcgY29yZSBhcmVhczogYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYSBjb3VwbGUgb2YgaW5jbHVkZSBmaWxlcyAoYGxpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBsaW51eC9zZWN1cml0eS5oYCksIGFuZCB0aGUgYHNlY3VyaXR5YCBkaXJlY3RvcnkgaXRzZWxmIHdpdGggYHNlY3VyaXR5LmNgLCBgc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzbWFjay9zbWFja19sc20uY2AuICBJJ20gYWxzbyBzZWVpbmcgYSBjaGFuZ2UgaW4gdGhlIGJwZiBzZWxmdGVzdHMuXG5cbldoYXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHBhc3NpbmcgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGRvd24gaW50byBhIGhhbmRmdWwgb2YgTFNNIGhvb2tzLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIGFjY2VwdCB0aGUgYGlkbWFwYDogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLlxuXG5UYWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wYWN0ZWQgTFNNIGltcGxlbWVudGF0aW9ucywgSSBzZWUgYSBwYXR0ZXJuLiAgU0VMaW51WCAoYHNlbGludXhfaW5vZGVfLi4uYCkgYW5kIFNtYWNrIChgc21hY2tfaW5vZGVfLi4uYCkgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2ltcGx5IGFjY2VwdCB0aGUgbmV3IGBpZG1hcGAgcGFyYW1ldGVyIHRvIG1hdGNoIHRoZSBmdW5jdGlvbiBwcm90b3R5cGU7IGl0J3MgYSBzdHJhaWdodC1mb3J3YXJkIGFkZGl0aW9uIHRvIHRoZWlyIHNpZ25hdHVyZXMuICBJbiBgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jYCwgaXQncyBwYXNzaW5nIGBcdTAwMjZub3BfbW50X2lkbWFwYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBmcy9uYW1laS5jYCBzZWVtcyB0byBiZSBwYXNzaW5nIGVpdGhlciB0aGUgYGlkbWFwYCBvciBgXHUwMDI2bm9wX21udF9pZG1hcGAgYXMgd2VsbC4gVGhlIGJwZiBzZWxmdGVzdHMgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBob29rIHNpZ25hdHVyZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IExTTSBpbXBsZW1lbnRhdGlvbnMgYWZmZWN0ZWQgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQgbWUgcXVpY2tseSBydW4gYSBgZ3JlcGAgdG8gZW5zdXJlIG5vIG90aGVyIExTTSBob29rcyBvciBjYWxsZXJzIGFyZSBsdXJraW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZC4gV2UgbmVlZCB0byBiZSBleGhhdXN0aXZlIGhlcmUgdG8gZW5zdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOTozMi43NDU4OTIyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDU1OTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jPTQ5PXN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jLTYwLVxcbmZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYzo2MTpcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jLTYyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz00MTc3PWludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNDE5MC1cXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbmZzL25hbWVpLmM6NDE5MTpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbmZzL25hbWVpLmMtNDE5Mi1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9uYW1laS5jPTQyMDQ9aW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNDIxNC1cXHRtb2RlIHw9IFNfSUZSRUc7XFxuZnMvbmFtZWkuYzo0MjE1OlxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuZnMvbmFtZWkuYy00MjE2LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL25hbWVpLmM9NDMxNT1zdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL25hbWVpLmMtNDMzMC1cXG5mcy9uYW1laS5jOjQzMzE6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuZnMvbmFtZWkuYy00MzMyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MDQ9aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwNi1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDc6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwOC1cXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD05MDI9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtOTA4LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo5MDk6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05MTAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE2MDk9aW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE1LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYxNjogKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MjUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYyNy1cXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjMyLX1cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MzM6RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjM0LjM0NjQ1OTkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjUyMDU5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgU2VjdXJpdHktRm9jdXNlZCBSZXZpZXcqKlxuXG5Pa2F5LCB0aW1lIHRvIG1ldGhvZGljYWxseSBkaWcgaW50byB0aGlzIHNlY3VyaXR5IGFzcGVjdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBoYW5kbGVzIGlub2RlIHBlcm1pc3Npb25zIGFuZCBjcmVhdGlvbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBjb3JlIHNlY3VyaXR5IG1lY2hhbmlzbXMuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBhdWRpdCB0aGUgc3RhbmRhcmQgTFNNIGhvb2tzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZDogc3BlY2lmaWNhbGx5LCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYC4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQnV0IEkgYWxzbyBuZWVkIHRvIHRoaW5rIG1vcmUgYnJvYWRseS4gQXJlIHRoZXJlICphbnkqIG90aGVyIExTTSBpbXBsZW1lbnRhdGlvbnMgYWN0aXZlIG9uIHRoaXMgc3lzdGVtPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3Igb3ZlcmxhcHBpbmcgYmVoYXZpb3JzIGZyb20gdGhpbmdzIGxpa2UgQXBwQXJtb3IsIExhbmRsb2NrLCBUb21veW8sIG9yIGFueSBvdGhlciBjdXN0b20gTFNNcyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBkZXBsb3llZC4gVGhhdCdzIGNyaXRpY2FsLiBJJ20gZ29pbmcgdG8gc2VhcmNoIGFjcm9zcyB0aGUgb3RoZXIgTFNNcyBmb3IgcmVsZXZhbnQgaG9va3MsIGZvY3VzaW5nIG9uIGBpbm9kZV9wZXJtaXNzaW9uYCBvciBgaW5vZGVfY3JlYXRlYC4gRmluZGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIGltcGxlbWVudGF0aW9ucyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2VjdXJpdHkgcGljdHVyZSBoZXJlLiBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGEgc2luZ2xlIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjM3LjA3MTY3MDA4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTU2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5vZGVfcGVybWlzc2lvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuYz0xMjI1PXN0YXRpYyB2b2lkIGlub2RlX2ZyZWVfYnlfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0MS0gKiBzZWN1cml0eV9pbm9kZV9mcmVlKCksIEBpbm9kZSBtYXkgc3RpbGwgYmUgcmVmZXJlbmNlZCBpbiBhIFZGUyBwYXRoIHdhbGtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjEyNDI6ICogYW5kIGNhbGxzIHRvIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSBtYXkgYmUgbWFkZSBkdXJpbmcsIG9yIGFmdGVyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0My0gKiBhIGNhbGwgdG8gc2VjdXJpdHlfaW5vZGVfZnJlZSgpLiAgRm9yIHRoaXMgcmVhc29uIHRoZSBpbm9kZS1cXHUwMDNlaV9zZWN1cml0eVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0NC0gKiBmaWVsZCBpcyByZWxlYXNlZCB2aWEgYSBjYWxsX3JjdSgpIGNhbGxiYWNrIGFuZCBhbnkgTFNNcyB3aGljaCBuZWVkIHRvXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMjQ1OiAqIHJldGFpbiBpbm9kZSBzdGF0ZSBmb3IgdXNlIGluIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSBzaG91bGQgb25seVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0Ni0gKiByZWxlYXNlIHRoYXQgc3RhdGUgaW4gdGhlIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1KCkgTFNNIGhvb2sgY2FsbGJhY2suXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTgzMC0vKipcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4MzE6ICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ2LVxcdFxcdFxcdCAgICAgIGludCBtYXNrKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ5LVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg1MDpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg1MS19XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTI3Mjc9aW50IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczNi0gKiBTYXZlIG9wZW4tdGltZSBwZXJtaXNzaW9uIGNoZWNraW5nIHN0YXRlIGZvciBsYXRlciB1c2UgdXBvbiBmaWxlX3Blcm1pc3Npb24sXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNzM3OiAqIGFuZCByZWNoZWNrIGFjY2VzcyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZCBzaW5jZSBpbm9kZV9wZXJtaXNzaW9uLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczOC0gKlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMzA9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTQ2OnN0YXRpYyBub2lubGluZSBpbnQgYXVkaXRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ3LVxcdFxcdFxcdFxcdFxcdCAgIHUzMiBwZXJtcywgdTMyIGF1ZGl0ZWQsIHUzMiBkZW5pZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDItLyoqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyOTktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XFx0cmMyID0gYXVkaXRfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgcGVybXMsIGF1ZGl0ZWQsIGRlbmllZCwgcmMpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzAxLVxcdGlmIChyYzIpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDI2Mz1zdGF0aWMgaW50IHNlbGludXhfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODAtXFx0ICogU2luY2UgdGhlIGlub2RlIGxhYmVsIG9yIHBvbGljeSBzZXFubyBtYXkgaGF2ZSBjaGFuZ2VkXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XFx0ICogYmV0d2VlbiB0aGUgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIGNoZWNrIGFuZCB0aGUgc2F2aW5nXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODItXFx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfZm9sbG93X2xpbmssIHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxOS1cXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNlbGludXhfaW5vZGVfc2V0YXR0ciksXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMDIwPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMzMtXFx0ICogVU5JWCBkb21haW4gc29ja2V0cyB1c2UgbG93ZXIgbGV2ZWwgc29ja2V0IGRhdGEuIExldFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMzQ6XFx0ICogVURTIGlub2RlIGhhdmUgZml4ZWQgKiBsYWJlbCB0byBrZWVwIHNtYWNrX2lub2RlX3Blcm1pc3Npb24oKSBjYWxtXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzNS1cXHQgKiB3aGVuIGNhbGxlZCBmcm9tIHVuaXhfZmluZF9ic2QoKVxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTIwMz1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMjgtLyoqXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTIyOTogKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjMwLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjM3LSAqL1xcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMzg6c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzktXFx0XFx0XFx0XFx0ICBpbnQgbWFzaylcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTUxNTg9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc21hY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgwLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfcmVuYW1lLCBzbWFja19pbm9kZV9yZW5hbWUpLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjUxODE6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgyLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfc2V0YXR0ciwgc21hY2tfaW5vZGVfc2V0YXR0ciksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjM3LjEyMDQzMTUxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODAwNzIwMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3IsIHByaW1hcmlseSBjb25jZXJuaW5nIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCB0aHJvdWdoIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGNhbGxlcnMuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBjbGVhcjpcblxuRmlyc3QsIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgaW5vZGUgTFNNIGhvb2tz4oCUYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBhbmQgYGlub2RlX3Blcm1pc3Npb25g4oCUdG8gaW5jbHVkZSB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIuIFRoZSBWRlMgY2FsbGVycyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgIGFyZSB1cGRhdGVkIHRvIGNvcnJlY3RseSBwYXNzIHRoZSBgaWRtYXBgIChvciBgXHUwMDI2bm9wX21udF9pZG1hcGApIGludG8gdGhlIHJlbGV2YW50IHNlY3VyaXR5IHdyYXBwZXJzLiBUaGlzIGNoYW5nZSBhbHNvIGV4dGVuZHMgdG8gaW1wbGVtZW50YXRpb25zIHN1Y2ggYXMgU0VMaW51eCwgU21hY2sgYW5kIExTTSBCUEYgd2hpY2ggYWxzbyB1cGRhdGUgdG8gYWNjb21tb2RhdGUgdGhlIG5ldyBwYXJhbWV0ZXIuIEkndmUgZ290IHRvIGNvbnNpZGVyIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW52b2x2ZWQsIHNvIEkgZ28gdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcjoqKiBOb3RoaW5nIG5ldyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIGNoYW5nZXMgdG8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RsIGFyZSBoYXBwZW5pbmcgaGVyZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBUaGUgYGlkbWFwYCBwb2ludGVyIGJlaW5nIHBhc3NlZCBhcm91bmQgaXMgYSB2YWxpZCBwb2ludGVyIG9yaWdpbmF0aW5nIGZyb20gVkZTIGNhbGxlcnMsIG9yIHRoZSBzYWZlIGBcdTAwMjZub3BfbW50X2lkbWFwYC4gSSdtIG5vdCBzZWVpbmcgYW55IHNjZW5hcmlvcyB3aGVyZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsJ3MgY29kZSBwYXRoLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBvdGhlciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeToqKiBUaGVyZSdzIG5vIG1hbmlwdWxhdGlvbiBvZiBtZW1vcnksIGJvdW5kcyBjaGVja3MsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuQmFzZWQgb24gdGhpcywgS01TQU4gaXMgdW5saWtlbHkgdG8gaWRlbnRpZnkgYW55IGlzc3Vlcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBpcyBwcmltYXJpbHkgY2hhbmdpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBwcm9wYWdhdGUgYW4gZXhpc3RpbmcgcGFyYW1ldGVyLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdGhhdCBLTVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGluY29ycmVjdCBwb2ludGVycyB3aGljaCBhcmUgdHlwZXMgb2YgbWVtb3J5IGVycm9ycyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBncmVhdCBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGlzbid0IHByZXNlbnQgaGVyZS5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgYGZhbHNlYC5cblxuTm93LCBJJ2xsIHNvbGlkaWZ5IHRoZSByZWFzb25pbmc6XG5cbiogICBUaGUgcGF0Y2gncyBjb3JlIGZ1bmN0aW9uIGlzIGV4dGVuZGluZyBMU00gaG9va3Mgd2l0aCB0aGUgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBwYXJhbWV0ZXIuXG4qICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgaGVhcC9zdGFjayBidWZmZXJzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC5cbiogICBObyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIG9yIGludGVyYWN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgYWRkZWQuXG4qICAgVGhlIGNoYW5nZSBpcyBhYm91dCBwbHVtYmluZyBhbiBleGlzdGluZyBwb2ludGVyIChgaWRtYXBgIC8gYFx1MDAyNm5vcF9tbnRfaWRtYXBgKS5cbiogICBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgbGlrZWx5IGJlIHBvaW50ZXItcmVsYXRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgZmF1bHQgaGFuZGxpbmcgd291bGQgY2F0Y2ggdGhlbS5cbiogICBUaHVzLCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgbm8gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LlxuSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMsIGFuZCBub3cgSSdsbCBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk3LCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOTo0My45MjExNTUwNzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgc2V2ZXJhbCBpbm9kZS1yZWxhdGVkIExTTSBob29rcyAoYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBhbmQgYGlub2RlX3Blcm1pc3Npb25gKSBhbmQgdGhlaXIgd3JhcHBlcnMgYnkgcGFzc2luZyBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgLiBJdCBhbHNvIHVwZGF0ZXMgU0VMaW51eCBhbmQgU21hY2sgaW1wbGVtZW50YXRpb25zIGFuZCBhZGRzIEJQRiBMU00gc2VsZnRlc3RzIGZvciBpZG1hcHBlZCBtb3VudHMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIHNldmVyYWwgaW5vZGUtcmVsYXRlZCBMU00gaG9va3MgKGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYCkgYW5kIHRoZWlyIHdyYXBwZXJzIGJ5IHBhc3NpbmcgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYC4gSXQgYWxzbyB1cGRhdGVzIFNFTGludXggYW5kIFNtYWNrIGltcGxlbWVudGF0aW9ucyBhbmQgYWRkcyBCUEYgTFNNIHNlbGZ0ZXN0cyBmb3IgaWRtYXBwZWQgbW91bnRzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcGFyYW1ldGVyIHBsdW1iaW5nIHVwZGF0ZSBhY3Jvc3MgVkZTIGFuZCBMU00gaW50ZXJmYWNlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCwgYW5kIG5vIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciBkZXJlZmVyZW5jaW5nIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZGV0ZWN0ZWQgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 02:06:48 +0000 UTC FinishedAt: 2026-09-02 02:09:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "BPF_LSM", "SECURITY_SELINUX", "SECURITY_SMACK", "CACHEFILES" ], "series_id": "85415732-119e-4324-9d4a-5f94f876fe4e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "security_inode_create", "security_inode_link", "security_inode_symlink", "security_inode_mkdir", "security_inode_mknod", "security_inode_permission" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGlub2RlIExTTSBob29rcyAoc2VjdXJpdHlfaW5vZGVfY3JlYXRlLCBzZWN1cml0eV9pbm9kZV9saW5rLCBzZWN1cml0eV9pbm9kZV9zeW1saW5rLCBzZWN1cml0eV9pbm9kZV9ta2Rpciwgc2VjdXJpdHlfaW5vZGVfbWtub2QsIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24pIGFsb25nIHdpdGggVkZTIGNhbGxlcnMgdG8gcGFzcyBkb3duIG1vdW50IGlkbWFwcyAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGVuYWJsZXMgTFNNcyBhbmQgQlBGIExTTSBwcm9ncmFtcyB0byBpbnNwZWN0IGlkbWFwcGVkIG1vdW50cyBkdXJpbmcgZmlsZSBvcGVyYXRpb25zLCBhbHRlcmluZyByZWFjaGFibGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5YzI4MjE4YjJkNWU1N2Q3NzJhNjgyZTAyYTU4N2JmYTM0NzBiNDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAyOjA4OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5AQCAtNTEsMTQgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiYjNDM7XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7U2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFwmIzM0OyxcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiYjNDM7XHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHByX2VycihcJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXCYjMzQ7LFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKHVubGlrZWx5KHJldHZhbCkpXG4gXHRcdHJldHVybiByZXR2YWw7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XG4mIzQzO1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcbiBcbkBAIC02OTUsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbkBAIC00MTg4LDcgJiM0Mzs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcdC8qIHNob3VsZG4mIzM5O3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbkBAIC00MjEyLDcgJiM0Mzs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcbiBcdG1vZGUgXHUwMDI2PSBTX0lBTExVR087XG4gXHRtb2RlIHw9IFNfSUZSRUc7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuIH1cbiBcbiAvKipcbkBAIC01MjU4LDcgJiM0Mzs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICYjNDM7NTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWRpci1cdTAwM2VpX29wLVx1MDAzZXN5bWxpbmspXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTkwNyw3ICYjNDM7NTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTIwLDI2ICYjNDM7MTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgaW50ICp4YXR0cl9jb3VudClcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNDA0LDI0ICYjNDM7NDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgICAgIGJvb2wgcmN1KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgdW1vZGVfdCBtb2RlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTEzLDkgJiM0Mzs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkyNiwxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NDYsOSAmIzQzOzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcbkBAIC0xNjIyLDEyICYjNDM7MTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICYjNDM7MTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xuQEAgLTE2NTYsMTIgJiM0MzsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICYjNDM7MTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxuQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnlcbiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlXG5AQCAtMTcwOSwxMSAmIzQzOzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuIFxuQEAgLTE3MzUsNiAmIzQzOzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZmlsZVxuICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlXG5AQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4mIzQzO1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IGlub2RlXG4gICogQG1hc2s6IGFjY2VzcyBtYXNrXG4gICpcbkBAIC0xODM1LDExICYjNDM7MTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0ICAgICAgaW50IG1hc2spXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7XG4mIzQzO1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0zMDc0LDEyICYjNDM7MzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7XG4gfVxuQEAgLTMwODksMTIgJiM0MzszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICYjNDM7MzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyAmIzQzOzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcbiBcbiAvKipcbiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGVcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxuICAqXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4mIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuIHtcbiBcdGludCBtYXNrO1xuIFx0dTMyIHBlcm1zO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbkBAIC0xMDg5LDE0ICYjNDM7MTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbkBAIC0xMjI2LDYgJiM0MzsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb25cbiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWRcbiAgKlxuQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHRcdCAgaW50IG1hc2spXG4ge1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5pbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuQEAgLTEsMTggJiM0MzsxLDMwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiYjNDM7XG4gI2luY2x1ZGUgXCYjMzQ7bHNtLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xzbV90YWlsY2FsbC5za2VsLmhcJiMzNDtcbiBcbiBjaGFyICpDTURfQVJHU1tdID0ge1wmIzM0O3RydWVcJiMzNDssIE5VTEx9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbiYjNDM7fTtcbiYjNDM7XG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiB7XG4gXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XG5AQCAtMzAsNiAmIzQzOzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4mIzQzO1x0fSB3aGlsZSAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xuJiM0MztcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRlbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pXG4mIzQzO1x0XHRzYXZlZF9lcnJubyA9IEVJTztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKHNhdmVkX2Vycm5vKSB7XG4mIzQzO1x0XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoWzY0XTtcbiYjNDM7XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jLyVkLyVzXCYjMzQ7LCBwaWQsIG5hbWUpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbiYjNDM7XHRcdGVycm5vID0gRU9WRVJGTE9XO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFs2NF07XG4mIzQzO1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4mIzQzO1x0aW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0cGlkID0gZm9yaygpO1xuJiM0MztcdGlmIChwaWQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSlcbiYjNDM7XHRcdFx0X2V4aXQoMSk7XG4mIzQzO1x0XHRyYWlzZShTSUdTVE9QKTtcbiYjNDM7XHRcdF9leGl0KDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcbiYjNDM7XHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XHRpZiAod2FpdGVkICE9IHBpZClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4mIzQzO1x0XHRwaWQgPSAtMTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cbiYjNDM7XHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcJiMzNDtzZXRncm91cHNcJiMzNDssIFwmIzM0O2RlbnlcJiMzNDspIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFTk9FTlQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcJiMzNDt1aWRfbWFwXCYjMzQ7LCBcJiMzNDswIDAgMVwmIzM0OykgfHxcbiYjNDM7XHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcJiMzNDtnaWRfbWFwXCYjMzQ7LCBcJiMzNDswIDAgMVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDsvcHJvYy8lZC9ucy91c2VyXCYjMzQ7LCBwaWQpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbiYjNDM7XHRcdGVycm5vID0gRU9WRVJGTE9XO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRpZiAocGlkIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbiYjNDM7XHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdH1cbiYjNDM7XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuJiM0MztcdHJldHVybiBmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XG4mIzQzO1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xuJiM0MztcbiYjNDM7XHR1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7XG4mIzQzO1x0aWYgKHVzZXJuc19mZCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xuJiM0MztcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcJiMzNDt0bXBmc1wmIzM0OywgRlNPUEVOX0NMT0VYRUMpO1xuJiM0MztcdGlmIChmc2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcbiYjNDM7XHRpZiAobW50ZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4mIzQzO1x0aWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgXCYjMzQ7XCYjMzQ7LCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuJiM0MztcdFx0ICAgIHNpemVvZihhdHRyKSkpIHtcbiYjNDM7XHRcdGNsb3NlKG1udGZkKTtcbiYjNDM7XHRcdG1udGZkID0gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHNhdmVkX2Vycm5vID0gZXJybm87XG4mIzQzO1x0aWYgKGZzZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZnNmZCk7XG4mIzQzO1x0aWYgKHVzZXJuc19mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZSh1c2VybnNfZmQpO1xuJiM0MztcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0cmV0dXJuIG1udGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZClcbiYjNDM7e1xuJiM0MztcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQyxcbiYjNDM7XHRcdCAgICAwNjAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7Y3JlYXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRmZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCBcJiMzNDtkaXJcJiMzNDssIDA3MDApLCBcJiMzNDtta2RpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoXCYjMzQ7dGFyZ2V0XCYjMzQ7LCBkaXJmZCwgXCYjMzQ7c3ltbGlua1wmIzM0OyksIFwmIzM0O3N5bWxpbmtcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcJiMzNDtmaWxlXCYjMzQ7LCBkaXJmZCwgXCYjMzQ7bGlua1wmIzM0OywgMCksIFwmIzM0O2xpbmtcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFwmIzM0O2ZpZm9cJiMzNDssIDA2MDApLCBcJiMzNDtta25vZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2xpbmtcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtmaWZvXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7c3ltbGlua1wmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtkaXJcJiMzNDssIEFUX1JFTU9WRURJUik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciB0bXBkaXJbXSA9IFwmIzM0Oy92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWFwmIzM0OztcbiYjNDM7XHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbiYjNDM7XHRpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksIFwmIzM0O21rZHRlbXBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgXCYjMzQ7b3Blbl90bXBkaXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsIFwmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCYjMzQ7aWRlbnRpdHlfaWRtYXBcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O2lkbWFwcGVkX21vdW50XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbiYjNDM7XHRcdFx0XCYjMzQ7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblwmIzM0OykgPyAwIDogLTE7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGlkbWFwcGVkX2RpcmZkKTtcbiYjNDM7XHRpZiAoZGlyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoZGlyZmQpO1xuJiM0MztcdHJtZGlyKHRtcGRpcik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuQEAgLTUzLDYgJiM0MzsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuIFxuJiM0MztcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xuIFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXCYjMzQ7c3RhY2tfbXByb3RlY3RcJiMzNDspIHx8XG4gXHQgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sIFwmIzM0O3N0YWNrX21wcm90ZWN0XCYjMzQ7KSlcbkBAIC03MSw2ICYjNDM7MzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV90ZXN0ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fY291bnQgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbXByb3RlY3RfY291bnQgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiAmIzQzOzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XG4gaW50IGJwcm1fY291bnQgPSAwO1xuJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbiYjNDM7X191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRJTk9ERV9JRE1BUF9DUkVBVEVcdD0gMVUgXHUwMDNjXHUwMDNjIDAsXG4mIzQzO1x0SU5PREVfSURNQVBfTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMSxcbiYjNDM7XHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuJiM0MztcdElOT0RFX0lETUFQX01LRElSXHQ9IDFVIFx1MDAzY1x1MDAzYyAzLFxuJiM0MztcdElOT0RFX0lETUFQX01LTk9EXHQ9IDFVIFx1MDAzY1x1MDAzYyA0LFxuJiM0MztcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuJiM0Mzt7XG4mIzQzO1x0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgXHUwMDI2XHUwMDI2IGlkbWFwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGlkbWFwLVx1MDAzZWdpZF9tYXAubnJfZXh0ZW50cyA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbiYjNDM7XHRcdGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vaztcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfY3JlYXRlXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX2xpbmtcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9zeW1saW5rXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9ta2RpclwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfbWtub2RcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvblwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XG4mIzQzO31cbiBcbiBTRUMoXCYjMzQ7bHNtL2ZpbGVfbXByb3RlY3RcJiMzNDspXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TTUFDSyYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgc2V2ZXJhbCBpbm9kZSBMU00gaG9va3MgKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSwgc2VjdXJpdHlfaW5vZGVfbGluaywgc2VjdXJpdHlfaW5vZGVfc3ltbGluaywgc2VjdXJpdHlfaW5vZGVfbWtkaXIsIHNlY3VyaXR5X2lub2RlX21rbm9kLCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKSBhbG9uZyB3aXRoIFZGUyBjYWxsZXJzIHRvIHBhc3MgZG93biBtb3VudCBpZG1hcHMgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBlbmFibGVzIExTTXMgYW5kIEJQRiBMU00gcHJvZ3JhbXMgdG8gaW5zcGVjdCBpZG1hcHBlZCBtb3VudHMgZHVyaW5nIGZpbGUgb3BlcmF0aW9ucywgYWx0ZXJpbmcgcmVhY2hhYmxlIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBzdWJzeXN0ZW0gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOWMyODIxOGIyZDVlNTdkNzcyYTY4MmUwMmE1ODdiZmEzNDcwYjQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwMjowODo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwppbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCkBAIC01MSwxNCAmIzQzOzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAogewogCWludCByZXQ7CiAKLQlyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcigmYW1wO25vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJcHJfZXJyKCYjMzQ7U2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZCYjMzQ7LAogCQkgICAgICAgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKJiM0MzsJcmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcHJfZXJyKCYjMzQ7U2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZCYjMzQ7LAogCQkgICAgICAgcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDIwYTY1MzRlYTNlZmYuLjk5Zjg5NGYzZjdlMTMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuYwpAQCAtNjU4LDcgJiM0Mzs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAodW5saWtlbHkocmV0dmFsKSkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7CiAKQEAgLTY5NSw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWQKIAlpZiAodW5saWtlbHkoKChpbm9kZS0mZ3Q7aV9tb2RlICZhbXA7IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSkKIAkJcmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCkBAIC00MTg4LDcgJiM0Mzs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCQlyZXR1cm4gLUVBQ0NFUzsJLyogc2hvdWxkbiYjMzk7dCBpdCBiZSBFTk9TWVM/ICovCiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKQEAgLTQyMTIsNyAmIzQzOzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCiAJbW9kZSAmYW1wOz0gU19JQUxMVUdPOwogCW1vZGUgfD0gU19JRlJFRzsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCZhbXA7bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7CkBAIC00MzI4LDcgJiM0Mzs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKIH0KIAogLyoqCkBAIC01MjU4LDcgJiM0Mzs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTM5NSw3ICYjNDM7NTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCWdvdG8gZXJyOwogCiAJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyOwogCkBAIC01NzgzLDcgJiM0Mzs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoIWRpci0mZ3Q7aV9vcC0mZ3Q7c3ltbGluaykKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01OTA3LDcgJiM0Mzs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaApAQCAtMTIwLDI2ICYjNDM7MTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGludCAqeGF0dHJfY291bnQpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkgc3RydWN0IGlub2RlICppbm9kZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZWFkbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBib29sIHJjdSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNDA0LDI0ICYjNDM7NDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwogaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTsKIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCQkJICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksCiAJCQkgIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgICAgYm9vbCByY3UpOwotaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKTsKIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKQEAgLTkwMiw5ICYjNDM7OTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSB1bW9kZV90IG1vZGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQl1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05MTMsOSAmIzQzOzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQKIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7IH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAotCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkyNiwxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQkgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkgICAgICAgaW50IG1vZGUpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05NDYsOSAmIzQzOzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJaW50IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkgICAgICAgaW50IG1vZGUsIGRldl90IGRldikKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk3NCw3ICYjNDM7OTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCAyZWUyNzZhYjE1YzViLi5hOTE5MGRhMzM0MWRkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTE2MTQsNiAmIzQzOzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZAogICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGUKQEAgLTE2MjIsMTIgJiM0MzsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpOwogCkBAIC0xNjQ4LDYgJiM0MzsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGUKICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmsKQEAgLTE2NTYsMTIgJiM0MzsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiB9CiAKIC8qKgpAQCAtMTY4Miw2ICYjNDM7MTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rCiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lCkBAIC0xNjkwLDE2ICYjNDM7MTY5MywxNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwogfQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5CiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlCkBAIC0xNzA5LDExICYjNDM7MTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7CiAKQEAgLTE3MzUsNiAmIzQzOzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiBuZXcgZmlsZQogICogQG1vZGU6IG5ldyBmaWxlIG1vZGUKQEAgLTE3NDcsMTIgJiM0MzsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogfQogCiAvKioKQEAgLTE4MjMsNiAmIzQzOzE4MjksNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogaW5vZGUKICAqIEBtYXNrOiBhY2Nlc3MgbWFzawogICoKQEAgLTE4MzUsMTEgJiM0MzsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgbWFzaykKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTMwNzQsMTIgJiM0MzszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAmYW1wO2FkKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJcmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspOwogfQpAQCAtMzA4OSwxMiAmIzQzOzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0RJUik7CiB9CkBAIC0zMTA0LDcgJiM0MzszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhtb2RlKSk7CiB9CkBAIC0zMjM2LDEzICYjNDM7MzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLAogCiAvKioKICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZQomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkCiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkCiAgKgogICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvCiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKQogewogCWludCBtYXNrOwogCXUzMiBwZXJtczsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTEwODksMTQgJiM0MzsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGluawomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdAogICogQGRpcjogdW51c2VkCiAgKiBAbmV3X2RlbnRyeTogdGhlIG5ldyBvYmplY3QKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDsKIAlzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7CkBAIC0xMjI2LDYgJiM0MzsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsCiAKIC8qKgogICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uCiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWQKICAqCkBAIC0xMjMzLDcgJiM0MzsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsCiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgaW50IG1hc2spCiB7CiAJc3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLSZndDtpX3NiKTsKIAlzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwppbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKQEAgLTEsMTggJiM0MzsxLDMwIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKIAogLyoKICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDLgogICovCiAKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vdW50LmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O2xzbS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtsc21fdGFpbGNhbGwuc2tlbC5oJiMzNDsKIAogY2hhciAqQ01EX0FSR1NbXSA9IHsmIzM0O3RydWUmIzM0OywgTlVMTH07CiAKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQUxMID0gKDFVICZsdDsmbHQ7IDYpIC0gMSwKJiM0Mzt9OwomIzQzOwogaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIHsKIAlpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7CkBAIC0zMCw2ICYjNDM7NDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7CiYjNDM7CX0gd2hpbGUgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpOwomIzQzOwlpbnQgZmQsIHNhdmVkX2Vycm5vID0gMDsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKQomIzQzOwkJc2F2ZWRfZXJybm8gPSBFSU87CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJaWYgKHNhdmVkX2Vycm5vKSB7CiYjNDM7CQllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlpbnQgbGVuOwomIzQzOwomIzQzOwlsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvJXMmIzM0OywgcGlkLCBuYW1lKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJcGlkX3QgcGlkLCB3YWl0ZWQ7CiYjNDM7CWludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKHBpZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChwaWQgPT0gMCkgewomIzQzOwkJaWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpCiYjNDM7CQkJX2V4aXQoMSk7CiYjNDM7CQlyYWlzZShTSUdTVE9QKTsKJiM0MzsJCV9leGl0KDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCAmYW1wO3N0YXR1cywgV1VOVFJBQ0VEKTsKJiM0MzsJfSB3aGlsZSAod2FpdGVkICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsJaWYgKHdhaXRlZCAhPSBwaWQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHsKJiM0MzsJCXBpZCA9IC0xOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi8KJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtzZXRncm91cHMmIzM0OywgJiMzNDtkZW55JiMzNDspICZhbXA7JmFtcDsgZXJybm8gIT0gRU5PRU5UKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7dWlkX21hcCYjMzQ7LCAmIzM0OzAgMCAxJiMzNDspIHx8CiYjNDM7CSAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7Z2lkX21hcCYjMzQ7LCAmIzM0OzAgMCAxJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC9ucy91c2VyJiMzNDssIHBpZCk7CiYjNDM7CWlmIChsZW4gJmx0OyAwIHx8IChzaXplX3QpbGVuICZndDs9IHNpemVvZihwYXRoKSkgewomIzQzOwkJZXJybm8gPSBFT1ZFUkZMT1c7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKHBpZCAmZ3Q7IDApIHsKJiM0MzsJCWtpbGwocGlkLCBTSUdLSUxMKTsKJiM0MzsJCWRvIHsKJiM0MzsJCQl3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7CiYjNDM7CQl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwl9CiYjNDM7CWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CXJldHVybiBmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7CiYjNDM7CQkuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLAomIzQzOwl9OwomIzQzOwlpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTsKJiM0MzsJaWYgKHVzZXJuc19mZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi8KJiM0MzsJZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sICYjMzQ7dG1wZnMmIzM0OywgRlNPUEVOX0NMT0VYRUMpOwomIzQzOwlpZiAoZnNmZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTsKJiM0MzsJaWYgKG1udGZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDsKJiM0MzsJaWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgJiMzNDsmIzM0OywgQVRfRU1QVFlfUEFUSCwgJmFtcDthdHRyLAomIzQzOwkJICAgIHNpemVvZihhdHRyKSkpIHsKJiM0MzsJCWNsb3NlKG1udGZkKTsKJiM0MzsJCW1udGZkID0gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWlmIChmc2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShmc2ZkKTsKJiM0MzsJaWYgKHVzZXJuc19mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UodXNlcm5zX2ZkKTsKJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIG1udGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZCkKJiM0Mzt7CiYjNDM7CWludCBmZCA9IC0xLCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsCiYjNDM7CQkgICAgMDYwMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O2NyZWF0ZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWZkID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsICYjMzQ7ZGlyJiMzNDssIDA3MDApLCAmIzM0O21rZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKHN5bWxpbmthdCgmIzM0O3RhcmdldCYjMzQ7LCBkaXJmZCwgJiMzNDtzeW1saW5rJiMzNDspLCAmIzM0O3N5bWxpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgZGlyZmQsICYjMzQ7bGluayYjMzQ7LCAwKSwgJiMzNDtsaW5rJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMDYwMCksICYjMzQ7bWtub2QmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gMDsKJiM0MztvdXQ6CiYjNDM7CWlmIChmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtmaWZvJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtzeW1saW5rJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIDApOwomIzQzOwl1bmxpbmthdChkaXJmZCwgJiMzNDtkaXImIzM0OywgQVRfUkVNT1ZFRElSKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKQomIzQzO3sKJiM0MzsJY2hhciB0bXBkaXJbXSA9ICYjMzQ7L3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYJiMzNDs7CiYjNDM7CV9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMOwomIzQzOwlpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCAmIzM0O21rZHRlbXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgJiMzNDtvcGVuX3RtcGRpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZG1hcHBlZF9kaXJmZCA9IGNyZWF0ZV9pZG1hcHBlZF90bXBmcygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgJiMzNDtjcmVhdGVfaWRtYXBwZWRfdG1wZnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCAmIzM0O2lkZW50aXR5X2lkbWFwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSwKJiM0MzsJCSAgICAgICAmIzM0O2lkbWFwcGVkX21vdW50JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkgICAgICAgJiMzNDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IEFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLAomIzQzOwkJCSYjMzQ7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiYjMzQ7KSA/IDAgOiAtMTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChpZG1hcHBlZF9kaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoaWRtYXBwZWRfZGlyZmQpOwomIzQzOwlpZiAoZGlyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGRpcmZkKTsKJiM0MzsJcm1kaXIodG1wZGlyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiB7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rOwpAQCAtNTMsNiAmIzQzOzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAKIAlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKIAomIzQzOwllcnIgPSB0ZXN0X2xzbV9pbm9kZV9pZG1hcChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Rlc3RfbHNtX2lub2RlX2lkbWFwJiMzNDspKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKIAllcnIgPSBzdGFja19tcHJvdGVjdCgpOwogCWlmICghQVNTRVJUX0VRKGVyciwgLTEsICYjMzQ7c3RhY2tfbXByb3RlY3QmIzM0OykgfHwKIAkgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sICYjMzQ7c3RhY2tfbXByb3RlY3QmIzM0OykpCkBAIC03MSw2ICYjNDM7MzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogCXNrZWwtJmd0O2Jzcy0mZ3Q7Y29weV90ZXN0ID0gMDsKIAlza2VsLSZndDtic3MtJmd0O2Jwcm1fY291bnQgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7bXByb3RlY3RfY291bnQgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwpAQCAtODQsNiAmIzQzOzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKIGludCBtb25pdG9yZWRfcGlkID0gMDsKIGludCBtcHJvdGVjdF9jb3VudCA9IDA7CiBpbnQgYnBybV9jb3VudCA9IDA7CiYjNDM7X191MzIgaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7X191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CUlOT0RFX0lETUFQX0NSRUFURQk9IDFVICZsdDsmbHQ7IDAsCiYjNDM7CUlOT0RFX0lETUFQX0xJTksJPSAxVSAmbHQ7Jmx0OyAxLAomIzQzOwlJTk9ERV9JRE1BUF9TWU1MSU5LCT0gMVUgJmx0OyZsdDsgMiwKJiM0MzsJSU5PREVfSURNQVBfTUtESVIJPSAxVSAmbHQ7Jmx0OyAzLAomIzQzOwlJTk9ERV9JRE1BUF9NS05PRAk9IDFVICZsdDsmbHQ7IDQsCiYjNDM7CUlOT0RFX0lETUFQX1BFUk1JU1NJT04JPSAxVSAmbHQ7Jmx0OyA1LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX21vbml0b3JlZF9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkKJiM0Mzt7CiYjNDM7CV9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgJmFtcDsmYW1wOyBpZG1hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlkbWFwLSZndDt1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBpZG1hcC0mZ3Q7Z2lkX21hcC5ucl9leHRlbnRzID09IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpCiYjNDM7ewomIzQzOwlpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSkKJiM0MzsJCWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vazsKJiM0MzsJZWxzZQomIzQzOwkJaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiB8PSBob29rOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2NyZWF0ZSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbGluayYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfc3ltbGluayYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX21rZGlyJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtub2QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX3Blcm1pc3Npb24mIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7CiYjNDM7fQogCiBTRUMoJiMzNDtsc20vZmlsZV9tcHJvdGVjdCYjMzQ7KQogaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogV29ydGggRnV6emluZz8qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGxvdCBvZiBpbXBvcnRhbnQgYXJlYXM6IGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgZnMvbmFtZWkuY2AsIGNyaXRpY2FsIGluY2x1ZGUgZmlsZXMsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgc2VjdXJpdHkgZnJhbWV3b3JrIGl0c2VsZiwgaW5jbHVkaW5nIFNFTGludXgsIFNtYWNrLCBhbmQgZXZlbiB0aGUgQlBGIExTTSB0ZXN0cy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGEgcmVmYWN0b3JpbmcsIGludHJvZHVjaW5nIHRoZSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rczogYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBgaW5vZGVfcGVybWlzc2lvbmAuCgpGaXJzdCwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZSBoZXJlLCBvciBpZiB0aGlzIGlzIGp1c3QgcGx1bWJpbmcuIFNjYW5uaW5nIGBmcy9uYW1laS5jYCwgSSBzZWUgYGlkbWFwYCBpcyBnZXR0aW5nIHBhc3NlZCBpbnRvIHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgY2FsbHMgY29ycmVjdGx5LiBUaGUgd3JhcHBlciBmdW5jdGlvbnMgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFyZSBhbHNvIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBgaWRtYXBgIHBhcmFtZXRlciBhbmQgcGFzcyBpdCBvbiB2aWEgYGNhbGxfaW50X2hvb2soLi4uKWAuICBTRUxpbnV4IGFuZCBTbWFjayBhcmUgaGF2aW5nIHRoZWlyIGhvb2sgc2lnbmF0dXJlcyB1cGRhdGVkLCBidXQgaXQgbG9va3MgbGlrZSB0aGV5IGFyZW4mIzM5O3QgKnVzaW5nKiB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIgcmlnaHQgbm93LiBIb3dldmVyLCB0aGUgQlBGIExTTSB0ZXN0cyBhcmUgKnJlY2VpdmluZyogYGlkbWFwYCBub3csIHdoaWNoIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb246IElzIHRoaXMganVzdCBhbiBBUEkgY2hhbmdlIHRvIHN1cHBvcnQgaWRtYXBwZWQgbW91bnRzIGJldHRlciAoZXNwZWNpYWxseSBmb3IgQlBGIExTTSBvciBmdXR1cmUgTFNNcyksIG9yIGRvZXMgaXQgKmZ1bmN0aW9uYWxseSogY2hhbmdlIHNlY3VyaXR5IHBvbGljeSBiZWhhdmlvcj8KCkxldCYjMzk7cyBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3Igd2hhdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGp1c3QgZG9jdW1lbnRhdGlvbiwgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBjb25zdGFudCB1cGRhdGVzLCBvciB1bnJlYWNoYWJsZSBjb2RlLiAgVGhpcyBkZWZpbml0ZWx5ICppc24mIzM5O3QqIGRvY3VtZW50YXRpb24sIGFuZCBpdCBpc24mIzM5O3QganVzdCBsb2dnaW5nLiBUaGlzIGlzIG1vZGlmeWluZyBMU00gaG9vayBkZWZpbml0aW9ucyBhbmQgdGhlIFZGUyBsYXllci4KCk5vdywgdGhpcyBpcyBnZXR0aW5nIGludGVyZXN0aW5nLiAgTFNNIGhvb2tzIGFyZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHRoZSBCUEYgTFNNICpjYW4qIGF0dGFjaCB0byB0aGVzZSBob29rcyBhbmQgbm93IHJlY2VpdmVzIHRoZSBgaWRtYXBgIGFyZ3VtZW50LiBUaGF0IG1lYW5zIGEgQlBGIHByb2dyYW0gY2FuIG5vdyBwb3RlbnRpYWxseSBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbiBtb3VudCBJRCBtYXBwaW5nIGluZm9ybWF0aW9uLCBjaGFuZ2luZyB0aGUgYXR0YWNrIHN1cmZhY2UuCgpUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYXJlYSBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCAqc2VlbXMqIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBkb3VibGUtY2hlY2ssIHRob3VnaC4gIEkgbmVlZCB0byB1c2UgbXkgdG9vbHMgKGBncmVwcGVyYCwgZ2l0IGxvZywgZ2l0IHNob3csIGV0Yy4pIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBjaGFuZ2VzIGluIG90aGVyIExTTXMgKEFwcEFybW9yLCBMYW5kbG9jaywgZXRjLikgb3IgYW55IG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZXNlIGhvb2tzLiBJIGhhdmUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGJlZm9yZSBJIGZsYWcgaXQgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZV9wZXJtaXNzaW9uLiptbnRfaWRtYXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUzMDg9c3RhdGljIGludCB1YmxrX2NoYXJfZGV2X3Blcm1pc3Npb24oc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTMyNi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzI3Olx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMjgtXHRcdFx0ZF9iYWNraW5nX2lub2RlKHBhdGguZGVudHJ5KSwgbWFzayk7XG4tLVxuZnMvYmFkX2lub2RlLmM9ODY9c3RhdGljIGludCBiYWRfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuLS1cbmZzL2JhZF9pbm9kZS5jLTkxLVxuZnMvYmFkX2lub2RlLmM6OTI6c3RhdGljIGludCBiYWRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2JhZF9pbm9kZS5jLTkzLVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4tLVxuZnMvYnBmX2ZzX2tmdW5jcy5jPTEwMz1zdGF0aWMgaW50IGJwZl94YXR0cl9yZWFkX3Blcm1pc3Npb24oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTEyLVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjExMzpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfUkVBRCk7XG5mcy9icGZfZnNfa2Z1bmNzLmMtMTE0LX1cbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmM9MTczPXN0YXRpYyBpbnQgYnBmX3hhdHRyX3dyaXRlX3Blcm1pc3Npb24oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTgxLVxuZnMvYnBmX2ZzX2tmdW5jcy5jOjE4MjpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfV1JJVEUpO1xuZnMvYnBmX2ZzX2tmdW5jcy5jLTE4My19XG4tLVxuZnMvYnRyZnMvaW9jdGwuYz0yNDMwPXN0YXRpYyBpbnQgYnRyZnNfaW9jdGxfZGVmcmFnKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTI0NjAtXHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSBcdTAwMjZcdTAwMjZcbmZzL2J0cmZzL2lvY3RsLmM6MjQ2MTpcdFx0ICAgIGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE1BWV9XUklURSkpIHtcbmZzL2J0cmZzL2lvY3RsLmMtMjQ2Mi1cdFx0XHRyZXQgPSAtRVBFUk07XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jPTEzNT1pbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE5Mi1cdGVsc2VcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxOTM6XHRcdHJldCA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE5NC1cdFx0XHRcdCAgICAgICBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4tLVxuZnMvZWNyeXB0ZnMvaW5vZGUuYz04NTI9ZWNyeXB0ZnNfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTg1NC17XG5mcy9lY3J5cHRmcy9pbm9kZS5jOjg1NTpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTg1Ni1cdFx0XHRcdGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGlub2RlKSwgbWFzayk7XG4tLVxuZnMvbmFtZWkuYz01NjU9RVhQT1JUX1NZTUJPTChnZW5lcmljX3Blcm1pc3Npb24pO1xuLS1cbmZzL25hbWVpLmMtNTc3LSAqL1xuZnMvbmFtZWkuYzo1Nzg6c3RhdGljIGlubGluZSBpbnQgZG9faW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL25hbWVpLmMtNTc5LVx0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4tLVxuZnMvbmFtZWkuYz02MDQ9c3RhdGljIGludCBzYl9wZXJtaXNzaW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmZzL25hbWVpLmMtNjI3LSAqL1xuZnMvbmFtZWkuYzo2Mjg6aW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9uYW1laS5jLTYyOS1cdFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbi0tXG5mcy9uYW1laS5jPTY2Mz1FWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuLS1cbmZzL25hbWVpLmMtNjgyLSAqL1xuZnMvbmFtZWkuYzo2ODM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9uYW1laS5jLTY4NC1cdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmZzL25hbWVpLmM9NjA3NT1pbnQgdmZzX3JlbmFtZShzdHJ1Y3QgcmVuYW1lZGF0YSAqcmQpXG4tLVxuZnMvbmFtZWkuYy02MTIyLVx0XHRpZiAoaXNfZGlyKSB7XG5mcy9uYW1laS5jOjYxMjM6XHRcdFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKHJkLVx1MDAzZW1udF9pZG1hcCwgc291cmNlLFxuZnMvbmFtZWkuYy02MTI0LVx0XHRcdFx0XHRcdCBNQVlfV1JJVEUpO1xuLS1cbmZzL25hbWVpLmMtNjEyOC1cdFx0aWYgKChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2lzX2Rpcikge1xuZnMvbmFtZWkuYzo2MTI5Olx0XHRcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihyZC1cdTAwM2VtbnRfaWRtYXAsIHRhcmdldCxcbmZzL25hbWVpLmMtNjEzMC1cdFx0XHRcdFx0XHQgTUFZX1dSSVRFKTtcbi0tXG5mcy9uZnNkL25mc2ZoLmM9MzE9c3RhdGljIGludCBuZnNkX2FjY2VwdGFibGUodm9pZCAqZXhwdiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL25mc2QvbmZzZmguYy00NS1cdFx0cGFyZW50ID0gZGdldF9wYXJlbnQodGRlbnRyeSk7XG5mcy9uZnNkL25mc2ZoLmM6NDY6XHRcdGVyciA9IGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCxcbmZzL25mc2QvbmZzZmguYy00Ny1cdFx0XHRcdCAgICAgICBkX2lub2RlKHBhcmVudCksIE1BWV9FWEVDKTtcbi0tXG5mcy9uZnNkL3Zmcy5jPTI4NDM9bmZzZF9wZXJtaXNzaW9uKHN0cnVjdCBzdmNfY3JlZCAqY3JlZCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTI5MDItXHQvKiBUaGlzIGFzc3VtZXMgIE5GU0RfTUFZX3tSRUFELFdSSVRFLEVYRUN9ID09IE1BWV97UkVBRCxXUklURSxFWEVDfSAqL1xuZnMvbmZzZC92ZnMuYzoyOTAzOlx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSxcbmZzL25mc2QvdmZzLmMtMjkwNC1cdFx0XHQgICAgICAgYWNjIFx1MDAyNiAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpO1xuLS1cbmZzL25mc2QvdmZzLmMtMjkwOS1cdCAgICAgIChhY2MgXHUwMDI2IChORlNEX01BWV9PV05FUl9PVkVSUklERSB8IE5GU0RfTUFZX1JFQURfSUZfRVhFQykpKSlcbmZzL25mc2QvdmZzLmM6MjkxMDpcdFx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX0VYRUMpO1xuZnMvbmZzZC92ZnMuYy0yOTExLVxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQzNTU9c3RhdGljIGlubGluZSBpbnQgb2NmczJfbWF5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDM2MC1cdFx0cmV0dXJuIC1FTk9FTlQ7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MzYxOlx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MzYyLX1cbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzcyPXN0YXRpYyBpbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQxNC1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0MTU6XHRcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1JFQUQpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQxNi1cdFx0aWYgKGVycm9yKVxuLS1cbmZzL29wZW4uYz00NjM9c3RhdGljIGludCBkb19mYWNjZXNzYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwgaW50IGZsYWdzKVxuLS1cbmZzL29wZW4uYy01MDMtXG5mcy9vcGVuLmM6NTA0Olx0cmVzID0gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC5tbnQpLCBpbm9kZSwgbW9kZSB8IE1BWV9BQ0NFU1MpO1xuZnMvb3Blbi5jLTUwNS1cdC8qIFN1UyB2MiByZXF1aXJlcyB3ZSByZXBvcnQgYSByZWFkIG9ubHkgZnMgdG9vICovXG4tLVxuZnMvb3ZlcmxheWZzL2lub2RlLmM9MzA2PWludCBvdmxfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMzYtXHR3aXRoX292bF9jcmVkcyhpbm9kZS1cdTAwM2VpX3NiKVxuZnMvb3ZlcmxheWZzL2lub2RlLmM6MzM3Olx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocmVhbHBhdGgubW50KSwgcmVhbGlub2RlLCBtYXNrKTtcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTMzOC19XG4tLVxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM9NjAwOD1pbnQgc21iMl9xdWVyeV9kaXIoc3RydWN0IGtzbWJkX3dvcmsgKndvcmspXG4tLVxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtNjA2MS1cdGlmICghKGRpcl9mcC1cdTAwM2VkYWNjZXNzIFx1MDAyNiBGSUxFX0xJU1RfRElSRUNUT1JZX0xFKSB8fFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM6NjA2MjpcdCAgICBpbm9kZV9wZXJtaXNzaW9uKGZpbGVfbW50X2lkbWFwKGRpcl9mcC1cdTAwM2VmaWxwKSxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTYwNjMtXHRcdFx0ICAgICBmaWxlX2lub2RlKGRpcl9mcC1cdTAwM2VmaWxwKSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjcxMD1pbnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBkZW50cnkgKixcbmluY2x1ZGUvbGludXgvZnMuaC0yNzExLVx0XHQgIHN0cnVjdCBpYXR0ciAqLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICopO1xuaW5jbHVkZS9saW51eC9mcy5oOjI3MTI6aW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbmluY2x1ZGUvbGludXgvZnMuaC0yNzEzLWludCBnZW5lcmljX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbmluY2x1ZGUvbGludXgvZnMuaD0yNzE0PXN0YXRpYyBpbmxpbmUgaW50IGZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcxNS17XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjcxNjpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGZpbGVfbW50X2lkbWFwKGZpbGUpLFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MTctXHRcdFx0XHRmaWxlX2lub2RlKGZpbGUpLCBtYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjcxOT1zdGF0aWMgaW5saW5lIGludCBwYXRoX3Blcm1pc3Npb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKVxuaW5jbHVkZS9saW51eC9mcy5oLTI3MjAte1xuaW5jbHVkZS9saW51eC9mcy5oOjI3MjE6XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC1cdTAwM2VtbnQpLFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MjItXHRcdFx0XHRkX2lub2RlKHBhdGgtXHUwMDNlZGVudHJ5KSwgbWFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg9MTQwPUxTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTE0MS1cdCBib29sIHJjdSlcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjE0MjpMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMTQzLVx0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MjU9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MjYtXHRcdFx0ICAgICAgIGJvb2wgcmN1KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Mjc6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDI4LVx0XHRcdCAgICAgIGludCBtYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9OTc5PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtOTg1LVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjk4NjpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTk4Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuLS1cbmlwYy9tcXVldWUuYz04NjA9c3RhdGljIGludCBwcmVwYXJlX29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb2ZsYWcsIGludCBybyxcbi0tXG5pcGMvbXF1ZXVlLmMtODgzLVx0YWNjID0gb2ZsYWcyYWNjW29mbGFnIFx1MDAyNiBPX0FDQ01PREVdO1xuaXBjL21xdWV1ZS5jOjg4NDpcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfaW5vZGUoZGVudHJ5KSwgYWNjKTtcbmlwYy9tcXVldWUuYy04ODUtfVxuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz02MTE9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqX19nZXRfcHJvZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2lub2RlLmMtNjEzLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xua2VybmVsL2JwZi9pbm9kZS5jOjYxNDpcdGludCByZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfUkVBRCk7XG5rZXJuZWwvYnBmL2lub2RlLmMtNjE1LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTU0MTA9c3RhdGljIGludCBjZ3JvdXBfbWF5X3dyaXRlKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01NDIwLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzo1NDIxOlx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKTtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNTQyMi1cdGlwdXQoaW5vZGUpO1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTgyMj1pbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg0NTppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cdFx0XHQgICAgICBpbnQgbWFzaylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNTE6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTEyMDM9c3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzNy0gKi9cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMzg6c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzOS1cdFx0XHRcdCAgaW50IG1hc2spXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jPTE2MD1TRUMoXCYjMzQ7bHNtL2lub2RlX3Blcm1pc3Npb25cJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmM6MTYxOmludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jLTE2Mi1cdCAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIElETUFQIFN0cnVjdHVyZSBpbiBMU00gSG9va3MqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgc2l0dWF0aW9uOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVjZW50IGNoYW5nZXMgaW1wYWN0IHRoZSBzZWN1cml0eSBtb2R1bGUgaW1wbGVtZW50YXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHVwZGF0ZXMgdG8gdGhlIExTTSBob29rcy4gVGhlIGNvcmUgaG9va3MgSSYjMzk7bSBsb29raW5nIGF0IGFyZSBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAsIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9ta25vZGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBiZWluZyBwYXNzZWQgZG93biBmcm9tIHRoZSBWRlMuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBkaXJlY3RseSBhZmZlY3RzIGhvdyB3ZSBoYW5kbGUgaWRlbnRpdHkgbWFwcGluZyB3aXRoaW4gdGhlIExTTS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB0aGUgZmFjdCB0aGF0IEJQRiBMU00gaG9va3MgKmFsc28qIGhhdmUgYWNjZXNzIHRvIHRoaXMgYGlkbWFwYCBpcyBjcnVjaWFsLiBUaGlzIGlzIGEgZ2FtZSBjaGFuZ2VyIGZvciBCUEYtYmFzZWQgc2VjdXJpdHkgcG9saWNpZXMuIEJQRiBhbHJlYWR5IGdpdmVzIHVzIGZpbmUtZ3JhaW5lZCBjb250cm9sLCBidXQgaGF2aW5nIHRoZSBJRCBtYXAgYXZhaWxhYmxlIG9wZW5zIHVwIGV2ZW4gbW9yZSBwb3NzaWJpbGl0aWVzIGZvciBjb250ZXh0LWF3YXJlIHNlY3VyaXR5IGVuZm9yY2VtZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5hbWVzcGFjZWQgZmlsZSBzeXN0ZW1zIGFuZCB1c2VyIElEIG1hcHBpbmcgc2NlbmFyaW9zLgoKU28sIHdoZXJlIGRvIEkgZ28gZnJvbSBoZXJlPyBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgc2VjdXJpdHkvS2NvbmZpZ2AgYW5kIGBmcy9LY29uZmlnYCB0byBzZWUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlc2UgZmVhdHVyZXMgYW5kIGVuc3VyZSBJJiMzOTttIGF3YXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb24gZGlmZmVyZW50IHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpZG1hcGAgaW50ZWdyYXRpb24gY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBpdCB3aWxsIGltcGFjdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kdWxlcy4gVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgZm9jdXNlZCByZXNlYXJjaCB0byB1bmRlcnN0YW5kIGhvdyBiZXN0IHRvIGFwcHJvYWNoIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDkyLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhbmQgcGVyaGFwcyBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBhcmVhcyBmb3IgZnVydGhlciBleHBsb3JhdGlvbiB3aXRoaW4gdGhlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdCAgc3RpbGwgcmVlbmFibGUgaXQgYnkgc2V0dGluZyBpdCB0byAwIGxhdGVyIG9uLCBvciBwZXJtYW5lbnRseVxuICA4MTpcdFx0ICBkaXNhYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMSAoZnJvbSB3aGljaCBubyBvdGhlciB0cmFuc2l0aW9uIHRvXG4gIDgyOlx0XHQgIDAgaXMgcG9zc2libGUgYW55bW9yZSkuXG4gIDgzOlx0XG4gIDg0Olx0XHQgIFVucHJpdmlsZWdlZCBCUEYgY291bGQgYmUgdXNlZCB0byBleHBsb2l0IGNlcnRhaW4gcG90ZW50aWFsXG4gIDg1Olx0XHQgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzIG9uIHVubWl0aWdhdGVkXG4gIDg2Olx0XHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxuICA4NzpcdFxuICA4ODpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBZLlxuICA4OTpcdFxuICA5MDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xuICA5MTpcdFxuICA5MjpcdGNvbmZpZyBCUEZfTFNNXG4gIDkzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5NDpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk1Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gIDk2Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gIDk3Olx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAgOTg6XHRcdGhlbHBcbiAgOTk6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwMDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwMTpcdFxuIDEwMjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwMzpcdFxuIDEwNDpcdGVuZG1lbnUgIyBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMTkKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgTFNNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY3VycmVudCBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYHNlY3VyaXR5L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3RpbmcgTFNNIHNldHRpbmdzIHJlc2lkZSwgcmlnaHQ/IEkgZXhwZWN0IHRvIGZpbmQgdGhlIHVzdWFsIHN1c3BlY3RzIGRlZmluZWQgaW4gdGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIExTTSBjb25maWd1cmF0aW9uczogdGhlIG1hc3RlciBgU0VDVVJJVFlgIHN3aXRjaCwgb2YgY291cnNlLiBUaGVuLCBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgc3BlY2lmaWNzLiBJJiMzOTtsbCBleHBlY3QgdG8gc2VlIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIHdoYXRldmVyIGVsc2UgaXMgYmVpbmcgc3VwcG9ydGVkIG9yIGNvbnNpZGVyZWQgZm9yIHRoaXMga2VybmVsIGJ1aWxkLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNpc2lvbnMgcmVnYXJkaW5nIHRoZSBzZWN1cml0eSBwb3N0dXJlIG9mIHRoaXMga2VybmVsIGFyZSB1bHRpbWF0ZWx5IG1hZGUsIGFuZCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgd2Ugc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9LY29uZmlnPTg9c291cmNlIFwmIzM0O3NlY3VyaXR5L2tleXMvS2NvbmZpZ1wmIzM0O1xuc2VjdXJpdHkvS2NvbmZpZy05LVxuc2VjdXJpdHkvS2NvbmZpZzoxMDpjb25maWcgU0VDVVJJVFlfRE1FU0dfUkVTVFJJQ1RcbnNlY3VyaXR5L0tjb25maWctMTEtXHRib29sIFwmIzM0O1Jlc3RyaWN0IHVucHJpdmlsZWdlZCBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBzeXNsb2dcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnPTUyPWNvbmZpZyBNU0VBTF9TWVNURU1fTUFQUElOR1Ncbi0tXG5zZWN1cml0eS9LY29uZmlnLTcyLVxuc2VjdXJpdHkvS2NvbmZpZzo3Mzpjb25maWcgU0VDVVJJVFlcbnNlY3VyaXR5L0tjb25maWctNzQtXHRib29sIFwmIzM0O0VuYWJsZSBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kZWxzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZz04Nj1jb25maWcgSEFTX1NFQ1VSSVRZX0FVRElUXG4tLVxuc2VjdXJpdHkvS2NvbmZpZy05MC1cbnNlY3VyaXR5L0tjb25maWc6OTE6Y29uZmlnIFNFQ1VSSVRZRlNcbnNlY3VyaXR5L0tjb25maWctOTItXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy05OC1cbnNlY3VyaXR5L0tjb25maWc6OTk6Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcbnNlY3VyaXR5L0tjb25maWctMTAwLVx0Ym9vbCBcJiMzNDtTb2NrZXQgYW5kIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTEwNy1cbnNlY3VyaXR5L0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9JTkZJTklCQU5EXG5zZWN1cml0eS9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7SW5maW5pYmFuZCBTZWN1cml0eSBIb29rc1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWctMTE2LVxuc2VjdXJpdHkvS2NvbmZpZzoxMTc6Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktfWEZSTVxuc2VjdXJpdHkvS2NvbmZpZy0xMTgtXHRib29sIFwmIzM0O1hGUk0gKElQU2VjKSBOZXR3b3JraW5nIFNlY3VyaXR5IEhvb2tzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0xMjktXG5zZWN1cml0eS9LY29uZmlnOjEzMDpjb25maWcgU0VDVVJJVFlfUEFUSFxuc2VjdXJpdHkvS2NvbmZpZy0xMzEtXHRib29sIFwmIzM0O1NlY3VyaXR5IGhvb2tzIGZvciBwYXRobmFtZSBiYXNlZCBhY2Nlc3MgY29udHJvbFwmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9MjY4PWNvbmZpZyBMU01cbi0tXG5zZWN1cml0eS9LY29uZmlnLTI4NC1cbnNlY3VyaXR5L0tjb25maWc6Mjg1OmNvbmZpZyBTRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxuc2VjdXJpdHkvS2NvbmZpZy0yODYtXHRib29sIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBjb21tb25jYXBcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7QXBwQXJtb3Igc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjE4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1ZyBjb2RlXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXHRib29sIFwmIzM0O0J1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzozODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfTUVTU0FHRVNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXHRib29sIFwmIzM0O0RlYnVnIG1lc3NhZ2VzIGVuYWJsZWQgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDYtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7QWxsb3cgbG9hZGVkIHBvbGljeSB0byBiZSBpbnRyb3NwZWN0ZWRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzE6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hfREVGQVVMVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcJiMzNDtFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6ODQ6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXHRib29sIFwmIzM0O0FsbG93IGV4cG9ydGluZyB0aGUgcmF3IGJpbmFyeSBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5Njpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfQ09NUFJFU1NFRF9QT0xJQ1lcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTctXHRib29sIFwmIzM0O0FsbG93IGxvYWRpbmcgcG9saWN5IGluIGEgY29tcHJlc3NlZCBmb3JtYXRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBmdWxsIHZlcmlmaWNhdGlvbiBvZiBsb2FkZWQgcG9saWN5XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMTgtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjExOTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMjAtXHR0cmlzdGF0ZSBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxuc2VjdXJpdHkvaXBlL0tjb25maWc6NjptZW51Y29uZmlnIFNFQ1VSSVRZX0lQRVxuc2VjdXJpdHkvaXBlL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7SW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKVwmIzM0O1xuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnPTk4PWVuZG1lbnVcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTk5LVxuc2VjdXJpdHkvaXBlL0tjb25maWc6MTAwOmNvbmZpZyBTRUNVUklUWV9JUEVfS1VOSVRfVEVTVFxuc2VjdXJpdHkvaXBlL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgSVBFXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjM6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTQtXHRib29sIFwmIzM0O0xhbmRsb2NrIHN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTIzLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzoyNDpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tfTE9HXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVx0Ym9vbFxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjgtXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI5OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19LVU5JVF9URVNUXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgTGFuZGxvY2tcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX0xPQURQSU5cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtQaW4gbG9hZCBvZiBrZXJuZWwgZmlsZXMgKG1vZHVsZXMsIGZ3LCBldGMpIHRvIG9uZSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTEzLVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjE0OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX0VORk9SQ0VcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBMb2FkUGluIGF0IGJvb3RcJiMzNDtcbi0tXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjQtXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6MjU6Y29uZmlnIFNFQ1VSSVRZX0xPQURQSU5fVkVSSVRZXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjYtXHRib29sIFwmIzM0O0FsbG93IHJlYWRpbmcgZmlsZXMgZnJvbSBjZXJ0YWluIG90aGVyIGZpbGVzeXN0ZW1zIHRoYXQgdXNlIGRtLXZlcml0eVwmIzM0O1xuLS1cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWc6MTpjb25maWcgU0VDVVJJVFlfTE9DS0RPV05fTFNNXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTItXHRib29sIFwmIzM0O0Jhc2ljIG1vZHVsZSBmb3IgZW5mb3JjaW5nIGtlcm5lbCBsb2NrZG93blwmIzM0O1xuLS1cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctOC1cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWc6OTpjb25maWcgU0VDVVJJVFlfTE9DS0RPV05fTFNNX0VBUkxZXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTEwLVx0Ym9vbCBcJiMzNDtFbmFibGUgbG9ja2Rvd24gTFNNIGVhcmx5IGluIGluaXRcJiMzNDtcbi0tXG5zZWN1cml0eS9zYWZlc2V0aWQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0FGRVNFVElEXG5zZWN1cml0eS9zYWZlc2V0aWQvS2NvbmZpZy0zLSAgICAgICAgYm9vbCBcJiMzNDtHYXRlIHNldGlkIHRyYW5zaXRpb25zIHRvIGxpbWl0IENBUF9TRVR7VS9HfUlEIGNhcGFiaWxpdGllc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtTRUxpbnV4IFN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MTI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTMtXHRib29sIFwmIzM0O1NFTGludXggYm9vdCBwYXJhbWV0ZXJcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjUtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMzktXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDEtXHRib29sIFwmIzM0O1NFTGludXggQVZDIFN0YXRpc3RpY3NcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDk6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUU1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTUwLVx0aW50IFwmIzM0O1NFTGludXggc2lkdGFiIGhhc2h0YWJsZSBzaXplXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYwLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYxOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVx0aW50IFwmIzM0O1NFTGludXggU0lEIHRvIGNvbnRleHQgc3RyaW5nIHRyYW5zbGF0aW9uIGNhY2hlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzEtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTczLVx0aW50IFwmIzM0O1NFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjgzOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0RFQlVHXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODQtXHRib29sIFwmIzM0O1NFTGludXgga2VybmVsIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TTUFDS1xuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtTaW1wbGlmaWVkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCBLZXJuZWwgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTUtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzozNDpjb25maWcgU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtQYWNrZXQgbWFya2luZyB1c2luZyBzZWNtYXJrcyBmb3IgbmV0ZmlsdGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy00NC1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6NDU6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0FQUEVORF9TSUdOQUxTXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtUcmVhdCBkZWxpdmVyaW5nIHNpZ25hbHMgYXMgYW4gYXBwZW5kIG9wZXJhdGlvblwmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9UT01PWU9cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTMtXHRib29sIFwmIzM0O1RPTU9ZTyBMaW51eCBTdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTUtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoxNjpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BQ0NFUFRfRU5UUllcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTE3LVx0aW50IFwmIzM0O0RlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgbGVhcm5pbmcgbW9kZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTI4LVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Mjk6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19NQVhfQVVESVRfTE9HXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zMC1cdGludCBcJiMzNDtEZWZhdWx0IG1heGltYWwgY291bnQgZm9yIGF1ZGl0IGxvZ1wmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTM5LVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVJcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtBY3RpdmF0ZSB3aXRob3V0IGNhbGxpbmcgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXIuXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTUtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo1Njpjb25maWcgU0VDVVJJVFlfVE9NT1lPX1BPTElDWV9MT0FERVJcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTU3LVx0c3RyaW5nIFwmIzM0O0xvY2F0aW9uIG9mIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjUtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo2Njpjb25maWcgU0VDVVJJVFlfVE9NT1lPX0FDVElWQVRJT05fVFJJR0dFUlxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjctXHRzdHJpbmcgXCYjMzQ7VHJpZ2dlciBmb3IgY2FsbGluZyB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTc2LVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Nzc6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19JTlNFQ1VSRV9CVUlMVElOX1NFVFRJTkdcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtVc2UgaW5zZWN1cmUgYnVpbHQtaW4gc2V0dGluZ3MgZm9yIGZ1enppbmcgdGVzdHMuXCYjMzQ7XG4tLVxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS95YW1hL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfWUFNQVxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTMtXHRib29sIFwmIzM0O1lhbWEgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM4OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBDYWNoZWZpbGVzIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBmcy9jYWNoZWZpbGVzL0tjb25maWdgIOKAkyByaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgY2FjaGVmaWxlcyBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29udHJvbGxhYmxlIGF0IGNvbXBpbGUgdGltZS4gV2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgbGlrZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgb3IgbmFtZXNwYWNlIGNhcGFiaWxpdGllcz8KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SSBuZWVkIHRvIGxvb2sgZm9yIHRoZSBjb3JlIGZlYXR1cmVzIGZpcnN0LiYjMzQ7IFdoYXQgYXJlIHRoZSBjcml0aWNhbCBib29sZWFucyB0aGF0IGRpY3RhdGUgd2hldGhlciB0aGUgY2FjaGVmaWxlcyBjb2RlIGlzIGV2ZW4gKmluY2x1ZGVkKiBpbiB0aGUgYnVpbGQ/IFRoZW4sIEkgc2hvdWxkIHNjYW4gZm9yIGFueSBmdXJ0aGVyIG9wdGlvbnMgdGhhdCBhbGxvdyBhIGZpbmUtZ3JhaW5lZCB0dW5pbmcgb2YgdGhlIGNhY2hlJiMzOTtzIGJlaGF2aW9yLiBJIHdpbGwgcHJvYmFibHkgbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBjYXRjaCBteSBleWUsIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSB0dW5hYmxlcy4gTWF5YmUgc29tZSBvcHRpb25zIGZvciBkZWJ1Z2dpbmcgdGhhdCB3aWxsIGNvbWUgaW4gaGFuZHkuIEkga25vdyB0aGUgS2NvbmZpZyBzeW50YXggd2VsbCwgc28gSSYjMzk7bGwgYmUgcXVpY2tseSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IGBib29sYCwgYHRyaXN0YXRlYCwgYGludGAsIGFuZCBgc3RyaW5nYCB0eXBlcy4gRGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgZmlsZSBpcyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBQ0hFRklMRVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9LY29uZmlnLTItXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6Mzpjb25maWcgQ0FDSEVGSUxFU1xuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtGaWxlc3lzdGVtIGNhY2hpbmcgb24gZmlsZXNcJiMzNDtcbi0tXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTMtXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7RGVidWcgQ2FjaGVGaWxlc1wmIzM0O1xuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoyMzpjb25maWcgQ0FDSEVGSUxFU19FUlJPUl9JTkpFQ1RJT05cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBlcnJvciBpbmplY3Rpb24gZm9yIGNhY2hlZmlsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NjEKCQkJCQkJCW91dHB1dDogMjA5CgkJCQkJCQl0aG91Z2h0czogMTI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgbW50X2lkbWFwYCBwYXJhbWV0ZXIgdG8gYSBidW5jaCBvZiBjcml0aWNhbCBzZWN1cml0eS1yZWxhdGVkIFZGUyBob29rczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLiBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIHRoZSBWRlMgY2FsbGVycyBhbmQgdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcywgaW5jbHVkaW5nIEJQRiBzZWxmdGVzdHMuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCBtb2RpZmllcyAmIzM0O3JlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OwoKWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBWRlMgZnVuY3Rpb25zIChgaW5vZGVfcGVybWlzc2lvbmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGV0Yy4pIGFuZCBMU00gaG9vayB3cmFwcGVycyAoYHNlY3VyaXR5X2lub2RlXypgKS4gVGhlc2UgYXJlIGVudHJ5IHBvaW50cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlci1zcGFjZSB2aWEgc3lzdGVtIGNhbGxzIGxpa2UgYG9wZW5gLCBgbWtkaXJgLCBhbmQgb3RoZXJzLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgJiMzOTtGb2N1c1N5bWJvbHMmIzM5Oy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGluY2x1ZGUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIFdlIHdhbnQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1lYW5zIHdlIHNob3VsZCBleGNsdWRlIHRoaW5ncyBsaWtlIGBpbm9kZV9wZXJtaXNzaW9uYCAod2hpY2ggaXMgcHJhY3RpY2FsbHkgY2FsbGVkIG9uIGV2ZXJ5IGZpbGUgYWNjZXNzKS4gU28gdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBiZWNhdXNlIHRob3NlIGFyZSBjYWxsZWQgYXQgY3JlYXRpb24gdGltZS4KCk5leHQsIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFdlJiMzOTtsbCBuZWVkIGBTRUNVUklUWWAgdG8gZW5hYmxlIHRoZSBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSBhbmQgTFNNIGhvb2tzLiAgYEJQRl9MU01gIGlzIGFsc28gcmVxdWlyZWQgYmVjYXVzZSBpdCBsZXZlcmFnZXMgdGhlIGBpZG1hcGAgYXJndW1lbnQsIGFuZCB0aGVuIGVpdGhlciBgU0VDVVJJVFlfU0VMSU5VWGAgb3IgYFNFQ1VSSVRZX1NNQUNLYCBmb3IgYSBwcmFjdGljYWwgTFNNLgoKVGhlIGBCUEZfTFNNYCBkZXBlbmRlbmN5IG5lZWRzIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYFNFQ1VSSVRZYCwgYEJQRl9KSVRgLgoKU28sIHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBhcmUgYFNFQ1VSSVRZYCwgYEJQRl9MU01gLCBhbmQgZWl0aGVyIGBTRUNVUklUWV9TRUxJTlVYYCBvciBgU0VDVVJJVFlfU01BQ0tgLiAgTGV0JiMzOTtzIGtlZXAgaXQgc2ltcGxlIGFuZCBqdXN0IGxpc3QgYFNFQ1VSSVRZYCwgYEJQRl9MU01gLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGFuZCBgU0VDVVJJVFlfU01BQ0tgLgoKTm93LCBmb3IgYHNldC1yZXN1bHRzYDoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLCBkZWZpbml0ZWx5LgoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBleHRlbmRzIFZGUyBMU00gaG9va3MgYW5kIHRoZWlyIGNhbGxlcnMgdG8gcHJvcGFnYXRlIG1vdW50IGlkbWFwcGluZ3MgKGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGApLiBUaGlzIGFsbG93cyBzZWN1cml0eSBtb2R1bGVzIChpbmNsdWRpbmcgQlBGIExTTSwgU0VMaW51eCwgU21hY2spIHRvIHBlcmZvcm0gcGVybWlzc2lvbnMgY2hlY2tzIGF3YXJlIG9mIGlkbWFwcGVkIG1vdW50cy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBpbnRlcmZhY2VzIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4KKiAgICoqRm9jdXNTeW1ib2xzKio6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLgoqICAgKipFbmFibGVDb25maWdzKio6IGBTRUNVUklUWWAsIGBCUEZfTFNNYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLgoKVGhhdCBzaG91bGQgYmUgaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIChzZWN1cml0eV9pbm9kZV9jcmVhdGUsIHNlY3VyaXR5X2lub2RlX2xpbmssIHNlY3VyaXR5X2lub2RlX3N5bWxpbmssIHNlY3VyaXR5X2lub2RlX21rZGlyLCBzZWN1cml0eV9pbm9kZV9ta25vZCwgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbikgYWxvbmcgd2l0aCBWRlMgY2FsbGVycyB0byBwYXNzIGRvd24gbW91bnQgaWRtYXBzIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgZW5hYmxlcyBMU01zIGFuZCBCUEYgTFNNIHByb2dyYW1zIHRvIGluc3BlY3QgaWRtYXBwZWQgbW91bnRzIGR1cmluZyBmaWxlIG9wZXJhdGlvbnMsIGFsdGVyaW5nIHJlYWNoYWJsZSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIChzZWN1cml0eV9pbm9kZV9jcmVhdGUsIHNlY3VyaXR5X2lub2RlX2xpbmssIHNlY3VyaXR5X2lub2RlX3N5bWxpbmssIHNlY3VyaXR5X2lub2RlX21rZGlyLCBzZWN1cml0eV9pbm9kZV9ta25vZCwgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbikgYWxvbmcgd2l0aCBWRlMgY2FsbGVycyB0byBwYXNzIGRvd24gbW91bnQgaWRtYXBzIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgZW5hYmxlcyBMU01zIGFuZCBCUEYgTFNNIHByb2dyYW1zIHRvIGluc3BlY3QgaWRtYXBwZWQgbW91bnRzIGR1cmluZyBmaWxlIG9wZXJhdGlvbnMsIGFsdGVyaW5nIHJlYWNoYWJsZSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTljMjgyMThiMmQ1ZTU3ZDc3MmE2ODJlMDJhNTg3YmZhMzQ3MGI0OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDI6MDg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwpAQCAtNTEsMTQgJiM0Mzs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKJiM0MzsJcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKSB7CiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXByX2VycigmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWQmIzM0OywKIAkJICAgICAgIHJldCk7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKHVubGlrZWx5KHJldHZhbCkpCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pOwogCkBAIC02OTUsNyAmIzQzOzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkCiAJaWYgKHVubGlrZWx5KCgoaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpCiAJCXJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7CiB9CiAKIC8qKgpAQCAtNDE4OCw3ICYjNDM7NDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAkJcmV0dXJuIC1FQUNDRVM7CS8qIHNob3VsZG4mIzM5O3QgaXQgYmUgRU5PU1lTPyAqLwogCiAJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CkBAIC00MjEyLDcgJiM0Mzs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAogCW1vZGUgJmFtcDs9IFNfSUFMTFVHTzsKIAltb2RlIHw9IFNfSUZSRUc7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgmYW1wO25vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpOwpAQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiB9CiAKIC8qKgpAQCAtNTI1OCw3ICYjNDM7NTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlnb3RvIGVycjsKIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIApAQCAtNTc4Myw3ICYjNDM7NTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKCFkaXItJmd0O2lfb3AtJmd0O3N5bWxpbmspCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtNTkwNyw3ICYjNDM7NTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTEyMCwyNiAmIzQzOzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBpbnQgKnhhdHRyX2NvdW50KQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgYm9vbCByY3UpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgc3RydWN0IGlhdHRyICphdHRyKQogTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTQwNCwyNCAmIzQzOzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpOwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwogdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICAgY29uc3QgY2hhciAqb2xkX25hbWUpOwotaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkJCSAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LAogCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgIGJvb2wgcmN1KTsKLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkgICAgICBpbnQgbWFzayk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQkgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCXN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQkJdW1vZGVfdCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTEzLDkgJiM0Mzs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkCiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeyB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKLQkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjYsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsCi0JCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJaW50IG1vZGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlKQogewogCXJldHVybiAwOwogfQpAQCAtOTQ2LDkgJiM0Mzs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlLCBkZXZfdCBkZXYpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWQKICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlCkBAIC0xNjIyLDEyICYjNDM7MTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgIHVtb2RlX3QgbW9kZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTsKIApAQCAtMTY0OCw2ICYjNDM7MTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlCiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeQogICogQG5ld19kZW50cnk6IG5ldyBsaW5rCkBAIC0xNjU2LDEyICYjNDM7MTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogfQogCiAvKioKQEAgLTE2ODIsNiAmIzQzOzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogc3ltYm9saWMgbGluawogICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZQpAQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKIH0KIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeQogICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZQpAQCAtMTcwOSwxMSAmIzQzOzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGRpcjogcGFyZW50IGRpcmVjdG9yeQogICogQGRlbnRyeTogbmV3IGZpbGUKICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlCkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIH0KIAogLyoqCkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IGlub2RlCiAgKiBAbWFzazogYWNjZXNzIG1hc2sKICAqCkBAIC0xODM1LDExICYjNDM7MTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zMDc0LDEyICYjNDM7MzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgJmFtcDthZCk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTsKIH0KQEAgLTMwODksMTIgJiM0MzszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpOwogfQpAQCAtMzEwNCw3ICYjNDM7MzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCXJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpOwogfQpAQCAtMzIzNiwxMyAmIzQzOzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYywKIAogLyoqCiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGUKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZAogICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZAogICoKICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0bwogICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKQomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKIHsKIAlpbnQgbWFzazsKIAl1MzIgcGVybXM7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0xMDg5LDE0ICYjNDM7MTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiAKIC8qKgogICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmsKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3QKICAqIEBkaXI6IHVudXNlZAogICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0CiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7CiAJc3RydWN0IHNtYWNrX2tub3duICppc3A7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpAQCAtMTIyNiw2ICYjNDM7MTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogCiAvKioKICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKQomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvbgogICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkCiAgKgpAQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgIGludCBtYXNrKQogewogCXN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS0mZ3Q7aV9zYik7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCkBAIC0xLDE4ICYjNDM7MSwzMCBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOwogI2luY2x1ZGUgJiMzNDtsc20uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaCYjMzQ7CiAKIGNoYXIgKkNNRF9BUkdTW10gPSB7JiMzNDt0cnVlJiMzNDssIE5VTEx9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUlOT0RFX0lETUFQX0FMTCA9ICgxVSAmbHQ7Jmx0OyA2KSAtIDEsCiYjNDM7fTsKJiM0MzsKIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpCiB7CiAJaW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzOwpAQCAtMzAsNiAmIzQzOzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogCXJldHVybiAtRUlOVkFMOwogfQogCiYjNDM7c3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpOwomIzQzOwl9IHdoaWxlIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpCiYjNDM7ewomIzQzOwlzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTsKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubyA9IDA7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbikKJiM0MzsJCXNhdmVkX2Vycm5vID0gRUlPOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChzYXZlZF9lcnJubykgewomIzQzOwkJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XTsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkLyVzJiMzNDssIHBpZCwgbmFtZSk7CiYjNDM7CWlmIChsZW4gJmx0OyAwIHx8IChzaXplX3QpbGVuICZndDs9IHNpemVvZihwYXRoKSkgewomIzQzOwkJZXJybm8gPSBFT1ZFUkZMT1c7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CXBpZF90IHBpZCwgd2FpdGVkOwomIzQzOwlpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmIChwaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAocGlkID09IDApIHsKJiM0MzsJCWlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKQomIzQzOwkJCV9leGl0KDEpOwomIzQzOwkJcmFpc2UoU0lHU1RPUCk7CiYjNDM7CQlfZXhpdCgwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQl3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIFdVTlRSQUNFRCk7CiYjNDM7CX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CWlmICh3YWl0ZWQgIT0gcGlkKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7CiYjNDM7CQlwaWQgPSAtMTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovCiYjNDM7CWlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsICYjMzQ7c2V0Z3JvdXBzJiMzNDssICYjMzQ7ZGVueSYjMzQ7KSAmYW1wOyZhbXA7IGVycm5vICE9IEVOT0VOVCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3VpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSB8fAomIzQzOwkgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O2dpZF9tYXAmIzM0OywgJiMzNDswIDAgMSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICYjMzQ7L3Byb2MvJWQvbnMvdXNlciYjMzQ7LCBwaWQpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWlmIChwaWQgJmd0OyAwKSB7CiYjNDM7CQlraWxsKHBpZCwgU0lHS0lMTCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJd2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApOwomIzQzOwkJfSB3aGlsZSAod2FpdGVkICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsJfQomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0gewomIzQzOwkJLmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCwKJiM0MzsJfTsKJiM0MzsJaW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xOwomIzQzOwomIzQzOwl1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovCiYjNDM7CWZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCAmIzM0O3RtcGZzJiMzNDssIEZTT1BFTl9DTE9FWEVDKTsKJiM0MzsJaWYgKGZzZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7CiYjNDM7CWlmIChtbnRmZCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJYXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7CiYjNDM7CWlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsICYjMzQ7JiMzNDssIEFUX0VNUFRZX1BBVEgsICZhbXA7YXR0ciwKJiM0MzsJCSAgICBzaXplb2YoYXR0cikpKSB7CiYjNDM7CQljbG9zZShtbnRmZCk7CiYjNDM7CQltbnRmZCA9IC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAoZnNmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZnNmZCk7CiYjNDM7CWlmICh1c2VybnNfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKHVzZXJuc19mZCk7CiYjNDM7CWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CXJldHVybiBtbnRmZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSAtMSwgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLAomIzQzOwkJICAgIDA2MDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShmZCwgMCwgJiMzNDtjcmVhdGUmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlmZCA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCAwNzAwKSwgJiMzNDtta2RpciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoJiMzNDt0YXJnZXQmIzM0OywgZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7KSwgJiMzNDtzeW1saW5rJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCksICYjMzQ7bGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgJiMzNDtmaWZvJiMzNDssIDA2MDApLCAmIzM0O21rbm9kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IDA7CiYjNDM7b3V0OgomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7bGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7c3ltbGluayYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCAwKTsKJiM0MzsJdW5saW5rYXQoZGlyZmQsICYjMzQ7ZGlyJiMzNDssIEFUX1JFTU9WRURJUik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgdG1wZGlyW10gPSAmIzM0Oy92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWCYjMzQ7OwomIzQzOwlfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDsKJiM0MzsJaW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7CiYjNDM7CWludCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgJiMzNDtta2R0ZW1wJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsICYjMzQ7b3Blbl90bXBkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsICYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgJiMzNDtpZGVudGl0eV9pZG1hcCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksCiYjNDM7CQkgICAgICAgJiMzNDtpZG1hcHBlZF9tb3VudCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLAomIzQzOwkJICAgICAgICYjMzQ7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCQkmIzM0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4mIzM0OykgPyAwIDogLTE7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoaWRtYXBwZWRfZGlyZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGlkbWFwcGVkX2RpcmZkKTsKJiM0MzsJaWYgKGRpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShkaXJmZCk7CiYjNDM7CXJtZGlyKHRtcGRpcik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogewogCXN0cnVjdCBicGZfbGluayAqbGluazsKQEAgLTUzLDYgJiM0MzsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKQogCiAJc2tlbC0mZ3Q7YnNzLSZndDttb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7CiAKJiM0MzsJZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcCYjMzQ7KSkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gc3RhY2tfbXByb3RlY3QoKTsKIAlpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspIHx8CiAJICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCAmIzM0O3N0YWNrX21wcm90ZWN0JiMzNDspKQpAQCAtNzEsNiAmIzQzOzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAlza2VsLSZndDtic3MtJmd0O2NvcHlfdGVzdCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDticHJtX2NvdW50ID0gMDsKIAlza2VsLSZndDtic3MtJmd0O21wcm90ZWN0X2NvdW50ID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKQEAgLTg0LDYgJiM0Mzs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7CiBpbnQgbXByb3RlY3RfY291bnQgPSAwOwogaW50IGJwcm1fY291bnQgPSAwOwomIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzO19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9DUkVBVEUJPSAxVSAmbHQ7Jmx0OyAwLAomIzQzOwlJTk9ERV9JRE1BUF9MSU5LCT0gMVUgJmx0OyZsdDsgMSwKJiM0MzsJSU5PREVfSURNQVBfU1lNTElOSwk9IDFVICZsdDsmbHQ7IDIsCiYjNDM7CUlOT0RFX0lETUFQX01LRElSCT0gMVUgJmx0OyZsdDsgMywKJiM0MzsJSU5PREVfSURNQVBfTUtOT0QJPSAxVSAmbHQ7Jmx0OyA0LAomIzQzOwlJTk9ERV9JRE1BUF9QRVJNSVNTSU9OCT0gMVUgJmx0OyZsdDsgNSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkICZhbXA7JmFtcDsgaWRtYXA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBpZG1hcC0mZ3Q7dWlkX21hcC5ucl9leHRlbnRzID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgaWRtYXAtJmd0O2dpZF9tYXAubnJfZXh0ZW50cyA9PSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQkgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJaWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpCiYjNDM7CQlpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7CiYjNDM7CWVsc2UKJiM0MzsJCWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vazsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9jcmVhdGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX2xpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX3N5bWxpbmsmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta2RpciYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7bHNtL2lub2RlX21rbm9kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpOwomIzQzO30KIAogU0VDKCYjMzQ7bHNtL2ZpbGVfbXByb3RlY3QmIzM0OykKIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIExTTSBIb29rIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIGNvbW1pdCBtZXNzYWdlIHNpbXBseSBpbmRpY2F0ZXMgaXQmIzM5O3MgYSBwYXRjaCB1bmRlciByZXZpZXcgcmVsYXRlZCB0byBzeXotY2x1c3Rlci4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBmZXcgY29yZSBhcmVhczogYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYSBjb3VwbGUgb2YgaW5jbHVkZSBmaWxlcyAoYGxpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBsaW51eC9zZWN1cml0eS5oYCksIGFuZCB0aGUgYHNlY3VyaXR5YCBkaXJlY3RvcnkgaXRzZWxmIHdpdGggYHNlY3VyaXR5LmNgLCBgc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzbWFjay9zbWFja19sc20uY2AuICBJJiMzOTttIGFsc28gc2VlaW5nIGEgY2hhbmdlIGluIHRoZSBicGYgc2VsZnRlc3RzLgoKV2hhdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgcGFzc2luZyBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgZG93biBpbnRvIGEgaGFuZGZ1bCBvZiBMU00gaG9va3MuIFNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZyBhcmUgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IHRoZSBgaWRtYXBgOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGFuZCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAuCgpUYWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wYWN0ZWQgTFNNIGltcGxlbWVudGF0aW9ucywgSSBzZWUgYSBwYXR0ZXJuLiAgU0VMaW51WCAoYHNlbGludXhfaW5vZGVfLi4uYCkgYW5kIFNtYWNrIChgc21hY2tfaW5vZGVfLi4uYCkgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2ltcGx5IGFjY2VwdCB0aGUgbmV3IGBpZG1hcGAgcGFyYW1ldGVyIHRvIG1hdGNoIHRoZSBmdW5jdGlvbiBwcm90b3R5cGU7IGl0JiMzOTtzIGEgc3RyYWlnaHQtZm9yd2FyZCBhZGRpdGlvbiB0byB0aGVpciBzaWduYXR1cmVzLiAgSW4gYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGl0JiMzOTtzIHBhc3NpbmcgYCZhbXA7bm9wX21udF9pZG1hcGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgZnMvbmFtZWkuY2Agc2VlbXMgdG8gYmUgcGFzc2luZyBlaXRoZXIgdGhlIGBpZG1hcGAgb3IgYCZhbXA7bm9wX21udF9pZG1hcGAgYXMgd2VsbC4gVGhlIGJwZiBzZWxmdGVzdHMgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBob29rIHNpZ25hdHVyZXMuCgpNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGFyZSB0aGUgb25seSBMU00gaW1wbGVtZW50YXRpb25zIGFmZmVjdGVkIGFuZCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0IG1lIHF1aWNrbHkgcnVuIGEgYGdyZXBgIHRvIGVuc3VyZSBubyBvdGhlciBMU00gaG9va3Mgb3IgY2FsbGVycyBhcmUgbHVya2luZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtaXNzZWQuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSBoZXJlIHRvIGVuc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9pbm9kZV9jcmVhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jPTQ5PXN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuLS1cbmZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYy02MC1cbmZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYzo2MTpcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jLTYyLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5mcy9uYW1laS5jPTQxNzc9aW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL25hbWVpLmMtNDE5MC1cdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG5mcy9uYW1laS5jOjQxOTE6XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuZnMvbmFtZWkuYy00MTkyLVx0aWYgKGVycm9yKVxuLS1cbmZzL25hbWVpLmM9NDIwND1pbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL25hbWVpLmMtNDIxNC1cdG1vZGUgfD0gU19JRlJFRztcbmZzL25hbWVpLmM6NDIxNTpcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbmZzL25hbWVpLmMtNDIxNi1cdGlmIChlcnJvcilcbi0tXG5mcy9uYW1laS5jPTQzMTU9c3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvbmFtZWkuYy00MzMwLVxuZnMvbmFtZWkuYzo0MzMxOlx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuZnMvbmFtZWkuYy00MzMyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDA0PWludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA2LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDc6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA4LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD05MDI9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTkwOC1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo5MDk6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTkxMC1cdFx0XHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjA5PWludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MTUtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MTY6ICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjMyLX1cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYzMzpFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQyMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNlY3VyaXR5LUZvY3VzZWQgUmV2aWV3KioKCk9rYXksIHRpbWUgdG8gbWV0aG9kaWNhbGx5IGRpZyBpbnRvIHRoaXMgc2VjdXJpdHkgYXNwZWN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgc3lzdGVtIGhhbmRsZXMgaW5vZGUgcGVybWlzc2lvbnMgYW5kIGNyZWF0aW9uLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGNvcmUgc2VjdXJpdHkgbWVjaGFuaXNtcy4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBhdWRpdCB0aGUgc3RhbmRhcmQgTFNNIGhvb2tzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZDogc3BlY2lmaWNhbGx5LCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYC4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkJ1dCBJIGFsc28gbmVlZCB0byB0aGluayBtb3JlIGJyb2FkbHkuIEFyZSB0aGVyZSAqYW55KiBvdGhlciBMU00gaW1wbGVtZW50YXRpb25zIGFjdGl2ZSBvbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIG9yIG92ZXJsYXBwaW5nIGJlaGF2aW9ycyBmcm9tIHRoaW5ncyBsaWtlIEFwcEFybW9yLCBMYW5kbG9jaywgVG9tb3lvLCBvciBhbnkgb3RoZXIgY3VzdG9tIExTTXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gZGVwbG95ZWQuIFRoYXQmIzM5O3MgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGFjcm9zcyB0aGUgb3RoZXIgTFNNcyBmb3IgcmVsZXZhbnQgaG9va3MsIGZvY3VzaW5nIG9uIGBpbm9kZV9wZXJtaXNzaW9uYCBvciBgaW5vZGVfY3JlYXRlYC4gRmluZGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIGltcGxlbWVudGF0aW9ucyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2VjdXJpdHkgcGljdHVyZSBoZXJlLiBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhIHNpbmdsZSBsYXllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5vZGVfcGVybWlzc2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTEyMjU9c3RhdGljIHZvaWQgaW5vZGVfZnJlZV9ieV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0MS0gKiBzZWN1cml0eV9pbm9kZV9mcmVlKCksIEBpbm9kZSBtYXkgc3RpbGwgYmUgcmVmZXJlbmNlZCBpbiBhIFZGUyBwYXRoIHdhbGtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0MjogKiBhbmQgY2FsbHMgdG8gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIG1heSBiZSBtYWRlIGR1cmluZywgb3IgYWZ0ZXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTEyNDMtICogYSBjYWxsIHRvIHNlY3VyaXR5X2lub2RlX2ZyZWUoKS4gIEZvciB0aGlzIHJlYXNvbiB0aGUgaW5vZGUtXHUwMDNlaV9zZWN1cml0eVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xMjQ0LSAqIGZpZWxkIGlzIHJlbGVhc2VkIHZpYSBhIGNhbGxfcmN1KCkgY2FsbGJhY2sgYW5kIGFueSBMU01zIHdoaWNoIG5lZWQgdG9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTI0NTogKiByZXRhaW4gaW5vZGUgc3RhdGUgZm9yIHVzZSBpbiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgc2hvdWxkIG9ubHlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0Ni0gKiByZWxlYXNlIHRoYXQgc3RhdGUgaW4gdGhlIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1KCkgTFNNIGhvb2sgY2FsbGJhY2suXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xODIyPWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODMwLS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODMxOiAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDYtXHRcdFx0ICAgICAgaW50IG1hc2spXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ5LVx0XHRyZXR1cm4gMDtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg1MDpcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NTEtfVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MjcyNz1pbnQgc2VjdXJpdHlfZmlsZV9yZWNlaXZlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczNi0gKiBTYXZlIG9wZW4tdGltZSBwZXJtaXNzaW9uIGNoZWNraW5nIHN0YXRlIGZvciBsYXRlciB1c2UgdXBvbiBmaWxlX3Blcm1pc3Npb24sXG5zZWN1cml0eS9zZWN1cml0eS5jOjI3Mzc6ICogYW5kIHJlY2hlY2sgYWNjZXNzIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkIHNpbmNlIGlub2RlX3Blcm1pc3Npb24uXG5zZWN1cml0eS9zZWN1cml0eS5jLTI3MzgtICpcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEzMD1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxNDY6c3RhdGljIG5vaW5saW5lIGludCBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE0Ny1cdFx0XHRcdFx0ICAgdTMyIHBlcm1zLCB1MzIgYXVkaXRlZCwgdTMyIGRlbmllZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjQyLS8qKlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI0NC0gKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNTE6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1Mi1cdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjk5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XHRyYzIgPSBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBwZXJtcywgYXVkaXRlZCwgZGVuaWVkLCByYyk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzMwMS1cdGlmIChyYzIpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQyNjM9c3RhdGljIGludCBzZWxpbnV4X2ZpbGVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDI4MC1cdCAqIFNpbmNlIHRoZSBpbm9kZSBsYWJlbCBvciBwb2xpY3kgc2Vxbm8gbWF5IGhhdmUgY2hhbmdlZFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XHQgKiBiZXR3ZWVuIHRoZSBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gY2hlY2sgYW5kIHRoZSBzYXZpbmdcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgyLVx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTY3PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTctXHRMU01fSE9PS19JTklUKGlub2RlX2ZvbGxvd19saW5rLCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE4Olx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24pLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTktXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNlbGludXhfaW5vZGVfc2V0YXR0ciksXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTAyMD1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzMy1cdCAqIFVOSVggZG9tYWluIHNvY2tldHMgdXNlIGxvd2VyIGxldmVsIHNvY2tldCBkYXRhLiBMZXRcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMzQ6XHQgKiBVRFMgaW5vZGUgaGF2ZSBmaXhlZCAqIGxhYmVsIHRvIGtlZXAgc21hY2tfaW5vZGVfcGVybWlzc2lvbigpIGNhbG1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMzUtXHQgKiB3aGVuIGNhbGxlZCBmcm9tIHVuaXhfZmluZF9ic2QoKVxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTEyMDM9c3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIyOC0vKipcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMjk6ICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjMwLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzNy0gKi9cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMzg6c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzOS1cdFx0XHRcdCAgaW50IG1hc2spXG4tLVxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9NTE1OD1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzbWFja19ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9yZW5hbWUsIHNtYWNrX2lub2RlX3JlbmFtZSksXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzo1MTgxOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKSxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxODItXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNtYWNrX2lub2RlX3NldGF0dHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ5NwoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA3MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhIHJlZmFjdG9yLCBwcmltYXJpbHkgY29uY2VybmluZyB0aGUgcHJvcGFnYXRpb24gb2YgdGhlIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgdGhyb3VnaCBzZXZlcmFsIGlub2RlIExTTSBob29rcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBjYWxsZXJzLiBNeSB0aG91Z2h0IHByb2Nlc3MgaXMgY2xlYXI6CgpGaXJzdCwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBpbm9kZSBMU00gaG9va3PigJRgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmDigJR0byBpbmNsdWRlIHRoZSBgaWRtYXBgIHBhcmFtZXRlci4gVGhlIFZGUyBjYWxsZXJzIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AgYXJlIHVwZGF0ZWQgdG8gY29ycmVjdGx5IHBhc3MgdGhlIGBpZG1hcGAgKG9yIGAmYW1wO25vcF9tbnRfaWRtYXBgKSBpbnRvIHRoZSByZWxldmFudCBzZWN1cml0eSB3cmFwcGVycy4gVGhpcyBjaGFuZ2UgYWxzbyBleHRlbmRzIHRvIGltcGxlbWVudGF0aW9ucyBzdWNoIGFzIFNFTGludXgsIFNtYWNrIGFuZCBMU00gQlBGIHdoaWNoIGFsc28gdXBkYXRlIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgcGFyYW1ldGVyLiBJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnZvbHZlZCwgc28gSSBnbyB0aHJvdWdoIGEgbWVudGFsIGNoZWNrbGlzdDoKCjEuICAqKktlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcjoqKiBOb3RoaW5nIG5ldyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIGNoYW5nZXMgdG8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RsIGFyZSBoYXBwZW5pbmcgaGVyZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSBgaWRtYXBgIHBvaW50ZXIgYmVpbmcgcGFzc2VkIGFyb3VuZCBpcyBhIHZhbGlkIHBvaW50ZXIgb3JpZ2luYXRpbmcgZnJvbSBWRlMgY2FsbGVycywgb3IgdGhlIHNhZmUgYCZhbXA7bm9wX21udF9pZG1hcGAuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgc2NlbmFyaW9zIHdoZXJlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbjoqKiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb2RlIHBhdGguCjQuICAqKkJvdW5kcyBjaGVja3Mgb3Igb3RoZXIgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogVGhlcmUmIzM5O3Mgbm8gbWFuaXB1bGF0aW9uIG9mIG1lbW9yeSwgYm91bmRzIGNoZWNrcywgb3IgbG9naWMgdGhhdCB3b3VsZCBhbGxvdyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gdGhpcywgS01TQU4gaXMgdW5saWtlbHkgdG8gaWRlbnRpZnkgYW55IGlzc3Vlcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBpcyBwcmltYXJpbHkgY2hhbmdpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBwcm9wYWdhdGUgYW4gZXhpc3RpbmcgcGFyYW1ldGVyLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdGhhdCBLTVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGluY29ycmVjdCBwb2ludGVycyB3aGljaCBhcmUgdHlwZXMgb2YgbWVtb3J5IGVycm9ycyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBncmVhdCBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGlzbiYjMzk7dCBwcmVzZW50IGhlcmUuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBpcyBgZmFsc2VgLgoKTm93LCBJJiMzOTtsbCBzb2xpZGlmeSB0aGUgcmVhc29uaW5nOgoKKiAgIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uIGlzIGV4dGVuZGluZyBMU00gaG9va3Mgd2l0aCB0aGUgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBwYXJhbWV0ZXIuCiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBoZWFwL3N0YWNrIGJ1ZmZlcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLgoqICAgTm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyBvciBpbnRlcmFjdGlvbnMgYXJlIG1vZGlmaWVkIG9yIGFkZGVkLgoqICAgVGhlIGNoYW5nZSBpcyBhYm91dCBwbHVtYmluZyBhbiBleGlzdGluZyBwb2ludGVyIChgaWRtYXBgIC8gYCZhbXA7bm9wX21udF9pZG1hcGApLgoqICAgQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGxpa2VseSBiZSBwb2ludGVyLXJlbGF0ZWQsIGFuZCBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIGZhdWx0IGhhbmRsaW5nIHdvdWxkIGNhdGNoIHRoZW0uCiogICBUaHVzLCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4KSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLCBhbmQgbm93IEkmIzM5O2xsIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgc2V2ZXJhbCBpbm9kZS1yZWxhdGVkIExTTSBob29rcyAoYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBhbmQgYGlub2RlX3Blcm1pc3Npb25gKSBhbmQgdGhlaXIgd3JhcHBlcnMgYnkgcGFzc2luZyBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgLiBJdCBhbHNvIHVwZGF0ZXMgU0VMaW51eCBhbmQgU21hY2sgaW1wbGVtZW50YXRpb25zIGFuZCBhZGRzIEJQRiBMU00gc2VsZnRlc3RzIGZvciBpZG1hcHBlZCBtb3VudHMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcGFyYW1ldGVyIHBsdW1iaW5nIHVwZGF0ZSBhY3Jvc3MgVkZTIGFuZCBMU00gaW50ZXJmYWNlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCwgYW5kIG5vIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciBkZXJlZmVyZW5jaW5nIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZGV0ZWN0ZWQgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA4OjQ5Ljk3MDc4ODc2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTUwNDI5NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIHNldmVyYWwgaW5vZGUtcmVsYXRlZCBMU00gaG9va3MgKGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYCkgYW5kIHRoZWlyIHdyYXBwZXJzIGJ5IHBhc3NpbmcgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYC4gSXQgYWxzbyB1cGRhdGVzIFNFTGludXggYW5kIFNtYWNrIGltcGxlbWVudGF0aW9ucyBhbmQgYWRkcyBCUEYgTFNNIHNlbGZ0ZXN0cyBmb3IgaWRtYXBwZWQgbW91bnRzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcGFyYW1ldGVyIHBsdW1iaW5nIHVwZGF0ZSBhY3Jvc3MgVkZTIGFuZCBMU00gaW50ZXJmYWNlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCwgYW5kIG5vIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciBkZXJlZmVyZW5jaW5nIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZGV0ZWN0ZWQgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGlub2RlIExTTSBob29rcyAoc2VjdXJpdHlfaW5vZGVfY3JlYXRlLCBzZWN1cml0eV9pbm9kZV9saW5rLCBzZWN1cml0eV9pbm9kZV9zeW1saW5rLCBzZWN1cml0eV9pbm9kZV9ta2Rpciwgc2VjdXJpdHlfaW5vZGVfbWtub2QsIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24pIGFsb25nIHdpdGggVkZTIGNhbGxlcnMgdG8gcGFzcyBkb3duIG1vdW50IGlkbWFwcyAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGVuYWJsZXMgTFNNcyBhbmQgQlBGIExTTSBwcm9ncmFtcyB0byBpbnNwZWN0IGlkbWFwcGVkIG1vdW50cyBkdXJpbmcgZmlsZSBvcGVyYXRpb25zLCBhbHRlcmluZyByZWFjaGFibGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDg6NDkuOTcwNzk4MDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY0MzA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlOWMyODIxOGIyZDVlNTdkNzcyYTY4MmUwMmE1ODdiZmEzNDcwYjQ4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDI6MDg6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXFxuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcXG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcXG4rKysgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcXG5AQCAtNTEsMTQgKzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbitcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihcXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXFxcIixcXG4gXFx0XFx0ICAgICAgIHJldCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbitcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRwcl9lcnIoXFxcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcXFwiLFxcbiBcXHRcXHQgICAgICAgcmV0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKHVubGlrZWx5KHJldHZhbCkpXFxuIFxcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XFxuK1xcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcXG4gXFxuQEAgLTY5NSw3ICs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZFxcbiBcXHRpZiAodW5saWtlbHkoKChpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xcbitcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNDE4OCw3ICs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xcbiBcXG4gXFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXFxuIFxcbiBcXHRtb2RlIFxcdTAwMjY9IFNfSUFMTFVHTztcXG4gXFx0bW9kZSB8PSBTX0lGUkVHO1xcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xcbkBAIC00MzI4LDcgKzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTUyNTgsNyArNTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbkBAIC01NzgzLDcgKzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoIWRpci1cXHUwMDNlaV9vcC1cXHUwMDNlc3ltbGluaylcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG5AQCAtMTIwLDI2ICsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGludCAqeGF0dHJfY291bnQpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCB1bW9kZV90IG1vZGUpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IHVtb2RlX3QgbW9kZSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0IGJvb2wgcmN1KVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbkBAIC00MDQsMjQgKzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XFxuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcXG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXFxuIFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdCAgICAgICBib29sIHJjdSk7XFxuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgICAgIGludCBtYXNrKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTtcXG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0IHVtb2RlX3QgbW9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTEzLDkgKzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcXG4geyB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTkyNiwxNiArOTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IG1vZGUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05NDYsOSArOTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IG1vZGUsIGRldl90IGRldilcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxcbkBAIC0xNjIyLDEyICsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSlcXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XFxuIFxcbkBAIC0xNjQ4LDYgKzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcXG5AQCAtMTY1NiwxMiArMTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2ODIsNiArMTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xcbiB9XFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxcbiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlXFxuQEAgLTE3MDksMTEgKzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xcbiBcXG5AQCAtMTczNSw2ICsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBuZXcgZmlsZVxcbiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZVxcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGlub2RlOiBpbm9kZVxcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcXG4gICpcXG5AQCAtMTgzNSwxMSArMTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgICAgIGludCBtYXNrKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbkBAIC0zMDc0LDEyICszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ICAgIFxcdTAwMjZhZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcXG4gfVxcbkBAIC0zMDg5LDEyICszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcXG4gfVxcbkBAIC0zMTA0LDcgKzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcXG4gfVxcbkBAIC0zMjM2LDEzICszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsXFxuIFxcbiAvKipcXG4gICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxcbiAgKlxcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxcbiAgKi9cXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbiB7XFxuIFxcdGludCBtYXNrO1xcbiBcXHR1MzIgcGVybXM7XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5pbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXFxuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG5AQCAtMTA4OSwxNCArMTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcbiAvKipcXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3RcXG4gICogQGRpcjogdW51c2VkXFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxcbiAgKlxcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcXG4gICovXFxuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbiB7XFxuIFxcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xcbiBcXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XFxuQEAgLTEyMjYsNiArMTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbiBcXG4gLyoqXFxuICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKVxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxcbiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWRcXG4gICpcXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxcbiAgKi9cXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgaW50IG1hc2spXFxuIHtcXG4gXFx0c3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcXG5AQCAtMSwxOCArMSwzMCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuIFxcbiAvKlxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcImxzbS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsc21fdGFpbGNhbGwuc2tlbC5oXFxcIlxcbiBcXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcXFwidHJ1ZVxcXCIsIE5VTEx9O1xcbiBcXG4rZW51bSB7XFxuK1xcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcXHUwMDNjXFx1MDAzYyA2KSAtIDEsXFxuK307XFxuK1xcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxcbiB7XFxuIFxcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcXG5AQCAtMzAsNiArNDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpO1xcbitcXHR9IHdoaWxlIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlRSKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcXG4re1xcbitcXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcXG4rXFx0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcXG4rXFx0XFx0c2F2ZWRfZXJybm8gPSBFSU87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKHNhdmVkX2Vycm5vKSB7XFxuK1xcdFxcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF07XFxuK1xcdGludCBsZW47XFxuK1xcbitcXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy8lZC8lc1xcXCIsIHBpZCwgbmFtZSk7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFxcdTAwM2U9IHNpemVvZihwYXRoKSkge1xcbitcXHRcXHRlcnJubyA9IEVPVkVSRkxPVztcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF07XFxuK1xcdHBpZF90IHBpZCwgd2FpdGVkO1xcbitcXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xcbitcXG4rXFx0cGlkID0gZm9yaygpO1xcbitcXHRpZiAocGlkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpXFxuK1xcdFxcdFxcdF9leGl0KDEpO1xcbitcXHRcXHRyYWlzZShTSUdTVE9QKTtcXG4rXFx0XFx0X2V4aXQoMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XFxuK1xcdH0gd2hpbGUgKHdhaXRlZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xcbitcXHRpZiAod2FpdGVkICE9IHBpZClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XFxuK1xcdFxcdHBpZCA9IC0xO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cXG4rXFx0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXFxcInNldGdyb3Vwc1xcXCIsIFxcXCJkZW55XFxcIikgXFx1MDAyNlxcdTAwMjYgZXJybm8gIT0gRU5PRU5UKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXFxcInVpZF9tYXBcXFwiLCBcXFwiMCAwIDFcXFwiKSB8fFxcbitcXHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcXFwiZ2lkX21hcFxcXCIsIFxcXCIwIDAgMVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIi9wcm9jLyVkL25zL3VzZXJcXFwiLCBwaWQpO1xcbitcXHRpZiAobGVuIFxcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcXG4rXFx0XFx0ZXJybm8gPSBFT1ZFUkZMT1c7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcbitvdXQ6XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGlmIChwaWQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGtpbGwocGlkLCBTSUdLSUxMKTtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XFxuK1xcdFxcdH0gd2hpbGUgKHdhaXRlZCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xcbitcXHR9XFxuK1xcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuK1xcdHJldHVybiBmZDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xcbitcXHRcXHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxcbitcXHR9O1xcbitcXHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XFxuK1xcbitcXHR1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7XFxuK1xcdGlmICh1c2VybnNfZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXFxuK1xcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcXFwidG1wZnNcXFwiLCBGU09QRU5fQ0xPRVhFQyk7XFxuK1xcdGlmIChmc2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XFxuK1xcdGlmIChtbnRmZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XFxuK1xcdGlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsIFxcXCJcXFwiLCBBVF9FTVBUWV9QQVRILCBcXHUwMDI2YXR0cixcXG4rXFx0XFx0ICAgIHNpemVvZihhdHRyKSkpIHtcXG4rXFx0XFx0Y2xvc2UobW50ZmQpO1xcbitcXHRcXHRtbnRmZCA9IC0xO1xcbitcXHR9XFxuK1xcbitvdXQ6XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGlmIChmc2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZzZmQpO1xcbitcXHRpZiAodXNlcm5zX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKHVzZXJuc19mZCk7XFxuK1xcdGVycm5vID0gc2F2ZWRfZXJybm87XFxuK1xcdHJldHVybiBtbnRmZDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpXFxuK3tcXG4rXFx0aW50IGZkID0gLTEsIHJldCA9IC0xO1xcbitcXG4rXFx0ZmQgPSBvcGVuYXQoZGlyZmQsIFxcXCJmaWxlXFxcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxcbitcXHRcXHQgICAgMDYwMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcXFwiY3JlYXRlXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdGZkID0gLTE7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCBcXFwiZGlyXFxcIiwgMDcwMCksIFxcXCJta2RpclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KFxcXCJ0YXJnZXRcXFwiLCBkaXJmZCwgXFxcInN5bWxpbmtcXFwiKSwgXFxcInN5bWxpbmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgXFxcImZpbGVcXFwiLCBkaXJmZCwgXFxcImxpbmtcXFwiLCAwKSwgXFxcImxpbmtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcXFwiZmlmb1xcXCIsIDA2MDApLCBcXFwibWtub2RcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSAwO1xcbitvdXQ6XFxuK1xcdGlmIChmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwibGlua1xcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImZpZm9cXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJzeW1saW5rXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwiZmlsZVxcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcImRpclxcXCIsIEFUX1JFTU9WRURJUik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbClcXG4re1xcbitcXHRjaGFyIHRtcGRpcltdID0gXFxcIi92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWFxcXCI7XFxuK1xcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xcbitcXHRpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXFxcIm1rZHRlbXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0ZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcXFwib3Blbl90bXBkaXJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZG1hcHBlZF9kaXJmZCA9IGNyZWF0ZV9pZG1hcHBlZF90bXBmcygpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXFxcImNyZWF0ZV9pZG1hcHBlZF90bXBmc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksIFxcXCJpZGVudGl0eV9pZG1hcFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLFxcbitcXHRcXHQgICAgICAgXFxcImlkbWFwcGVkX21vdW50XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCxcXG4rXFx0XFx0ICAgICAgIFxcXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXQgPSBBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcXG4rXFx0XFx0XFx0XFxcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cXFwiKSA/IDAgOiAtMTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGlkbWFwcGVkX2RpcmZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGlkbWFwcGVkX2RpcmZkKTtcXG4rXFx0aWYgKGRpcmZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGRpcmZkKTtcXG4rXFx0cm1kaXIodG1wZGlyKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcXG4gXFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xcbiBcXG4rXFx0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRlc3RfbHNtX2lub2RlX2lkbWFwXFxcIikpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xcbiBcXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcXFwic3RhY2tfbXByb3RlY3RcXFwiKSB8fFxcbiBcXHQgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sIFxcXCJzdGFja19tcHJvdGVjdFxcXCIpKVxcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXFxuIFxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY29weV90ZXN0ID0gMDtcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VicHJtX2NvdW50ID0gMDtcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbkBAIC04NCw2ICs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xcbiBpbnQgYnBybV9jb3VudCA9IDA7XFxuK19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcXG4rXFxuK2VudW0ge1xcbitcXHRJTk9ERV9JRE1BUF9DUkVBVEVcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDAsXFxuK1xcdElOT0RFX0lETUFQX0xJTktcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDEsXFxuK1xcdElOT0RFX0lETUFQX1NZTUxJTktcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDIsXFxuK1xcdElOT0RFX0lETUFQX01LRElSXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyAzLFxcbitcXHRJTk9ERV9JRE1BUF9NS05PRFxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgNCxcXG4rXFx0SU5PREVfSURNQVBfUEVSTUlTU0lPTlxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgNSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXFxuK3tcXG4rXFx0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcbitcXHRyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgXFx1MDAyNlxcdTAwMjYgaWRtYXA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcXG4re1xcbitcXHRyZXR1cm4gaWRtYXAtXFx1MDAzZXVpZF9tYXAubnJfZXh0ZW50cyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpZG1hcC1cXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcXG4re1xcbitcXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxcbitcXHRcXHRpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiB8PSBob29rO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfY3JlYXRlXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9saW5rXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9zeW1saW5rXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfbWtkaXJcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9ta25vZFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJsc20vaW5vZGVfcGVybWlzc2lvblxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XFxuK31cXG4gXFxuIFNFQyhcXFwibHNtL2ZpbGVfbXByb3RlY3RcXFwiKVxcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA4OjUwLjUxODA1MjE5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzc4MzY4MTUzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX1NNQUNLXCIsXG4gICAgXCJDQUNIRUZJTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VjdXJpdHlfaW5vZGVfY3JlYXRlXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9saW5rXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9zeW1saW5rXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta2RpclwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtub2RcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIChzZWN1cml0eV9pbm9kZV9jcmVhdGUsIHNlY3VyaXR5X2lub2RlX2xpbmssIHNlY3VyaXR5X2lub2RlX3N5bWxpbmssIHNlY3VyaXR5X2lub2RlX21rZGlyLCBzZWN1cml0eV9pbm9kZV9ta25vZCwgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbikgYWxvbmcgd2l0aCBWRlMgY2FsbGVycyB0byBwYXNzIGRvd24gbW91bnQgaWRtYXBzIChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCkuIFRoaXMgZW5hYmxlcyBMU01zIGFuZCBCUEYgTFNNIHByb2dyYW1zIHRvIGluc3BlY3QgaWRtYXBwZWQgbW91bnRzIGR1cmluZyBmaWxlIG9wZXJhdGlvbnMsIGFsdGVyaW5nIHJlYWNoYWJsZSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOWMyODIxOGIyZDVlNTdkNzcyYTY4MmUwMmE1ODdiZmEzNDcwYjQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwMjowODo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuaW5kZXggZmM2NjExODg2YjNiNS4uZWVmZTU0NTNiOTA0ZSAxMDA2NDRcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5AQCAtNTEsMTQgKzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuK1x0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkXCIsXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICs2NTgsNyBAQCBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmICh1bmxpa2VseShyZXR2YWwpKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcbiBcbkBAIC02OTUsNyArNjk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNDE4OCw3ICs0MTg4LDcgQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcdC8qIHNob3VsZG4ndCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG5AQCAtNDIxMiw3ICs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcbiBcdG1vZGUgXHUwMDI2PSBTX0lBTExVR087XG4gXHRtb2RlIHw9IFNfSUZSRUc7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICs0MzI4LDcgQEAgc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuIH1cbiBcbiAvKipcbkBAIC01MjU4LDcgKzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTM5NSw3ICs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0Z290byBlcnI7XG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgKzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFkaXItXHUwMDNlaV9vcC1cdTAwM2VzeW1saW5rKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhpZG1hcCwgZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5AQCAtNTkwNyw3ICs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uOWU0OWE1YmM5ZmYzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTEyMCwyNiArMTIwLDI3IEBAIExTTV9IT09LKGludCwgLUVPUE5PVFNVUFAsIGlub2RlX2luaXRfc2VjdXJpdHksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgaW50ICp4YXR0cl9jb3VudClcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHQgc3RydWN0IGlub2RlICppbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuaW5kZXggMTUzZTkwNDMwNThmOC4uMGY1ZjIwYWMxMDUwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5AQCAtNDA0LDI0ICs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0XHRcdCAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LFxuIFx0XHRcdCAgdW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCAgICAgICBib29sIHJjdSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spO1xuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSArOTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0IHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHRcdHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTEzLDkgKzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MjYsMTYgKzkzMiwxOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTQ2LDkgKzk1NCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyArOTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgKzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogdGhlIHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXG4gICogQG1vZGU6IHJlcXVlc3RlZCBmaWxlIG1vZGVcbkBAIC0xNjIyLDEyICsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgKzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IGV4aXN0aW5nIGZpbGVcbiAgKiBAZGlyOiBuZXcgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xuQEAgLTE2NTYsMTIgKzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZF9iYWNraW5nX2lub2RlKG9sZF9kZW50cnkpKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgKzE2ODQsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfc3ltbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzeW1ib2xpYyBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBzeW1ib2xpYyBsaW5rXG4gICogQG9sZF9uYW1lOiBleGlzdGluZyBmaWxlbmFtZVxuQEAgLTE2OTAsMTYgKzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5XG4gICogQG1vZGU6IG5ldyBkaXJlY3RvcnkgbW9kZVxuQEAgLTE3MDksMTEgKzE3MTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpO1xuIFxuQEAgLTE3MzUsNiArMTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGZpbGVcbiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZVxuQEAgLTE3NDcsMTIgKzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0IHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTgyMyw2ICsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiBpbm9kZVxuICAqIEBtYXNrOiBhY2Nlc3MgbWFza1xuICAqXG5AQCAtMTgzNSwxMSArMTg0MiwxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgICAgIGludCBtYXNrKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaW5vZGUsIG1hc2spO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi45Njc5ODRkMGFmMzAwIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0zMDc0LDEyICszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspO1xuIH1cbkBAIC0zMDg5LDEyICszMDkxLDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1VOTElOSyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfTE5LX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgKzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIGRlbnRyeSwgTUFZX1JNRElSKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsXG4gXG4gLyoqXG4gICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSB0aGF0IGlzIGJlaW5nIGFjY2Vzc2VkXG4gICogQHJlcXVlc3RlZDogdGhlIGFjY2Vzc2VzIGJlaW5nIHJlcXVlc3RlZFxuICAqXG4gICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGFjY2VzcyBAaW5vZGUgYWNjb3JkaW5nIHRvXG4gICogQHJlcXVlc3RlZC4gIFJldHVybnMgMCBpZiBhbGxvd2VkLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiB7XG4gXHRpbnQgbWFzaztcbiBcdHUzMiBwZXJtcztcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5pbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG5AQCAtMTA4OSwxNCArMTA4OSwxNSBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfbGluayAtIFNtYWNrIGNoZWNrIG9uIGxpbmtcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRzdHJ1Y3Qgc21hY2tfa25vd24gKmlzcDtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbkBAIC0xMjI2LDYgKzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uXG4gICogQG1hc2s6IHRoZSBhY2Nlc3MgcmVxdWVzdGVkXG4gICpcbkBAIC0xMjMzLDcgKzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgIGludCBtYXNrKVxuIHtcbiBcdHN0cnVjdCBzdXBlcmJsb2NrX3NtYWNrICpzYnNwID0gc21hY2tfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbkBAIC0xLDE4ICsxLDMwIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwibHNtLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJsc21fdGFpbGNhbGwuc2tlbC5oXCJcbiBcbiBjaGFyICpDTURfQVJHU1tdID0ge1widHJ1ZVwiLCBOVUxMfTtcbiBcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuK307XG4rXG4gaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiB7XG4gXHRpbnQgY2hpbGRfcGlkLCBjaGlsZF9zdGF0dXM7XG5AQCAtMzAsNiArNDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3Qgd3JpdGVfbm9pbnRyKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRkbyB7XG4rXHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbitcdH0gd2hpbGUgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xuK1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHJldCA9IHdyaXRlX25vaW50cihmZCwgdmFsdWUsIGxlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0ZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKVxuK1x0XHRzYXZlZF9lcnJubyA9IEVJTztcbitcdGNsb3NlKGZkKTtcbitcdGlmIChzYXZlZF9lcnJubykge1xuK1x0XHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV91c2VybnNfZmlsZShwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkLyVzXCIsIHBpZCwgbmFtZSk7XG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XG4rXHRcdGVycm5vID0gRU9WRVJGTE9XO1xuK1x0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF07XG4rXHRwaWRfdCBwaWQsIHdhaXRlZDtcbitcdGludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7XG4rXG4rXHRwaWQgPSBmb3JrKCk7XG4rXHRpZiAocGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAocGlkID09IDApIHtcbitcdFx0aWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikpXG4rXHRcdFx0X2V4aXQoMSk7XG4rXHRcdHJhaXNlKFNJR1NUT1ApO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdGRvIHtcbitcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcbitcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0aWYgKHdhaXRlZCAhPSBwaWQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbitcdFx0cGlkID0gLTE7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogQSBvbmUtZW50cnkgbWFwIGlzIGlkZW50aXR5IGZvciByb290IGJ1dCByZW1haW5zIGRpc3RpbmN0IGZyb20gbm9wX21udF9pZG1hcC4gKi9cbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwic2V0Z3JvdXBzXCIsIFwiZGVueVwiKSBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRU5PRU5UKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwidWlkX21hcFwiLCBcIjAgMCAxXCIpIHx8XG4rXHQgICAgd3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcImdpZF9tYXBcIiwgXCIwIDAgMVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvbnMvdXNlclwiLCBwaWQpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xuK1xuK291dDpcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRpZiAocGlkIFx1MDAzZSAwKSB7XG4rXHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbitcdFx0ZG8ge1xuK1x0XHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcbitcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXHR9XG4rXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0cmV0dXJuIGZkO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XG4rXHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4rXHR9O1xuK1x0aW50IGZzZmQgPSAtMSwgbW50ZmQgPSAtMSwgc2F2ZWRfZXJybm8sIHVzZXJuc19mZCA9IC0xO1xuK1xuK1x0dXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpO1xuK1x0aWYgKHVzZXJuc19mZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqL1xuK1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwidG1wZnNcIiwgRlNPUEVOX0NMT0VYRUMpO1xuK1x0aWYgKGZzZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcbitcdGlmIChtbnRmZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbitcdGlmIChzeXNjYWxsKF9fTlJfbW91bnRfc2V0YXR0ciwgbW50ZmQsIFwiXCIsIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4rXHRcdCAgICBzaXplb2YoYXR0cikpKSB7XG4rXHRcdGNsb3NlKG1udGZkKTtcbitcdFx0bW50ZmQgPSAtMTtcbitcdH1cbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKGZzZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmc2ZkKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZSh1c2VybnNfZmQpO1xuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBtbnRmZDtcbit9XG4rXG4rc3RhdGljIGludCBleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpbnQgZGlyZmQpXG4re1xuK1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuK1xuK1x0ZmQgPSBvcGVuYXQoZGlyZmQsIFwiZmlsZVwiLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsXG4rXHRcdCAgICAwNjAwKTtcbitcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcImNyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRjbG9zZShmZCk7XG4rXHRmZCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgXCJkaXJcIiwgMDcwMCksIFwibWtkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KFwidGFyZ2V0XCIsIGRpcmZkLCBcInN5bWxpbmtcIiksIFwic3ltbGlua1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwiZmlsZVwiLCBkaXJmZCwgXCJsaW5rXCIsIDApLCBcImxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFwiZmlmb1wiLCAwNjAwKSwgXCJta25vZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSAwO1xuK291dDpcbitcdGlmIChmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZkKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWZvXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwic3ltbGlua1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImZpbGVcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJkaXJcIiwgQVRfUkVNT1ZFRElSKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9sc21faW5vZGVfaWRtYXAoc3RydWN0IGxzbSAqc2tlbClcbit7XG4rXHRjaGFyIHRtcGRpcltdID0gXCIvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFhcIjtcbitcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuK1x0aW50IGRpcmZkID0gLTEsIGlkbWFwcGVkX2RpcmZkID0gLTE7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCBcIm1rZHRlbXBcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsIFwib3Blbl90bXBkaXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbitcdGlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCBcImNyZWF0ZV9pZG1hcHBlZF90bXBmc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcImlkZW50aXR5X2lkbWFwXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGlkbWFwcGVkX2RpcmZkKSxcbitcdFx0ICAgICAgIFwiaWRtYXBwZWRfbW91bnRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiwgZXhwZWN0ZWQsXG4rXHRcdCAgICAgICBcImlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuK1x0XHRcdFwiaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblwiKSA/IDAgOiAtMTtcbitcbitvdXQ6XG4rXHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpZG1hcHBlZF9kaXJmZCk7XG4rXHRpZiAoZGlyZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShkaXJmZCk7XG4rXHRybWRpcih0bXBkaXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIHtcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbkBAIC01Myw2ICsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpO1xuIFxuK1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidGVzdF9sc21faW5vZGVfaWRtYXBcIikpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBzdGFja19tcHJvdGVjdCgpO1xuIFx0aWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgXCJzdGFja19tcHJvdGVjdFwiKSB8fFxuIFx0ICAgICFBU1NFUlRfRVEoZXJybm8sIEVQRVJNLCBcInN0YWNrX21wcm90ZWN0XCIpKVxuQEAgLTcxLDYgKzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfdGVzdCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2NvdW50ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1wcm90ZWN0X2NvdW50ID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICs4NCw4NSBAQCBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gaW50IG1vbml0b3JlZF9waWQgPSAwO1xuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XG4gaW50IGJwcm1fY291bnQgPSAwO1xuK19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuK1xuK2VudW0ge1xuK1x0SU5PREVfSURNQVBfQ1JFQVRFXHQ9IDFVIFx1MDAzY1x1MDAzYyAwLFxuK1x0SU5PREVfSURNQVBfTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMSxcbitcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4rXHRJTk9ERV9JRE1BUF9NS0RJUlx0PSAxVSBcdTAwM2NcdTAwM2MgMyxcbitcdElOT0RFX0lETUFQX01LTk9EXHQ9IDFVIFx1MDAzY1x1MDAzYyA0LFxuK1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbit9O1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4re1xuK1x0X191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXHUwMDNlXHUwMDNlIDMyO1xuK1xuK1x0cmV0dXJuIG1vbml0b3JlZF9waWQgPT0gcGlkIFx1MDAyNlx1MDAyNiBpZG1hcDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBpZG1hcC1cdTAwM2VnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxuK3tcbitcdGlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuK1x0XHRpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuIHw9IGhvb2s7XG4rXHRlbHNlXG4rXHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfY3JlYXRlXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0NSRUFURSwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2xpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX3N5bWxpbmtcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfU1lNTElOSywgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX21rZGlyXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta25vZFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtOT0QsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9wZXJtaXNzaW9uXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1BFUk1JU1NJT04sIHJldCk7XG4rfVxuIFxuIFNFQyhcImxzbS9maWxlX21wcm90ZWN0XCIpXG4gaW50IEJQRl9QUk9HKHRlc3RfaW50X2hvb2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDg6NTAuNTE4MDU0ODg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI1ODc3NTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBXb3J0aCBGdXp6aW5nPyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGxvdCBvZiBpbXBvcnRhbnQgYXJlYXM6IGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBgZnMvbmFtZWkuY2AsIGNyaXRpY2FsIGluY2x1ZGUgZmlsZXMsIGFuZCwgY3J1Y2lhbGx5LCB0aGUgc2VjdXJpdHkgZnJhbWV3b3JrIGl0c2VsZiwgaW5jbHVkaW5nIFNFTGludXgsIFNtYWNrLCBhbmQgZXZlbiB0aGUgQlBGIExTTSB0ZXN0cy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqbWlnaHQqIGJlIGEgcmVmYWN0b3JpbmcsIGludHJvZHVjaW5nIHRoZSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIHBhcmFtZXRlciB0byBzZXZlcmFsIExTTSBob29rczogYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBgaW5vZGVfcGVybWlzc2lvbmAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55ICpmdW5jdGlvbmFsKiBjaGFuZ2UgaGVyZSwgb3IgaWYgdGhpcyBpcyBqdXN0IHBsdW1iaW5nLiBTY2FubmluZyBgZnMvbmFtZWkuY2AsIEkgc2VlIGBpZG1hcGAgaXMgZ2V0dGluZyBwYXNzZWQgaW50byB0aGUgYHNlY3VyaXR5X2lub2RlXypgIGNhbGxzIGNvcnJlY3RseS4gVGhlIHdyYXBwZXIgZnVuY3Rpb25zIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhcmUgYWxzbyB1cGRhdGVkIHRvIGhhbmRsZSB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIgYW5kIHBhc3MgaXQgb24gdmlhIGBjYWxsX2ludF9ob29rKC4uLilgLiAgU0VMaW51eCBhbmQgU21hY2sgYXJlIGhhdmluZyB0aGVpciBob29rIHNpZ25hdHVyZXMgdXBkYXRlZCwgYnV0IGl0IGxvb2tzIGxpa2UgdGhleSBhcmVuJ3QgKnVzaW5nKiB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIgcmlnaHQgbm93LiBIb3dldmVyLCB0aGUgQlBGIExTTSB0ZXN0cyBhcmUgKnJlY2VpdmluZyogYGlkbWFwYCBub3csIHdoaWNoIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbjogSXMgdGhpcyBqdXN0IGFuIEFQSSBjaGFuZ2UgdG8gc3VwcG9ydCBpZG1hcHBlZCBtb3VudHMgYmV0dGVyIChlc3BlY2lhbGx5IGZvciBCUEYgTFNNIG9yIGZ1dHVyZSBMU01zKSwgb3IgZG9lcyBpdCAqZnVuY3Rpb25hbGx5KiBjaGFuZ2Ugc2VjdXJpdHkgcG9saWN5IGJlaGF2aW9yP1xuXG5MZXQncyBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3Igd2hhdCdzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBub3QganVzdCBkb2N1bWVudGF0aW9uLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50IHVwZGF0ZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUuICBUaGlzIGRlZmluaXRlbHkgKmlzbid0KiBkb2N1bWVudGF0aW9uLCBhbmQgaXQgaXNuJ3QganVzdCBsb2dnaW5nLiBUaGlzIGlzIG1vZGlmeWluZyBMU00gaG9vayBkZWZpbml0aW9ucyBhbmQgdGhlIFZGUyBsYXllci5cblxuTm93LCB0aGlzIGlzIGdldHRpbmcgaW50ZXJlc3RpbmcuICBMU00gaG9va3MgYXJlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIEJQRiBMU00gKmNhbiogYXR0YWNoIHRvIHRoZXNlIGhvb2tzIGFuZCBub3cgcmVjZWl2ZXMgdGhlIGBpZG1hcGAgYXJndW1lbnQuIFRoYXQgbWVhbnMgYSBCUEYgcHJvZ3JhbSBjYW4gbm93IHBvdGVudGlhbGx5IG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uIG1vdW50IElEIG1hcHBpbmcgaW5mb3JtYXRpb24sIGNoYW5naW5nIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc28gaXQgKnNlZW1zKiB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrLCB0aG91Z2guICBJIG5lZWQgdG8gdXNlIG15IHRvb2xzIChgZ3JlcHBlcmAsIGdpdCBsb2csIGdpdCBzaG93LCBldGMuKSB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsYXRlZCBjaGFuZ2VzIGluIG90aGVyIExTTXMgKEFwcEFybW9yLCBMYW5kbG9jaywgZXRjLikgb3IgYW55IG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZXNlIGhvb2tzLiBJIGhhdmUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGJlZm9yZSBJIGZsYWcgaXQgYXMgbm90IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowODo1Ni43NzY4MzMyNTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMDU0MDYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbm9kZV9wZXJtaXNzaW9uLiptbnRfaWRtYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUzMDg9c3RhdGljIGludCB1YmxrX2NoYXJfZGV2X3Blcm1pc3Npb24oc3RydWN0IHVibGtfZGV2aWNlICp1YixcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzI2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MzI3OlxcdGVyciA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMjgtXFx0XFx0XFx0ZF9iYWNraW5nX2lub2RlKHBhdGguZGVudHJ5KSwgbWFzayk7XFxuLS1cXG5mcy9iYWRfaW5vZGUuYz04Nj1zdGF0aWMgaW50IGJhZF9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iYWRfaW5vZGUuYy05MS1cXG5mcy9iYWRfaW5vZGUuYzo5MjpzdGF0aWMgaW50IGJhZF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2JhZF9pbm9kZS5jLTkzLVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jPTEwMz1zdGF0aWMgaW50IGJwZl94YXR0cl9yZWFkX3Blcm1pc3Npb24oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYy0xMTItXFxuZnMvYnBmX2ZzX2tmdW5jcy5jOjExMzpcXHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE1BWV9SRUFEKTtcXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTE0LX1cXG4tLVxcbmZzL2JwZl9mc19rZnVuY3MuYz0xNzM9c3RhdGljIGludCBicGZfeGF0dHJfd3JpdGVfcGVybWlzc2lvbihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvYnBmX2ZzX2tmdW5jcy5jLTE4MS1cXG5mcy9icGZfZnNfa2Z1bmNzLmM6MTgyOlxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKTtcXG5mcy9icGZfZnNfa2Z1bmNzLmMtMTgzLX1cXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MjQzMD1zdGF0aWMgaW50IGJ0cmZzX2lvY3RsX2RlZnJhZyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTI0NjAtXFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIFxcdTAwMjZcXHUwMDI2XFxuZnMvYnRyZnMvaW9jdGwuYzoyNDYxOlxcdFxcdCAgICBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKSkge1xcbmZzL2J0cmZzL2lvY3RsLmMtMjQ2Mi1cXHRcXHRcXHRyZXQgPSAtRVBFUk07XFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM9MTM1PWludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xOTItXFx0ZWxzZVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxOTM6XFx0XFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xOTQtXFx0XFx0XFx0XFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4tLVxcbmZzL2VjcnlwdGZzL2lub2RlLmM9ODUyPWVjcnlwdGZzX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9lY3J5cHRmcy9pbm9kZS5jLTg1NC17XFxuZnMvZWNyeXB0ZnMvaW5vZGUuYzo4NTU6XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsXFxuZnMvZWNyeXB0ZnMvaW5vZGUuYy04NTYtXFx0XFx0XFx0XFx0ZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoaW5vZGUpLCBtYXNrKTtcXG4tLVxcbmZzL25hbWVpLmM9NTY1PUVYUE9SVF9TWU1CT0woZ2VuZXJpY19wZXJtaXNzaW9uKTtcXG4tLVxcbmZzL25hbWVpLmMtNTc3LSAqL1xcbmZzL25hbWVpLmM6NTc4OnN0YXRpYyBpbmxpbmUgaW50IGRvX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvbmFtZWkuYy01NzktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5mcy9uYW1laS5jPTYwND1zdGF0aWMgaW50IHNiX3Blcm1pc3Npb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5mcy9uYW1laS5jLTYyNy0gKi9cXG5mcy9uYW1laS5jOjYyODppbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9uYW1laS5jLTYyOS1cXHRcXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuZnMvbmFtZWkuYz02NjM9RVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTtcXG4tLVxcbmZzL25hbWVpLmMtNjgyLSAqL1xcbmZzL25hbWVpLmM6NjgzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL25hbWVpLmMtNjg0LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuZnMvbmFtZWkuYz02MDc1PWludCB2ZnNfcmVuYW1lKHN0cnVjdCByZW5hbWVkYXRhICpyZClcXG4tLVxcbmZzL25hbWVpLmMtNjEyMi1cXHRcXHRpZiAoaXNfZGlyKSB7XFxuZnMvbmFtZWkuYzo2MTIzOlxcdFxcdFxcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihyZC1cXHUwMDNlbW50X2lkbWFwLCBzb3VyY2UsXFxuZnMvbmFtZWkuYy02MTI0LVxcdFxcdFxcdFxcdFxcdFxcdCBNQVlfV1JJVEUpO1xcbi0tXFxuZnMvbmFtZWkuYy02MTI4LVxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IG5ld19pc19kaXIpIHtcXG5mcy9uYW1laS5jOjYxMjk6XFx0XFx0XFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKHJkLVxcdTAwM2VtbnRfaWRtYXAsIHRhcmdldCxcXG5mcy9uYW1laS5jLTYxMzAtXFx0XFx0XFx0XFx0XFx0XFx0IE1BWV9XUklURSk7XFxuLS1cXG5mcy9uZnNkL25mc2ZoLmM9MzE9c3RhdGljIGludCBuZnNkX2FjY2VwdGFibGUodm9pZCAqZXhwdiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbmZzZC9uZnNmaC5jLTQ1LVxcdFxcdHBhcmVudCA9IGRnZXRfcGFyZW50KHRkZW50cnkpO1xcbmZzL25mc2QvbmZzZmguYzo0NjpcXHRcXHRlcnIgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLFxcbmZzL25mc2QvbmZzZmguYy00Ny1cXHRcXHRcXHRcXHQgICAgICAgZF9pbm9kZShwYXJlbnQpLCBNQVlfRVhFQyk7XFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTI4NDM9bmZzZF9wZXJtaXNzaW9uKHN0cnVjdCBzdmNfY3JlZCAqY3JlZCwgc3RydWN0IHN2Y19leHBvcnQgKmV4cCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMjkwMi1cXHQvKiBUaGlzIGFzc3VtZXMgIE5GU0RfTUFZX3tSRUFELFdSSVRFLEVYRUN9ID09IE1BWV97UkVBRCxXUklURSxFWEVDfSAqL1xcbmZzL25mc2QvdmZzLmM6MjkwMzpcXHRlcnIgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSxcXG5mcy9uZnNkL3Zmcy5jLTI5MDQtXFx0XFx0XFx0ICAgICAgIGFjYyBcXHUwMDI2IChNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDKSk7XFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTI5MDktXFx0ICAgICAgKGFjYyBcXHUwMDI2IChORlNEX01BWV9PV05FUl9PVkVSUklERSB8IE5GU0RfTUFZX1JFQURfSUZfRVhFQykpKSlcXG5mcy9uZnNkL3Zmcy5jOjI5MTA6XFx0XFx0ZXJyID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE1BWV9FWEVDKTtcXG5mcy9uZnNkL3Zmcy5jLTI5MTEtXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzU1PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21heV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDM2MC1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MzYxOlxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MzYyLX1cXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQzNzI9c3RhdGljIGludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MTQtXFx0aWYgKCFwcmVzZXJ2ZSkge1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0MTU6XFx0XFx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1JFQUQpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MTYtXFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvb3Blbi5jPTQ2Mz1zdGF0aWMgaW50IGRvX2ZhY2Nlc3NhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBtb2RlLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9vcGVuLmMtNTAzLVxcbmZzL29wZW4uYzo1MDQ6XFx0cmVzID0gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC5tbnQpLCBpbm9kZSwgbW9kZSB8IE1BWV9BQ0NFU1MpO1xcbmZzL29wZW4uYy01MDUtXFx0LyogU3VTIHYyIHJlcXVpcmVzIHdlIHJlcG9ydCBhIHJlYWQgb25seSBmcyB0b28gKi9cXG4tLVxcbmZzL292ZXJsYXlmcy9pbm9kZS5jPTMwNj1pbnQgb3ZsX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vdmVybGF5ZnMvaW5vZGUuYy0zMzYtXFx0d2l0aF9vdmxfY3JlZHMoaW5vZGUtXFx1MDAzZWlfc2IpXFxuZnMvb3ZlcmxheWZzL2lub2RlLmM6MzM3OlxcdFxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKG1udF9pZG1hcChyZWFscGF0aC5tbnQpLCByZWFsaW5vZGUsIG1hc2spO1xcbmZzL292ZXJsYXlmcy9pbm9kZS5jLTMzOC19XFxuLS1cXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYz02MDA4PWludCBzbWIyX3F1ZXJ5X2RpcihzdHJ1Y3Qga3NtYmRfd29yayAqd29yaylcXG4tLVxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTYwNjEtXFx0aWYgKCEoZGlyX2ZwLVxcdTAwM2VkYWNjZXNzIFxcdTAwMjYgRklMRV9MSVNUX0RJUkVDVE9SWV9MRSkgfHxcXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYzo2MDYyOlxcdCAgICBpbm9kZV9wZXJtaXNzaW9uKGZpbGVfbW50X2lkbWFwKGRpcl9mcC1cXHUwMDNlZmlscCksXFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtNjA2My1cXHRcXHRcXHQgICAgIGZpbGVfaW5vZGUoZGlyX2ZwLVxcdTAwM2VmaWxwKSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0yNzEwPWludCBub3RpZnlfY2hhbmdlKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGRlbnRyeSAqLFxcbmluY2x1ZGUvbGludXgvZnMuaC0yNzExLVxcdFxcdCAgc3RydWN0IGlhdHRyICosIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XFxuaW5jbHVkZS9saW51eC9mcy5oOjI3MTI6aW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcxMy1pbnQgZ2VuZXJpY19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosIGludCk7XFxuaW5jbHVkZS9saW51eC9mcy5oPTI3MTQ9c3RhdGljIGlubGluZSBpbnQgZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaylcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcxNS17XFxuaW5jbHVkZS9saW51eC9mcy5oOjI3MTY6XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oZmlsZV9tbnRfaWRtYXAoZmlsZSksXFxuaW5jbHVkZS9saW51eC9mcy5oLTI3MTctXFx0XFx0XFx0XFx0ZmlsZV9pbm9kZShmaWxlKSwgbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjcxOT1zdGF0aWMgaW5saW5lIGludCBwYXRoX3Blcm1pc3Npb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNzIwLXtcXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjcyMTpcXHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihtbnRfaWRtYXAocGF0aC1cXHUwMDNlbW50KSxcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjcyMi1cXHRcXHRcXHRcXHRkX2lub2RlKHBhdGgtXFx1MDAzZWRlbnRyeSksIG1hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg9MTQwPUxTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0xNDEtXFx0IGJvb2wgcmN1KVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjE0MjpMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTE0My1cXHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDI1PWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyNi1cXHRcXHRcXHQgICAgICAgYm9vbCByY3UpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Mjc6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyOC1cXHRcXHRcXHQgICAgICBpbnQgbWFzayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9OTc5PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05ODUtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjk4NjpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05ODctXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbi0tXFxuaXBjL21xdWV1ZS5jPTg2MD1zdGF0aWMgaW50IHByZXBhcmVfb3BlbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvZmxhZywgaW50IHJvLFxcbi0tXFxuaXBjL21xdWV1ZS5jLTg4My1cXHRhY2MgPSBvZmxhZzJhY2Nbb2ZsYWcgXFx1MDAyNiBPX0FDQ01PREVdO1xcbmlwYy9tcXVldWUuYzo4ODQ6XFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfaW5vZGUoZGVudHJ5KSwgYWNjKTtcXG5pcGMvbXF1ZXVlLmMtODg1LX1cXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYz02MTE9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqX19nZXRfcHJvZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGJwZl9wcm9nX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvaW5vZGUuYy02MTMtXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbmtlcm5lbC9icGYvaW5vZGUuYzo2MTQ6XFx0aW50IHJldCA9IGlub2RlX3Blcm1pc3Npb24oXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGlub2RlLCBNQVlfUkVBRCk7XFxua2VybmVsL2JwZi9pbm9kZS5jLTYxNS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz01NDEwPXN0YXRpYyBpbnQgY2dyb3VwX21heV93cml0ZShjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy01NDIwLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6NTQyMTpcXHRyZXQgPSBpbm9kZV9wZXJtaXNzaW9uKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTUFZX1dSSVRFKTtcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTU0MjItXFx0aXB1dChpbm9kZSk7XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ2LVxcdFxcdFxcdCAgICAgIGludCBtYXNrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMyMjM9c3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTIwMz1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzctICovXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTIzODpzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTIzOS1cXHRcXHRcXHRcXHQgIGludCBtYXNrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jPTE2MD1TRUMoXFxcImxzbS9pbm9kZV9wZXJtaXNzaW9uXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmM6MTYxOmludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYy0xNjItXFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDg6NTkuMTg3MzgwMzk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MDc0MjczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgSURNQVAgU3RydWN0dXJlIGluIExTTSBIb29rcyoqXG5cbk9rYXksIGhlcmUncyB0aGUgc2l0dWF0aW9uOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVjZW50IGNoYW5nZXMgaW1wYWN0IHRoZSBzZWN1cml0eSBtb2R1bGUgaW1wbGVtZW50YXRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgdXBkYXRlcyB0byB0aGUgTFNNIGhvb2tzLiBUaGUgY29yZSBob29rcyBJJ20gbG9va2luZyBhdCBhcmUgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLCBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGFuZCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYmVpbmcgcGFzc2VkIGRvd24gZnJvbSB0aGUgVkZTLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgZGlyZWN0bHkgYWZmZWN0cyBob3cgd2UgaGFuZGxlIGlkZW50aXR5IG1hcHBpbmcgd2l0aGluIHRoZSBMU00uXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB0aGUgZmFjdCB0aGF0IEJQRiBMU00gaG9va3MgKmFsc28qIGhhdmUgYWNjZXNzIHRvIHRoaXMgYGlkbWFwYCBpcyBjcnVjaWFsLiBUaGlzIGlzIGEgZ2FtZSBjaGFuZ2VyIGZvciBCUEYtYmFzZWQgc2VjdXJpdHkgcG9saWNpZXMuIEJQRiBhbHJlYWR5IGdpdmVzIHVzIGZpbmUtZ3JhaW5lZCBjb250cm9sLCBidXQgaGF2aW5nIHRoZSBJRCBtYXAgYXZhaWxhYmxlIG9wZW5zIHVwIGV2ZW4gbW9yZSBwb3NzaWJpbGl0aWVzIGZvciBjb250ZXh0LWF3YXJlIHNlY3VyaXR5IGVuZm9yY2VtZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5hbWVzcGFjZWQgZmlsZSBzeXN0ZW1zIGFuZCB1c2VyIElEIG1hcHBpbmcgc2NlbmFyaW9zLlxuXG5Tbywgd2hlcmUgZG8gSSBnbyBmcm9tIGhlcmU/IFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYHNlY3VyaXR5L0tjb25maWdgIGFuZCBgZnMvS2NvbmZpZ2AgdG8gc2VlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZXNlIGZlYXR1cmVzIGFuZCBlbnN1cmUgSSdtIGF3YXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb24gZGlmZmVyZW50IHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpZG1hcGAgaW50ZWdyYXRpb24gY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBpdCB3aWxsIGltcGFjdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kdWxlcy4gVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIG5ldyBhdHRhY2sgc3VyZmFjZXMsIGFuZCBJJ2xsIG5lZWQgdG8gZG8gc29tZSBmb2N1c2VkIHJlc2VhcmNoIHRvIHVuZGVyc3RhbmQgaG93IGJlc3QgdG8gYXBwcm9hY2ggdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MDMuNTc4MTI1NDk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc4NDY4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05My1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjA1LjI4NTk3NzMwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMTUwMDc5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgOTIuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgc2V0IHVwIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGFyZWFzIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uIHdpdGhpbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MDguNTAwOTg4NDM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHQgIHN0aWxsIHJlZW5hYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMCBsYXRlciBvbiwgb3IgcGVybWFuZW50bHlcXG4gIDgxOlxcdFxcdCAgZGlzYWJsZSBpdCBieSBzZXR0aW5nIGl0IHRvIDEgKGZyb20gd2hpY2ggbm8gb3RoZXIgdHJhbnNpdGlvbiB0b1xcbiAgODI6XFx0XFx0ICAwIGlzIHBvc3NpYmxlIGFueW1vcmUpLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIFVucHJpdmlsZWdlZCBCUEYgY291bGQgYmUgdXNlZCB0byBleHBsb2l0IGNlcnRhaW4gcG90ZW50aWFsXFxuICA4NTpcXHRcXHQgIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBzaWRlLWNoYW5uZWwgdnVsbmVyYWJpbGl0aWVzIG9uIHVubWl0aWdhdGVkXFxuICA4NjpcXHRcXHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxcbiAgODc6XFx0XFxuICA4ODpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIFkuXFxuICA4OTpcXHRcXG4gIDkwOlxcdHNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxuICA5MTpcXHRcXG4gIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOTowOC41MDExNjk2ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTI5MTM4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgTFNNIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjdXJyZW50IExpbnV4IFNlY3VyaXR5IE1vZHVsZXMgKExTTSkgY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBgc2VjdXJpdHkvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBMU00gc2V0dGluZ3MgcmVzaWRlLCByaWdodD8gSSBleHBlY3QgdG8gZmluZCB0aGUgdXN1YWwgc3VzcGVjdHMgZGVmaW5lZCBpbiB0aGVyZS4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIExTTSBjb25maWd1cmF0aW9uczogdGhlIG1hc3RlciBgU0VDVVJJVFlgIHN3aXRjaCwgb2YgY291cnNlLiBUaGVuLCBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBzcGVjaWZpY3MuIEknbGwgZXhwZWN0IHRvIHNlZSBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCB3aGF0ZXZlciBlbHNlIGlzIGJlaW5nIHN1cHBvcnRlZCBvciBjb25zaWRlcmVkIGZvciB0aGlzIGtlcm5lbCBidWlsZC4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjaXNpb25zIHJlZ2FyZGluZyB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGlzIGtlcm5lbCBhcmUgdWx0aW1hdGVseSBtYWRlLCBhbmQgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHdlIHN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDExOSwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MTMuMDMwMzEzMDM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0ODA5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9LY29uZmlnPTg9c291cmNlIFxcXCJzZWN1cml0eS9rZXlzL0tjb25maWdcXFwiXFxuc2VjdXJpdHkvS2NvbmZpZy05LVxcbnNlY3VyaXR5L0tjb25maWc6MTA6Y29uZmlnIFNFQ1VSSVRZX0RNRVNHX1JFU1RSSUNUXFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJSZXN0cmljdCB1bnByaXZpbGVnZWQgYWNjZXNzIHRvIHRoZSBrZXJuZWwgc3lzbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz01Mj1jb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTcyLVxcbnNlY3VyaXR5L0tjb25maWc6NzM6Y29uZmlnIFNFQ1VSSVRZXFxuc2VjdXJpdHkvS2NvbmZpZy03NC1cXHRib29sIFxcXCJFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9ODY9Y29uZmlnIEhBU19TRUNVUklUWV9BVURJVFxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy05MC1cXG5zZWN1cml0eS9LY29uZmlnOjkxOmNvbmZpZyBTRUNVUklUWUZTXFxuc2VjdXJpdHkvS2NvbmZpZy05Mi1cXHRib29sIFxcXCJFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctOTgtXFxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xcbnNlY3VyaXR5L0tjb25maWctMTAwLVxcdGJvb2wgXFxcIlNvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTA3LVxcbnNlY3VyaXR5L0tjb25maWc6MTA4OmNvbmZpZyBTRUNVUklUWV9JTkZJTklCQU5EXFxuc2VjdXJpdHkvS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiSW5maW5pYmFuZCBTZWN1cml0eSBIb29rc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTE2LVxcbnNlY3VyaXR5L0tjb25maWc6MTE3OmNvbmZpZyBTRUNVUklUWV9ORVRXT1JLX1hGUk1cXG5zZWN1cml0eS9LY29uZmlnLTExOC1cXHRib29sIFxcXCJYRlJNIChJUFNlYykgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMTI5LVxcbnNlY3VyaXR5L0tjb25maWc6MTMwOmNvbmZpZyBTRUNVUklUWV9QQVRIXFxuc2VjdXJpdHkvS2NvbmZpZy0xMzEtXFx0Ym9vbCBcXFwiU2VjdXJpdHkgaG9va3MgZm9yIHBhdGhuYW1lIGJhc2VkIGFjY2VzcyBjb250cm9sXFxcIlxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZz0yNjg9Y29uZmlnIExTTVxcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy0yODQtXFxuc2VjdXJpdHkvS2NvbmZpZzoyODU6Y29uZmlnIFNFQ1VSSVRZX0NPTU1PTkNBUF9LVU5JVF9URVNUXFxuc2VjdXJpdHkvS2NvbmZpZy0yODYtXFx0Ym9vbCBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIGNvbW1vbmNhcFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiQXBwQXJtb3Igc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWcgY29kZVxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXFx0Ym9vbCBcXFwiQnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1xcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzozODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfTUVTU0FHRVNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRlYnVnIG1lc3NhZ2VzIGVuYWJsZWQgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDYtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo0Nzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSU5UUk9TUEVDVF9QT0xJQ1lcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkFsbG93IGxvYWRlZCBwb2xpY3kgdG8gYmUgaW50cm9zcGVjdGVkXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy01OC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cXHRib29sIFxcXCJFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcwLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzE6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hfREVGQVVMVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzItICAgICAgIGJvb2wgXFxcIkVuYWJsZSBwb2xpY3kgaGFzaCBpbnRyb3NwZWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6ODQ6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIkFsbG93IGV4cG9ydGluZyB0aGUgcmF3IGJpbmFyeSBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6OTY6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0NPTVBSRVNTRURfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJBbGxvdyBsb2FkaW5nIHBvbGljeSBpbiBhIGNvbXByZXNzZWQgZm9ybWF0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDctXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX1BBUkFOT0lEX0xPQURcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTExOC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjExOTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTIwLVxcdHRyaXN0YXRlIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjY6bWVudWNvbmZpZyBTRUNVUklUWV9JUEVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkludGVncml0eSBQb2xpY3kgRW5mb3JjZW1lbnQgKElQRSlcXFwiXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZz05OD1lbmRtZW51XFxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXFxuc2VjdXJpdHkvaXBlL0tjb25maWc6MTAwOmNvbmZpZyBTRUNVUklUWV9JUEVfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgSVBFXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cXHRib29sIFxcXCJMYW5kbG9jayBzdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yMy1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19MT0dcXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVxcdGJvb2xcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjgtXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiS1VuaXQgdGVzdHMgZm9yIExhbmRsb2NrXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfTE9BRFBJTlxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlBpbiBsb2FkIG9mIGtlcm5lbCBmaWxlcyAobW9kdWxlcywgZncsIGV0YykgdG8gb25lIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTMtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjE0OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX0VORk9SQ0VcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRW5mb3JjZSBMb2FkUGluIGF0IGJvb3RcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjQtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjI1OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX1ZFUklUWVxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNi1cXHRib29sIFxcXCJBbGxvdyByZWFkaW5nIGZpbGVzIGZyb20gY2VydGFpbiBvdGhlciBmaWxlc3lzdGVtcyB0aGF0IHVzZSBkbS12ZXJpdHlcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnOjE6Y29uZmlnIFNFQ1VSSVRZX0xPQ0tET1dOX0xTTVxcbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMi1cXHRib29sIFxcXCJCYXNpYyBtb2R1bGUgZm9yIGVuZm9yY2luZyBrZXJuZWwgbG9ja2Rvd25cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTgtXFxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzo5OmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01fRUFSTFlcXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTEwLVxcdGJvb2wgXFxcIkVuYWJsZSBsb2NrZG93biBMU00gZWFybHkgaW4gaW5pdFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0FGRVNFVElEXFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWctMy0gICAgICAgIGJvb2wgXFxcIkdhdGUgc2V0aWQgdHJhbnNpdGlvbnMgdG8gbGltaXQgQ0FQX1NFVHtVL0d9SUQgY2FwYWJpbGl0aWVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMy1cXHRib29sIFxcXCJTRUxpbnV4IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjEyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTRUxpbnV4IGJvb3QgcGFyYW1ldGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI1LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlNFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQ5OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXFx0aW50IFxcXCJTRUxpbnV4IHNpZHRhYiBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02MC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVxcdGludCBcXFwiU0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03My1cXHRpbnQgXFxcIlNFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4Mzpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTRUxpbnV4IGtlcm5lbCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNy1cXHRib29sIFxcXCJSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MzQ6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUlxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiUGFja2V0IG1hcmtpbmcgdXNpbmcgc2VjbWFya3MgZm9yIG5ldGZpbHRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDQtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlRyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9UT01PWU9cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlRPTU9ZTyBMaW51eCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19NQVhfQUNDRVBUX0VOVFJZXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTctXFx0aW50IFxcXCJEZWZhdWx0IG1heGltYWwgY291bnQgZm9yIGxlYXJuaW5nIG1vZGVcXFwiXFxuLS1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0yOC1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJVF9MT0dcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zMC1cXHRpbnQgXFxcIkRlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgYXVkaXQgbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMzktXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVJcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJBY3RpdmF0ZSB3aXRob3V0IGNhbGxpbmcgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXIuXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19QT0xJQ1lfTE9BREVSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTctXFx0c3RyaW5nIFxcXCJMb2NhdGlvbiBvZiB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTY1LVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjY2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fQUNUSVZBVElPTl9UUklHR0VSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjctXFx0c3RyaW5nIFxcXCJUcmlnZ2VyIGZvciBjYWxsaW5nIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzYtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Nzc6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19JTlNFQ1VSRV9CVUlMVElOX1NFVFRJTkdcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy03OC1cXHRib29sIFxcXCJVc2UgaW5zZWN1cmUgYnVpbHQtaW4gc2V0dGluZ3MgZm9yIGZ1enppbmcgdGVzdHMuXFxcIlxcbi0tXFxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkveWFtYS9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1lBTUFcXG5zZWN1cml0eS95YW1hL0tjb25maWctMy1cXHRib29sIFxcXCJZYW1hIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjE0LjYzNTEzMTgyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODEwNzEwNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgQ2FjaGVmaWxlcyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYGZzL2NhY2hlZmlsZXMvS2NvbmZpZ2Ag4oCTIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGNhY2hlZmlsZXMgZmlsZXN5c3RlbSBhcmUgZGVmaW5lZC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY29udHJvbGxhYmxlIGF0IGNvbXBpbGUgdGltZS4gV2hhdCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgbGlrZSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgb3IgbmFtZXNwYWNlIGNhcGFiaWxpdGllcz9cblxuSSdtIHRoaW5raW5nLCBcIkkgbmVlZCB0byBsb29rIGZvciB0aGUgY29yZSBmZWF0dXJlcyBmaXJzdC5cIiBXaGF0IGFyZSB0aGUgY3JpdGljYWwgYm9vbGVhbnMgdGhhdCBkaWN0YXRlIHdoZXRoZXIgdGhlIGNhY2hlZmlsZXMgY29kZSBpcyBldmVuICppbmNsdWRlZCogaW4gdGhlIGJ1aWxkPyBUaGVuLCBJIHNob3VsZCBzY2FuIGZvciBhbnkgZnVydGhlciBvcHRpb25zIHRoYXQgYWxsb3cgYSBmaW5lLWdyYWluZWQgdHVuaW5nIG9mIHRoZSBjYWNoZSdzIGJlaGF2aW9yLiBJIHdpbGwgcHJvYmFibHkgbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBjYXRjaCBteSBleWUsIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSB0dW5hYmxlcy4gTWF5YmUgc29tZSBvcHRpb25zIGZvciBkZWJ1Z2dpbmcgdGhhdCB3aWxsIGNvbWUgaW4gaGFuZHkuIEkga25vdyB0aGUgS2NvbmZpZyBzeW50YXggd2VsbCwgc28gSSdsbCBiZSBxdWlja2x5IGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogYGJvb2xgLCBgdHJpc3RhdGVgLCBgaW50YCwgYW5kIGBzdHJpbmdgIHR5cGVzLiBEZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBmaWxlIGlzIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzODksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOToxNy40NDU4NDYyMTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzgyODc3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBQ0hFRklMRVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY2FjaGVmaWxlcy9LY29uZmlnLTItXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjM6Y29uZmlnIENBQ0hFRklMRVNcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiRmlsZXN5c3RlbSBjYWNoaW5nIG9uIGZpbGVzXFxcIlxcbi0tXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTEzLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoxNDpjb25maWcgQ0FDSEVGSUxFU19ERUJVR1xcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJEZWJ1ZyBDYWNoZUZpbGVzXFxcIlxcbi0tXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTIyLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoyMzpjb25maWcgQ0FDSEVGSUxFU19FUlJPUl9JTkpFQ1RJT05cXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiUHJvdmlkZSBlcnJvciBpbmplY3Rpb24gZm9yIGNhY2hlZmlsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjE5LjE4NDE0MDg2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDg4MzI3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBgbW50X2lkbWFwYCBwYXJhbWV0ZXIgdG8gYSBidW5jaCBvZiBjcml0aWNhbCBzZWN1cml0eS1yZWxhdGVkIFZGUyBob29rczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLiBJdCdzIGFsc28gdXBkYXRpbmcgdGhlIFZGUyBjYWxsZXJzIGFuZCB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyB0aGVtc2VsdmVzLCBpbmNsdWRpbmcgQlBGIHNlbGZ0ZXN0cy5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgbW9kaWZpZXMgXCJyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCJcblxuWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBWRlMgZnVuY3Rpb25zIChgaW5vZGVfcGVybWlzc2lvbmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGV0Yy4pIGFuZCBMU00gaG9vayB3cmFwcGVycyAoYHNlY3VyaXR5X2lub2RlXypgKS4gVGhlc2UgYXJlIGVudHJ5IHBvaW50cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlci1zcGFjZSB2aWEgc3lzdGVtIGNhbGxzIGxpa2UgYG9wZW5gLCBgbWtkaXJgLCBhbmQgb3RoZXJzLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlICdGb2N1c1N5bWJvbHMnLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW5jbHVkZSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gV2Ugd2FudCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWVhbnMgd2Ugc2hvdWxkIGV4Y2x1ZGUgdGhpbmdzIGxpa2UgYGlub2RlX3Blcm1pc3Npb25gICh3aGljaCBpcyBwcmFjdGljYWxseSBjYWxsZWQgb24gZXZlcnkgZmlsZSBhY2Nlc3MpLiBTbyB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gIGJlY2F1c2UgdGhvc2UgYXJlIGNhbGxlZCBhdCBjcmVhdGlvbiB0aW1lLlxuXG5OZXh0LCB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBTRUNVUklUWWAgdG8gZW5hYmxlIHRoZSBzZWN1cml0eSBpbmZyYXN0cnVjdHVyZSBhbmQgTFNNIGhvb2tzLiAgYEJQRl9MU01gIGlzIGFsc28gcmVxdWlyZWQgYmVjYXVzZSBpdCBsZXZlcmFnZXMgdGhlIGBpZG1hcGAgYXJndW1lbnQsIGFuZCB0aGVuIGVpdGhlciBgU0VDVVJJVFlfU0VMSU5VWGAgb3IgYFNFQ1VSSVRZX1NNQUNLYCBmb3IgYSBwcmFjdGljYWwgTFNNLlxuXG5UaGUgYEJQRl9MU01gIGRlcGVuZGVuY3kgbmVlZHMgYEJQRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBgU0VDVVJJVFlgLCBgQlBGX0pJVGAuXG5cblNvLCB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYXJlIGBTRUNVUklUWWAsIGBCUEZfTFNNYCwgYW5kIGVpdGhlciBgU0VDVVJJVFlfU0VMSU5VWGAgb3IgYFNFQ1VSSVRZX1NNQUNLYC4gIExldCdzIGtlZXAgaXQgc2ltcGxlIGFuZCBqdXN0IGxpc3QgYFNFQ1VSSVRZYCwgYEJQRl9MU01gLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGFuZCBgU0VDVVJJVFlfU01BQ0tgLlxuXG5Ob3csIGZvciBgc2V0LXJlc3VsdHNgOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZSwgZGVmaW5pdGVseS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGV4dGVuZHMgVkZTIExTTSBob29rcyBhbmQgdGhlaXIgY2FsbGVycyB0byBwcm9wYWdhdGUgbW91bnQgaWRtYXBwaW5ncyAoYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCkuIFRoaXMgYWxsb3dzIHNlY3VyaXR5IG1vZHVsZXMgKGluY2x1ZGluZyBCUEYgTFNNLCBTRUxpbnV4LCBTbWFjaykgdG8gcGVyZm9ybSBwZXJtaXNzaW9ucyBjaGVja3MgYXdhcmUgb2YgaWRtYXBwZWQgbW91bnRzLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgc3Vic3lzdGVtIGludGVyZmFjZXMgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgU0VDVVJJVFlgLCBgQlBGX0xTTWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYC5cblxuVGhhdCBzaG91bGQgYmUgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODYxLCJPdXRwdXRUb2tlbnMiOjIwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDI6MDk6MjguMjcyNDcwNTc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzOTMyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJCUEZfTFNNXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQ0FDSEVGSUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBzZXZlcmFsIGlub2RlIExTTSBob29rcyAoc2VjdXJpdHlfaW5vZGVfY3JlYXRlLCBzZWN1cml0eV9pbm9kZV9saW5rLCBzZWN1cml0eV9pbm9kZV9zeW1saW5rLCBzZWN1cml0eV9pbm9kZV9ta2Rpciwgc2VjdXJpdHlfaW5vZGVfbWtub2QsIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24pIGFsb25nIHdpdGggVkZTIGNhbGxlcnMgdG8gcGFzcyBkb3duIG1vdW50IGlkbWFwcyAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApLiBUaGlzIGVuYWJsZXMgTFNNcyBhbmQgQlBGIExTTSBwcm9ncmFtcyB0byBpbnNwZWN0IGlkbWFwcGVkIG1vdW50cyBkdXJpbmcgZmlsZSBvcGVyYXRpb25zLCBhbHRlcmluZyByZWFjaGFibGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgc2V2ZXJhbCBpbm9kZSBMU00gaG9va3MgKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSwgc2VjdXJpdHlfaW5vZGVfbGluaywgc2VjdXJpdHlfaW5vZGVfc3ltbGluaywgc2VjdXJpdHlfaW5vZGVfbWtkaXIsIHNlY3VyaXR5X2lub2RlX21rbm9kLCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKSBhbG9uZyB3aXRoIFZGUyBjYWxsZXJzIHRvIHBhc3MgZG93biBtb3VudCBpZG1hcHMgKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKS4gVGhpcyBlbmFibGVzIExTTXMgYW5kIEJQRiBMU00gcHJvZ3JhbXMgdG8gaW5zcGVjdCBpZG1hcHBlZCBtb3VudHMgZHVyaW5nIGZpbGUgb3BlcmF0aW9ucywgYWx0ZXJpbmcgcmVhY2hhYmxlIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBzdWJzeXN0ZW0gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjI4LjM1NDg3NzQwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjYzMjQ1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOToyOC4zNTU0NzQ0NTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTU2NTcwMjY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBzZXZlcmFsIGlub2RlLXJlbGF0ZWQgTFNNIGhvb2tzIChgaW5vZGVfY3JlYXRlYCwgYGlub2RlX2xpbmtgLCBgaW5vZGVfc3ltbGlua2AsIGBpbm9kZV9ta2RpcmAsIGBpbm9kZV9ta25vZGAsIGFuZCBgaW5vZGVfcGVybWlzc2lvbmApIGFuZCB0aGVpciB3cmFwcGVycyBieSBwYXNzaW5nIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAuIEl0IGFsc28gdXBkYXRlcyBTRUxpbnV4IGFuZCBTbWFjayBpbXBsZW1lbnRhdGlvbnMgYW5kIGFkZHMgQlBGIExTTSBzZWxmdGVzdHMgZm9yIGlkbWFwcGVkIG1vdW50cy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHBhcmFtZXRlciBwbHVtYmluZyB1cGRhdGUgYWNyb3NzIFZGUyBhbmQgTFNNIGludGVyZmFjZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3Igc3RhY2svaGVhcCBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkIGluIHRoZSBrZXJuZWwsIGFuZCBubyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGFjY2Vzc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgdmFsaWRpdHkgb3IgZGVyZWZlcmVuY2luZyBhcmUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGRldGVjdGVkIGJ5IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5YzI4MjE4YjJkNWU1N2Q3NzJhNjgyZTAyYTU4N2JmYTM0NzBiNDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAyOjA4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG4rKysgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbkBAIC01MSwxNCArNTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4rXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRwcl9lcnIoXCJTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXCIsXG4gXHRcdCAgICAgICByZXQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4rXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDIwYTY1MzRlYTNlZmYuLjk5Zjg5NGYzZjdlMTMgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4rKysgYi9mcy9uYW1laS5jXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKHVubGlrZWx5KHJldHZhbCkpXG4gXHRcdHJldHVybiByZXR2YWw7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XG4rXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuIFxuQEAgLTY5NSw3ICs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZFxuIFx0aWYgKHVubGlrZWx5KCgoaW5vZGUtXHUwMDNlaV9tb2RlIFx1MDAyNiAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpXG4gXHRcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XG4rXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbkBAIC00MTg4LDcgKzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1x0Lyogc2hvdWxkbid0IGl0IGJlIEVOT1NZUz8gKi9cbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbkBAIC00MjEyLDcgKzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFxuIFx0bW9kZSBcdTAwMjY9IFNfSUFMTFVHTztcbiBcdG1vZGUgfD0gU19JRlJFRztcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0ZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTtcbkBAIC00MzI4LDcgKzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTUyNTgsNyArNTI1OCw3IEBAIGludCB2ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01Mzk1LDcgKzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gZXJyO1xuIFxuQEAgLTU3ODMsNyArNTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWRpci1cdTAwM2VpX29wLVx1MDAzZXN5bWxpbmspXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01OTA3LDcgKzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5pbmRleCA2NWM5NjA5ZWMyMDc3Li45ZTQ5YTViYzlmZjNjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG5AQCAtMTIwLDI2ICsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBpbnQgKnhhdHRyX2NvdW50KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4gTFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBpbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0IHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfdW5saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IHVtb2RlX3QgbW9kZSlcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9yZWFkbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfZm9sbG93X2xpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBib29sIHJjdSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC00MDQsMjQgKzQwNCwyOCBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgICAgIGJvb2wgcmN1KTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7XG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0ICAgICAgaW50IG1hc2spO1xuIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTtcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuQEAgLTkwMiw5ICs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgdW1vZGVfdCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0c3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MTMsOSArOTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZFxuIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4geyB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkyNiwxNiArOTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgIGludCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NDYsOSArOTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlLCBkZXZfdCBkZXYpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0ICAgICAgIGludCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk3NCw3ICs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5pbmRleCAyZWUyNzZhYjE1YzViLi5hOTE5MGRhMzM0MWRkIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuQEAgLTE2MTQsNiArMTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxuQEAgLTE2MjIsMTIgKzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9jcmVhdGUpO1xuIFxuQEAgLTE2NDgsNiArMTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXG5AQCAtMTY1NiwxMiArMTY1OCwxMiBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0c3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbGluaywgaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4gfVxuIFxuIC8qKlxuQEAgLTE2ODIsNiArMTY4NCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9zeW1saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmsgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXG5AQCAtMTY5MCwxNiArMTY5MywxNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4gfVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rZGlyKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIG5ldyBkaXJlY3RvcnkgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnlcbiAgKiBAbW9kZTogbmV3IGRpcmVjdG9yeSBtb2RlXG5AQCAtMTcwOSwxMSArMTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XG4gXG5AQCAtMTczNSw2ICsxNzQwLDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtub2QoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3BlY2lhbCBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAZGVudHJ5OiBuZXcgZmlsZVxuICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlXG5AQCAtMTc0NywxMiArMTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4raW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIH1cbiBcbiAvKipcbkBAIC0xODIzLDYgKzE4MjksNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSAtIENoZWNrIGlmIGFjY2Vzc2luZyBhbiBpbm9kZSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IGlub2RlXG4gICogQG1hc2s6IGFjY2VzcyBtYXNrXG4gICpcbkBAIC0xODM1LDExICsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4raW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0ICAgICAgaW50IG1hc2spXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpbm9kZSwgbWFzayk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTMwNzQsMTIgKzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCAgICBcdTAwMjZhZCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7XG4gfVxuQEAgLTMwODksMTIgKzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19MTktfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0RJUik7XG4gfVxuQEAgLTMxMDQsNyArMzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfUk1ESVIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGVfbW9kZV90b19zZWN1cml0eV9jbGFzcyhtb2RlKSk7XG4gfVxuQEAgLTMyMzYsMTMgKzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcbiBcbiAvKipcbiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGVcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXG4gICpcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuIHtcbiBcdGludCBtYXNrO1xuIFx0dTMyIHBlcm1zO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcbkBAIC0xMDg5LDE0ICsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQG9sZF9kZW50cnk6IHRoZSBleGlzdGluZyBvYmplY3RcbiAgKiBAZGlyOiB1bnVzZWRcbiAgKiBAbmV3X2RlbnRyeTogdGhlIG5ldyBvYmplY3RcbiAgKlxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuICAqL1xuLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuQEAgLTEyMjYsNiArMTIyNyw3IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb25cbiAgKiBAbWFzazogdGhlIGFjY2VzcyByZXF1ZXN0ZWRcbiAgKlxuQEAgLTEyMzMsNyArMTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgaW50IG1hc2spXG4ge1xuIFx0c3RydWN0IHN1cGVyYmxvY2tfc21hY2sgKnNic3AgPSBzbWFja19zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5pbmRleCBkNzQ5NWVmZDRhNTYyLi5jMGFlODEzNjk4YWUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xuQEAgLTEsMTggKzEsMzAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiBcbiAvKlxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJsc20uc2tlbC5oXCJcbiAjaW5jbHVkZSBcImxzbV90YWlsY2FsbC5za2VsLmhcIlxuIFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XCJ0cnVlXCIsIE5VTEx9O1xuIFxuK2VudW0ge1xuK1x0SU5PREVfSURNQVBfQUxMID0gKDFVIFx1MDAzY1x1MDAzYyA2KSAtIDEsXG4rfTtcbitcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIHtcbiBcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcbkBAIC0zMCw2ICs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCB3cml0ZV9ub2ludHIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdGRvIHtcbitcdFx0cmV0ID0gd3JpdGUoZmQsIGJ1ZiwgY291bnQpO1xuK1x0fSB3aGlsZSAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpXG4re1xuK1x0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vID0gMDtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRlbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pXG4rXHRcdHNhdmVkX2Vycm5vID0gRUlPO1xuK1x0Y2xvc2UoZmQpO1xuK1x0aWYgKHNhdmVkX2Vycm5vKSB7XG4rXHRcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXG4re1xuK1x0Y2hhciBwYXRoWzY0XTtcbitcdGludCBsZW47XG4rXG4rXHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2MvJWQvJXNcIiwgcGlkLCBuYW1lKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcbitcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpXG4re1xuK1x0Y2hhciBwYXRoWzY0XTtcbitcdHBpZF90IHBpZCwgd2FpdGVkO1xuK1x0aW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1cztcbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmIChwaWQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSlcbitcdFx0XHRfZXhpdCgxKTtcbitcdFx0cmFpc2UoU0lHU1RPUCk7XG4rXHRcdF9leGl0KDApO1xuK1x0fVxuK1xuK1x0ZG8ge1xuK1x0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xuK1x0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4rXHRpZiAod2FpdGVkICE9IHBpZClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkge1xuK1x0XHRwaWQgPSAtMTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xuK1x0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJzZXRncm91cHNcIiwgXCJkZW55XCIpIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFTk9FTlQpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJ1aWRfbWFwXCIsIFwiMCAwIDFcIikgfHxcbitcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFwiZ2lkX21hcFwiLCBcIjAgMCAxXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC9ucy91c2VyXCIsIHBpZCk7XG4rXHRpZiAobGVuIFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XG4rXHRcdGVycm5vID0gRU9WRVJGTE9XO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChwaWQgXHUwMDNlIDApIHtcbitcdFx0a2lsbChwaWQsIFNJR0tJTEwpO1xuK1x0XHRkbyB7XG4rXHRcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xuK1x0XHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdH1cbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX2lkbWFwcGVkX3RtcGZzKHZvaWQpXG4re1xuK1x0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcbitcdFx0LmF0dHJfc2V0ID0gTU9VTlRfQVRUUl9JRE1BUCxcbitcdH07XG4rXHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XG4rXG4rXHR1c2VybnNfZmQgPSBjcmVhdGVfdXNlcm5zX2ZkKCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXG4rXHRmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgXCJ0bXBmc1wiLCBGU09QRU5fQ0xPRVhFQyk7XG4rXHRpZiAoZnNmZCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xuK1x0aWYgKG1udGZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkO1xuK1x0aWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgXCJcIiwgQVRfRU1QVFlfUEFUSCwgXHUwMDI2YXR0cixcbitcdFx0ICAgIHNpemVvZihhdHRyKSkpIHtcbitcdFx0Y2xvc2UobW50ZmQpO1xuK1x0XHRtbnRmZCA9IC0xO1xuK1x0fVxuK1xuK291dDpcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRpZiAoZnNmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGZzZmQpO1xuK1x0aWYgKHVzZXJuc19mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKHVzZXJuc19mZCk7XG4rXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuK1x0cmV0dXJuIG1udGZkO1xuK31cbitcbitzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZClcbit7XG4rXHRpbnQgZmQgPSAtMSwgcmV0ID0gLTE7XG4rXG4rXHRmZCA9IG9wZW5hdChkaXJmZCwgXCJmaWxlXCIsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQyxcbitcdFx0ICAgIDA2MDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFwiY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGNsb3NlKGZkKTtcbitcdGZkID0gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhta2RpcmF0KGRpcmZkLCBcImRpclwiLCAwNzAwKSwgXCJta2RpclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoXCJ0YXJnZXRcIiwgZGlyZmQsIFwic3ltbGlua1wiKSwgXCJzeW1saW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGxpbmthdChkaXJmZCwgXCJmaWxlXCIsIGRpcmZkLCBcImxpbmtcIiwgMCksIFwibGlua1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXCJmaWZvXCIsIDA2MDApLCBcIm1rbm9kXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IDA7XG4rb3V0OlxuK1x0aWYgKGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZmQpO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwibGlua1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImZpZm9cIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJzeW1saW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlsZVwiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcImRpclwiLCBBVF9SRU1PVkVESVIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKVxuK3tcbitcdGNoYXIgdG1wZGlyW10gPSBcIi92YXIvdG1wL3Rlc3RfbHNtX2lkbWFwLlhYWFhYWFwiO1xuK1x0X191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7XG4rXHRpbnQgZGlyZmQgPSAtMSwgaWRtYXBwZWRfZGlyZmQgPSAtMTtcbitcdGludCByZXQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksIFwibWtkdGVtcFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0ZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoIUFTU0VSVF9HRShkaXJmZCwgMCwgXCJvcGVuX3RtcGRpclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZG1hcHBlZF9kaXJmZCA9IGNyZWF0ZV9pZG1hcHBlZF90bXBmcygpO1xuK1x0aWYgKCFBU1NFUlRfR0UoaWRtYXBwZWRfZGlyZmQsIDAsIFwiY3JlYXRlX2lkbWFwcGVkX3RtcGZzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksIFwiaWRlbnRpdHlfaWRtYXBcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLFxuK1x0XHQgICAgICAgXCJpZG1hcHBlZF9tb3VudFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCxcbitcdFx0ICAgICAgIFwiaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlblwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRyZXQgPSBBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsXG4rXHRcdFx0XCJpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXCIpID8gMCA6IC0xO1xuK1xuK291dDpcbitcdGlmIChpZG1hcHBlZF9kaXJmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGlkbWFwcGVkX2RpcmZkKTtcbitcdGlmIChkaXJmZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGRpcmZkKTtcbitcdHJtZGlyKHRtcGRpcik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4ge1xuIFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuQEAgLTUzLDYgKzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4gXG4rXHRlcnIgPSB0ZXN0X2xzbV9pbm9kZV9pZG1hcChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0ZXN0X2xzbV9pbm9kZV9pZG1hcFwiKSlcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XG4gXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcInN0YWNrX21wcm90ZWN0XCIpIHx8XG4gXHQgICAgIUFTU0VSVF9FUShlcnJubywgRVBFUk0sIFwic3RhY2tfbXByb3RlY3RcIikpXG5AQCAtNzEsNiArMzAwLDggQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV90ZXN0ID0gMDtcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fY291bnQgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbXByb3RlY3RfY291bnQgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuQEAgLTg0LDYgKzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcbiBpbnQgYnBybV9jb3VudCA9IDA7XG4rX191MzIgaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rX191MzIgaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4rXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9DUkVBVEVcdD0gMVUgXHUwMDNjXHUwMDNjIDAsXG4rXHRJTk9ERV9JRE1BUF9MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAxLFxuK1x0SU5PREVfSURNQVBfU1lNTElOS1x0PSAxVSBcdTAwM2NcdTAwM2MgMixcbitcdElOT0RFX0lETUFQX01LRElSXHQ9IDFVIFx1MDAzY1x1MDAzYyAzLFxuK1x0SU5PREVfSURNQVBfTUtOT0RcdD0gMVUgXHUwMDNjXHUwMDNjIDQsXG4rXHRJTk9ERV9JRE1BUF9QRVJNSVNTSU9OXHQ9IDFVIFx1MDAzY1x1MDAzYyA1LFxuK307XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX21vbml0b3JlZF9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXG4rXHRyZXR1cm4gbW9uaXRvcmVkX3BpZCA9PSBwaWQgXHUwMDI2XHUwMDI2IGlkbWFwO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4re1xuK1x0cmV0dXJuIGlkbWFwLVx1MDAzZXVpZF9tYXAubnJfZXh0ZW50cyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIGlkbWFwLVx1MDAzZWdpZF9tYXAubnJfZXh0ZW50cyA9PSAwO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByZWNvcmRfaW5vZGVfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXG4re1xuK1x0aWYgKHJldCB8fCAhaXNfbW9uaXRvcmVkX2lkbWFwKGlkbWFwKSlcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpXG4rXHRcdGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vaztcbitcdGVsc2VcbitcdFx0aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiB8PSBob29rO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9jcmVhdGVcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfQ1JFQVRFLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbGlua1wiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfc3ltbGlua1wiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtkaXJcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX21rbm9kXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX3Blcm1pc3Npb25cIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpXG4re1xuK1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcbit9XG4gXG4gU0VDKFwibHNtL2ZpbGVfbXByb3RlY3RcIilcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOToyOC4zNTU0NzU3NjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MDQxMDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBMU00gSG9vayBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgY29tbWl0IG1lc3NhZ2Ugc2ltcGx5IGluZGljYXRlcyBpdCdzIGEgcGF0Y2ggdW5kZXIgcmV2aWV3IHJlbGF0ZWQgdG8gc3l6LWNsdXN0ZXIuIEknbSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBmZXcgY29yZSBhcmVhczogYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYSBjb3VwbGUgb2YgaW5jbHVkZSBmaWxlcyAoYGxpbnV4L2xzbV9ob29rX2RlZnMuaGAgYW5kIGBsaW51eC9zZWN1cml0eS5oYCksIGFuZCB0aGUgYHNlY3VyaXR5YCBkaXJlY3RvcnkgaXRzZWxmIHdpdGggYHNlY3VyaXR5LmNgLCBgc2VsaW51eC9ob29rcy5jYCwgYW5kIGBzbWFjay9zbWFja19sc20uY2AuICBJJ20gYWxzbyBzZWVpbmcgYSBjaGFuZ2UgaW4gdGhlIGJwZiBzZWxmdGVzdHMuXG5cbldoYXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHBhc3NpbmcgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGRvd24gaW50byBhIGhhbmRmdWwgb2YgTFNNIGhvb2tzLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIGFjY2VwdCB0aGUgYGlkbWFwYDogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLlxuXG5UYWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wYWN0ZWQgTFNNIGltcGxlbWVudGF0aW9ucywgSSBzZWUgYSBwYXR0ZXJuLiAgU0VMaW51WCAoYHNlbGludXhfaW5vZGVfLi4uYCkgYW5kIFNtYWNrIChgc21hY2tfaW5vZGVfLi4uYCkgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2ltcGx5IGFjY2VwdCB0aGUgbmV3IGBpZG1hcGAgcGFyYW1ldGVyIHRvIG1hdGNoIHRoZSBmdW5jdGlvbiBwcm90b3R5cGU7IGl0J3MgYSBzdHJhaWdodC1mb3J3YXJkIGFkZGl0aW9uIHRvIHRoZWlyIHNpZ25hdHVyZXMuICBJbiBgZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jYCwgaXQncyBwYXNzaW5nIGBcdTAwMjZub3BfbW50X2lkbWFwYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBmcy9uYW1laS5jYCBzZWVtcyB0byBiZSBwYXNzaW5nIGVpdGhlciB0aGUgYGlkbWFwYCBvciBgXHUwMDI2bm9wX21udF9pZG1hcGAgYXMgd2VsbC4gVGhlIGJwZiBzZWxmdGVzdHMgYXJlIGFsc28gYmVpbmcgdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBob29rIHNpZ25hdHVyZXMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IExTTSBpbXBsZW1lbnRhdGlvbnMgYWZmZWN0ZWQgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQgbWUgcXVpY2tseSBydW4gYSBgZ3JlcGAgdG8gZW5zdXJlIG5vIG90aGVyIExTTSBob29rcyBvciBjYWxsZXJzIGFyZSBsdXJraW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZC4gV2UgbmVlZCB0byBiZSBleGhhdXN0aXZlIGhlcmUgdG8gZW5zdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOTozMi43NDU4OTIyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDU1OTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jPTQ5PXN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jLTYwLVxcbmZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYzo2MTpcXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jLTYyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvbmFtZWkuYz00MTc3PWludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNDE5MC1cXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbmZzL25hbWVpLmM6NDE5MTpcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbmZzL25hbWVpLmMtNDE5Mi1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9uYW1laS5jPTQyMDQ9aW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNDIxNC1cXHRtb2RlIHw9IFNfSUZSRUc7XFxuZnMvbmFtZWkuYzo0MjE1OlxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuZnMvbmFtZWkuYy00MjE2LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL25hbWVpLmM9NDMxNT1zdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL25hbWVpLmMtNDMzMC1cXG5mcy9uYW1laS5jOjQzMzE6XFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuZnMvbmFtZWkuYy00MzMyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MDQ9aW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwNi1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDc6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQwOC1cXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD05MDI9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtOTA4LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo5MDk6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC05MTAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE2MDk9aW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE1LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTYxNjogKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjE3LSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MjUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYyNy1cXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjMyLX1cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2MzM6RVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjM0LjM0NjQ1OTkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjUyMDU5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgU2VjdXJpdHktRm9jdXNlZCBSZXZpZXcqKlxuXG5Pa2F5LCB0aW1lIHRvIG1ldGhvZGljYWxseSBkaWcgaW50byB0aGlzIHNlY3VyaXR5IGFzcGVjdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBoYW5kbGVzIGlub2RlIHBlcm1pc3Npb25zIGFuZCBjcmVhdGlvbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoZSBjb3JlIHNlY3VyaXR5IG1lY2hhbmlzbXMuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBhdWRpdCB0aGUgc3RhbmRhcmQgTFNNIGhvb2tzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZDogc3BlY2lmaWNhbGx5LCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYC4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQnV0IEkgYWxzbyBuZWVkIHRvIHRoaW5rIG1vcmUgYnJvYWRseS4gQXJlIHRoZXJlICphbnkqIG90aGVyIExTTSBpbXBsZW1lbnRhdGlvbnMgYWN0aXZlIG9uIHRoaXMgc3lzdGVtPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3Igb3ZlcmxhcHBpbmcgYmVoYXZpb3JzIGZyb20gdGhpbmdzIGxpa2UgQXBwQXJtb3IsIExhbmRsb2NrLCBUb21veW8sIG9yIGFueSBvdGhlciBjdXN0b20gTFNNcyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBkZXBsb3llZC4gVGhhdCdzIGNyaXRpY2FsLiBJJ20gZ29pbmcgdG8gc2VhcmNoIGFjcm9zcyB0aGUgb3RoZXIgTFNNcyBmb3IgcmVsZXZhbnQgaG9va3MsIGZvY3VzaW5nIG9uIGBpbm9kZV9wZXJtaXNzaW9uYCBvciBgaW5vZGVfY3JlYXRlYC4gRmluZGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZXNlIGltcGxlbWVudGF0aW9ucyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2VjdXJpdHkgcGljdHVyZSBoZXJlLiBJIGNhbid0IGFmZm9yZCB0byBtaXNzIGEgc2luZ2xlIGxheWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjM3LjA3MTY3MDA4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTU2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5vZGVfcGVybWlzc2lvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VjdXJpdHkuYz0xMjI1PXN0YXRpYyB2b2lkIGlub2RlX2ZyZWVfYnlfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0MS0gKiBzZWN1cml0eV9pbm9kZV9mcmVlKCksIEBpbm9kZSBtYXkgc3RpbGwgYmUgcmVmZXJlbmNlZCBpbiBhIFZGUyBwYXRoIHdhbGtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjEyNDI6ICogYW5kIGNhbGxzIHRvIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSBtYXkgYmUgbWFkZSBkdXJpbmcsIG9yIGFmdGVyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0My0gKiBhIGNhbGwgdG8gc2VjdXJpdHlfaW5vZGVfZnJlZSgpLiAgRm9yIHRoaXMgcmVhc29uIHRoZSBpbm9kZS1cXHUwMDNlaV9zZWN1cml0eVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0NC0gKiBmaWVsZCBpcyByZWxlYXNlZCB2aWEgYSBjYWxsX3JjdSgpIGNhbGxiYWNrIGFuZCBhbnkgTFNNcyB3aGljaCBuZWVkIHRvXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxMjQ1OiAqIHJldGFpbiBpbm9kZSBzdGF0ZSBmb3IgdXNlIGluIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oKSBzaG91bGQgb25seVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTI0Ni0gKiByZWxlYXNlIHRoYXQgc3RhdGUgaW4gdGhlIGlub2RlX2ZyZWVfc2VjdXJpdHlfcmN1KCkgTFNNIGhvb2sgY2FsbGJhY2suXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTgzMC0vKipcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4MzE6ICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4MzItICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0NC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ2LVxcdFxcdFxcdCAgICAgIGludCBtYXNrKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xODQ5LVxcdFxcdHJldHVybiAwO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTg1MDpcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg1MS19XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTI3Mjc9aW50IHNlY3VyaXR5X2ZpbGVfcmVjZWl2ZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczNi0gKiBTYXZlIG9wZW4tdGltZSBwZXJtaXNzaW9uIGNoZWNraW5nIHN0YXRlIGZvciBsYXRlciB1c2UgdXBvbiBmaWxlX3Blcm1pc3Npb24sXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNzM3OiAqIGFuZCByZWNoZWNrIGFjY2VzcyBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZCBzaW5jZSBpbm9kZV9wZXJtaXNzaW9uLlxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjczOC0gKlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMzA9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTQ2OnN0YXRpYyBub2lubGluZSBpbnQgYXVkaXRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTQ3LVxcdFxcdFxcdFxcdFxcdCAgIHUzMiBwZXJtcywgdTMyIGF1ZGl0ZWQsIHUzMiBkZW5pZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDItLyoqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyOTktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMzMDA6XFx0cmMyID0gYXVkaXRfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgcGVybXMsIGF1ZGl0ZWQsIGRlbmllZCwgcmMpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzAxLVxcdGlmIChyYzIpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDI2Mz1zdGF0aWMgaW50IHNlbGludXhfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODAtXFx0ICogU2luY2UgdGhlIGlub2RlIGxhYmVsIG9yIHBvbGljeSBzZXFubyBtYXkgaGF2ZSBjaGFuZ2VkXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQyODE6XFx0ICogYmV0d2VlbiB0aGUgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIGNoZWNrIGFuZCB0aGUgc2F2aW5nXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODItXFx0ICogb2Ygc3RhdGUgYWJvdmUsIHJlY2hlY2sgdGhhdCBhY2Nlc3MgaXMgc3RpbGwgcGVybWl0dGVkLlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfZm9sbG93X2xpbmssIHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxOS1cXHRMU01fSE9PS19JTklUKGlub2RlX3NldGF0dHIsIHNlbGludXhfaW5vZGVfc2V0YXR0ciksXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz0xMDIwPXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEwMzMtXFx0ICogVU5JWCBkb21haW4gc29ja2V0cyB1c2UgbG93ZXIgbGV2ZWwgc29ja2V0IGRhdGEuIExldFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEwMzQ6XFx0ICogVURTIGlub2RlIGhhdmUgZml4ZWQgKiBsYWJlbCB0byBrZWVwIHNtYWNrX2lub2RlX3Blcm1pc3Npb24oKSBjYWxtXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTAzNS1cXHQgKiB3aGVuIGNhbGxlZCBmcm9tIHVuaXhfZmluZF9ic2QoKVxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTIwMz1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMjgtLyoqXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6MTIyOTogKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjMwLSAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xMjM3LSAqL1xcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjEyMzg6c3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTEyMzktXFx0XFx0XFx0XFx0ICBpbnQgbWFzaylcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTUxNTg9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc21hY2tfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgwLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfcmVuYW1lLCBzbWFja19pbm9kZV9yZW5hbWUpLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjUxODE6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9wZXJtaXNzaW9uLCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKSxcXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy01MTgyLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfc2V0YXR0ciwgc21hY2tfaW5vZGVfc2V0YXR0ciksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAyOjA5OjM3LjEyMDQzMTUxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODAwNzIwMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGEgcmVmYWN0b3IsIHByaW1hcmlseSBjb25jZXJuaW5nIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCB0aHJvdWdoIHNldmVyYWwgaW5vZGUgTFNNIGhvb2tzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGNhbGxlcnMuIE15IHRob3VnaHQgcHJvY2VzcyBpcyBjbGVhcjpcblxuRmlyc3QsIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgaW5vZGUgTFNNIGhvb2tz4oCUYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBhbmQgYGlub2RlX3Blcm1pc3Npb25g4oCUdG8gaW5jbHVkZSB0aGUgYGlkbWFwYCBwYXJhbWV0ZXIuIFRoZSBWRlMgY2FsbGVycyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgIGFyZSB1cGRhdGVkIHRvIGNvcnJlY3RseSBwYXNzIHRoZSBgaWRtYXBgIChvciBgXHUwMDI2bm9wX21udF9pZG1hcGApIGludG8gdGhlIHJlbGV2YW50IHNlY3VyaXR5IHdyYXBwZXJzLiBUaGlzIGNoYW5nZSBhbHNvIGV4dGVuZHMgdG8gaW1wbGVtZW50YXRpb25zIHN1Y2ggYXMgU0VMaW51eCwgU21hY2sgYW5kIExTTSBCUEYgd2hpY2ggYWxzbyB1cGRhdGUgdG8gYWNjb21tb2RhdGUgdGhlIG5ldyBwYXJhbWV0ZXIuIEkndmUgZ290IHRvIGNvbnNpZGVyIGlmIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW52b2x2ZWQsIHNvIEkgZ28gdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbC10by11c2Vyc3BhY2UgZGF0YSB0cmFuc2ZlcjoqKiBOb3RoaW5nIG5ldyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIGNoYW5nZXMgdG8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RsIGFyZSBoYXBwZW5pbmcgaGVyZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBUaGUgYGlkbWFwYCBwb2ludGVyIGJlaW5nIHBhc3NlZCBhcm91bmQgaXMgYSB2YWxpZCBwb2ludGVyIG9yaWdpbmF0aW5nIGZyb20gVkZTIGNhbGxlcnMsIG9yIHRoZSBzYWZlIGBcdTAwMjZub3BfbW50X2lkbWFwYC4gSSdtIG5vdCBzZWVpbmcgYW55IHNjZW5hcmlvcyB3aGVyZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsJ3MgY29kZSBwYXRoLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBvdGhlciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeToqKiBUaGVyZSdzIG5vIG1hbmlwdWxhdGlvbiBvZiBtZW1vcnksIGJvdW5kcyBjaGVja3MsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuQmFzZWQgb24gdGhpcywgS01TQU4gaXMgdW5saWtlbHkgdG8gaWRlbnRpZnkgYW55IGlzc3Vlcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBpcyBwcmltYXJpbHkgY2hhbmdpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBwcm9wYWdhdGUgYW4gZXhpc3RpbmcgcGFyYW1ldGVyLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdGhhdCBLTVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGluY29ycmVjdCBwb2ludGVycyB3aGljaCBhcmUgdHlwZXMgb2YgbWVtb3J5IGVycm9ycyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGlzIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBLTVNBTiBpcyBncmVhdCBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGlzbid0IHByZXNlbnQgaGVyZS5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgYGZhbHNlYC5cblxuTm93LCBJJ2xsIHNvbGlkaWZ5IHRoZSByZWFzb25pbmc6XG5cbiogICBUaGUgcGF0Y2gncyBjb3JlIGZ1bmN0aW9uIGlzIGV4dGVuZGluZyBMU00gaG9va3Mgd2l0aCB0aGUgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBwYXJhbWV0ZXIuXG4qICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgaGVhcC9zdGFjayBidWZmZXJzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC5cbiogICBObyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIG9yIGludGVyYWN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgYWRkZWQuXG4qICAgVGhlIGNoYW5nZSBpcyBhYm91dCBwbHVtYmluZyBhbiBleGlzdGluZyBwb2ludGVyIChgaWRtYXBgIC8gYFx1MDAyNm5vcF9tbnRfaWRtYXBgKS5cbiogICBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgbGlrZWx5IGJlIHBvaW50ZXItcmVsYXRlZCwgYW5kIHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgZmF1bHQgaGFuZGxpbmcgd291bGQgY2F0Y2ggdGhlbS5cbiogICBUaHVzLCB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgbm8gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LlxuSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMsIGFuZCBub3cgSSdsbCBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk3LCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMjowOTo0My45MjExNTUwNzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgc2V2ZXJhbCBpbm9kZS1yZWxhdGVkIExTTSBob29rcyAoYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgYGlub2RlX3N5bWxpbmtgLCBgaW5vZGVfbWtkaXJgLCBgaW5vZGVfbWtub2RgLCBhbmQgYGlub2RlX3Blcm1pc3Npb25gKSBhbmQgdGhlaXIgd3JhcHBlcnMgYnkgcGFzc2luZyBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgLiBJdCBhbHNvIHVwZGF0ZXMgU0VMaW51eCBhbmQgU21hY2sgaW1wbGVtZW50YXRpb25zIGFuZCBhZGRzIEJQRiBMU00gc2VsZnRlc3RzIGZvciBpZG1hcHBlZCBtb3VudHMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCBwYXJhbWV0ZXIgcGx1bWJpbmcgdXBkYXRlIGFjcm9zcyBWRlMgYW5kIExTTSBpbnRlcmZhY2VzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBpbiB0aGUga2VybmVsLCBhbmQgbm8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIGRlcmVmZXJlbmNpbmcgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY29uY2VybnMgY292ZXJlZCBieSBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBkZXRlY3RlZCBieSBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIHNldmVyYWwgaW5vZGUtcmVsYXRlZCBMU00gaG9va3MgKGBpbm9kZV9jcmVhdGVgLCBgaW5vZGVfbGlua2AsIGBpbm9kZV9zeW1saW5rYCwgYGlub2RlX21rZGlyYCwgYGlub2RlX21rbm9kYCwgYW5kIGBpbm9kZV9wZXJtaXNzaW9uYCkgYW5kIHRoZWlyIHdyYXBwZXJzIGJ5IHBhc3NpbmcgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYC4gSXQgYWxzbyB1cGRhdGVzIFNFTGludXggYW5kIFNtYWNrIGltcGxlbWVudGF0aW9ucyBhbmQgYWRkcyBCUEYgTFNNIHNlbGZ0ZXN0cyBmb3IgaWRtYXBwZWQgbW91bnRzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgcGFyYW1ldGVyIHBsdW1iaW5nIHVwZGF0ZSBhY3Jvc3MgVkZTIGFuZCBMU00gaW50ZXJmYWNlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgaW4gdGhlIGtlcm5lbCwgYW5kIG5vIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciBkZXJlZmVyZW5jaW5nIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZGV0ZWN0ZWQgYnkgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[1] Phase: Succeeded StartedAt: 2026-09-02 02:09:55 +0000 UTC FinishedAt: 2026-09-02 02:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 02:09:55 +0000 UTC FinishedAt: 2026-09-02 02:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2] Phase: Succeeded StartedAt: 2026-09-02 02:09:55 +0000 UTC FinishedAt: 2026-09-02 05:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 02:09:55 +0000 UTC FinishedAt: 2026-09-02 05:55:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 02:09:55 +0000 UTC FinishedAt: 2026-09-02 02:10:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 02:09:55 +0000 UTC FinishedAt: 2026-09-02 02:10:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowkd4qm/series-workflowkd4qm-convert-artifact-1764103058/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 02:10:05 +0000 UTC FinishedAt: 2026-09-02 02:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 02:10:05 +0000 UTC FinishedAt: 2026-09-02 02:26:11 +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:*a508beb1-5a1b-413e-bc1b-2700fdf9ec3a,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-workflowkd4qm/series-workflowkd4qm-convert-artifact-1764103058/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": "babb0ec0-5e93-4794-aeb4-a9f2ff893a7d", "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-workflowkd4qm/series-workflowkd4qm-build-action-4181759248/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 02:10:05 +0000 UTC FinishedAt: 2026-09-02 02:26:01 +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:*a508beb1-5a1b-413e-bc1b-2700fdf9ec3a,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-workflowkd4qm/series-workflowkd4qm-convert-artifact-1764103058/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": "babb0ec0-5e93-4794-aeb4-a9f2ff893a7d", "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-workflowkd4qm/series-workflowkd4qm-build-action-4181759248/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 02:26:11 +0000 UTC FinishedAt: 2026-09-02 02:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 02:26:11 +0000 UTC FinishedAt: 2026-09-02 02:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 02:26:11 +0000 UTC FinishedAt: 2026-09-02 02:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 02:26:11 +0000 UTC FinishedAt: 2026-09-02 02:26:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowkd4qm/series-workflowkd4qm-convert-artifact-163717805/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 02:26:21 +0000 UTC FinishedAt: 2026-09-02 02:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 02:26:21 +0000 UTC FinishedAt: 2026-09-02 02:28:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*babb0ec0-5e93-4794-aeb4-a9f2ff893a7d,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-workflowkd4qm/series-workflowkd4qm-build-action-4181759248/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-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 02:28:16 +0000 UTC FinishedAt: 2026-09-02 02:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 02:28:16 +0000 UTC FinishedAt: 2026-09-02 02:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 02:28:16 +0000 UTC FinishedAt: 2026-09-02 02:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 02:28:16 +0000 UTC FinishedAt: 2026-09-02 02:48:11 +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:*a508beb1-5a1b-413e-bc1b-2700fdf9ec3a,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-workflowkd4qm/series-workflowkd4qm-convert-artifact-163717805/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": "c4d49083-fade-4dbf-92c4-c50145e44104", "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-workflowkd4qm/series-workflowkd4qm-build-action-4211500809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 02:28:16 +0000 UTC FinishedAt: 2026-09-02 02:47:49 +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:*a508beb1-5a1b-413e-bc1b-2700fdf9ec3a,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-workflowkd4qm/series-workflowkd4qm-convert-artifact-163717805/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": "c4d49083-fade-4dbf-92c4-c50145e44104", "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-workflowkd4qm/series-workflowkd4qm-build-action-4211500809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 02:48:11 +0000 UTC FinishedAt: 2026-09-02 02:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 02:48:11 +0000 UTC FinishedAt: 2026-09-02 02:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 02:48:11 +0000 UTC FinishedAt: 2026-09-02 02:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 02:48:11 +0000 UTC FinishedAt: 2026-09-02 02:49:57 +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:*c4d49083-fade-4dbf-92c4-c50145e44104,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-workflowkd4qm/series-workflowkd4qm-build-action-4211500809/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-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 02:50:06 +0000 UTC FinishedAt: 2026-09-02 05:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 02:50:06 +0000 UTC FinishedAt: 2026-09-02 05:55:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"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:*babb0ec0-5e93-4794-aeb4-a9f2ff893a7d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4d49083-fade-4dbf-92c4-c50145e44104,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-workflowkd4qm/series-workflowkd4qm-build-action-4181759248/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-workflowkd4qm/series-workflowkd4qm-build-action-4211500809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 02:50:06 +0000 UTC FinishedAt: 2026-09-02 02:50:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 02:50:06 +0000 UTC FinishedAt: 2026-09-02 02:50:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"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-workflowkd4qm/series-workflowkd4qm-convert-artifact-3937241618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 02:50:06 +0000 UTC FinishedAt: 2026-09-02 02:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 02:50:06 +0000 UTC FinishedAt: 2026-09-02 02:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 02:50:06 +0000 UTC FinishedAt: 2026-09-02 02:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 02:50:26 +0000 UTC FinishedAt: 2026-09-02 05:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkd4qm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","security_inode_permission"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","BPF_LSM","SECURITY_SELINUX","SECURITY_SMACK","CACHEFILES"],"series_id":"85415732-119e-4324-9d4a-5f94f876fe4e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 02:50:26 +0000 UTC FinishedAt: 2026-09-02 05:55:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*babb0ec0-5e93-4794-aeb4-a9f2ff893a7d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4d49083-fade-4dbf-92c4-c50145e44104,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-workflowkd4qm/series-workflowkd4qm-build-action-4181759248/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-workflowkd4qm/series-workflowkd4qm-build-action-4211500809/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-workflowkd4qm/series-workflowkd4qm-convert-artifact-3937241618/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,}