Name: series-workflow7ggsn Phase: Succeeded StartedAt: 2026-07-19 14:03:58 +0000 UTC FinishedAt: 2026-07-19 18:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[0] Phase: Succeeded StartedAt: 2026-07-19 14:03:58 +0000 UTC FinishedAt: 2026-07-19 14:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[0].run-triage Phase: Succeeded StartedAt: 2026-07-19 14:03:58 +0000 UTC FinishedAt: 2026-07-19 14:22:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "f1a84680-81ab-4cf4-9508-acb6f7a92f65" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_tx_peek_release_desc_batch", "xsk_tx_completed", "__xsk_generic_xmit", "xsk_build_skb", "xsk_build_skb_zerocopy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgY29tcGxldGlvbiByaW5nIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgaW4gdGhlIFR4IHBhdGguIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gbG9naWMgZm9yIGRlc2NyaXB0b3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEFGX1hEUCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zIChlLmcuLCB1c2luZyBnZW5lcmljIFhEUCBtb2RlKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjMGQ4NTg0NTczMzkwZjdhZDU5ZGZhNWZlNTgwZmJkOTZjZTVjNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoyMToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XG5pbmRleCA1MGQ5MjA4NGE0OWM2YS4uY2MzZjBkMTZiMjhmYjYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RcbkBAIC00MywxMiAmIzQzOzQzLDEzIEBAIFVNRU0gYWxzbyBoYXMgdHdvIHJpbmdzOiB0aGUgRklMTCByaW5nIGFuZCB0aGUgQ09NUExFVElPTiByaW5nLiBUaGVcbiBGSUxMIHJpbmcgaXMgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gdG8gc2VuZCBkb3duIGFkZHIgZm9yIHRoZSBrZXJuZWxcbiB0byBmaWxsIGluIHdpdGggUlggcGFja2V0IGRhdGEuIFJlZmVyZW5jZXMgdG8gdGhlc2UgZnJhbWVzIHdpbGwgdGhlblxuIGFwcGVhciBpbiB0aGUgUlggcmluZyBvbmNlIGVhY2ggcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkLiBUaGVcbi1DT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyIHRoYXQgdGhlXG4ta2VybmVsIGhhcyB0cmFuc21pdHRlZCBjb21wbGV0ZWx5IGFuZCBjYW4gbm93IGJlIHVzZWQgYWdhaW4gYnkgdXNlclxuLXNwYWNlLCBmb3IgZWl0aGVyIFRYIG9yIFJYLiBUaHVzLCB0aGUgZnJhbWUgYWRkcnMgYXBwZWFyaW5nIGluIHRoZVxuLUNPTVBMRVRJT04gcmluZyBhcmUgYWRkcnMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdHJhbnNtaXR0ZWQgdXNpbmcgdGhlXG4tVFggcmluZy4gSW4gc3VtbWFyeSwgdGhlIFJYIGFuZCBGSUxMIHJpbmdzIGFyZSB1c2VkIGZvciB0aGUgUlggcGF0aFxuLWFuZCB0aGUgVFggYW5kIENPTVBMRVRJT04gcmluZ3MgYXJlIHVzZWQgZm9yIHRoZSBUWCBwYXRoLlxuJiM0MztDT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyZXNzZXMgZnJvbSBUeFxuJiM0MztkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIHRoYXQgY2FuIG5vdyBiZVxuJiM0Mzt1c2VkIGFnYWluIGJ5IHVzZXIgc3BhY2UsIGZvciBlaXRoZXIgVHggb3IgUnguIFRoaXMgaW5jbHVkZXMgZnJhbWVzIHdob3NlXG4mIzQzO3RyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkIGFzIHdlbGwgYXMgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeFxuJiM0MztkZXNjcmlwdG9ycyByZWplY3RlZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gdGhlcmVmb3JlIHJldHVybnNcbiYjNDM7b3duZXJzaGlwIG9mIGEgZnJhbWUgdG8gdXNlciBzcGFjZSwgYnV0IGRvZXMgbm90IGJ5IGl0c2VsZiBndWFyYW50ZWUgdGhhdFxuJiM0Mzt0aGUgcGFja2V0IHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuXG4gXG4gVGhlIHNvY2tldCBpcyB0aGVuIGZpbmFsbHkgYm91bmQgd2l0aCBhIGJpbmQoKSBjYWxsIHRvIGEgZGV2aWNlIGFuZCBhXG4gc3BlY2lmaWMgcXVldWUgaWQgb24gdGhhdCBkZXZpY2UsIGFuZCBpdCBpcyBub3QgdW50aWwgYmluZCBpc1xuQEAgLTE2OSwxNCAmIzQzOzE3MCwxNSBAQCBjaHVua3MgbW9kZSwgdGhlbiB0aGUgaW5jb21pbmcgYWRkciB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLlxuIFVNRU0gQ29tcGxldGlvbiBSaW5nXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5cbiBcbi1UaGUgQ09NUExFVElPTiBSaW5nIGlzIHVzZWQgdHJhbnNmZXIgb3duZXJzaGlwIG9mIFVNRU0gZnJhbWVzIGZyb21cbiYjNDM7VGhlIENPTVBMRVRJT04gUmluZyBpcyB1c2VkIHRvIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBVTUVNIGZyYW1lcyBmcm9tXG4ga2VybmVsLXNwYWNlIHRvIHVzZXItc3BhY2UuIEp1c3QgbGlrZSB0aGUgRklMTCByaW5nLCBVTUVNIGluZGljZXMgYXJlXG4tdXNlZC5cbi1cbi1GcmFtZXMgcGFzc2VkIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyLXNwYWNlIGFyZSBmcmFtZXMgdGhhdCBoYXMgYmVlblxuLXNlbnQgKFRYIHJpbmcpIGFuZCBjYW4gYmUgdXNlZCBieSB1c2VyLXNwYWNlIGFnYWluLlxuLVxuLVRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbnN1bWVzIFVNRU0gYWRkcnMgZnJvbSB0aGlzIHJpbmcuXG4mIzQzO3VzZWQuIEZyYW1lcyBwYXNzZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgYXJlIGZyYW1lcyByZWZlcmVuY2VkXG4mIzQzO2J5IFR4IGRlc2NyaXB0b3JzIHRoYXQgdGhlIGtlcm5lbCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhbmQgY2FuIGJlXG4mIzQzO3VzZWQgYnkgdXNlci1zcGFjZSBhZ2Fpbi4gVGhpcyBpbmNsdWRlcyBib3RoIGZyYW1lcyB3aG9zZSB0cmFuc21pc3Npb25cbiYjNDM7aGFzIGNvbXBsZXRlZCBhbmQgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeCBkZXNjcmlwdG9ycyB0aGF0IHdlcmVcbiYjNDM7cmVqZWN0ZWQgYW5kIHJlY2xhaW1lZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gZW50cnkgZG9lcyBub3RcbiYjNDM7Z3VhcmFudGVlIHN1Y2Nlc3NmdWwgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHVzZXIgYXBwbGljYXRpb24gY29uc3VtZXNcbiYjNDM7VU1FTSBhZGRycyBmcm9tIHRoaXMgcmluZy5cbiBcbiBcbiBSWCBSaW5nXG5AQCAtNTA0LDIxICYjNDM7NTA2LDI1IEBAIHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBpbnZhbGlkIGRlc2NyaXB0b3IuXG4gVGhlc2UgYXJlIHRoZSBzZW1hbnRpY3MgZm9yIHByb2R1Y2luZyBwYWNrZXRzIG9udG8gQUZfWERQIFR4IHJpbmdcbiBjb25zaXN0aW5nIG9mIG11bHRpcGxlIGZyYW1lczpcbiBcbi0qIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCBhbGwgdGhlIG90aGVyXG4tICBkZXNjcmlwdG9ycy9mcmFtZXMgb2YgdGhpcyBwYWNrZXQgYXJlIG1hcmtlZCBhcyBpbnZhbGlkIGFuZCBub3Rcbi0gIGNvbXBsZXRlZC4gVGhlIG5leHQgZGVzY3JpcHRvciBpcyB0cmVhdGVkIGFzIHRoZSBzdGFydCBvZiBhIG5ld1xuLSAgcGFja2V0LCBldmVuIGlmIHRoaXMgd2FzIG5vdCB0aGUgaW50ZW50IChiZWNhdXNlIHdlIGNhbm5vdCBndWVzc1xuLSAgdGhlIGludGVudCkuIEFzIGJlZm9yZSwgaWYgeW91ciBwcm9ncmFtIGlzIHByb2R1Y2luZyBpbnZhbGlkXG4tICBkZXNjcmlwdG9ycyB5b3UgaGF2ZSBhIGJ1ZyB0aGF0IG11c3QgYmUgZml4ZWQuXG4mIzQzOyogV2hlbiBhbiBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgZm91bmQsIHRoZSBjb21wbGV0ZSBwYWNrZXQgaXMgdHJlYXRlZCBhc1xuJiM0MzsgIGludmFsaWQuIFRoZSBrZXJuZWwgY29uc3VtZXMgZGVzY3JpcHRvcnMgdGhyb3VnaCB0aGUgZGVzY3JpcHRvciBtYXJraW5nXG4mIzQzOyAgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGFuZCByZXR1cm5zIGFsbCB0aGVpciBmcmFtZSBhZGRyZXNzZXMgdGhyb3VnaCB0aGVcbiYjNDM7ICBDT01QTEVUSU9OIHJpbmcuIEEgc3RhbmRhbG9uZSBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgdHJlYXRlZCBhcyBhXG4mIzQzOyAgb25lLWRlc2NyaXB0b3IgaW52YWxpZCBwYWNrZXQuIFRoZSBkZXNjcmlwdG9yIGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoZVxuJiM0MzsgIGludmFsaWQgcGFja2V0IGlzIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3IHBhY2tldC4gQXMgYmVmb3JlLCBpZlxuJiM0MzsgIHlvdXIgcHJvZ3JhbSBpcyBwcm9kdWNpbmcgaW52YWxpZCBkZXNjcmlwdG9ycyB5b3UgaGF2ZSBhIGJ1ZyB0aGF0IG11c3RcbiYjNDM7ICBiZSBmaXhlZC4gUmVqZWN0ZWQgZGVzY3JpcHRvcnMgYXJlIHJlcG9ydGVkIGluIHRoZSBgYHR4X2ludmFsaWRfZGVzY3NgYFxuJiM0MzsgIHN0YXRpc3RpYy5cbiBcbiAqIFplcm8gbGVuZ3RoIGRlc2NyaXB0b3JzIGFyZSB0cmVhdGVkIGFzIGludmFsaWQgZGVzY3JpcHRvcnMuXG4gXG4gKiBGb3IgY29weSBtb2RlLCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHBhY2tldCBpc1xuLSAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgJiM0MzsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbFxuLSAgZGVzY3JpcHRvcnMgYWNjdW11bGF0ZWQgc28gZmFyIGFyZSBkcm9wcGVkIGFuZCB0cmVhdGVkIGFzXG4tICBpbnZhbGlkLiBUbyBwcm9kdWNlIGFuIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCB3b3JrIG9uIGFueSBzeXN0ZW1cbi0gIHJlZ2FyZGxlc3Mgb2YgdGhpcyBjb25maWcgc2V0dGluZywgbGltaXQgdGhlIG51bWJlciBvZiBmcmFncyB0byAxOCxcbi0gIGFzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBjb25maWcgaXMgMTcuXG4mIzQzOyAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgJiM0MzsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbCBkZXNjcmlwdG9yc1xuJiM0MzsgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgb3ZlcnNpemVkIHBhY2tldCBhcmUgY29uc3VtZWQsIHRyZWF0ZWQgYXMgaW52YWxpZCxcbiYjNDM7ICBhbmQgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRvXG4mIzQzOyAgcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtIHJlZ2FyZGxlc3Mgb2YgdGhpc1xuJiM0MzsgIGNvbmZpZyBzZXR0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGZyYWdzIHRvIDE4LCBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZlxuJiM0MzsgIHRoZSBjb25maWcgaXMgMTcuXG4gXG4gKiBGb3IgemVyby1jb3B5IG1vZGUsIHRoZSBsaW1pdCBpcyB1cCB0byB3aGF0IHRoZSBOSUMgSFdcbiAgIHN1cHBvcnRzLiBVc3VhbGx5IGF0IGxlYXN0IGZpdmUgb24gdGhlIE5JQ3Mgd2UgaGF2ZSBjaGVja2VkLiBXZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5AQCAtODAsNiAmIzQzOzgwLDcgQEAgc3RydWN0IHhkcF9zb2NrIHtcbiBcdCAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuXG4gXHQgKi9cbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0Ym9vbCBkcmFpbl9jb250O1xuIFxuIFx0c3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDtcbiBcdC8qIFByb3RlY3RzIG1hcF9saXN0ICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG5pbmRleCBjY2IzYjM1MDAwMWYyNC4uMmJiMWQxMjJiMWJjNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuQEAgLTc4LDYgJiM0Mzs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcdHUzMiBjaHVua19zaXplO1xuIFx0dTMyIGNodW5rX3NoaWZ0O1xuIFx0dTMyIGZyYW1lX2xlbjtcbiYjNDM7XHR1MzIgdHhfZGVzY3NfbmVudHJpZXM7XG4mIzQzO1x0dTMyIHJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XG4gXHR1MzIgeGRwX3pjX21heF9zZWdzO1xuIFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXG4gXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XG5AQCAtMTAyLDEyICYjNDM7MTA1LDE0IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcbiAvKiBBRl9YRFAgY29yZS4gKi9cbiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7XG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSxcbiYjNDM7XHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKTtcbiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7XG4gaW50IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHMsXG4gXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZCk7XG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTtcbiYjNDM7aW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuJiM0MztcdFx0ICAgICAgdTMyIG1heF9zZWdzKTtcbiB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIGJvb2wgeHBfcHV0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCBiOTcwZjMwZWE5YjlkOC4uZjkwNmQ1MWI2Njk5MDQgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jXG5AQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbiBcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxuIHtcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcbiYjNDM7XHRcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5iX2VudHJpZXMgXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4mIzQzO1x0XHRcdFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xuJiM0MztcdFx0XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XG4mIzQzO1x0XHRuYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzO1xuJiM0MztcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5AQCAtNTc0LDI0ICYjNDM7NTkxLDE1NyBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxuIFx0cmV0dXJuIG5iX3BrdHM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTtcbiYjNDM7XHR1MzIgY3FfY2FjaGVkX3Byb2Q7XG4mIzQzO1xuJiM0MztcdGlmICghbmJfZGVzY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbiYjNDM7XHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVx1MDAzZWNxLCBwb29sLVx1MDAzZXR4X2Rlc2NzLCBuYl9kZXNjcyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkge1xuJiM0MztcdFx0dTMyIGNxX3BlbmRpbmdfZGVzY3M7XG4mIzQzO1xuJiM0MztcdFx0LyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3RcbiYjNDM7XHRcdCAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzXG4mIzQzO1x0XHQgKiBhcHBlbmRlZCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbiYjNDM7XHRcdFx0ICAgYmF0Y2gtXHUwMDNldHhfZGVzY3MgJiM0MzsgY3FfcGVuZGluZ19kZXNjcyk7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcykpXG4mIzQzO1x0XHRcdHhza190eF9jb21wbGV0ZWQocG9vbCwgMCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuJiM0MztfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiYjNDM7XHR1MzIgZW50cmllcztcbiYjNDM7XG4mIzQzO1x0ZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBtYXhfZGVzY3MpO1xuJiM0MztcdGlmICghZW50cmllcylcbiYjNDM7XHRcdHJldHVybiBiYXRjaDtcbiYjNDM7XG4mIzQzO1x0YmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTtcbiYjNDM7XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZiYXRjaCkpIHtcbiYjNDM7XHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0XHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBiYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyO1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XG4mIzQzO1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuJiM0MztcdHUzMiBwZXJfc29ja2V0X2J1ZGdldDtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmFpcm5lc3MgcXVvdGEgbXVzdCBhbGxvdyBvbmUgbWF4aW11bS1zaXplZCB2YWxpZCBwYWNrZXQuICovXG4mIzQzO1x0cGVyX3NvY2tldF9idWRnZXQgPSBtYXhfdCh1MzIsIE1BWF9QRVJfU09DS0VUX0JVREdFVCxcbiYjNDM7XHRcdFx0XHQgIHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKTtcbiYjNDM7XG4mIzQzO2FnYWluOlxuJiM0MztcdGJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdCkge1xuJiM0MztcdFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nLCB1c2VkO1xuJiM0MztcdFx0c3RydWN0IHhza190eF9iYXRjaCBjdXJyX2JhdGNoO1xuJiM0MztcbiYjNDM7XHRcdC8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1FcbiYjNDM7XHRcdCAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9yc1xuJiM0MztcdFx0ICogZnJvbSBhbm90aGVyIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uXG4mIzQzO1x0XHQgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHlcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4mIzQzO1x0XHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlPSBtYXhfZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmICh4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgXHUwMDNlPSBwZXJfc29ja2V0X2J1ZGdldCkge1xuJiM0MztcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuJiM0MztcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRidWRnZXRfbGVmdCA9IHBlcl9zb2NrZXRfYnVkZ2V0IC0geHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xuJiM0MztcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuJiM0MztcdFx0YnVkZ2V0ID0gbWluKHJlbWFpbmluZywgYnVkZ2V0X2xlZnQpO1xuJiM0MztcbiYjNDM7XHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICYjNDM7IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuJiM0MztcdFx0dXNlZCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZjdXJyX2JhdGNoKTtcbiYjNDM7XHRcdGlmICghdXNlZCkge1xuJiM0MztcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbiYjNDM7XHRcdFx0XHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICYjNDM7PSB1c2VkO1xuJiM0MztcdFx0c3VtX2JhdGNoLnR4X2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnR4X2Rlc2NzO1xuJiM0MztcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgXHUwMDNlPSBtYXhfZGVzY3MpXG4mIzQzO1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuJiM0MztcbiYjNDM7XHQvKiBDb250aW51ZSBmaWxsaW5nIHRoZSBiYXRjaCB3aGlsZSB0aGlzIHBhc3MgbWFkZSBwcm9ncmVzcyAqL1xuJiM0MztcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXG4mIzQzO1x0XHRnb3RvIGFnYWluO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXG4mIzQzO1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdClcbiYjNDM7XHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCA9IDA7XG4mIzQzO1x0Z290byBhZ2FpbjtcbiYjNDM7fVxuJiM0MztcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiB7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuIFx0c3RydWN0IHhkcF9zb2NrICp4cztcbiYjNDM7XHRib29sIHVtZW1fc2hhcmVkO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpKSB7XG4tXHRcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbi1cdH1cbiYjNDM7XHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcykpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4tXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTtcbi1cdGlmICgheHMpIHtcbi1cdFx0bmJfcGt0cyA9IDA7XG4mIzQzO1x0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jayxcbiYjNDM7XHRcdFx0XHQgICAgdHhfbGlzdCk7XG4mIzQzO1x0aWYgKCF4cylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRuYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG5iX3BrdHMpO1xuJiM0MztcdG5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XG4mIzQzO1x0aWYgKCFuYl9wa3RzKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHVtZW1fc2hhcmVkID0gIWxpc3RfaXNfc2luZ3VsYXIoXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCk7XG4mIzQzO1xuJiM0MztcdGlmICh1bWVtX3NoYXJlZCBcdTAwMjZcdTAwMjYgIShwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpO1xuJiM0MztcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20gZm9yIHRoZSBUeCBwYXRoLiBUcnkgdG9cbiBcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcbkBAIC02MDMsMTkgJiM0Mzs3NTMsMTYgQEAgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXG4gXHRpZiAoIW5iX3BrdHMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXHUwMDNldHgsIHBvb2wsIG5iX3BrdHMpO1xuLVx0aWYgKCFuYl9wa3RzKSB7XG4tXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdGJhdGNoID0gdW1lbV9zaGFyZWQgP1xuJiM0MztcdFx0eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKSA6XG4mIzQzO1x0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbiYjNDM7XHRcdFx0XHRcdFx0IHBvb2wtXHUwMDNldHhfZGVzY3MsXG4mIzQzO1x0XHRcdFx0XHRcdCBuYl9wa3RzKTtcbiYjNDM7XHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoKTtcbiBcbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBuYl9wa3RzO1xuJiM0MztcdHJldHVybiBiYXRjaC50eF9kZXNjcztcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpO1xuIFxuQEAgLTczNyw2ICYjNDM7ODg0LDE5IEBAIHN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1MzIgaWR4O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlkeCA9IHhza3FfZ2V0X3Byb2QocG9vbC1cdTAwM2VjcSk7XG4mIzQzO1x0eHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC1cdTAwM2VjcSwgaWR4LCBkZXNjLVx1MDAzZWFkZHIpO1xuJiM0MztcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIHtcbiBcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuQEAgLTc5NCw4ICYjNDM7OTU0LDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHhkcF9zayhza2ItXHUwMDNlc2spLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbi1cdHhza19jb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbiYjNDM7XG4mIzQzO1x0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuJiM0MztcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbkBAIC04NzcsNyAmIzQzOzEwNDAsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxuLVx0XHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuJiM0MztcdFx0ICogeHNrX2Ryb3Bfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiBcdFx0ICogd291bGQgYmUgZHJvcHBlZCwgd2hpY2ggaW1wbGllcyBmcmVlaW5nIGFsbCBsaXN0IGVsZW1lbnRzXG4gXHRcdCAqL1xuIFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuQEAgLTk2OSw2ICYjNDM7MTEzMiw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFx0XHRcdFx0Z290byBmcmVlX2VycjtcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4mIzQzO1xuIFx0XHRcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFx1MDAyNlx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xuIFx0XHRcdFx0ZXJyID0gLUVPVkVSRkxPVztcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG5AQCAtOTg2LDggJiM0MzsxMTUxLDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXG4gXHRcdFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcbiBcdFx0XHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcdTAwMjZ4cy1cdTAwM2Vzay5za193bWVtX2FsbG9jKTtcbi1cbi1cdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTAyNSwxMyAmIzQzOzExODgsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuLVx0Ym9vbCBzZW50X2ZyYW1lID0gZmFsc2U7XG4gXHRzdHJ1Y3QgeGRwX2Rlc2MgZGVzYztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0dTMyIGNhY2hlZF9jb25zO1xuIFx0dTMyIG1heF9iYXRjaDtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4mIzQzO1x0Y2FjaGVkX2NvbnMgPSB4cy1cdTAwM2V0eC1cdTAwM2VjYWNoZWRfY29ucztcbiBcbiBcdC8qIFNpbmNlIHdlIGRyb3BwZWQgdGhlIFJDVSByZWFkIGxvY2ssIHRoZSBzb2NrZXQgc3RhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLiAqL1xuIFx0aWYgKHVubGlrZWx5KCF4c2tfaXNfYm91bmQoeHMpKSkge1xuQEAgLTEwNjAsMTEgJiM0MzsxMjI0LDIxIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKHVubGlrZWx5KHhzLVx1MDAzZWRyYWluX2NvbnQpKSB7XG4mIzQzO1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuJiM0MztcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbiBcdFx0aWYgKElTX0VSUihza2IpKSB7XG4gXHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuIFx0XHRcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcbiBcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbiYjNDM7XHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMTA5MywxOCAmIzQzOzEyNjcsMzMgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHNlbnRfZnJhbWUgPSB0cnVlO1xuIFx0XHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuJiM0MztcdFx0Ym9vbCBkcmFpbiA9IHhzLVx1MDAzZXNrYiB8fCB4cy1cdTAwM2VkcmFpbl9jb250IHx8IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLVx1MDAzZXBvb2wpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzLS07XG4mIzQzO1x0XHRcdGlmICh4cy1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4mIzQzO1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSBkcmFpbjtcbiYjNDM7XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpZiAoeHMtXHUwMDNlc2tiKVxuIFx0XHRcdHhza19kcm9wX3NrYih4cy1cdTAwM2Vza2IpO1xuJiM0MztcbiYjNDM7XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcbiBcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuJiM0MztcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4gXHR9XG4gXG4gb3V0OlxuLVx0aWYgKHNlbnRfZnJhbWUpXG4mIzQzO1x0aWYgKHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zICE9IGNhY2hlZF9jb25zKVxuIFx0XHRfX3hza190eF9yZWxlYXNlKHhzKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5AQCAtMTQ4Myw3ICYjNDM7MTY3Miw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogYW5kL29yIGRldmljZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcbi1cdFx0XHRcdFx0XHRcdCAgICAgdW1lbV94cy1cdTAwM2V1bWVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIHVtZW1feHMtXHUwMDNldW1lbSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICYjNDM7MTcwNSw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogdXRpbGl6ZXNcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoeHMtXHUwMDNldHggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vwb29sLVx1MDAzZXR4X2Rlc2NzKSB7XG4tXHRcdFx0XHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cdTAwM2Vwb29sLCB4cyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXHUwMDNlcG9vbCwgeHMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgJiM0MzsxNzI0LDkgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi9cbi1cdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0pO1xuJiM0MztcdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4mIzQzO1xuIFx0XHRpZiAoIXhzLVx1MDAzZXBvb2wpIHtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG5pbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbkBAIC00MiwxNyAmIzQzOzQyLDIyIEBAIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiBcdGt2ZnJlZShwb29sKTtcbiB9XG4gXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4mIzQzO1x0XHQgICAgICB1MzIgbWF4X3NlZ3MpXG4ge1xuLVx0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzKTtcbiYjNDM7XHR1MzIgbmVudHJpZXMgPSBtYXgoeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMsIG1heF9zZWdzKTtcbiYjNDM7XG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIG5lbnRyaWVzKTtcbiBcdGlmICghcG9vbC1cdTAwM2V0eF9kZXNjcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKVxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdHUzMiBtYXhfc2VncylcbiB7XG4gXHRib29sIHVuYWxpZ25lZCA9IHVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHO1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG5AQCAtNjksNyAmIzQzOzc0LDcgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAoeHMtXHUwMDNldHgpXG4tXHRcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cykpXG4mIzQzO1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLjFiYzQyYzg5MDJmNGJhIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgJiM0Mzs1OCwxNyBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2Mge1xuIFx0dTMyIHZhbGlkO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB4c2tfdHhfYmF0Y2gge1xuJiM0MztcdHUzMiB0eF9kZXNjcztcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcztcbiYjNDM7XHRib29sIGJ1ZGdldF9saW1pdGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJhdGNoLVx1MDAzZXR4X2Rlc2NzICYjNDM7IGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3M7XG4mIzQzO31cbiYjNDM7XG4gLyogVGhlIHN0cnVjdHVyZSBvZiB0aGUgc2hhcmVkIHN0YXRlIG9mIHRoZSByaW5ncyBhcmUgYSBzaW1wbGVcbiAgKiBjaXJjdWxhciBidWZmZXIsIGFzIG91dGxpbmVkIGluXG4gICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmRcbkBAIC0yNjMsMTcgJiM0MzsyNzQsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlX2Rlc2Moc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRwYXJzZWQtXHUwMDNlbWIgPSB4cF9tYl9kZXNjKGRlc2MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lXG4tdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tXHRcdFx0ICAgICAgdTMyIG1heClcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4mIzQzO3hza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heClcbiB7XG4tXHR1MzIgY2FjaGVkX2NvbnMgPSBxLVx1MDAzZWNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDtcbi1cdHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MgPSBwb29sLVx1MDAzZXR4X2Rlc2NzO1xuLVx0dTMyIHRvdGFsX2Rlc2NzID0gMCwgbnJfZnJhZ3MgPSAwO1xuJiM0MztcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4mIzQzO1x0dTMyIGNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4mIzQzO1x0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVx1MDAzZXR4O1xuJiM0MztcdHUzMiBucl9mcmFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcbi1cdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcbi1cdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3Npbmdcbi1cdCAqL1xuIFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXHUwMDNlY2FjaGVkX3Byb2QgXHUwMDI2XHUwMDI2IG5iX2VudHJpZXMgXHUwMDNjIG1heCkge1xuIFx0XHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXHUwMDNlcmluZztcbiBcdFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFx1MDAyNiBxLVx1MDAzZXJpbmdfbWFzaztcbkBAIC0yODMsMjUgJiM0MzsyOTUsNDIgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGNhY2hlZF9jb25zJiM0MzsmIzQzOztcbiBcdFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXHUwMDI2cGFyc2VkKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRkcmFpbiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0bnJfZnJhZ3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0bmJfZW50cmllcyYjNDM7JiM0Mzs7XG4gXG4gXHRcdGlmIChsaWtlbHkoIXBhcnNlZC5tYikpIHtcbi1cdFx0XHR0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpO1xuLVx0XHRcdG5yX2ZyYWdzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRucl9mcmFncyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKSB7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShkcmFpbikpIHtcbiYjNDM7XHRcdFx0XHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250LCBmYWxzZSk7XG4gXHRcdFx0XHRucl9mcmFncyA9IDA7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRiYXRjaC50eF9kZXNjcyAmIzQzOz0gbnJfZnJhZ3M7XG4mIzQzO1x0XHRcdG5yX2ZyYWdzID0gMDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKVxuJiM0MztcdFx0XHRkcmFpbiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnJfZnJhZ3MpIHtcbiYjNDM7XHRcdGlmIChkcmFpbikge1xuJiM0MztcdFx0XHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgdHJ1ZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRpZiAobmJfZW50cmllcyA9PSBtYXgpXG4mIzQzO1x0XHRcdFx0YmF0Y2guYnVkZ2V0X2xpbWl0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiBcdFx0fVxuLVx0XHRuYl9lbnRyaWVzJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbiBcdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbiYjNDM7XHRyZXR1cm4gYmF0Y2g7XG4gfVxuIFxuIC8qIEZ1bmN0aW9ucyBmb3IgY29uc3VtZXJzICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbmluZGV4IDQ3N2FlZGJiMDFiYWQ4Li40NTQ5MzU4Y2M4YzIxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC00MjcsMTQgJiM0Mzs0MjcsMTQgQEAgc3RhdGljIHUzMiBwa3RfbmJfZnJhZ3ModTMyIGZyYW1lX3NpemUsIHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtLCBzdHJ1Y3QgcGtcbiBcdH1cbiBcbiBcdC8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi9cbi1cdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cdTAwM2V2YWxpZClcbiYjNDM7XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0JiM0MzsmIzQzOztcbiBcdHdoaWxlIChuZXh0X2ZyYWcmIzQzOyYjNDM7IFx1MDAzYyBwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMpIHtcbiBcdFx0bmJfZnJhZ3MmIzQzOyYjNDM7O1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwa3QmIzQzOyYjNDM7O1xuIFx0fVxuQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc1xuIFx0XHRcdGlmICghZnJhbWUtXHUwMDNldmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0XHRwYXlsb2FkJiM0MzsmIzQzOztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCkge1xuIFx0XHRcdFx0bGVuICYjNDM7PSBmcmFtZS1cdTAwM2VsZW47XG4tXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiBwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4mIzQzO1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdHBrdC1cdTAwM2Vwa3RfbmIgPSBwa3RfbmI7XG4gXHRcdFx0cGt0LVx1MDAzZWxlbiA9IGxlbjtcbiBcdFx0XHRwa3QtXHUwMDNldmFsaWQgPSBmcmFtZS1cdTAwM2V2YWxpZDtcbkBAIC0xMjUwLDEwICYjNDM7MTI1MCw5IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbiYjNDM7XHRcdGlmIChwa3QgXHUwMDI2XHUwMDI2IHBrdC1cdTAwM2V2YWxpZClcbiBcdFx0XHR2YWxpZF9wa3RzJiM0MzsmIzQzOztcbi1cdFx0XHR2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7XG4tXHRcdH1cbiYjNDM7XHRcdHZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFncztcbiBcdH1cbiBcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwYWNpbmdfbXV0ZXgpO1xuQEAgLTIwOTksMTMgJiM0MzsyMDk4LDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHR7MCwgMCwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbi1cdFx0e3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4mIzQzO1x0XHR7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4mIzQzO1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4mIzQzO1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LFxuJiM0MztcdFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LFxuQEAgLTIxMTcsOCAmIzQzOzIxMTksOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRcdHBrdHNbMTVdLnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRcdHBrdHNbMTZdLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdHRlc3QtXHUwMDNlbXR1ID0gTUFYX0VUSF9KVU1CT19TSVpFO1xuQEAgLTIyNzAsNyAmIzQzOzIyNzIsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgJiM0Mzs9IDE7XG4gXHR9XG4gXG4tXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMiwgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcbiYjNDM7XHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcbiBcdGlmICghcGt0cylcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcbkBAIC0yMjg4LDI0ICYjNDM7MjI5MCwzMCBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0fVxuIFx0cGt0c1ttYXhfZnJhZ3NdLm9wdGlvbnMgPSAwO1xuIFxuLVx0LyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4IGFtb3VudCBvZiBmcmFncyBidXQgc2lnbmFscyBwYWNrZXRcbi1cdCAqIGNvbnRpbnVlcyBvbiB0aGUgbGFzdCBmcmFnXG4tXHQgKi9cbi1cdGZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICYjNDM7IDE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0LyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovXG4mIzQzO1x0Zm9yIChpID0gbWF4X2ZyYWdzICYjNDM7IDE7IGkgXHUwMDNjIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMjsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cGt0c1tpXS5sZW4gPSBNSU5fUEtUX1NJWkU7XG4gXHRcdHBrdHNbaV0ub3B0aW9ucyA9IFhEUF9QS1RfQ09OVEQ7XG4tXHRcdHBrdHNbaV0udmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRcdHBrdHNbaV0udmFsaWQgPSB0cnVlO1xuIFx0fVxuJiM0MztcdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAxXS5vcHRpb25zID0gMDtcbiBcbiBcdC8qIFZhbGlkIHBhY2tldCBmb3Igc3luY2ggKi9cbi1cdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAxXS5sZW4gPSBNSU5fUEtUX1NJWkU7XG4tXHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlO1xuJiM0MztcdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAyXS5sZW4gPSBNSU5fUEtUX1NJWkU7XG4mIzQzO1x0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDJdLnZhbGlkID0gdHJ1ZTtcbiBcbi1cdGlmIChwa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbSh0ZXN0LCBwa3RzLCAyICogbWF4X2ZyYWdzICYjNDM7IDIpKSB7XG4mIzQzO1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHtcbiBcdFx0ZnJlZShwa3RzKTtcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBUaGUgZ2VuZXJhdGVkIFR4IHN0cmVhbSBtdXN0IGtlZXAgdGhlIHRvby1iaWcgcGFja2V0IHZhbGlkIHNvIHRoYXRcbiYjNDM7XHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4mIzQzO1x0ICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4mIzQzO1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2VuYl92YWxpZF9lbnRyaWVzLS07XG4mIzQzO1xuIFx0cmV0ID0gdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHRlc3QpO1xuIFx0ZnJlZShwa3RzKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTQ6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgVHggcGF0aC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBhbmQgcmVjbGFpbSBsb2dpYyBmb3IgZGVzY3JpcHRvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQUZfWERQIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBBRl9YRFAgc29ja2V0IG9wZXJhdGlvbnMgKGUuZy4sIHVzaW5nIGdlbmVyaWMgWERQIG1vZGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YzBkODU4NDU3MzM5MGY3YWQ1OWRmYTVmZTU4MGZiZDk2Y2U1YzQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTkgMTQ6MjE6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0CmluZGV4IDUwZDkyMDg0YTQ5YzZhLi5jYzNmMGQxNmIyOGZiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QKQEAgLTQzLDEyICYjNDM7NDMsMTMgQEAgVU1FTSBhbHNvIGhhcyB0d28gcmluZ3M6IHRoZSBGSUxMIHJpbmcgYW5kIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRoZQogRklMTCByaW5nIGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbmQgZG93biBhZGRyIGZvciB0aGUga2VybmVsCiB0byBmaWxsIGluIHdpdGggUlggcGFja2V0IGRhdGEuIFJlZmVyZW5jZXMgdG8gdGhlc2UgZnJhbWVzIHdpbGwgdGhlbgogYXBwZWFyIGluIHRoZSBSWCByaW5nIG9uY2UgZWFjaCBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZQotQ09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkciB0aGF0IHRoZQota2VybmVsIGhhcyB0cmFuc21pdHRlZCBjb21wbGV0ZWx5IGFuZCBjYW4gbm93IGJlIHVzZWQgYWdhaW4gYnkgdXNlcgotc3BhY2UsIGZvciBlaXRoZXIgVFggb3IgUlguIFRodXMsIHRoZSBmcmFtZSBhZGRycyBhcHBlYXJpbmcgaW4gdGhlCi1DT01QTEVUSU9OIHJpbmcgYXJlIGFkZHJzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHRyYW5zbWl0dGVkIHVzaW5nIHRoZQotVFggcmluZy4gSW4gc3VtbWFyeSwgdGhlIFJYIGFuZCBGSUxMIHJpbmdzIGFyZSB1c2VkIGZvciB0aGUgUlggcGF0aAotYW5kIHRoZSBUWCBhbmQgQ09NUExFVElPTiByaW5ncyBhcmUgdXNlZCBmb3IgdGhlIFRYIHBhdGguCiYjNDM7Q09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkcmVzc2VzIGZyb20gVHgKJiM0MztkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIHRoYXQgY2FuIG5vdyBiZQomIzQzO3VzZWQgYWdhaW4gYnkgdXNlciBzcGFjZSwgZm9yIGVpdGhlciBUeCBvciBSeC4gVGhpcyBpbmNsdWRlcyBmcmFtZXMgd2hvc2UKJiM0Mzt0cmFuc21pc3Npb24gaGFzIGNvbXBsZXRlZCBhcyB3ZWxsIGFzIGZyYW1lcyByZWZlcmVuY2VkIGJ5IGludmFsaWQgVHgKJiM0MztkZXNjcmlwdG9ycyByZWplY3RlZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gdGhlcmVmb3JlIHJldHVybnMKJiM0Mztvd25lcnNoaXAgb2YgYSBmcmFtZSB0byB1c2VyIHNwYWNlLCBidXQgZG9lcyBub3QgYnkgaXRzZWxmIGd1YXJhbnRlZSB0aGF0CiYjNDM7dGhlIHBhY2tldCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkLgogCiBUaGUgc29ja2V0IGlzIHRoZW4gZmluYWxseSBib3VuZCB3aXRoIGEgYmluZCgpIGNhbGwgdG8gYSBkZXZpY2UgYW5kIGEKIHNwZWNpZmljIHF1ZXVlIGlkIG9uIHRoYXQgZGV2aWNlLCBhbmQgaXQgaXMgbm90IHVudGlsIGJpbmQgaXMKQEAgLTE2OSwxNCAmIzQzOzE3MCwxNSBAQCBjaHVua3MgbW9kZSwgdGhlbiB0aGUgaW5jb21pbmcgYWRkciB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLgogVU1FTSBDb21wbGV0aW9uIFJpbmcKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbQomIzQzO1RoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbQoga2VybmVsLXNwYWNlIHRvIHVzZXItc3BhY2UuIEp1c3QgbGlrZSB0aGUgRklMTCByaW5nLCBVTUVNIGluZGljZXMgYXJlCi11c2VkLgotCi1GcmFtZXMgcGFzc2VkIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyLXNwYWNlIGFyZSBmcmFtZXMgdGhhdCBoYXMgYmVlbgotc2VudCAoVFggcmluZykgYW5kIGNhbiBiZSB1c2VkIGJ5IHVzZXItc3BhY2UgYWdhaW4uCi0KLVRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbnN1bWVzIFVNRU0gYWRkcnMgZnJvbSB0aGlzIHJpbmcuCiYjNDM7dXNlZC4gRnJhbWVzIHBhc3NlZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSBhcmUgZnJhbWVzIHJlZmVyZW5jZWQKJiM0MztieSBUeCBkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIGNhbiBiZQomIzQzO3VzZWQgYnkgdXNlci1zcGFjZSBhZ2Fpbi4gVGhpcyBpbmNsdWRlcyBib3RoIGZyYW1lcyB3aG9zZSB0cmFuc21pc3Npb24KJiM0MztoYXMgY29tcGxldGVkIGFuZCBmcmFtZXMgcmVmZXJlbmNlZCBieSBpbnZhbGlkIFR4IGRlc2NyaXB0b3JzIHRoYXQgd2VyZQomIzQzO3JlamVjdGVkIGFuZCByZWNsYWltZWQgYnkgdGhlIGtlcm5lbC4gQSBjb21wbGV0aW9uIGVudHJ5IGRvZXMgbm90CiYjNDM7Z3VhcmFudGVlIHN1Y2Nlc3NmdWwgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHVzZXIgYXBwbGljYXRpb24gY29uc3VtZXMKJiM0MztVTUVNIGFkZHJzIGZyb20gdGhpcyByaW5nLgogCiAKIFJYIFJpbmcKQEAgLTUwNCwyMSAmIzQzOzUwNiwyNSBAQCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gaW52YWxpZCBkZXNjcmlwdG9yLgogVGhlc2UgYXJlIHRoZSBzZW1hbnRpY3MgZm9yIHByb2R1Y2luZyBwYWNrZXRzIG9udG8gQUZfWERQIFR4IHJpbmcKIGNvbnNpc3Rpbmcgb2YgbXVsdGlwbGUgZnJhbWVzOgogCi0qIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCBhbGwgdGhlIG90aGVyCi0gIGRlc2NyaXB0b3JzL2ZyYW1lcyBvZiB0aGlzIHBhY2tldCBhcmUgbWFya2VkIGFzIGludmFsaWQgYW5kIG5vdAotICBjb21wbGV0ZWQuIFRoZSBuZXh0IGRlc2NyaXB0b3IgaXMgdHJlYXRlZCBhcyB0aGUgc3RhcnQgb2YgYSBuZXcKLSAgcGFja2V0LCBldmVuIGlmIHRoaXMgd2FzIG5vdCB0aGUgaW50ZW50IChiZWNhdXNlIHdlIGNhbm5vdCBndWVzcwotICB0aGUgaW50ZW50KS4gQXMgYmVmb3JlLCBpZiB5b3VyIHByb2dyYW0gaXMgcHJvZHVjaW5nIGludmFsaWQKLSAgZGVzY3JpcHRvcnMgeW91IGhhdmUgYSBidWcgdGhhdCBtdXN0IGJlIGZpeGVkLgomIzQzOyogV2hlbiBhbiBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgZm91bmQsIHRoZSBjb21wbGV0ZSBwYWNrZXQgaXMgdHJlYXRlZCBhcwomIzQzOyAgaW52YWxpZC4gVGhlIGtlcm5lbCBjb25zdW1lcyBkZXNjcmlwdG9ycyB0aHJvdWdoIHRoZSBkZXNjcmlwdG9yIG1hcmtpbmcKJiM0MzsgIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBhbmQgcmV0dXJucyBhbGwgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIHRocm91Z2ggdGhlCiYjNDM7ICBDT01QTEVUSU9OIHJpbmcuIEEgc3RhbmRhbG9uZSBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgdHJlYXRlZCBhcyBhCiYjNDM7ICBvbmUtZGVzY3JpcHRvciBpbnZhbGlkIHBhY2tldC4gVGhlIGRlc2NyaXB0b3IgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlCiYjNDM7ICBpbnZhbGlkIHBhY2tldCBpcyB0cmVhdGVkIGFzIHRoZSBzdGFydCBvZiBhIG5ldyBwYWNrZXQuIEFzIGJlZm9yZSwgaWYKJiM0MzsgIHlvdXIgcHJvZ3JhbSBpcyBwcm9kdWNpbmcgaW52YWxpZCBkZXNjcmlwdG9ycyB5b3UgaGF2ZSBhIGJ1ZyB0aGF0IG11c3QKJiM0MzsgIGJlIGZpeGVkLiBSZWplY3RlZCBkZXNjcmlwdG9ycyBhcmUgcmVwb3J0ZWQgaW4gdGhlIGBgdHhfaW52YWxpZF9kZXNjc2BgCiYjNDM7ICBzdGF0aXN0aWMuCiAKICogWmVybyBsZW5ndGggZGVzY3JpcHRvcnMgYXJlIHRyZWF0ZWQgYXMgaW52YWxpZCBkZXNjcmlwdG9ycy4KIAogKiBGb3IgY29weSBtb2RlLCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHBhY2tldCBpcwotICBlcXVhbCB0byBDT05GSUdfTUFYX1NLQl9GUkFHUyAmIzQzOyAxLiBJZiBpdCBpcyBleGNlZWRlZCwgYWxsCi0gIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIHNvIGZhciBhcmUgZHJvcHBlZCBhbmQgdHJlYXRlZCBhcwotICBpbnZhbGlkLiBUbyBwcm9kdWNlIGFuIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCB3b3JrIG9uIGFueSBzeXN0ZW0KLSAgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZyBzZXR0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGZyYWdzIHRvIDE4LAotICBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgY29uZmlnIGlzIDE3LgomIzQzOyAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgJiM0MzsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbCBkZXNjcmlwdG9ycwomIzQzOyAgdGhyb3VnaCB0aGUgZW5kIG9mIHRoZSBvdmVyc2l6ZWQgcGFja2V0IGFyZSBjb25zdW1lZCwgdHJlYXRlZCBhcyBpbnZhbGlkLAomIzQzOyAgYW5kIHRoZWlyIGZyYW1lIGFkZHJlc3NlcyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgQ09NUExFVElPTiByaW5nLiBUbwomIzQzOyAgcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtIHJlZ2FyZGxlc3Mgb2YgdGhpcwomIzQzOyAgY29uZmlnIHNldHRpbmcsIGxpbWl0IHRoZSBudW1iZXIgb2YgZnJhZ3MgdG8gMTgsIGFzIHRoZSBtaW5pbXVtIHZhbHVlIG9mCiYjNDM7ICB0aGUgY29uZmlnIGlzIDE3LgogCiAqIEZvciB6ZXJvLWNvcHkgbW9kZSwgdGhlIGxpbWl0IGlzIHVwIHRvIHdoYXQgdGhlIE5JQyBIVwogICBzdXBwb3J0cy4gVXN1YWxseSBhdCBsZWFzdCBmaXZlIG9uIHRoZSBOSUNzIHdlIGhhdmUgY2hlY2tlZC4gV2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sgewogCSAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuCiAJICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCBkcmFpbl9jb250OwogCiAJc3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDsKIAkvKiBQcm90ZWN0cyBtYXBfbGlzdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaApAQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgewogCXUzMiBjaHVua19zaXplOwogCXUzMiBjaHVua19zaGlmdDsKIAl1MzIgZnJhbWVfbGVuOwomIzQzOwl1MzIgdHhfZGVzY3NfbmVudHJpZXM7CiYjNDM7CXUzMiByZWNsYWltX2Rlc2NzOwomIzQzOwl1MzIgdHhfemNfcGVuZGluZ19kZXNjczsKIAl1MzIgeGRwX3pjX21heF9zZWdzOwogCXU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqLwogCXU4IGNhY2hlZF9uZWVkX3dha2V1cDsKQEAgLTEwMiwxMiAmIzQzOzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7CiAKIC8qIEFGX1hEUCBjb3JlLiAqLwogc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cywKLQkJCQkJCXN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7CiYjNDM7CQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtLAomIzQzOwkJCQkJCXUzMiBtYXhfc2Vncyk7CiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7CiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cywKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpOwotaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTsKJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkgICAgICB1MzIgbWF4X3NlZ3MpOwogdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTsKIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpOwogYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7CmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCBiOTcwZjMwZWE5YjlkOC4uZjkwNmQ1MWI2Njk5MDQgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdCkKIAogdm9pZCB4c2tfdHhfY29tcGxldGVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfZW50cmllcykKIHsKJiM0MzsJdTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7cmVjbGFpbV9kZXNjcyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcyk7CiYjNDM7CiYjNDM7CQlpZiAobmJfZW50cmllcyAmbHQ7IHBlbmRpbmdfZGVzY3MpIHsKJiM0MzsJCQlXUklURV9PTkNFKHBvb2wtJmd0O3R4X3pjX3BlbmRpbmdfZGVzY3MsCiYjNDM7CQkJCSAgIHBlbmRpbmdfZGVzY3MgLSBuYl9lbnRyaWVzKTsKJiM0MzsJCQl4c2txX3Byb2Rfc3VibWl0X24ocG9vbC0mZ3Q7Y3EsIG5iX2VudHJpZXMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywgMCk7CiYjNDM7CQluYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzOwomIzQzOwkJV1JJVEVfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzLCAwKTsKJiM0MzsJfQomIzQzOwogCXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgbmJfZW50cmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpOwpAQCAtNTc0LDI0ICYjNDM7NTkxLDE1NyBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50cgogCXJldHVybiBuYl9wa3RzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkJc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpCiYjNDM7ewomIzQzOwl1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpOwomIzQzOwl1MzIgY3FfY2FjaGVkX3Byb2Q7CiYjNDM7CiYjNDM7CWlmICghbmJfZGVzY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNxX2NhY2hlZF9wcm9kID0gcG9vbC0mZ3Q7Y3EtJmd0O2NhY2hlZF9wcm9kOwomIzQzOwl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX2Rlc2NzKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIGNxX3BlbmRpbmdfZGVzY3M7CiYjNDM7CiYjNDM7CQkvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdAomIzQzOwkJICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMKJiM0MzsJCSAqIGFwcGVuZGVkIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQljcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtJmd0O2NxKTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywKJiM0MzsJCQkgICBiYXRjaC0mZ3Q7dHhfZGVzY3MgJiM0MzsgY3FfcGVuZGluZ19kZXNjcyk7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MsIGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKTsKJiM0MzsJCWlmICh1bmxpa2VseSghcG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcykpCiYjNDM7CQkJeHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaAomIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAomIzQzOwkJCQkgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJdTMyIGVudHJpZXM7CiYjNDM7CiYjNDM7CWVudHJpZXMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy0mZ3Q7dHgsIG1heF9kZXNjcyk7CiYjNDM7CWlmICghZW50cmllcykKJiM0MzsJCXJldHVybiBiYXRjaDsKJiM0MzsKJiM0MzsJYmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTsKJiM0MzsJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtiYXRjaCkpIHsKJiM0MzsJCXhzLSZndDt0eC0mZ3Q7cXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwl9IGVsc2UgewomIzQzOwkJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJeHMtJmd0O3NrLnNrX3dyaXRlX3NwYWNlKCZhbXA7eHMtJmd0O3NrKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9OwomIzQzOwlib29sIGJ1ZGdldF9leGhhdXN0ZWQ7CiYjNDM7CXUzMiBwZXJfc29ja2V0X2J1ZGdldDsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsKJiM0MzsJLyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqLwomIzQzOwlwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULAomIzQzOwkJCQkgIHBvb2wtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiYjNDM7YWdhaW46CiYjNDM7CWJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTsKJiM0MzsJY3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpIHsKJiM0MzsJCXUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZywgdXNlZDsKJiM0MzsJCXN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDsKJiM0MzsKJiM0MzsJCS8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1EKJiM0MzsJCSAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycwomIzQzOwkJICogZnJvbSBhbm90aGVyIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uCiYjNDM7CQkgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHkKJiM0MzsJCSAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBiZSBnZW50bGUgd2hlbiBwbGF5aW5nIHdpdGggcG9vbC0mZ3Q7dHhfZGVzY3MgKi8KJiM0MzsJCW9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcygmYW1wO3N1bV9iYXRjaCk7CiYjNDM7CQlpZiAob2Zmc2V0ICZndDs9IG1heF9kZXNjcykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmICh4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICZndDs9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7CiYjNDM7CQkJaWYgKHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgMSkpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLSZndDt0eF9idWRnZXRfc3BlbnQ7CiYjNDM7CQlyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7CiYjNDM7CQlidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7CiYjNDM7CiYjNDM7CQljdXJyX2JhdGNoID0gX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsCiYjNDM7CQkJCQkJCSAgICAgIHBvb2wtJmd0O3R4X2Rlc2NzICYjNDM7IG9mZnNldCwKJiM0MzsJCQkJCQkJICAgICAgYnVkZ2V0KTsKJiM0MzsJCXVzZWQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtjdXJyX2JhdGNoKTsKJiM0MzsJCWlmICghdXNlZCkgewomIzQzOwkJCWlmIChjdXJyX2JhdGNoLmJ1ZGdldF9saW1pdGVkICZhbXA7JmFtcDsgYnVkZ2V0X2xlZnQgJmx0OyByZW1haW5pbmcpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJeHMtJmd0O3R4X2J1ZGdldF9zcGVudCAmIzQzOz0gdXNlZDsKJiM0MzsJCXN1bV9iYXRjaC50eF9kZXNjcyAmIzQzOz0gY3Vycl9iYXRjaC50eF9kZXNjczsKJiM0MzsJCXN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzID0gY3Vycl9iYXRjaC5yZWNsYWltX2Rlc2NzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNxX2Rlc2NzX2FmdGVyID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsKJiM0MzsJaWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyICZndDs9IG1heF9kZXNjcykKJiM0MzsJCXJldHVybiBzdW1fYmF0Y2g7CiYjNDM7CiYjNDM7CS8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovCiYjNDM7CWlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpCiYjNDM7CQlnb3RvIGFnYWluOwomIzQzOwomIzQzOwlpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpCiYjNDM7CQlyZXR1cm4gc3VtX2JhdGNoOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgJmFtcDtwb29sLSZndDt4c2tfdHhfbGlzdCwgdHhfbGlzdCkKJiM0MzsJCXhzLSZndDt0eF9idWRnZXRfc3BlbnQgPSAwOwomIzQzOwlnb3RvIGFnYWluOwomIzQzO30KJiM0MzsKIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKQogewomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307CiAJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsJYm9vbCB1bWVtX3NoYXJlZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoIWxpc3RfaXNfc2luZ3VsYXIoJmFtcDtwb29sLSZndDt4c2tfdHhfbGlzdCkpIHsKLQkJLyogRmFsbGJhY2sgdG8gdGhlIG5vbi1iYXRjaGVkIHZlcnNpb24gKi8KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpOwotCX0KJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzKSkpCiYjNDM7CQlnb3RvIG91dDsKIAotCXhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdSgmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssIHR4X2xpc3QpOwotCWlmICgheHMpIHsKLQkJbmJfcGt0cyA9IDA7CiYjNDM7CXhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdSgmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssCiYjNDM7CQkJCSAgICB0eF9saXN0KTsKJiM0MzsJaWYgKCF4cykKIAkJZ290byBvdXQ7Ci0JfQogCi0JbmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgbmJfcGt0cyk7CiYjNDM7CW5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC0mZ3Q7dHhfZGVzY3NfbmVudHJpZXMpOwomIzQzOwlpZiAoIW5iX3BrdHMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJdW1lbV9zaGFyZWQgPSAhbGlzdF9pc19zaW5ndWxhcigmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0KTsKJiM0MzsKJiM0MzsJaWYgKHVtZW1fc2hhcmVkICZhbXA7JmFtcDsgIShwb29sLSZndDt1bWVtLSZndDtmbGFncyAmYW1wOyBYRFBfVU1FTV9TR19GTEFHKSkgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTsKJiM0MzsJfQogCiAJLyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguIFRyeSB0bwogCSAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXQKQEAgLTYwMywxOSAmIzQzOzc1MywxNiBAQCB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cykKIAlpZiAoIW5iX3BrdHMpCiAJCWdvdG8gb3V0OwogCi0JbmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtJmd0O3R4LCBwb29sLCBuYl9wa3RzKTsKLQlpZiAoIW5iX3BrdHMpIHsKLQkJeHMtJmd0O3R4LSZndDtxdWV1ZV9lbXB0eV9kZXNjcyYjNDM7JiM0Mzs7Ci0JCWdvdG8gb3V0OwotCX0KLQotCV9feHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKLQl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX3BrdHMpOwotCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CWJhdGNoID0gdW1lbV9zaGFyZWQgPwomIzQzOwkJeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKSA6CiYjNDM7CQlfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywKJiM0MzsJCQkJCQkgcG9vbC0mZ3Q7dHhfZGVzY3MsCiYjNDM7CQkJCQkJIG5iX3BrdHMpOwomIzQzOwl4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsICZhbXA7YmF0Y2gpOwogCiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIG5iX3BrdHM7CiYjNDM7CXJldHVybiBiYXRjaC50eF9kZXNjczsKIH0KIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTsKIApAQCAtNzM3LDYgJiM0Mzs4ODQsMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9vbC0mZ3Q7Y3FfcHJvZF9sb2NrLCBmbGFncyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIGlkeDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwb29sLSZndDtjcV9wcm9kX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWR4ID0geHNrcV9nZXRfcHJvZChwb29sLSZndDtjcSk7CiYjNDM7CXhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtJmd0O2NxLCBpZHgsIGRlc2MtJmd0O2FkZHIpOwomIzQzOwl4c2txX3Byb2Rfc3VibWl0X24ocG9vbC0mZ3Q7Y3EsIDEpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9vbC0mZ3Q7Y3FfcHJvZF9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKQogewogCXNwaW5fbG9jaygmYW1wO3Bvb2wtJmd0O2NxLSZndDtjcV9jYWNoZWRfcHJvZF9sb2NrKTsKQEAgLTc5NCw4ICYjNDM7OTU0LDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl4ZHBfc2soc2tiLSZndDtzayktJmd0O3R4LSZndDtpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7Ci0JeHNrX2NvbnN1bWVfc2tiKHNrYik7CiYjNDM7CXN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLSZndDtzayk7CiYjNDM7CiYjNDM7CXhzLSZndDt0eC0mZ3Q7aW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpOwomIzQzOwljb25zdW1lX3NrYihza2IpOwomIzQzOwl4cy0mZ3Q7c2tiID0gTlVMTDsKIH0KIAogc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlciwKQEAgLTg3Nyw3ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAkJLyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LAotCQkgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYgomIzQzOwkJICogeHNrX2Ryb3Bfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2IKIAkJICogd291bGQgYmUgZHJvcHBlZCwgd2hpY2ggaW1wbGllcyBmcmVlaW5nIGFsbCBsaXN0IGVsZW1lbnRzCiAJCSAqLwogCQl4c2tfYWRkci0mZ3Q7YWRkcnNbeHNrX2FkZHItJmd0O251bV9kZXNjc10gPSBkZXNjLSZndDthZGRyOwpAQCAtOTY5LDYgJiM0MzsxMTMyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsCiAJCQkJZ290byBmcmVlX2VycjsKIAkJCX0KIAomIzQzOwkJCXhza19hZGRyLSZndDthZGRyc1t4c2tfYWRkci0mZ3Q7bnVtX2Rlc2NzXSA9IGRlc2MtJmd0O2FkZHI7CiYjNDM7CiAJCQlpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSAmYW1wOyZhbXA7IHhwX21iX2Rlc2MoZGVzYykpKSB7CiAJCQkJZXJyID0gLUVPVkVSRkxPVzsKIAkJCQlnb3RvIGZyZWVfZXJyOwpAQCAtOTg2LDggJiM0MzsxMTUxLDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsCiAKIAkJCXNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7CiAJCQlyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCAmYW1wO3hzLSZndDtzay5za193bWVtX2FsbG9jKTsKLQotCQkJeHNrX2FkZHItJmd0O2FkZHJzW3hza19hZGRyLSZndDtudW1fZGVzY3NdID0gZGVzYy0mZ3Q7YWRkcjsKIAkJfQogCX0KIApAQCAtMTAyNSwxMyAmIzQzOzExODgsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsCiBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7Ci0JYm9vbCBzZW50X2ZyYW1lID0gZmFsc2U7CiAJc3RydWN0IHhkcF9kZXNjIGRlc2M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdTMyIGNhY2hlZF9jb25zOwogCXUzMiBtYXhfYmF0Y2g7CiAJaW50IGVyciA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKJiM0MzsJY2FjaGVkX2NvbnMgPSB4cy0mZ3Q7dHgtJmd0O2NhY2hlZF9jb25zOwogCiAJLyogU2luY2Ugd2UgZHJvcHBlZCB0aGUgUkNVIHJlYWQgbG9jaywgdGhlIHNvY2tldCBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuICovCiAJaWYgKHVubGlrZWx5KCF4c2tfaXNfYm91bmQoeHMpKSkgewpAQCAtMTA2MCwxMSAmIzQzOzEyMjQsMjEgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKQogCQkJZ290byBvdXQ7CiAJCX0KIAomIzQzOwkJaWYgKHVubGlrZWx5KHhzLSZndDtkcmFpbl9jb250KSkgewomIzQzOwkJCXhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLSZndDtwb29sLCAmYW1wO2Rlc2MpOwomIzQzOwkJCXhzLSZndDt0eC0mZ3Q7aW52YWxpZF9kZXNjcyYjNDM7JiM0Mzs7CiYjNDM7CQkJeHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKJiM0MzsJCQl4cy0mZ3Q7ZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoJmFtcDtkZXNjKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJc2tiID0geHNrX2J1aWxkX3NrYih4cywgJmFtcDtkZXNjKTsKIAkJaWYgKElTX0VSUihza2IpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHNrYik7CiAJCQlpZiAoZXJyICE9IC1FT1ZFUkZMT1cpCiAJCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKHhwX21iX2Rlc2MoJmFtcDtkZXNjKSkKJiM0MzsJCQkJeHMtJmd0O2RyYWluX2NvbnQgPSB0cnVlOwogCQkJZXJyID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMDkzLDE4ICYjNDM7MTI2NywzMyBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXNlbnRfZnJhbWUgPSB0cnVlOwogCQl4cy0mZ3Q7c2tiID0gTlVMTDsKIAl9CiAKIAlpZiAoeHNrcV9oYXNfZGVzY3MoeHMtJmd0O3R4KSkgewomIzQzOwkJYm9vbCBkcmFpbiA9IHhzLSZndDtza2IgfHwgeHMtJmd0O2RyYWluX2NvbnQgfHwgeHBfbWJfZGVzYygmYW1wO2Rlc2MpOwomIzQzOwomIzQzOwkJZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLSZndDtwb29sKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQl4cy0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MtLTsKJiM0MzsJCQlpZiAoeHMtJmd0O3NrYikKJiM0MzsJCQkJeHNrX2Ryb3Bfc2tiKHhzLSZndDtza2IpOwomIzQzOwkJCXhzLSZndDtkcmFpbl9jb250ID0gZHJhaW47CiYjNDM7CQkJZXJyID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKHhzLSZndDtza2IpCiAJCQl4c2tfZHJvcF9za2IoeHMtJmd0O3NrYik7CiYjNDM7CiYjNDM7CQl4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy0mZ3Q7cG9vbCwgJmFtcDtkZXNjKTsKJiM0MzsKIAkJeHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKJiM0MzsJCXhzLSZndDtkcmFpbl9jb250ID0geHBfbWJfZGVzYygmYW1wO2Rlc2MpOwogCX0KIAogb3V0OgotCWlmIChzZW50X2ZyYW1lKQomIzQzOwlpZiAoeHMtJmd0O3R4LSZndDtjYWNoZWRfY29ucyAhPSBjYWNoZWRfY29ucykKIAkJX194c2tfdHhfcmVsZWFzZSh4cyk7CiAKIAltdXRleF91bmxvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpOwpAQCAtMTQ4Myw3ICYjNDM7MTY3Miw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyCiAJCQkgKiBhbmQvb3IgZGV2aWNlLgogCQkJICovCiAJCQl4cy0mZ3Q7cG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsCi0JCQkJCQkJICAgICB1bWVtX3hzLSZndDt1bWVtKTsKJiM0MzsJCQkJCQkJICAgICB1bWVtX3hzLSZndDt1bWVtLAomIzQzOwkJCQkJCQkgICAgIGRldi0mZ3Q7eGRwX3pjX21heF9zZWdzKTsKIAkJCWlmICgheHMtJmd0O3Bvb2wpIHsKIAkJCQllcnIgPSAtRU5PTUVNOwogCQkJCXNvY2tmZF9wdXQoc29jayk7CkBAIC0xNTE1LDcgJiM0MzsxNzA1LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJCSAqIHV0aWxpemVzCiAJCQkgKi8KIAkJCWlmICh4cy0mZ3Q7dHggJmFtcDsmYW1wOyAheHMtJmd0O3Bvb2wtJmd0O3R4X2Rlc2NzKSB7Ci0JCQkJZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtJmd0O3Bvb2wsIHhzKTsKJiM0MzsJCQkJZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtJmd0O3Bvb2wsIHhzLAomIzQzOwkJCQkJCQlkZXYtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiAJCQkJaWYgKGVycikgewogCQkJCQl4cF9wdXRfcG9vbCh4cy0mZ3Q7cG9vbCk7CiAJCQkJCXhzLSZndDtwb29sID0gTlVMTDsKQEAgLTE1MzMsNyAmIzQzOzE3MjQsOSBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCQlnb3RvIG91dF91bmxvY2s7CiAJfSBlbHNlIHsKIAkJLyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi8KLQkJeHMtJmd0O3Bvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy0mZ3Q7dW1lbSk7CiYjNDM7CQl4cy0mZ3Q7cG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLSZndDt1bWVtLAomIzQzOwkJCQkJCSAgICAgZGV2LSZndDt4ZHBfemNfbWF4X3NlZ3MpOwomIzQzOwogCQlpZiAoIXhzLSZndDtwb29sKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfdW5sb2NrOwpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuYwppbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jCkBAIC00MiwxNyAmIzQzOzQyLDIyIEBAIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCkKIAlrdmZyZWUocG9vbCk7CiB9CiAKLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cykKJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkgICAgICB1MzIgbWF4X3NlZ3MpCiB7Ci0JcG9vbC0mZ3Q7dHhfZGVzY3MgPSBrdnphbGxvY19vYmpzKCpwb29sLSZndDt0eF9kZXNjcywgeHMtJmd0O3R4LSZndDtuZW50cmllcyk7CiYjNDM7CXUzMiBuZW50cmllcyA9IG1heCh4cy0mZ3Q7dHgtJmd0O25lbnRyaWVzLCBtYXhfc2Vncyk7CiYjNDM7CiYjNDM7CXBvb2wtJmd0O3R4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC0mZ3Q7dHhfZGVzY3MsIG5lbnRyaWVzKTsKIAlpZiAoIXBvb2wtJmd0O3R4X2Rlc2NzKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlwb29sLSZndDt0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzOwogCXJldHVybiAwOwogfQogCiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLAotCQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtKQomIzQzOwkJCQkJCXN0cnVjdCB4ZHBfdW1lbSAqdW1lbSwKJiM0MzsJCQkJCQl1MzIgbWF4X3NlZ3MpCiB7CiAJYm9vbCB1bmFsaWduZWQgPSB1bWVtLSZndDtmbGFncyAmYW1wOyBYRFBfVU1FTV9VTkFMSUdORURfQ0hVTktfRkxBRzsKIAlzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDsKQEAgLTY5LDcgJiM0Mzs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsCiAJCWdvdG8gb3V0OwogCiAJaWYgKHhzLSZndDt0eCkKLQkJaWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzKSkKJiM0MzsJCWlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cywgbWF4X3NlZ3MpKQogCQkJZ290byBvdXQ7CiAKIAlwb29sLSZndDtjaHVua19tYXNrID0gfigodTY0KXVtZW0tJmd0O2NodW5rX3NpemUgLSAxKTsKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX3F1ZXVlLmggYi9uZXQveGRwL3hza19xdWV1ZS5oCmluZGV4IDNlM2ZiYjczZDIzZTJmLi4xYmM0MmM4OTAyZjRiYSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hza19xdWV1ZS5oCkBAIC01OCw2ICYjNDM7NTgsMTcgQEAgc3RydWN0IHBhcnNlZF9kZXNjIHsKIAl1MzIgdmFsaWQ7CiB9OwogCiYjNDM7c3RydWN0IHhza190eF9iYXRjaCB7CiYjNDM7CXUzMiB0eF9kZXNjczsKJiM0MzsJdTMyIHJlY2xhaW1fZGVzY3M7CiYjNDM7CWJvb2wgYnVkZ2V0X2xpbWl0ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHUzMiB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoY29uc3Qgc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmF0Y2gtJmd0O3R4X2Rlc2NzICYjNDM7IGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzOwomIzQzO30KJiM0MzsKIC8qIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNoYXJlZCBzdGF0ZSBvZiB0aGUgcmluZ3MgYXJlIGEgc2ltcGxlCiAgKiBjaXJjdWxhciBidWZmZXIsIGFzIG91dGxpbmVkIGluCiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZApAQCAtMjYzLDE3ICYjNDM7Mjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAogCXBhcnNlZC0mZ3Q7bWIgPSB4cF9tYl9kZXNjKGRlc2MpOwogfQogCi1zdGF0aWMgaW5saW5lCi11MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKLQkJCSAgICAgIHUzMiBtYXgpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpCiB7Ci0JdTMyIGNhY2hlZF9jb25zID0gcS0mZ3Q7Y2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwOwotCXN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MgPSBwb29sLSZndDt0eF9kZXNjczsKLQl1MzIgdG90YWxfZGVzY3MgPSAwLCBucl9mcmFncyA9IDA7CiYjNDM7CWJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtJmd0O2RyYWluX2NvbnQpOwomIzQzOwl1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307CiYjNDM7CXN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy0mZ3Q7dHg7CiYjNDM7CXUzMiBucl9mcmFncyA9IDA7CiYjNDM7CiYjNDM7CWNhY2hlZF9jb25zID0gcS0mZ3Q7Y2FjaGVkX2NvbnM7CiAKLQkvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kCi0JICogY3VycmVudCBwYWNrZXQgdGhhdCBjb25zaXN0cyBvZiBmcmFncyBhbmQgc3RvcCB0aGUgcHJvY2Vzc2luZwotCSAqLwogCXdoaWxlIChjYWNoZWRfY29ucyAhPSBxLSZndDtjYWNoZWRfcHJvZCAmYW1wOyZhbXA7IG5iX2VudHJpZXMgJmx0OyBtYXgpIHsKIAkJc3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLSZndDtyaW5nOwogCQl1MzIgaWR4ID0gY2FjaGVkX2NvbnMgJmFtcDsgcS0mZ3Q7cmluZ19tYXNrOwpAQCAtMjgzLDI1ICYjNDM7Mjk1LDQyIEBAIHUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAogCQljYWNoZWRfY29ucyYjNDM7JiM0Mzs7CiAJCXBhcnNlX2Rlc2MocSwgcG9vbCwgJmFtcDtkZXNjc1tuYl9lbnRyaWVzXSwgJmFtcDtwYXJzZWQpOwogCQlpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpCi0JCQlicmVhazsKJiM0MzsJCQlkcmFpbiA9IHRydWU7CiYjNDM7CiYjNDM7CQlucl9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQluYl9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7Ci0JCQl0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpOwotCQkJbnJfZnJhZ3MgPSAwOwotCQl9IGVsc2UgewotCQkJbnJfZnJhZ3MmIzQzOyYjNDM7OwotCQkJaWYgKG5yX2ZyYWdzID09IHBvb2wtJmd0O3hkcF96Y19tYXhfc2VncykgewomIzQzOwkJCWlmICh1bmxpa2VseShkcmFpbikpIHsKJiM0MzsJCQkJYmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzOwomIzQzOwkJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCBmYWxzZSk7CiAJCQkJbnJfZnJhZ3MgPSAwOwogCQkJCWJyZWFrOwogCQkJfQomIzQzOwomIzQzOwkJCWJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFnczsKJiM0MzsJCQlucl9mcmFncyA9IDA7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobnJfZnJhZ3MgPT0gcG9vbC0mZ3Q7eGRwX3pjX21heF9zZWdzKQomIzQzOwkJCWRyYWluID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfZnJhZ3MpIHsKJiM0MzsJCWlmIChkcmFpbikgewomIzQzOwkJCWJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFnczsKJiM0MzsJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKG5iX2VudHJpZXMgPT0gbWF4KQomIzQzOwkJCQliYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7CiYjNDM7CQkJY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJCX0KLQkJbmJfZW50cmllcyYjNDM7JiM0Mzs7CiAJfQogCi0JY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJLyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi8KIAl4c2txX2NvbnNfcmVsZWFzZV9uKHEsIGNhY2hlZF9jb25zIC0gcS0mZ3Q7Y2FjaGVkX2NvbnMpOwotCXJldHVybiB0b3RhbF9kZXNjczsKJiM0MzsJcmV0dXJuIGJhdGNoOwogfQogCiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNDc3YWVkYmIwMWJhZDguLjQ1NDkzNThjYzhjMjFkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKQEAgLTQyNywxNCAmIzQzOzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwawogCX0KIAogCS8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi8KLQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSB8fCAhcGt0LSZndDt2YWxpZCkKJiM0MzsJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykpCiAJCXJldHVybiBuYl9mcmFnczsKIAogCW5leHRfZnJhZyA9IHBrdF9zdHJlYW0tJmd0O2N1cnJlbnRfcGt0X25iOwogCXBrdCYjNDM7JiM0Mzs7CiAJd2hpbGUgKG5leHRfZnJhZyYjNDM7JiM0MzsgJmx0OyBwa3Rfc3RyZWFtLSZndDtuYl9wa3RzKSB7CiAJCW5iX2ZyYWdzJiM0MzsmIzQzOzsKLQkJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykgfHwgIXBrdC0mZ3Q7dmFsaWQpCiYjNDM7CQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSkKIAkJCWJyZWFrOwogCQlwa3QmIzQzOyYjNDM7OwogCX0KQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgcwogCQkJaWYgKCFmcmFtZS0mZ3Q7dmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQogCQkJCXBheWxvYWQmIzQzOyYjNDM7OwogCQl9IGVsc2UgewotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCkKJiM0MzsJCQlpZiAoZnJhbWUtJmd0O3ZhbGlkKSB7CiAJCQkJbGVuICYjNDM7PSBmcmFtZS0mZ3Q7bGVuOwotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCAmYW1wOyZhbXA7IHBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQotCQkJCWNvbnRpbnVlOwotCiYjNDM7CQkJCWlmIChwa3RfY29udGludWVzKGZyYW1lLSZndDtvcHRpb25zKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXBrdC0mZ3Q7cGt0X25iID0gcGt0X25iOwogCQkJcGt0LSZndDtsZW4gPSBsZW47CiAJCQlwa3QtJmd0O3ZhbGlkID0gZnJhbWUtJmd0O3ZhbGlkOwpAQCAtMTI1MCwxMCAmIzQzOzEyNTAsOSBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywKIAkJCX0KIAkJfQogCi0JCWlmIChwa3QgJmFtcDsmYW1wOyBwa3QtJmd0O3ZhbGlkKSB7CiYjNDM7CQlpZiAocGt0ICZhbXA7JmFtcDsgcGt0LSZndDt2YWxpZCkKIAkJCXZhbGlkX3BrdHMmIzQzOyYjNDM7OwotCQkJdmFsaWRfZnJhZ3MgJiM0Mzs9IG5iX2ZyYWdzOwotCQl9CiYjNDM7CQl2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7CiAJfQogCiAJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7cGFjaW5nX211dGV4KTsKQEAgLTIwOTksMTMgJiM0MzsyMDk4LDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCQl7MCwgMCwgMCwgZmFsc2UsIDB9LAogCQkvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqLwogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSwKLQkJe3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi8KIAkJezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovCiAJCXswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LAogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LAomIzQzOwkJezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LAogCQkvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi8KIAkJezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LApAQCAtMjExNyw4ICYjNDM7MjExOSw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCiAJaWYgKHVtZW0tJmd0O3VuYWxpZ25lZF9tb2RlKSB7CiAJCS8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqLwotCQlwa3RzWzEyXS52YWxpZCA9IHRydWU7Ci0JCXBrdHNbMTNdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTVdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTZdLnZhbGlkID0gdHJ1ZTsKIAl9CiAKIAl0ZXN0LSZndDttdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7CkBAIC0yMjcwLDcgJiM0MzsyMjcyLDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJbWF4X2ZyYWdzICYjNDM7PSAxOwogCX0KIAotCXBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpOwomIzQzOwlwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTsKIAlpZiAoIXBrdHMpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKQEAgLTIyODgsMjQgJiM0MzsyMjkwLDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJfQogCXBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDsKIAotCS8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0Ci0JICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWcKLQkgKi8KLQlmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSAmbHQ7IDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovCiYjNDM7CWZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpICZsdDsgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykgewogCQlwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTsKIAkJcGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDsKLQkJcGt0c1tpXS52YWxpZCA9IGZhbHNlOwomIzQzOwkJcGt0c1tpXS52YWxpZCA9IHRydWU7CiAJfQomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7CiAKIAkvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovCi0JcGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTsKLQlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlOwogCi0JaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHsKJiM0MzsJaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHsKIAkJZnJlZShwa3RzKTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKJiM0MzsJLyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0CiYjNDM7CSAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUngKJiM0MzsJICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuCiYjNDM7CSAqLwomIzQzOwl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtwa3Rfc3RyZWFtLSZndDtwa3RzWzJdLnZhbGlkID0gZmFsc2U7CiYjNDM7CXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3BrdF9zdHJlYW0tJmd0O25iX3ZhbGlkX2VudHJpZXMtLTsKJiM0MzsKIAlyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7CiAJZnJlZShwa3RzKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRl9YRFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEFGX1hEUCBpbiB0aGUgTGludXgga2VybmVsLiBTZWVtcyBsaWtlIGEgZmFpcmx5IGludm9sdmVkIG1vZGlmaWNhdGlvbiwgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdGAsIHZhcmlvdXMgaGVhZGVyIGZpbGVzIChgeGRwX3NvY2suaGAsIGB4c2tfYnVmZl9wb29sLmhgLCBgeHNrX3F1ZXVlLmhgKSwgYW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGZpbGVzIChgeHNrLmNgLCBgeHNrX2J1ZmZfcG9vbC5jYCkuIEl0IGV2ZW4gaW5jbHVkZXMgYSBtb2RpZmljYXRpb24gdG8gYSBzZWxmdGVzdCAoYHRlc3RfeHNrLmNgKSwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSB0cml2aWFsIHR3ZWFrOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmb2N1c2luZyBvbiBob3cgQUZfWERQIGhhbmRsZXMgcG90ZW50aWFsbHkgaW52YWxpZCBkZXNjcmlwdG9ycywgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb21wbGV0aW9uIHJpbmcsIGFuZCBiYXRjaGluZyB3aXRoaW4gYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAuCgpUaGUga2V5IGZ1bmN0aW9ucyBiZWluZyB1cGRhdGVkIGhlcmUgYXJlIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgX194c2tfZ2VuZXJpY194bWl0YCwgYHhza190eF9jb21wbGV0ZWRgLCBhbmQgdGhlIFNLQi1idWlsZGluZyBmdW5jdGlvbnMsIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YC4gVGhpcyBhbGwgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIGltcG9ydGFudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgcGVyaGFwcyBhIGZpeCBmb3Igc29tZSBpZGVudGlmaWVkIGVkZ2UgY2FzZXMuCgpJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgcGF0Y2ggaW4gZGVwdGgsIGJ1dCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVhbGluZyB3aXRoIGRldGFpbHMgb2YgZGVzY3JpcHRvciBtYW5hZ2VtZW50LgoKVGhlIG5leHQgdGhpbmcgSSB3YW50IHRvIGNvbnNpZGVyIGlzIHRoZSBhcHBsaWNhYmlsaXR5IG9mIHRoaXMgY2hhbmdlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSYjMzk7bSBnbGFkIHRoZXkgYXJlIHRoaW5raW5nIGFib3V0IHRoaXMuIEFGX1hEUCBoYXMgcHJvdmVuIHVzZWZ1bCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGJ1dCB0aGlzIHBhdGNoIGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBob3cgd2VsbCBpdCB3b3Jrcy4gSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGF0IEFGX1hEUCBpcyBzdXBwb3J0ZWQgd2l0aCBnZW5lcmljIFhEUCAoU0tCIG1vZGUpIGFuZCB2ZXRoL3ZpcnRpby1uZXQuCgpJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX1hEUF9TT0NLRVRTYCwgdG8gZW5zdXJlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBYRFBfU09DS0VUU2AgYW5kIGBBRl9YRFBgIHdpdGhpbiB0aGUgZmlsZXMgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WERQX1NPQ0tFVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMTU9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoxMTY6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTE3LUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTEzMT1DT05GSUdfTkVUX0tFWT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjEzMjpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMzMtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6NTY6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZzo1NzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNTgtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc9NTE9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo1MjpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo1MzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnLTU0LUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc9NTg9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjU5OkNPTkZJR19YRFBfU09DS0VUUz15XG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NjA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnLTYxLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NDg9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjQ5OkNPTkZJR19YRFBfU09DS0VUUz15XG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnLTUxLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NTA9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjUxOkNPTkZJR19YRFBfU09DS0VUUz15XG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NTI6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnLTUzLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnPTQ5PUNPTkZJR19ORVRfS0VZPXlcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NTE6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy01Mi1DT05GSUdfSU5FVD15XG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTY5PUNPTkZJR19ORVRfS0VZPXlcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZzo3MDpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjcxOkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy03Mi1DT05GSUdfSU5FVD15XG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9NDc9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc6NDg6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjQ5OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnLTUwLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZz00OD1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzo0OTpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctNTEtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc9NDk9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzo1MDpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzo1MTpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnLTUyLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz00ND1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZzo0NTpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc6NDY6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctNDctQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz00NT1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6NDY6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWctNDgtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX0RJQlNfTE89eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEzNDpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEzNTpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MTI0PUNPTkZJR19ESUJTX0xPPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMjU6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMjY6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEyNy1DT05GSUdfSU5FVD15XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTU5PWljZS0kKENPTkZJR19SRlNfQUNDRUwpICYjNDM7PSBpY2VfYXJmcy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU6NjA6aWNlLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0gaWNlX3hzay5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNjEtaWNlLSQoQ09ORklHX0lDRV9TV0lUQ0hERVYpICYjNDM7PSBpY2VfZXN3aXRjaC5vIGljZV9lc3dpdGNoX2JyLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oPTEwPXN0cnVjdCBpY2VfdnNpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmg6MTI6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMy1pbnQgaWNlX3hza19wb29sX3NldHVwKHN0cnVjdCBpY2VfdnNpICp2c2ksIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmg9OTg9aWNlX3F2ZWNfZGlzX2lycShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBzdHJ1Y3QgaWNlX3J4X3JpbmcgKnJ4X3JpbmcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oLTk5LVx0XHQgc3RydWN0IGljZV9xX3ZlY3RvciAqcV92ZWN0b3IpIHsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaDoxMDA6I2VuZGlmIC8qIENPTkZJR19YRFBfU09DS0VUUyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMDEtI2VuZGlmIC8qICFfSUNFX1hTS19IXyAqL1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE3PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTE4OiNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE5LUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTg4Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX25ldF9jdHhfZ2V0X2FsbF91c2VkX2ZsdXNoX2xpc3RzKHN0cnVjdCBsaXN0X2hlYWQgKipsaF9tYXAsXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05MDctXHRsaCA9IFx1MDAyNmJwZl9uZXRfY3R4LVx1MDAzZXhza21hcF9tYXBfZmx1c2hfbGlzdDtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTA4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1hEUF9TT0NLRVRTKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTA5LVx0ICAgIGtlcm5fZmxhZ3MgXHUwMDI2IEJQRl9SSV9GX1hTS19NQVBfSU5JVCBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkobGgpKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9Njc2PXN0cnVjdCBuZXRkZXZfcXVldWUge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNjk3LVx0c3RydWN0IG5ldF9kZXZpY2VcdCpzYl9kZXY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjY5ODojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTY5OS1cdC8qIFwmIzM0O29wcyBwcm90ZWN0ZWRcJiMzNDssIHNlZSBjb21tZW50IGFib3V0IG5ldF9kZXZpY2U6OmxvY2sgKi9cbi0tXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtOS1cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaDoxMDovKiBgYFhEUF9UWE1EX0ZMQUdTX1ZBTElEYGAgaXMgZGVmaW5lZCBvbmx5IHVuZGVyIGBgQ09ORklHX1hEUF9TT0NLRVRTYGAgKi9cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaC0xMS0jaWZkZWYgWERQX1RYTURfRkxBR1NfVkFMSURcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE4My0jZW5kaWZcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoxODQ6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE4NS1cdHN0cnVjdCBuZXRuc194ZHBcdHhkcDtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaD0xND1zdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaC0yNy1cdCAqL1xuaW5jbHVkZS9uZXQvbmV0ZGV2X3J4X3F1ZXVlLmg6Mjg6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuaW5jbHVkZS9uZXQvbmV0ZGV2X3J4X3F1ZXVlLmgtMjktXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAgICAgICAgICAgICpwb29sO1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg9MTE3PXN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfb3BzIHtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTEyMy1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTI0OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTI1LVxuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg9MjQwPXN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfdHhfbWV0YWRhdGFfY29tcGxldGUoc3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwsXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0yNDUtXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjI0NjojZW5kaWYgLyogQ09ORklHX1hEUF9TT0NLRVRTICovXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTI0Ny0jZW5kaWYgLyogX0xJTlVYX1hEUF9TT0NLX0ggKi9cbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD0xOT1zdHJ1Y3QgeHNrX2NiX2Rlc2Mge1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTI0LVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg6MjU6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMjYtXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9NDkzPXN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfYnVmZl9yYXdfZG1hX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00OTgtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo0OTk6I2VuZGlmIC8qIENPTkZJR19YRFBfU09DS0VUUyAqL1xuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNTAwLVxuLS1cbm5ldC9NYWtlZmlsZT03Mj1vYmotJChDT05GSUdfTkVUX05DU0kpXHRcdCYjNDM7PSBuY3NpL1xubmV0L01ha2VmaWxlOjczOm9iai0kKENPTkZJR19YRFBfU09DS0VUUylcdCYjNDM7PSB4ZHAvXG5uZXQvTWFrZWZpbGUtNzQtb2JqLSQoQ09ORklHX01QVENQKVx0XHQmIzQzOz0gbXB0Y3AvXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz00NDE9X19uZXRkZXZfbmxfcXVldWVfZmlsbF9tcChzdHJ1Y3Qgc2tfYnVmZiAqcnNwLCBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpyeHEpXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy00NDgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjQ0OTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTQ1MC1cdGlmIChyeHEtXHUwMDNlcG9vbClcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTQ3NT1uZXRkZXZfbmxfcXVldWVfZmlsbF9vbmUoc3RydWN0IHNrX2J1ZmYgKnJzcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTUwNC1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NTA1OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNTA2LVx0XHRpZiAodHhxLVx1MDAzZXBvb2wpXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmM9MTg3PXN0YXRpYyBpbnQgX19uZXRpZl9tcF9vcGVuX3J4cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcnhxX2lkeCxcbi0tXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yMjAtXHR9XG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYzoyMjE6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmMtMjIyLVx0aWYgKHJ4cS1cdTAwM2Vwb29sKSB7XG4tLVxubmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZHAvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0xMy1cdGRlZmF1bHQgblxuLS1cbm5ldC94ZHAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXG5uZXQveGRwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vXG5uZXQveGRwL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICYjNDM7PSB4c2tfZGlhZy5vXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM3Mi1cdFx0LyogQUZfWERQIHNvY2tldHMgKi9cbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYzozNzM6XHRcdHsgXCYjMzQ7Q09ORklHX1hEUF9TT0NLRVRTXCYjMzQ7LCB9LFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM3NC1cdFx0LyogQlBGX1BST0dfVFlQRV9MV1RfKiBhbmQgcmVsYXRlZCBoZWxwZXJzICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz0xMjc9Q09ORklHX1ZYTEFOPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6MTI4OkNPTkZJR19YRFBfU09DS0VUUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTEyOS1DT05GSUdfWEZSTV9JTlRFUkZBQ0U9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0PTIyMz1DT05GSUdfWDg2X1BPV0VSTk9XX0s4PXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjIyNDpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0yMjUtQ09ORklHX1hGUk1fU1VCX1BPTElDWT15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnPTE2PUNPTkZJR19WTEFOXzgwMjFRPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZzoxNzpDT05GSUdfWERQX1NPQ0tFVFM9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIFNvY2tldCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIGBYRFBfU09DS0VUU2AsIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBmdW5jdGlvbnMgYmVpbmcgdG91Y2hlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgZmV3IGtleSBjb21wb25lbnRzIHdpdGhpbiB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X2NvbXBsZXRlZGAsIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAuCgpJbW1lZGlhdGVseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGFuZCBgX194c2tfZ2VuZXJpY194bWl0YC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgb24gdGhlIGNyaXRpY2FsIHBhdGguIGBfX3hza19nZW5lcmljX3htaXRgIGlzIHRoZSBnZW5lcmljIHRyYW5zbWl0IHBhdGgsIHNvIHRoYXQmIzM5O3MgYSBjZW50cmFsIGZ1bmN0aW9uLiBBbmQgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaGFuZGxlcyByZXRyaWV2aW5nIFRYIGRlc2NyaXB0b3JzIGZyb20gdGhlIEFGX1hEUCBzb2NrZXQsIGEgY29yZSBpbnRlcmFjdGlvbiBwb2ludCB3aXRoIHRoZSBkcml2ZXJzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBiZWluZyBjaGFuZ2VkLiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgc2VlbSByZWxldmFudDoKCiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9jb21wbGV0ZWRgCiogICBgX194c2tfZ2VuZXJpY194bWl0YAoqICAgYHhza19idWlsZF9za2JgCiogICBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAKKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9jb21taXRfYmF0Y2hgCiogICBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAKCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAsIGFuZCBgeHNrX3R4X2NvbW1pdF9iYXRjaGAgYXJlIGFsbCBzdGF0aWMuIEFuZCBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAgaXMgc3RhdGljIGlubGluZS4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgbm90IGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlaXIgcmVzcGVjdGl2ZSBtb2R1bGVzLCBhbmQgaGVscHMgdG8gbmFycm93IGRvd24gdGhlIHNjb3BlIG9mIGltcGFjdC4KClRoZXJlZm9yZSwgbXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIHByaW1hcnkgZnVuY3Rpb25zOgoKKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGBfX3hza19nZW5lcmljX3htaXRgCiogICBgeHNrX2J1aWxkX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoKRmluYWxseSwgYmVmb3JlIEkgZGlnIGZ1cnRoZXIsIEkgc2hvdWxkIGp1c3QgY29uZmlybSB0aGF0IGB4c2tfYnVpbGRfc2tiYCBhbmQgYHhza19idWlsZF9za2JfemVyb2NvcHlgIGFyZSBub3Qgc3RhdGljLCBpbiBvcmRlciB0byBhdm9pZCBtaXNpbnRlcnByZXRpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWlsZF9za2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbi0tXG5uZXQveGRwL3hzay5jLTEwMDUtXG5uZXQveGRwL3hzay5jOjEwMDY6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwMDctXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTEwODEtXG5uZXQveGRwL3hzay5jOjEwODI6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwODMtXHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTEwODktXHRpZiAoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XG5uZXQveGRwL3hzay5jOjEwOTA6XHRcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xubmV0L3hkcC94c2suYy0xMDkxLVx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbi0tXG5uZXQveGRwL3hzay5jPTExODg9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTIzNC1cbm5ldC94ZHAveHNrLmM6MTIzNTpcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG5uZXQveGRwL3hzay5jLTEyMzYtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTI2CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgY2hhbmdlcyB0aGV5JiMzOTt2ZSBtYWRlIGFyZSBmYWlybHkgZnVuZGFtZW50YWwsIGZvY3VzZWQgb24gZW5oYW5jaW5nIHRoZSBUeCBwYXRoIHdpdGhpbiB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBkZWFsaW5nIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgY29tcGxldGlvbiByaW5nIGlzc3VlcywgYW5kIGludHJvZHVjaW5nIHNvbWUgYmF0Y2hpbmcgYW5kIHJlY2xhbWF0aW9uIGxvZ2ljLiBHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGtleSBzeW1ib2xzIGFyZSB0aGUgcmVsZXZhbnQgZm9jYWwgcG9pbnRzIHRvIHRyYWNrOgoKKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGBfX3hza19nZW5lcmljX3htaXRgCiogICBgeHNrX2J1aWxkX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoKVGhvc2UgYWxsIHNlZW0gc3RhdGljIGFuZCBkaXJlY3RseSBhZGRyZXNzIHRoZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgdG8gQUZcX1hEUC4gSSBjYW4gY29uZmlkZW50bHkgaW5jbHVkZSB0aG9zZSBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4KCk5vdywgYXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcy4uLiBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgWERQX1NPQ0tFVFNgIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgaGVyZS4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRvIGJlIGV4dHJhIGNlcnRhaW4sIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGZsYWdzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGJ1aWx0IHVwb24gdGhlIGZ1bmRhbWVudGFsIEFGXF9YRFAgaW5mcmFzdHJ1Y3R1cmUuIEkgdGhpbmsgd2UgYXJlIGdvb2QgdG8gZ28uCgpUaW1lIHRvIGNhbGwgdGhlIHNldC1yZXN1bHRzIGZ1bmN0aW9uIGFuZCBsb2NrIHRoZXNlIHBhcmFtZXRlcnMgaW50byBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgVHggcGF0aC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBhbmQgcmVjbGFpbSBsb2dpYyBmb3IgZGVzY3JpcHRvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQUZfWERQIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBBRl9YRFAgc29ja2V0IG9wZXJhdGlvbnMgKGUuZy4sIHVzaW5nIGdlbmVyaWMgWERQIG1vZGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfY29tcGxldGVkJiMzNDssCiAgICAmIzM0O19feHNrX2dlbmVyaWNfeG1pdCYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGNvbXBsZXRpb24gcmluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGluIHRoZSBUeCBwYXRoLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGFuZCByZWNsYWltIGxvZ2ljIGZvciBkZXNjcmlwdG9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBBRl9YRFAgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFGX1hEUCBzb2NrZXQgb3BlcmF0aW9ucyAoZS5nLiwgdXNpbmcgZ2VuZXJpYyBYRFAgbW9kZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoyMToyNS41ODE2Mjg0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxNDQ0NjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X2NvbXBsZXRlZFwiLFxuICAgIFwiX194c2tfZ2VuZXJpY194bWl0XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGNvbXBsZXRpb24gcmluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGluIHRoZSBUeCBwYXRoLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGFuZCByZWNsYWltIGxvZ2ljIGZvciBkZXNjcmlwdG9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBBRl9YRFAgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFGX1hEUCBzb2NrZXQgb3BlcmF0aW9ucyAoZS5nLiwgdXNpbmcgZ2VuZXJpYyBYRFAgbW9kZSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjI1LjU4MTYzNTg4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzEwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2MwZDg1ODQ1NzMzOTBmN2FkNTlkZmE1ZmU1ODBmYmQ5NmNlNWM0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoyMToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XFxuaW5kZXggNTBkOTIwODRhNDljNmEuLmNjM2YwZDE2YjI4ZmI2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RcXG5AQCAtNDMsMTIgKzQzLDEzIEBAIFVNRU0gYWxzbyBoYXMgdHdvIHJpbmdzOiB0aGUgRklMTCByaW5nIGFuZCB0aGUgQ09NUExFVElPTiByaW5nLiBUaGVcXG4gRklMTCByaW5nIGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbmQgZG93biBhZGRyIGZvciB0aGUga2VybmVsXFxuIHRvIGZpbGwgaW4gd2l0aCBSWCBwYWNrZXQgZGF0YS4gUmVmZXJlbmNlcyB0byB0aGVzZSBmcmFtZXMgd2lsbCB0aGVuXFxuIGFwcGVhciBpbiB0aGUgUlggcmluZyBvbmNlIGVhY2ggcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkLiBUaGVcXG4tQ09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkciB0aGF0IHRoZVxcbi1rZXJuZWwgaGFzIHRyYW5zbWl0dGVkIGNvbXBsZXRlbHkgYW5kIGNhbiBub3cgYmUgdXNlZCBhZ2FpbiBieSB1c2VyXFxuLXNwYWNlLCBmb3IgZWl0aGVyIFRYIG9yIFJYLiBUaHVzLCB0aGUgZnJhbWUgYWRkcnMgYXBwZWFyaW5nIGluIHRoZVxcbi1DT01QTEVUSU9OIHJpbmcgYXJlIGFkZHJzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHRyYW5zbWl0dGVkIHVzaW5nIHRoZVxcbi1UWCByaW5nLiBJbiBzdW1tYXJ5LCB0aGUgUlggYW5kIEZJTEwgcmluZ3MgYXJlIHVzZWQgZm9yIHRoZSBSWCBwYXRoXFxuLWFuZCB0aGUgVFggYW5kIENPTVBMRVRJT04gcmluZ3MgYXJlIHVzZWQgZm9yIHRoZSBUWCBwYXRoLlxcbitDT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyZXNzZXMgZnJvbSBUeFxcbitkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIHRoYXQgY2FuIG5vdyBiZVxcbit1c2VkIGFnYWluIGJ5IHVzZXIgc3BhY2UsIGZvciBlaXRoZXIgVHggb3IgUnguIFRoaXMgaW5jbHVkZXMgZnJhbWVzIHdob3NlXFxuK3RyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkIGFzIHdlbGwgYXMgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeFxcbitkZXNjcmlwdG9ycyByZWplY3RlZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gdGhlcmVmb3JlIHJldHVybnNcXG4rb3duZXJzaGlwIG9mIGEgZnJhbWUgdG8gdXNlciBzcGFjZSwgYnV0IGRvZXMgbm90IGJ5IGl0c2VsZiBndWFyYW50ZWUgdGhhdFxcbit0aGUgcGFja2V0IHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuXFxuIFxcbiBUaGUgc29ja2V0IGlzIHRoZW4gZmluYWxseSBib3VuZCB3aXRoIGEgYmluZCgpIGNhbGwgdG8gYSBkZXZpY2UgYW5kIGFcXG4gc3BlY2lmaWMgcXVldWUgaWQgb24gdGhhdCBkZXZpY2UsIGFuZCBpdCBpcyBub3QgdW50aWwgYmluZCBpc1xcbkBAIC0xNjksMTQgKzE3MCwxNSBAQCBjaHVua3MgbW9kZSwgdGhlbiB0aGUgaW5jb21pbmcgYWRkciB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLlxcbiBVTUVNIENvbXBsZXRpb24gUmluZ1xcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxcbiBcXG4tVGhlIENPTVBMRVRJT04gUmluZyBpcyB1c2VkIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBVTUVNIGZyYW1lcyBmcm9tXFxuK1RoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbVxcbiBrZXJuZWwtc3BhY2UgdG8gdXNlci1zcGFjZS4gSnVzdCBsaWtlIHRoZSBGSUxMIHJpbmcsIFVNRU0gaW5kaWNlcyBhcmVcXG4tdXNlZC5cXG4tXFxuLUZyYW1lcyBwYXNzZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgYXJlIGZyYW1lcyB0aGF0IGhhcyBiZWVuXFxuLXNlbnQgKFRYIHJpbmcpIGFuZCBjYW4gYmUgdXNlZCBieSB1c2VyLXNwYWNlIGFnYWluLlxcbi1cXG4tVGhlIHVzZXIgYXBwbGljYXRpb24gY29uc3VtZXMgVU1FTSBhZGRycyBmcm9tIHRoaXMgcmluZy5cXG4rdXNlZC4gRnJhbWVzIHBhc3NlZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSBhcmUgZnJhbWVzIHJlZmVyZW5jZWRcXG4rYnkgVHggZGVzY3JpcHRvcnMgdGhhdCB0aGUga2VybmVsIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGFuZCBjYW4gYmVcXG4rdXNlZCBieSB1c2VyLXNwYWNlIGFnYWluLiBUaGlzIGluY2x1ZGVzIGJvdGggZnJhbWVzIHdob3NlIHRyYW5zbWlzc2lvblxcbitoYXMgY29tcGxldGVkIGFuZCBmcmFtZXMgcmVmZXJlbmNlZCBieSBpbnZhbGlkIFR4IGRlc2NyaXB0b3JzIHRoYXQgd2VyZVxcbityZWplY3RlZCBhbmQgcmVjbGFpbWVkIGJ5IHRoZSBrZXJuZWwuIEEgY29tcGxldGlvbiBlbnRyeSBkb2VzIG5vdFxcbitndWFyYW50ZWUgc3VjY2Vzc2Z1bCBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGUgdXNlciBhcHBsaWNhdGlvbiBjb25zdW1lc1xcbitVTUVNIGFkZHJzIGZyb20gdGhpcyByaW5nLlxcbiBcXG4gXFxuIFJYIFJpbmdcXG5AQCAtNTA0LDIxICs1MDYsMjUgQEAgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGludmFsaWQgZGVzY3JpcHRvci5cXG4gVGhlc2UgYXJlIHRoZSBzZW1hbnRpY3MgZm9yIHByb2R1Y2luZyBwYWNrZXRzIG9udG8gQUZfWERQIFR4IHJpbmdcXG4gY29uc2lzdGluZyBvZiBtdWx0aXBsZSBmcmFtZXM6XFxuIFxcbi0qIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCBhbGwgdGhlIG90aGVyXFxuLSAgZGVzY3JpcHRvcnMvZnJhbWVzIG9mIHRoaXMgcGFja2V0IGFyZSBtYXJrZWQgYXMgaW52YWxpZCBhbmQgbm90XFxuLSAgY29tcGxldGVkLiBUaGUgbmV4dCBkZXNjcmlwdG9yIGlzIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3XFxuLSAgcGFja2V0LCBldmVuIGlmIHRoaXMgd2FzIG5vdCB0aGUgaW50ZW50IChiZWNhdXNlIHdlIGNhbm5vdCBndWVzc1xcbi0gIHRoZSBpbnRlbnQpLiBBcyBiZWZvcmUsIGlmIHlvdXIgcHJvZ3JhbSBpcyBwcm9kdWNpbmcgaW52YWxpZFxcbi0gIGRlc2NyaXB0b3JzIHlvdSBoYXZlIGEgYnVnIHRoYXQgbXVzdCBiZSBmaXhlZC5cXG4rKiBXaGVuIGFuIGludmFsaWQgZGVzY3JpcHRvciBpcyBmb3VuZCwgdGhlIGNvbXBsZXRlIHBhY2tldCBpcyB0cmVhdGVkIGFzXFxuKyAgaW52YWxpZC4gVGhlIGtlcm5lbCBjb25zdW1lcyBkZXNjcmlwdG9ycyB0aHJvdWdoIHRoZSBkZXNjcmlwdG9yIG1hcmtpbmdcXG4rICB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgYW5kIHJldHVybnMgYWxsIHRoZWlyIGZyYW1lIGFkZHJlc3NlcyB0aHJvdWdoIHRoZVxcbisgIENPTVBMRVRJT04gcmluZy4gQSBzdGFuZGFsb25lIGludmFsaWQgZGVzY3JpcHRvciBpcyB0cmVhdGVkIGFzIGFcXG4rICBvbmUtZGVzY3JpcHRvciBpbnZhbGlkIHBhY2tldC4gVGhlIGRlc2NyaXB0b3IgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlXFxuKyAgaW52YWxpZCBwYWNrZXQgaXMgdHJlYXRlZCBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFja2V0LiBBcyBiZWZvcmUsIGlmXFxuKyAgeW91ciBwcm9ncmFtIGlzIHByb2R1Y2luZyBpbnZhbGlkIGRlc2NyaXB0b3JzIHlvdSBoYXZlIGEgYnVnIHRoYXQgbXVzdFxcbisgIGJlIGZpeGVkLiBSZWplY3RlZCBkZXNjcmlwdG9ycyBhcmUgcmVwb3J0ZWQgaW4gdGhlIGBgdHhfaW52YWxpZF9kZXNjc2BgXFxuKyAgc3RhdGlzdGljLlxcbiBcXG4gKiBaZXJvIGxlbmd0aCBkZXNjcmlwdG9ycyBhcmUgdHJlYXRlZCBhcyBpbnZhbGlkIGRlc2NyaXB0b3JzLlxcbiBcXG4gKiBGb3IgY29weSBtb2RlLCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHBhY2tldCBpc1xcbi0gIGVxdWFsIHRvIENPTkZJR19NQVhfU0tCX0ZSQUdTICsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbFxcbi0gIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIHNvIGZhciBhcmUgZHJvcHBlZCBhbmQgdHJlYXRlZCBhc1xcbi0gIGludmFsaWQuIFRvIHByb2R1Y2UgYW4gYXBwbGljYXRpb24gdGhhdCB3aWxsIHdvcmsgb24gYW55IHN5c3RlbVxcbi0gIHJlZ2FyZGxlc3Mgb2YgdGhpcyBjb25maWcgc2V0dGluZywgbGltaXQgdGhlIG51bWJlciBvZiBmcmFncyB0byAxOCxcXG4tICBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgY29uZmlnIGlzIDE3LlxcbisgIGVxdWFsIHRvIENPTkZJR19NQVhfU0tCX0ZSQUdTICsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbCBkZXNjcmlwdG9yc1xcbisgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgb3ZlcnNpemVkIHBhY2tldCBhcmUgY29uc3VtZWQsIHRyZWF0ZWQgYXMgaW52YWxpZCxcXG4rICBhbmQgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRvXFxuKyAgcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtIHJlZ2FyZGxlc3Mgb2YgdGhpc1xcbisgIGNvbmZpZyBzZXR0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGZyYWdzIHRvIDE4LCBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZlxcbisgIHRoZSBjb25maWcgaXMgMTcuXFxuIFxcbiAqIEZvciB6ZXJvLWNvcHkgbW9kZSwgdGhlIGxpbWl0IGlzIHVwIHRvIHdoYXQgdGhlIE5JQyBIV1xcbiAgIHN1cHBvcnRzLiBVc3VhbGx5IGF0IGxlYXN0IGZpdmUgb24gdGhlIE5JQ3Mgd2UgaGF2ZSBjaGVja2VkLiBXZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZHBfc29jay5oIGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxcbmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxcbkBAIC04MCw2ICs4MCw3IEBAIHN0cnVjdCB4ZHBfc29jayB7XFxuIFxcdCAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRib29sIGRyYWluX2NvbnQ7XFxuIFxcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG1hcF9saXN0O1xcbiBcXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmggYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcXG5pbmRleCBjY2IzYjM1MDAwMWYyNC4uMmJiMWQxMjJiMWJjNmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXFxuKysrIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXFxuQEAgLTc4LDYgKzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xcbiBcXHR1MzIgY2h1bmtfc2l6ZTtcXG4gXFx0dTMyIGNodW5rX3NoaWZ0O1xcbiBcXHR1MzIgZnJhbWVfbGVuO1xcbitcXHR1MzIgdHhfZGVzY3NfbmVudHJpZXM7XFxuK1xcdHUzMiByZWNsYWltX2Rlc2NzO1xcbitcXHR1MzIgdHhfemNfcGVuZGluZ19kZXNjcztcXG4gXFx0dTMyIHhkcF96Y19tYXhfc2VncztcXG4gXFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXFxuIFxcdHU4IGNhY2hlZF9uZWVkX3dha2V1cDtcXG5AQCAtMTAyLDEyICsxMDUsMTQgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xcbiBcXG4gLyogQUZfWERQIGNvcmUuICovXFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dTMyIG1heF9zZWdzKTtcXG4gaW50IHhwX2Fzc2lnbl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgdTE2IHF1ZXVlX2lkLCB1MTYgZmxhZ3MpO1xcbiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cyxcXG4gXFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZCk7XFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyk7XFxuK2ludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4rXFx0XFx0ICAgICAgdTMyIG1heF9zZWdzKTtcXG4gdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gdm9pZCB4cF9nZXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuIGJvb2wgeHBfcHV0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xcbmluZGV4IGI5NzBmMzBlYTliOWQ4Li5mOTA2ZDUxYjY2OTkwNCAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC00OTksNiArNDk5LDIzIEBAIHZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXFxuIFxcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxcbiB7XFxuK1xcdHUzMiByZWNsYWltX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHJlY2xhaW1fZGVzY3MpKSB7XFxuK1xcdFxcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXFx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MpO1xcbitcXG4rXFx0XFx0aWYgKG5iX2VudHJpZXMgXFx1MDAzYyBwZW5kaW5nX2Rlc2NzKSB7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcXG4rXFx0XFx0XFx0XFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xcbitcXHRcXHRcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XFxuK1xcdFxcdG5iX2VudHJpZXMgKz0gcmVjbGFpbV9kZXNjcztcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzLCAwKTtcXG4rXFx0fVxcbitcXG4gXFx0eHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtXFx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpO1xcbkBAIC01NzQsMjQgKzU5MSwxNTcgQEAgc3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJcXG4gXFx0cmV0dXJuIG5iX3BrdHM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxcbit7XFxuK1xcdHUzMiBuYl9kZXNjcyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhiYXRjaCk7XFxuK1xcdHUzMiBjcV9jYWNoZWRfcHJvZDtcXG4rXFxuK1xcdGlmICghbmJfZGVzY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cXHUwMDNlY3EtXFx1MDAzZWNhY2hlZF9wcm9kO1xcbitcXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVxcdTAwM2VjcSwgcG9vbC1cXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcykpIHtcXG4rXFx0XFx0dTMyIGNxX3BlbmRpbmdfZGVzY3M7XFxuK1xcbitcXHRcXHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxcbitcXHRcXHQgKiBzdWJtaXR0ZWQgbXVzdCBjb21wbGV0ZSBiZWZvcmUgYW55IHJlY2xhaW0tb25seSBkZXNjcmlwdG9yc1xcbitcXHRcXHQgKiBhcHBlbmRlZCBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNxX3BlbmRpbmdfZGVzY3MgPSBjcV9jYWNoZWRfcHJvZCAtIHhza3FfZ2V0X3Byb2QocG9vbC1cXHUwMDNlY3EpO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxcbitcXHRcXHRcXHQgICBiYXRjaC1cXHUwMDNldHhfZGVzY3MgKyBjcV9wZW5kaW5nX2Rlc2NzKTtcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzLCBiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcyk7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghcG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcykpXFxuK1xcdFxcdFxcdHhza190eF9jb21wbGV0ZWQocG9vbCwgMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcXG4rX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcXG4rXFx0dTMyIGVudHJpZXM7XFxuK1xcbitcXHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXFx1MDAzZXR4LCBtYXhfZGVzY3MpO1xcbitcXHRpZiAoIWVudHJpZXMpXFxuK1xcdFxcdHJldHVybiBiYXRjaDtcXG4rXFxuK1xcdGJhdGNoID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cywgcG9vbCwgZGVzY3MsIG1heF9kZXNjcyk7XFxuK1xcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZiYXRjaCkpIHtcXG4rXFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcysrO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XFxuK1xcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcXG4rXFx0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXG4rXFx0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xcbitcXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxcbitcXHRcXHRcXHRcXHQgIHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbithZ2FpbjpcXG4rXFx0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xcbitcXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcXG4rXFx0XFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nLCB1c2VkO1xcbitcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XFxuK1xcbitcXHRcXHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRXFxuK1xcdFxcdCAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9yc1xcbitcXHRcXHQgKiBmcm9tIGFub3RoZXIgc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb25cXG4rXFx0XFx0ICogYWxsIGRyaXZlci12aXNpYmxlIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5XFxuK1xcdFxcdCAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVxcdTAwM2V0eF9kZXNjcyAqL1xcbitcXHRcXHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50IFxcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XFxuK1xcdFxcdFxcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIDEpKVxcbitcXHRcXHRcXHRcXHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xcbitcXHRcXHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XFxuK1xcdFxcdGJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTtcXG4rXFxuK1xcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJ1ZGdldCk7XFxuK1xcdFxcdHVzZWQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNmN1cnJfYmF0Y2gpO1xcbitcXHRcXHRpZiAoIXVzZWQpIHtcXG4rXFx0XFx0XFx0aWYgKGN1cnJfYmF0Y2guYnVkZ2V0X2xpbWl0ZWQgXFx1MDAyNlxcdTAwMjYgYnVkZ2V0X2xlZnQgXFx1MDAzYyByZW1haW5pbmcpXFxuK1xcdFxcdFxcdFxcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0eHMtXFx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSB1c2VkO1xcbitcXHRcXHRzdW1fYmF0Y2gudHhfZGVzY3MgKz0gY3Vycl9iYXRjaC50eF9kZXNjcztcXG4rXFx0XFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XFxuK1xcdH1cXG4rXFxuK1xcdGNxX2Rlc2NzX2FmdGVyID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZzdW1fYmF0Y2gpO1xcbitcXG4rXFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFxcdTAwM2U9IG1heF9kZXNjcylcXG4rXFx0XFx0cmV0dXJuIHN1bV9iYXRjaDtcXG4rXFxuK1xcdC8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovXFxuK1xcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXFxuK1xcdFxcdGdvdG8gYWdhaW47XFxuK1xcbitcXHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXFxuK1xcdFxcdHJldHVybiBzdW1fYmF0Y2g7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KVxcbitcXHRcXHR4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcXG4rXFx0Z290byBhZ2FpbjtcXG4rfVxcbitcXG4gdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxuIHtcXG4rXFx0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xcbiBcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXHRib29sIHVtZW1fc2hhcmVkO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRpZiAoIWxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0KSkge1xcbi1cXHRcXHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XFxuLVxcdH1cXG4rXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzKSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTtcXG4tXFx0aWYgKCF4cykge1xcbi1cXHRcXHRuYl9wa3RzID0gMDtcXG4rXFx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLFxcbitcXHRcXHRcXHRcXHQgICAgdHhfbGlzdCk7XFxuK1xcdGlmICgheHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuIFxcbi1cXHRuYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXFx1MDAzZXR4LCBuYl9wa3RzKTtcXG4rXFx0bmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLVxcdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XFxuK1xcdGlmICghbmJfcGt0cylcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR1bWVtX3NoYXJlZCA9ICFsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCk7XFxuK1xcbitcXHRpZiAodW1lbV9zaGFyZWQgXFx1MDAyNlxcdTAwMjYgIShwb29sLVxcdTAwM2V1bWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguIFRyeSB0b1xcbiBcXHQgKiByZXNlcnZlIHNwYWNlIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGZvciBhbGwgcGFja2V0cywgYnV0XFxuQEAgLTYwMywxOSArNzUzLDE2IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbiBcXHRpZiAoIW5iX3BrdHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXFx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcXG4tXFx0aWYgKCFuYl9wa3RzKSB7XFxuLVxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4tXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cXHUwMDNlY3EsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzLCBuYl9wa3RzKTtcXG4tXFx0eHMtXFx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFxcdTAwMjZ4cy1cXHUwMDNlc2spO1xcbitcXHRiYXRjaCA9IHVtZW1fc2hhcmVkID9cXG4rXFx0XFx0eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKSA6XFxuK1xcdFxcdF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgcG9vbC1cXHUwMDNldHhfZGVzY3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBuYl9wa3RzKTtcXG4rXFx0eHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCBcXHUwMDI2YmF0Y2gpO1xcbiBcXG4gb3V0OlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0cmV0dXJuIG5iX3BrdHM7XFxuK1xcdHJldHVybiBiYXRjaC50eF9kZXNjcztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxuIFxcbkBAIC03MzcsNiArODg0LDE5IEBAIHN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIGlkeDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcXG4rXFx0aWR4ID0geHNrcV9nZXRfcHJvZChwb29sLVxcdTAwM2VjcSk7XFxuK1xcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXFx1MDAzZWNxLCBpZHgsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbitcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIDEpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxcbiB7XFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlY3EtXFx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xcbkBAIC03OTQsOCArOTU0LDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0eGRwX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcyArPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuLVxcdHhza19jb25zdW1lX3NrYihza2IpO1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cXHUwMDNlc2spO1xcbitcXG4rXFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcXG4rXFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0eHMtXFx1MDAzZXNrYiA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXFxuQEAgLTg3Nyw3ICsxMDQwLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG4gXFx0XFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxcbi1cXHRcXHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxcbitcXHRcXHQgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxcbiBcXHRcXHQgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHNcXG4gXFx0XFx0ICovXFxuIFxcdFxcdHhza19hZGRyLVxcdTAwM2VhZGRyc1t4c2tfYWRkci1cXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXFx1MDAzZWFkZHI7XFxuQEAgLTk2OSw2ICsxMTMyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuIFxcdFxcdFxcdH1cXG4gXFxuK1xcdFxcdFxcdHhza19hZGRyLVxcdTAwM2VhZGRyc1t4c2tfYWRkci1cXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXFx1MDAzZWFkZHI7XFxuK1xcbiBcXHRcXHRcXHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcXHUwMDI2XFx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRU9WRVJGTE9XO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbkBAIC05ODYsOCArMTE1MSw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiBcXG4gXFx0XFx0XFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcXG4gXFx0XFx0XFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXFx1MDAyNnhzLVxcdTAwM2Vzay5za193bWVtX2FsbG9jKTtcXG4tXFxuLVxcdFxcdFxcdHhza19hZGRyLVxcdTAwM2VhZGRyc1t4c2tfYWRkci1cXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXFx1MDAzZWFkZHI7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMTAyNSwxMyArMTE4OCwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xcbi1cXHRib29sIHNlbnRfZnJhbWUgPSBmYWxzZTtcXG4gXFx0c3RydWN0IHhkcF9kZXNjIGRlc2M7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHUzMiBjYWNoZWRfY29ucztcXG4gXFx0dTMyIG1heF9iYXRjaDtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbitcXHRjYWNoZWRfY29ucyA9IHhzLVxcdTAwM2V0eC1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuIFxcbiBcXHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cXG4gXFx0aWYgKHVubGlrZWx5KCF4c2tfaXNfYm91bmQoeHMpKSkge1xcbkBAIC0xMDYwLDExICsxMjI0LDIxIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4rXFx0XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIFxcdTAwMjZkZXNjKTtcXG4rXFx0XFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzKys7XFxuK1xcdFxcdFxcdHhza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcXHUwMDI2ZGVzYyk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxuIFxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcbiBcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHNrYik7XFxuIFxcdFxcdFxcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGlmICh4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKSlcXG4rXFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC0xMDkzLDE4ICsxMjY3LDMzIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNlbnRfZnJhbWUgPSB0cnVlO1xcbiBcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0Ym9vbCBkcmFpbiA9IHhzLVxcdTAwM2Vza2IgfHwgeHMtXFx1MDAzZWRyYWluX2NvbnQgfHwgeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYyk7XFxuK1xcbitcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcy0tO1xcbitcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZXNrYilcXG4rXFx0XFx0XFx0XFx0eHNrX2Ryb3Bfc2tiKHhzLVxcdTAwM2Vza2IpO1xcbitcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IGRyYWluO1xcbitcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKHhzLVxcdTAwM2Vza2IpXFxuIFxcdFxcdFxcdHhza19kcm9wX3NrYih4cy1cXHUwMDNlc2tiKTtcXG4rXFxuK1xcdFxcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBcXHUwMDI2ZGVzYyk7XFxuK1xcbiBcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbitcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuLVxcdGlmIChzZW50X2ZyYW1lKVxcbitcXHRpZiAoeHMtXFx1MDAzZXR4LVxcdTAwM2VjYWNoZWRfY29ucyAhPSBjYWNoZWRfY29ucylcXG4gXFx0XFx0X194c2tfdHhfcmVsZWFzZSh4cyk7XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuQEAgLTE0ODMsNyArMTY3Miw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXFxuIFxcdFxcdFxcdCAqIGFuZC9vciBkZXZpY2UuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuIFxcdFxcdFxcdGlmICgheHMtXFx1MDAzZXBvb2wpIHtcXG4gXFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0XFx0c29ja2ZkX3B1dChzb2NrKTtcXG5AQCAtMTUxNSw3ICsxNzA1LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0XFx0XFx0ICogdXRpbGl6ZXNcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmICh4cy1cXHUwMDNldHggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2Vwb29sLVxcdTAwM2V0eF9kZXNjcykge1xcbi1cXHRcXHRcXHRcXHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cXHUwMDNlcG9vbCwgeHMpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cXHUwMDNlcG9vbCwgeHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGRldi1cXHUwMDNleGRwX3pjX21heF9zZWdzKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRcXHRcXHR4cF9wdXRfcG9vbCh4cy1cXHUwMDNlcG9vbCk7XFxuIFxcdFxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vwb29sID0gTlVMTDtcXG5AQCAtMTUzMyw3ICsxNzI0LDkgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqL1xcbi1cXHRcXHR4cy1cXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVxcdTAwM2V1bWVtKTtcXG4rXFx0XFx0eHMtXFx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cXHUwMDNldW1lbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbiBcXHRcXHRpZiAoIXhzLVxcdTAwM2Vwb29sKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xcbisrKyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXFxuQEAgLTQyLDE3ICs0MiwyMiBAQCB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuIFxcdGt2ZnJlZShwb29sKTtcXG4gfVxcbiBcXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuK1xcdFxcdCAgICAgIHUzMiBtYXhfc2VncylcXG4ge1xcbi1cXHRwb29sLVxcdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXFx1MDAzZXR4X2Rlc2NzLCB4cy1cXHUwMDNldHgtXFx1MDAzZW5lbnRyaWVzKTtcXG4rXFx0dTMyIG5lbnRyaWVzID0gbWF4KHhzLVxcdTAwM2V0eC1cXHUwMDNlbmVudHJpZXMsIG1heF9zZWdzKTtcXG4rXFxuK1xcdHBvb2wtXFx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cXHUwMDNldHhfZGVzY3MsIG5lbnRyaWVzKTtcXG4gXFx0aWYgKCFwb29sLVxcdTAwM2V0eF9kZXNjcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRwb29sLVxcdTAwM2V0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHUzMiBtYXhfc2VncylcXG4ge1xcbiBcXHRib29sIHVuYWxpZ25lZCA9IHVtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWERQX1VNRU1fVU5BTElHTkVEX0NIVU5LX0ZMQUc7XFxuIFxcdHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sO1xcbkBAIC02OSw3ICs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKHhzLVxcdTAwM2V0eClcXG4tXFx0XFx0aWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzKSlcXG4rXFx0XFx0aWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzLCBtYXhfc2VncykpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0cG9vbC1cXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVxcdTAwM2VjaHVua19zaXplIC0gMSk7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX3F1ZXVlLmggYi9uZXQveGRwL3hza19xdWV1ZS5oXFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLjFiYzQyYzg5MDJmNGJhIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrX3F1ZXVlLmhcXG4rKysgYi9uZXQveGRwL3hza19xdWV1ZS5oXFxuQEAgLTU4LDYgKzU4LDE3IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XFxuIFxcdHUzMiB2YWxpZDtcXG4gfTtcXG4gXFxuK3N0cnVjdCB4c2tfdHhfYmF0Y2gge1xcbitcXHR1MzIgdHhfZGVzY3M7XFxuK1xcdHUzMiByZWNsYWltX2Rlc2NzO1xcbitcXHRib29sIGJ1ZGdldF9saW1pdGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxcbit7XFxuK1xcdHJldHVybiBiYXRjaC1cXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcztcXG4rfVxcbitcXG4gLyogVGhlIHN0cnVjdHVyZSBvZiB0aGUgc2hhcmVkIHN0YXRlIG9mIHRoZSByaW5ncyBhcmUgYSBzaW1wbGVcXG4gICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpblxcbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxcbkBAIC0yNjMsMTcgKzI3NCwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0cGFyc2VkLVxcdTAwM2VtYiA9IHhwX21iX2Rlc2MoZGVzYyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLVxcdFxcdFxcdCAgICAgIHUzMiBtYXgpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaFxcbit4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXFxuIHtcXG4tXFx0dTMyIGNhY2hlZF9jb25zID0gcS1cXHUwMDNlY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xcbi1cXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cXHUwMDNldHhfZGVzY3M7XFxuLVxcdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcXG4rXFx0Ym9vbCBkcmFpbiA9IFJFQURfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCk7XFxuK1xcdHUzMiBjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcXG4rXFx0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVxcdTAwM2V0eDtcXG4rXFx0dTMyIG5yX2ZyYWdzID0gMDtcXG4rXFxuK1xcdGNhY2hlZF9jb25zID0gcS1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuIFxcbi1cXHQvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kXFxuLVxcdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3NpbmdcXG4tXFx0ICovXFxuIFxcdHdoaWxlIChjYWNoZWRfY29ucyAhPSBxLVxcdTAwM2VjYWNoZWRfcHJvZCBcXHUwMDI2XFx1MDAyNiBuYl9lbnRyaWVzIFxcdTAwM2MgbWF4KSB7XFxuIFxcdFxcdHN0cnVjdCB4ZHBfcnh0eF9yaW5nICpyaW5nID0gKHN0cnVjdCB4ZHBfcnh0eF9yaW5nICopcS1cXHUwMDNlcmluZztcXG4gXFx0XFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFxcdTAwMjYgcS1cXHUwMDNlcmluZ19tYXNrO1xcbkBAIC0yODMsMjUgKzI5NSw0MiBAQCB1MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0XFx0Y2FjaGVkX2NvbnMrKztcXG4gXFx0XFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFxcdTAwMjZwYXJzZWQpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRkcmFpbiA9IHRydWU7XFxuK1xcbitcXHRcXHRucl9mcmFncysrO1xcbitcXHRcXHRuYl9lbnRyaWVzKys7XFxuIFxcbiBcXHRcXHRpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7XFxuLVxcdFxcdFxcdHRvdGFsX2Rlc2NzICs9IChucl9mcmFncyArIDEpO1xcbi1cXHRcXHRcXHRucl9mcmFncyA9IDA7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdG5yX2ZyYWdzKys7XFxuLVxcdFxcdFxcdGlmIChucl9mcmFncyA9PSBwb29sLVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpIHtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KGRyYWluKSkge1xcbitcXHRcXHRcXHRcXHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UoeHMtXFx1MDAzZWRyYWluX2NvbnQsIGZhbHNlKTtcXG4gXFx0XFx0XFx0XFx0bnJfZnJhZ3MgPSAwO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0YmF0Y2gudHhfZGVzY3MgKz0gbnJfZnJhZ3M7XFxuK1xcdFxcdFxcdG5yX2ZyYWdzID0gMDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChucl9mcmFncyA9PSBwb29sLVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXFxuK1xcdFxcdFxcdGRyYWluID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG5yX2ZyYWdzKSB7XFxuK1xcdFxcdGlmIChkcmFpbikge1xcbitcXHRcXHRcXHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoeHMtXFx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpZiAobmJfZW50cmllcyA9PSBtYXgpXFxuK1xcdFxcdFxcdFxcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bmJfZW50cmllcysrO1xcbiBcXHR9XFxuIFxcbi1cXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcXG4gXFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cXG4gXFx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCBjYWNoZWRfY29ucyAtIHEtXFx1MDAzZWNhY2hlZF9jb25zKTtcXG4tXFx0cmV0dXJuIHRvdGFsX2Rlc2NzO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuIH1cXG4gXFxuIC8qIEZ1bmN0aW9ucyBmb3IgY29uc3VtZXJzICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuaW5kZXggNDc3YWVkYmIwMWJhZDguLjQ1NDkzNThjYzhjMjFkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi9cXG4tXFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cXHUwMDNldmFsaWQpXFxuK1xcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpKVxcbiBcXHRcXHRyZXR1cm4gbmJfZnJhZ3M7XFxuIFxcbiBcXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVxcdTAwM2VjdXJyZW50X3BrdF9uYjtcXG4gXFx0cGt0Kys7XFxuIFxcdHdoaWxlIChuZXh0X2ZyYWcrKyBcXHUwMDNjIHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMpIHtcXG4gXFx0XFx0bmJfZnJhZ3MrKztcXG4tXFx0XFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cGt0Kys7XFxuIFxcdH1cXG5AQCAtNjY1LDExICs2NjUsMTEgQEAgc3RhdGljIHN0cnVjdCBwa3Rfc3RyZWFtICpfX3BrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHNcXG4gXFx0XFx0XFx0aWYgKCFmcmFtZS1cXHUwMDNldmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtXFx1MDAzZW9wdGlvbnMpKVxcbiBcXHRcXHRcXHRcXHRwYXlsb2FkKys7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmIChmcmFtZS1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdFxcdGlmIChmcmFtZS1cXHUwMDNldmFsaWQpIHtcXG4gXFx0XFx0XFx0XFx0bGVuICs9IGZyYW1lLVxcdTAwM2VsZW47XFxuLVxcdFxcdFxcdGlmIChmcmFtZS1cXHUwMDNldmFsaWQgXFx1MDAyNlxcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cXHUwMDNlb3B0aW9ucykpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4rXFx0XFx0XFx0XFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXFx1MDAzZW9wdGlvbnMpKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRwa3QtXFx1MDAzZXBrdF9uYiA9IHBrdF9uYjtcXG4gXFx0XFx0XFx0cGt0LVxcdTAwM2VsZW4gPSBsZW47XFxuIFxcdFxcdFxcdHBrdC1cXHUwMDNldmFsaWQgPSBmcmFtZS1cXHUwMDNldmFsaWQ7XFxuQEAgLTEyNTAsMTAgKzEyNTAsOSBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAocGt0IFxcdTAwMjZcXHUwMDI2IHBrdC1cXHUwMDNldmFsaWQpIHtcXG4rXFx0XFx0aWYgKHBrdCBcXHUwMDI2XFx1MDAyNiBwa3QtXFx1MDAzZXZhbGlkKVxcbiBcXHRcXHRcXHR2YWxpZF9wa3RzKys7XFxuLVxcdFxcdFxcdHZhbGlkX2ZyYWdzICs9IG5iX2ZyYWdzO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHZhbGlkX2ZyYWdzICs9IG5iX2ZyYWdzO1xcbiBcXHR9XFxuIFxcbiBcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnBhY2luZ19tdXRleCk7XFxuQEAgLTIwOTksMTMgKzIwOTgsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdHswLCAwLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbi1cXHRcXHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4rXFx0XFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbitcXHRcXHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcXG5AQCAtMjExNyw4ICsyMTE5LDggQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcbiBcXHRpZiAodW1lbS1cXHUwMDNldW5hbGlnbmVkX21vZGUpIHtcXG4gXFx0XFx0LyogQ3Jvc3NpbmcgYSBjaHVuayBib3VuZGFyeSBhbGxvd2VkICovXFxuLVxcdFxcdHBrdHNbMTJdLnZhbGlkID0gdHJ1ZTtcXG4tXFx0XFx0cGt0c1sxM10udmFsaWQgPSB0cnVlO1xcbitcXHRcXHRwa3RzWzE1XS52YWxpZCA9IHRydWU7XFxuK1xcdFxcdHBrdHNbMTZdLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0dGVzdC1cXHUwMDNlbXR1ID0gTUFYX0VUSF9KVU1CT19TSVpFO1xcbkBAIC0yMjcwLDcgKzIyNzIsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRcXHRtYXhfZnJhZ3MgKz0gMTtcXG4gXFx0fVxcbiBcXG4tXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMiwgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4rXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4gXFx0aWYgKCFwa3RzKVxcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXG5AQCAtMjI4OCwyNCArMjI5MCwzMCBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHR9XFxuIFxcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcXG4gXFxuLVxcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XFxuLVxcdCAqIGNvbnRpbnVlcyBvbiB0aGUgbGFzdCBmcmFnXFxuLVxcdCAqL1xcbi1cXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDE7IGkrKykge1xcbitcXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xcbitcXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xcbiBcXHRcXHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4gXFx0XFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcXG4tXFx0XFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbitcXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS5vcHRpb25zID0gMDtcXG4gXFxuIFxcdC8qIFZhbGlkIHBhY2tldCBmb3Igc3luY2ggKi9cXG4tXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbi1cXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS52YWxpZCA9IHRydWU7XFxuK1xcdHBrdHNbMiAqIG1heF9mcmFncyArIDJdLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4rXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xcbiBcXG4tXFx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xcbitcXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyArIDMpKSB7XFxuIFxcdFxcdGZyZWUocGt0cyk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFRoZSBnZW5lcmF0ZWQgVHggc3RyZWFtIG11c3Qga2VlcCB0aGUgdG9vLWJpZyBwYWNrZXQgdmFsaWQgc28gdGhhdFxcbitcXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XFxuK1xcdCAqIHN0cmVhbSwgaG93ZXZlciwgbXVzdCBub3QgZXhwZWN0IHRoaXMgcGFja2V0IG9uIHRoZSB3aXJlLlxcbitcXHQgKi9cXG4rXFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzay1cXHUwMDNlcGt0X3N0cmVhbS1cXHUwMDNlcGt0c1syXS52YWxpZCA9IGZhbHNlO1xcbitcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2Vwa3Rfc3RyZWFtLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzLS07XFxuK1xcbiBcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuIFxcdGZyZWUocGt0cyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjI2LjAzMzY2NjcwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM0NjIzOTk2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza190eF9jb21wbGV0ZWRcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiLFxuICAgIFwieHNrX2J1aWxkX3NrYlwiLFxuICAgIFwieHNrX2J1aWxkX3NrYl96ZXJvY29weVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgVHggcGF0aC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBhbmQgcmVjbGFpbSBsb2dpYyBmb3IgZGVzY3JpcHRvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQUZfWERQIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBBRl9YRFAgc29ja2V0IG9wZXJhdGlvbnMgKGUuZy4sIHVzaW5nIGdlbmVyaWMgWERQIG1vZGUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjMGQ4NTg0NTczMzkwZjdhZDU5ZGZhNWZlNTgwZmJkOTZjZTVjNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoyMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RcbmluZGV4IDUwZDkyMDg0YTQ5YzZhLi5jYzNmMGQxNmIyOGZiNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdFxuQEAgLTQzLDEyICs0MywxMyBAQCBVTUVNIGFsc28gaGFzIHR3byByaW5nczogdGhlIEZJTEwgcmluZyBhbmQgdGhlIENPTVBMRVRJT04gcmluZy4gVGhlXG4gRklMTCByaW5nIGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbmQgZG93biBhZGRyIGZvciB0aGUga2VybmVsXG4gdG8gZmlsbCBpbiB3aXRoIFJYIHBhY2tldCBkYXRhLiBSZWZlcmVuY2VzIHRvIHRoZXNlIGZyYW1lcyB3aWxsIHRoZW5cbiBhcHBlYXIgaW4gdGhlIFJYIHJpbmcgb25jZSBlYWNoIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZC4gVGhlXG4tQ09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkciB0aGF0IHRoZVxuLWtlcm5lbCBoYXMgdHJhbnNtaXR0ZWQgY29tcGxldGVseSBhbmQgY2FuIG5vdyBiZSB1c2VkIGFnYWluIGJ5IHVzZXJcbi1zcGFjZSwgZm9yIGVpdGhlciBUWCBvciBSWC4gVGh1cywgdGhlIGZyYW1lIGFkZHJzIGFwcGVhcmluZyBpbiB0aGVcbi1DT01QTEVUSU9OIHJpbmcgYXJlIGFkZHJzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHRyYW5zbWl0dGVkIHVzaW5nIHRoZVxuLVRYIHJpbmcuIEluIHN1bW1hcnksIHRoZSBSWCBhbmQgRklMTCByaW5ncyBhcmUgdXNlZCBmb3IgdGhlIFJYIHBhdGhcbi1hbmQgdGhlIFRYIGFuZCBDT01QTEVUSU9OIHJpbmdzIGFyZSB1c2VkIGZvciB0aGUgVFggcGF0aC5cbitDT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyZXNzZXMgZnJvbSBUeFxuK2Rlc2NyaXB0b3JzIHRoYXQgdGhlIGtlcm5lbCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhbmQgdGhhdCBjYW4gbm93IGJlXG4rdXNlZCBhZ2FpbiBieSB1c2VyIHNwYWNlLCBmb3IgZWl0aGVyIFR4IG9yIFJ4LiBUaGlzIGluY2x1ZGVzIGZyYW1lcyB3aG9zZVxuK3RyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkIGFzIHdlbGwgYXMgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeFxuK2Rlc2NyaXB0b3JzIHJlamVjdGVkIGJ5IHRoZSBrZXJuZWwuIEEgY29tcGxldGlvbiB0aGVyZWZvcmUgcmV0dXJuc1xuK293bmVyc2hpcCBvZiBhIGZyYW1lIHRvIHVzZXIgc3BhY2UsIGJ1dCBkb2VzIG5vdCBieSBpdHNlbGYgZ3VhcmFudGVlIHRoYXRcbit0aGUgcGFja2V0IHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuXG4gXG4gVGhlIHNvY2tldCBpcyB0aGVuIGZpbmFsbHkgYm91bmQgd2l0aCBhIGJpbmQoKSBjYWxsIHRvIGEgZGV2aWNlIGFuZCBhXG4gc3BlY2lmaWMgcXVldWUgaWQgb24gdGhhdCBkZXZpY2UsIGFuZCBpdCBpcyBub3QgdW50aWwgYmluZCBpc1xuQEAgLTE2OSwxNCArMTcwLDE1IEBAIGNodW5rcyBtb2RlLCB0aGVuIHRoZSBpbmNvbWluZyBhZGRyIHdpbGwgYmUgbGVmdCB1bnRvdWNoZWQuXG4gVU1FTSBDb21wbGV0aW9uIFJpbmdcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuLVRoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbVxuK1RoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbVxuIGtlcm5lbC1zcGFjZSB0byB1c2VyLXNwYWNlLiBKdXN0IGxpa2UgdGhlIEZJTEwgcmluZywgVU1FTSBpbmRpY2VzIGFyZVxuLXVzZWQuXG4tXG4tRnJhbWVzIHBhc3NlZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSBhcmUgZnJhbWVzIHRoYXQgaGFzIGJlZW5cbi1zZW50IChUWCByaW5nKSBhbmQgY2FuIGJlIHVzZWQgYnkgdXNlci1zcGFjZSBhZ2Fpbi5cbi1cbi1UaGUgdXNlciBhcHBsaWNhdGlvbiBjb25zdW1lcyBVTUVNIGFkZHJzIGZyb20gdGhpcyByaW5nLlxuK3VzZWQuIEZyYW1lcyBwYXNzZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgYXJlIGZyYW1lcyByZWZlcmVuY2VkXG4rYnkgVHggZGVzY3JpcHRvcnMgdGhhdCB0aGUga2VybmVsIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGFuZCBjYW4gYmVcbit1c2VkIGJ5IHVzZXItc3BhY2UgYWdhaW4uIFRoaXMgaW5jbHVkZXMgYm90aCBmcmFtZXMgd2hvc2UgdHJhbnNtaXNzaW9uXG4raGFzIGNvbXBsZXRlZCBhbmQgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeCBkZXNjcmlwdG9ycyB0aGF0IHdlcmVcbityZWplY3RlZCBhbmQgcmVjbGFpbWVkIGJ5IHRoZSBrZXJuZWwuIEEgY29tcGxldGlvbiBlbnRyeSBkb2VzIG5vdFxuK2d1YXJhbnRlZSBzdWNjZXNzZnVsIHBhY2tldCB0cmFuc21pc3Npb24uIFRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbnN1bWVzXG4rVU1FTSBhZGRycyBmcm9tIHRoaXMgcmluZy5cbiBcbiBcbiBSWCBSaW5nXG5AQCAtNTA0LDIxICs1MDYsMjUgQEAgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGludmFsaWQgZGVzY3JpcHRvci5cbiBUaGVzZSBhcmUgdGhlIHNlbWFudGljcyBmb3IgcHJvZHVjaW5nIHBhY2tldHMgb250byBBRl9YRFAgVHggcmluZ1xuIGNvbnNpc3Rpbmcgb2YgbXVsdGlwbGUgZnJhbWVzOlxuIFxuLSogV2hlbiBhbiBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgZm91bmQsIGFsbCB0aGUgb3RoZXJcbi0gIGRlc2NyaXB0b3JzL2ZyYW1lcyBvZiB0aGlzIHBhY2tldCBhcmUgbWFya2VkIGFzIGludmFsaWQgYW5kIG5vdFxuLSAgY29tcGxldGVkLiBUaGUgbmV4dCBkZXNjcmlwdG9yIGlzIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3XG4tICBwYWNrZXQsIGV2ZW4gaWYgdGhpcyB3YXMgbm90IHRoZSBpbnRlbnQgKGJlY2F1c2Ugd2UgY2Fubm90IGd1ZXNzXG4tICB0aGUgaW50ZW50KS4gQXMgYmVmb3JlLCBpZiB5b3VyIHByb2dyYW0gaXMgcHJvZHVjaW5nIGludmFsaWRcbi0gIGRlc2NyaXB0b3JzIHlvdSBoYXZlIGEgYnVnIHRoYXQgbXVzdCBiZSBmaXhlZC5cbisqIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCB0aGUgY29tcGxldGUgcGFja2V0IGlzIHRyZWF0ZWQgYXNcbisgIGludmFsaWQuIFRoZSBrZXJuZWwgY29uc3VtZXMgZGVzY3JpcHRvcnMgdGhyb3VnaCB0aGUgZGVzY3JpcHRvciBtYXJraW5nXG4rICB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgYW5kIHJldHVybnMgYWxsIHRoZWlyIGZyYW1lIGFkZHJlc3NlcyB0aHJvdWdoIHRoZVxuKyAgQ09NUExFVElPTiByaW5nLiBBIHN0YW5kYWxvbmUgaW52YWxpZCBkZXNjcmlwdG9yIGlzIHRyZWF0ZWQgYXMgYVxuKyAgb25lLWRlc2NyaXB0b3IgaW52YWxpZCBwYWNrZXQuIFRoZSBkZXNjcmlwdG9yIGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoZVxuKyAgaW52YWxpZCBwYWNrZXQgaXMgdHJlYXRlZCBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFja2V0LiBBcyBiZWZvcmUsIGlmXG4rICB5b3VyIHByb2dyYW0gaXMgcHJvZHVjaW5nIGludmFsaWQgZGVzY3JpcHRvcnMgeW91IGhhdmUgYSBidWcgdGhhdCBtdXN0XG4rICBiZSBmaXhlZC4gUmVqZWN0ZWQgZGVzY3JpcHRvcnMgYXJlIHJlcG9ydGVkIGluIHRoZSBgYHR4X2ludmFsaWRfZGVzY3NgYFxuKyAgc3RhdGlzdGljLlxuIFxuICogWmVybyBsZW5ndGggZGVzY3JpcHRvcnMgYXJlIHRyZWF0ZWQgYXMgaW52YWxpZCBkZXNjcmlwdG9ycy5cbiBcbiAqIEZvciBjb3B5IG1vZGUsIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBudW1iZXIgb2YgZnJhbWVzIGluIGEgcGFja2V0IGlzXG4tICBlcXVhbCB0byBDT05GSUdfTUFYX1NLQl9GUkFHUyArIDEuIElmIGl0IGlzIGV4Y2VlZGVkLCBhbGxcbi0gIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIHNvIGZhciBhcmUgZHJvcHBlZCBhbmQgdHJlYXRlZCBhc1xuLSAgaW52YWxpZC4gVG8gcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtXG4tICByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHNldHRpbmcsIGxpbWl0IHRoZSBudW1iZXIgb2YgZnJhZ3MgdG8gMTgsXG4tICBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgY29uZmlnIGlzIDE3LlxuKyAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgKyAxLiBJZiBpdCBpcyBleGNlZWRlZCwgYWxsIGRlc2NyaXB0b3JzXG4rICB0aHJvdWdoIHRoZSBlbmQgb2YgdGhlIG92ZXJzaXplZCBwYWNrZXQgYXJlIGNvbnN1bWVkLCB0cmVhdGVkIGFzIGludmFsaWQsXG4rICBhbmQgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRvXG4rICBwcm9kdWNlIGFuIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCB3b3JrIG9uIGFueSBzeXN0ZW0gcmVnYXJkbGVzcyBvZiB0aGlzXG4rICBjb25maWcgc2V0dGluZywgbGltaXQgdGhlIG51bWJlciBvZiBmcmFncyB0byAxOCwgYXMgdGhlIG1pbmltdW0gdmFsdWUgb2ZcbisgIHRoZSBjb25maWcgaXMgMTcuXG4gXG4gKiBGb3IgemVyby1jb3B5IG1vZGUsIHRoZSBsaW1pdCBpcyB1cCB0byB3aGF0IHRoZSBOSUMgSFdcbiAgIHN1cHBvcnRzLiBVc3VhbGx5IGF0IGxlYXN0IGZpdmUgb24gdGhlIE5JQ3Mgd2UgaGF2ZSBjaGVja2VkLiBXZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXG4rKysgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5AQCAtODAsNiArODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xuIFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgZHJhaW5fY29udDtcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XG4gXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLjJiYjFkMTIyYjFiYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG4rKysgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbkBAIC03OCw2ICs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcdHUzMiBjaHVua19zaXplO1xuIFx0dTMyIGNodW5rX3NoaWZ0O1xuIFx0dTMyIGZyYW1lX2xlbjtcbitcdHUzMiB0eF9kZXNjc19uZW50cmllcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XG4gXHR1MzIgeGRwX3pjX21heF9zZWdzO1xuIFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXG4gXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XG5AQCAtMTAyLDEyICsxMDUsMTQgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFxuIC8qIEFGX1hEUCBjb3JlLiAqL1xuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKTtcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4rXHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKTtcbiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7XG4gaW50IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHMsXG4gXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZCk7XG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTtcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4rXHRcdCAgICAgIHUzMiBtYXhfc2Vncyk7XG4gdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiB2b2lkIHhwX2dldF9wb29sKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiBib29sIHhwX3B1dF9wb29sKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggYjk3MGYzMGVhOWI5ZDguLmY5MDZkNTFiNjY5OTA0IDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTQ5OSw2ICs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbiBcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxuIHtcbitcdHUzMiByZWNsYWltX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4rXG4rXHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcbitcdFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKTtcbitcbitcdFx0aWYgKG5iX2VudHJpZXMgXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcbitcdFx0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbitcdFx0XHRcdCAgIHBlbmRpbmdfZGVzY3MgLSBuYl9lbnRyaWVzKTtcbitcdFx0XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcbitcdFx0bmJfZW50cmllcyArPSByZWNsYWltX2Rlc2NzO1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgMCk7XG4rXHR9XG4rXG4gXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5AQCAtNTc0LDI0ICs1OTEsMTU3IEBAIHN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyXG4gXHRyZXR1cm4gbmJfcGt0cztcbiB9XG4gXG4rc3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxuK3tcbitcdHUzMiBuYl9kZXNjcyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhiYXRjaCk7XG4rXHR1MzIgY3FfY2FjaGVkX3Byb2Q7XG4rXG4rXHRpZiAoIW5iX2Rlc2NzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjcV9jYWNoZWRfcHJvZCA9IHBvb2wtXHUwMDNlY3EtXHUwMDNlY2FjaGVkX3Byb2Q7XG4rXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVx1MDAzZWNxLCBwb29sLVx1MDAzZXR4X2Rlc2NzLCBuYl9kZXNjcyk7XG4rXG4rXHRpZiAodW5saWtlbHkoYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcykpIHtcbitcdFx0dTMyIGNxX3BlbmRpbmdfZGVzY3M7XG4rXG4rXHRcdC8qIENRIGlzIHBvc2l0aW9uYWwuIERlc2NyaXB0b3JzIGFscmVhZHkgd3JpdHRlbiBidXQgbm90XG4rXHRcdCAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzXG4rXHRcdCAqIGFwcGVuZGVkIGJlbG93LlxuK1x0XHQgKi9cbitcdFx0Y3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbitcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4rXHRcdFx0ICAgYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBjcV9wZW5kaW5nX2Rlc2NzKTtcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuK1x0XHRpZiAodW5saWtlbHkoIXBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcykpXG4rXHRcdFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbitfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcbitcdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuK3tcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbitcdHUzMiBlbnRyaWVzO1xuK1xuK1x0ZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBtYXhfZGVzY3MpO1xuK1x0aWYgKCFlbnRyaWVzKVxuK1x0XHRyZXR1cm4gYmF0Y2g7XG4rXG4rXHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBtYXhfZGVzY3MpO1xuK1x0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpKSB7XG4rXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XG4rXHR9IGVsc2Uge1xuK1x0XHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbitcdFx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0fVxuK1x0cmV0dXJuIGJhdGNoO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XG4rXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9O1xuK1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuK1x0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xuK1x0c3RydWN0IHhkcF9zb2NrICp4cztcbitcbitcdC8qIFRoZSBmYWlybmVzcyBxdW90YSBtdXN0IGFsbG93IG9uZSBtYXhpbXVtLXNpemVkIHZhbGlkIHBhY2tldC4gKi9cbitcdHBlcl9zb2NrZXRfYnVkZ2V0ID0gbWF4X3QodTMyLCBNQVhfUEVSX1NPQ0tFVF9CVURHRVQsXG4rXHRcdFx0XHQgIHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKTtcbitcbithZ2FpbjpcbitcdGJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTtcbitcdGNxX2Rlc2NzX2JlZm9yZSA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcbitcdFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nLCB1c2VkO1xuK1x0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XG4rXG4rXHRcdC8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1FcbitcdFx0ICogYWRkcmVzcyBhcmVhLCBkbyBub3QgYXBwZW5kIGRyaXZlci12aXNpYmxlIFR4IGRlc2NyaXB0b3JzXG4rXHRcdCAqIGZyb20gYW5vdGhlciBzb2NrZXQgYWZ0ZXIgdGhlbS4geHNrX3R4X2NvbXBsZXRlZCgpIHJlbGllcyBvblxuK1x0XHQgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHlcbitcdFx0ICogZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4rXHRcdG9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoeHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50IFx1MDAzZT0gcGVyX3NvY2tldF9idWRnZXQpIHtcbitcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuK1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0YnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudDtcbitcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuK1x0XHRidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7XG4rXG4rXHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHBvb2wtXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuK1x0XHR1c2VkID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNmN1cnJfYmF0Y2gpO1xuK1x0XHRpZiAoIXVzZWQpIHtcbitcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbitcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSB1c2VkO1xuK1x0XHRzdW1fYmF0Y2gudHhfZGVzY3MgKz0gY3Vycl9iYXRjaC50eF9kZXNjcztcbitcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XG4rXHR9XG4rXG4rXHRjcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1xuK1x0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuK1xuK1x0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cbitcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXG4rXHRcdGdvdG8gYWdhaW47XG4rXG4rXHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXG4rXHRcdHJldHVybiBzdW1fYmF0Y2g7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdClcbitcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcbitcdGdvdG8gYWdhaW47XG4rfVxuK1xuIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIHtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4rXHRib29sIHVtZW1fc2hhcmVkO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpKSB7XG4tXHRcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbi1cdH1cbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuLVx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XG4tXHRpZiAoIXhzKSB7XG4tXHRcdG5iX3BrdHMgPSAwO1xuK1x0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jayxcbitcdFx0XHRcdCAgICB0eF9saXN0KTtcbitcdGlmICgheHMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBuYl9wa3RzKTtcbitcdG5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XG4rXHRpZiAoIW5iX3BrdHMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dW1lbV9zaGFyZWQgPSAhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KTtcbitcbitcdGlmICh1bWVtX3NoYXJlZCBcdTAwMjZcdTAwMjYgIShwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbitcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20gZm9yIHRoZSBUeCBwYXRoLiBUcnkgdG9cbiBcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcbkBAIC02MDMsMTkgKzc1MywxNiBAQCB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiBcdGlmICghbmJfcGt0cylcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRuYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy1cdTAwM2V0eCwgcG9vbCwgbmJfcGt0cyk7XG4tXHRpZiAoIW5iX3BrdHMpIHtcbi1cdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0YmF0Y2ggPSB1bWVtX3NoYXJlZCA/XG4rXHRcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxuK1x0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHQgcG9vbC1cdTAwM2V0eF9kZXNjcyxcbitcdFx0XHRcdFx0XHQgbmJfcGt0cyk7XG4rXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoKTtcbiBcbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBuYl9wa3RzO1xuK1x0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG4gXG5AQCAtNzM3LDYgKzg4NCwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBpZHg7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuK1x0aWR4ID0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbitcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbitcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIHtcbiBcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuQEAgLTc5NCw4ICs5NTQsMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0eGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyArPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbitcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbitcbitcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgKzEwNDAsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxuLVx0XHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuK1x0XHQgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuIFx0XHQgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHNcbiBcdFx0ICovXG4gXHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG5AQCAtOTY5LDYgKzExMzIsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4rXG4gXHRcdFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXHUwMDI2XHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuIFx0XHRcdFx0Z290byBmcmVlX2VycjtcbkBAIC05ODYsOCArMTE1MSw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwMjUsMTMgKzExODgsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuLVx0Ym9vbCBzZW50X2ZyYW1lID0gZmFsc2U7XG4gXHRzdHJ1Y3QgeGRwX2Rlc2MgZGVzYztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHR1MzIgY2FjaGVkX2NvbnM7XG4gXHR1MzIgbWF4X2JhdGNoO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbitcdGNhY2hlZF9jb25zID0geHMtXHUwMDNldHgtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXG4gXHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cbiBcdGlmICh1bmxpa2VseSgheHNrX2lzX2JvdW5kKHhzKSkpIHtcbkBAIC0xMDYwLDExICsxMjI0LDIxIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbitcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbitcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzKys7XG4rXHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFx1MDAyNmRlc2MpO1xuIFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4gXHRcdFx0aWYgKGVyciAhPSAtRU9WRVJGTE9XKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4rXHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMTA5MywxOCArMTI2NywzMyBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0c2VudF9mcmFtZSA9IHRydWU7XG4gXHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gXHR9XG4gXG4gXHRpZiAoeHNrcV9oYXNfZGVzY3MoeHMtXHUwMDNldHgpKSB7XG4rXHRcdGJvb2wgZHJhaW4gPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udCB8fCB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuK1xuK1x0XHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzLS07XG4rXHRcdFx0aWYgKHhzLVx1MDAzZXNrYilcbitcdFx0XHRcdHhza19kcm9wX3NrYih4cy1cdTAwM2Vza2IpO1xuK1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSBkcmFpbjtcbitcdFx0XHRlcnIgPSAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4rXG4rXHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuK1xuIFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4rXHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuIFx0fVxuIFxuIG91dDpcbi1cdGlmIChzZW50X2ZyYW1lKVxuK1x0aWYgKHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zICE9IGNhY2hlZF9jb25zKVxuIFx0XHRfX3hza190eF9yZWxlYXNlKHhzKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5AQCAtMTQ4Myw3ICsxNjcyLDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuLVx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0pO1xuK1x0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICsxNzA1LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiB1dGlsaXplc1xuIFx0XHRcdCAqL1xuIFx0XHRcdGlmICh4cy1cdTAwM2V0eCBcdTAwMjZcdTAwMjYgIXhzLVx1MDAzZXBvb2wtXHUwMDNldHhfZGVzY3MpIHtcbi1cdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzKTtcbitcdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzLFxuK1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgKzE3MjQsOSBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqL1xuLVx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtXHUwMDNldW1lbSk7XG4rXHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cdTAwM2V1bWVtLFxuK1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4rXG4gXHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuQEAgLTQyLDE3ICs0MiwyMiBAQCB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gXHRrdmZyZWUocG9vbCk7XG4gfVxuIFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4rXHRcdCAgICAgIHUzMiBtYXhfc2VncylcbiB7XG4tXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMpO1xuK1x0dTMyIG5lbnRyaWVzID0gbWF4KHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzLCBtYXhfc2Vncyk7XG4rXG4rXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgbmVudHJpZXMpO1xuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSBuZW50cmllcztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSlcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4rXHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKVxuIHtcbiBcdGJvb2wgdW5hbGlnbmVkID0gdW1lbS1cdTAwM2VmbGFncyBcdTAwMjYgWERQX1VNRU1fVU5BTElHTkVEX0NIVU5LX0ZMQUc7XG4gXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcbkBAIC02OSw3ICs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHhzLVx1MDAzZXR4KVxuLVx0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxuK1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLjFiYzQyYzg5MDJmNGJhIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgKzU4LDE3IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XG4gXHR1MzIgdmFsaWQ7XG4gfTtcbiBcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbitcdHUzMiB0eF9kZXNjcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbit7XG4rXHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuK31cbitcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyArMjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbitcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4rXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuK1x0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVx1MDAzZXR4O1xuK1x0dTMyIG5yX2ZyYWdzID0gMDtcbitcbitcdGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcbi1cdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcbi1cdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3Npbmdcbi1cdCAqL1xuIFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXHUwMDNlY2FjaGVkX3Byb2QgXHUwMDI2XHUwMDI2IG5iX2VudHJpZXMgXHUwMDNjIG1heCkge1xuIFx0XHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXHUwMDNlcmluZztcbiBcdFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFx1MDAyNiBxLVx1MDAzZXJpbmdfbWFzaztcbkBAIC0yODMsMjUgKzI5NSw0MiBAQCB1MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdFx0Y2FjaGVkX2NvbnMrKztcbiBcdFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXHUwMDI2cGFyc2VkKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdGRyYWluID0gdHJ1ZTtcbitcbitcdFx0bnJfZnJhZ3MrKztcbitcdFx0bmJfZW50cmllcysrO1xuIFxuIFx0XHRpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7XG4tXHRcdFx0dG90YWxfZGVzY3MgKz0gKG5yX2ZyYWdzICsgMSk7XG4tXHRcdFx0bnJfZnJhZ3MgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdG5yX2ZyYWdzKys7XG4tXHRcdFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKSB7XG4rXHRcdFx0aWYgKHVubGlrZWx5KGRyYWluKSkge1xuK1x0XHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuK1x0XHRcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250LCBmYWxzZSk7XG4gXHRcdFx0XHRucl9mcmFncyA9IDA7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4rXG4rXHRcdFx0YmF0Y2gudHhfZGVzY3MgKz0gbnJfZnJhZ3M7XG4rXHRcdFx0bnJfZnJhZ3MgPSAwO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2VncylcbitcdFx0XHRkcmFpbiA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAobnJfZnJhZ3MpIHtcbitcdFx0aWYgKGRyYWluKSB7XG4rXHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuK1x0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgdHJ1ZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKG5iX2VudHJpZXMgPT0gbWF4KVxuK1x0XHRcdFx0YmF0Y2guYnVkZ2V0X2xpbWl0ZWQgPSB0cnVlO1xuK1x0XHRcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0XHR9XG4tXHRcdG5iX2VudHJpZXMrKztcbiBcdH1cbiBcbi1cdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbiBcdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbitcdHJldHVybiBiYXRjaDtcbiB9XG4gXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNDc3YWVkYmIwMWJhZDguLjQ1NDkzNThjYzhjMjFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0Kys7XG4gXHR3aGlsZSAobmV4dF9mcmFnKysgXHUwMDNjIHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cykge1xuIFx0XHRuYl9mcmFncysrO1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBrdCsrO1xuIFx0fVxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXG4gXHRcdFx0aWYgKCFmcmFtZS1cdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRcdHBheWxvYWQrKztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4rXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0XHRsZW4gKz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuK1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTI1MCwxMCArMTI1MCw5IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbitcdFx0aWYgKHBrdCBcdTAwMjZcdTAwMjYgcGt0LVx1MDAzZXZhbGlkKVxuIFx0XHRcdHZhbGlkX3BrdHMrKztcbi1cdFx0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbi1cdFx0fVxuK1x0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbiBcdH1cbiBcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwYWNpbmdfbXV0ZXgpO1xuQEAgLTIwOTksMTMgKzIwOTgsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbitcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuK1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggKzIxMTksOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbitcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuK1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgKzIyNzIsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgKz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyArIDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4rXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgKzIyOTAsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XG4rXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xuK1x0Zm9yIChpID0gbWF4X2ZyYWdzICsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuK1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbitcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0udmFsaWQgPSB0cnVlO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xuK1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuK1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4rXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4rXHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbitcdCAqL1xuK1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4rXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbitcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MjE6MjYuMDMzNjY4NTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwMzE4MTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRl9YRFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBBRl9YRFAgaW4gdGhlIExpbnV4IGtlcm5lbC4gU2VlbXMgbGlrZSBhIGZhaXJseSBpbnZvbHZlZCBtb2RpZmljYXRpb24sIHRvdWNoaW5nIHNldmVyYWwga2V5IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RgLCB2YXJpb3VzIGhlYWRlciBmaWxlcyAoYHhkcF9zb2NrLmhgLCBgeHNrX2J1ZmZfcG9vbC5oYCwgYHhza19xdWV1ZS5oYCksIGFuZCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBmaWxlcyAoYHhzay5jYCwgYHhza19idWZmX3Bvb2wuY2ApLiBJdCBldmVuIGluY2x1ZGVzIGEgbW9kaWZpY2F0aW9uIHRvIGEgc2VsZnRlc3QgKGB0ZXN0X3hzay5jYCksIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBUaGlzIGlzbid0IGp1c3QgYSB0cml2aWFsIHR3ZWFrOyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGZvY3VzaW5nIG9uIGhvdyBBRl9YRFAgaGFuZGxlcyBwb3RlbnRpYWxseSBpbnZhbGlkIGRlc2NyaXB0b3JzLCB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbXBsZXRpb24gcmluZywgYW5kIGJhdGNoaW5nIHdpdGhpbiBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYC5cblxuVGhlIGtleSBmdW5jdGlvbnMgYmVpbmcgdXBkYXRlZCBoZXJlIGFyZSBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGB4c2tfdHhfY29tcGxldGVkYCwgYW5kIHRoZSBTS0ItYnVpbGRpbmcgZnVuY3Rpb25zLCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAuIFRoaXMgYWxsIHN1Z2dlc3RzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBpbXBvcnRhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBlcmhhcHMgYSBmaXggZm9yIHNvbWUgaWRlbnRpZmllZCBlZGdlIGNhc2VzLlxuXG5JJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCBpbiBkZXB0aCwgYnV0IG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBkZWFsaW5nIHdpdGggZGV0YWlscyBvZiBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuXG5cblRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byBjb25zaWRlciBpcyB0aGUgYXBwbGljYWJpbGl0eSBvZiB0aGlzIGNoYW5nZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBnbGFkIHRoZXkgYXJlIHRoaW5raW5nIGFib3V0IHRoaXMuIEFGX1hEUCBoYXMgcHJvdmVuIHVzZWZ1bCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGJ1dCB0aGlzIHBhdGNoIGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBob3cgd2VsbCBpdCB3b3Jrcy4gSSdtIGdsYWQgdG8gc2VlIHRoYXQgQUZfWERQIGlzIHN1cHBvcnRlZCB3aXRoIGdlbmVyaWMgWERQIChTS0IgbW9kZSkgYW5kIHZldGgvdmlydGlvLW5ldC5cblxuSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX1hEUF9TT0NLRVRTYCwgdG8gZW5zdXJlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEknbGwgc2VhcmNoIGZvciBgWERQX1NPQ0tFVFNgIGFuZCBgQUZfWERQYCB3aXRoaW4gdGhlIGZpbGVzIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjMyLjIzNjg1MTYzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkxMjMyNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhEUF9TT0NLRVRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTE1PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjExNjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTE3LUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTMxPUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjEzMjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTMzLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjU2OkNPTkZJR19YRFBfU09DS0VUUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjU3OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNTgtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz01MT1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo1MjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc6NTM6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNTQtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTU4PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NTk6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NjA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NDg9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzo0OTpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzo1MDpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnLTUxLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZz01MD1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjUxOkNPTkZJR19YRFBfU09DS0VUUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjUyOkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNTMtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz00OT1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzo1MDpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NTE6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctNTItQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTY5PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NzA6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NzE6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy03Mi1DT05GSUdfSU5FVD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz00Nz1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc6NDg6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZzo0OTpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctNTAtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9NDg9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjQ5OkNPTkZJR19YRFBfU09DS0VUUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnLTUxLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc9NDk9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnOjUxOkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnLTUyLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnPTQ0PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZzo0NTpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjQ2OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZy00Ny1DT05GSUdfSU5FVD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9NDU9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTQ4LUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX0RJQlNfTE89eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxMzQ6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTM1OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0xMjQ9Q09ORklHX0RJQlNfTE89eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMjU6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTI2OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMTI3LUNPTkZJR19JTkVUPXlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT01OT1pY2UtJChDT05GSUdfUkZTX0FDQ0VMKSArPSBpY2VfYXJmcy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYwOmljZS0kKENPTkZJR19YRFBfU09DS0VUUykgKz0gaWNlX3hzay5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTYxLWljZS0kKENPTkZJR19JQ0VfU1dJVENIREVWKSArPSBpY2VfZXN3aXRjaC5vIGljZV9lc3dpdGNoX2JyLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmg9MTA9c3RydWN0IGljZV92c2k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oOjEyOiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oLTEzLWludCBpY2VfeHNrX3Bvb2xfc2V0dXAoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oPTk4PWljZV9xdmVjX2Rpc19pcnEoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV9yeF9yaW5nICpyeF9yaW5nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmgtOTktXFx0XFx0IHN0cnVjdCBpY2VfcV92ZWN0b3IgKnFfdmVjdG9yKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oOjEwMDojZW5kaWYgLyogQ09ORklHX1hEUF9TT0NLRVRTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMDEtI2VuZGlmIC8qICFfSUNFX1hTS19IXyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMTc9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTE4OiNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTExOS1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTg4Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX25ldF9jdHhfZ2V0X2FsbF91c2VkX2ZsdXNoX2xpc3RzKHN0cnVjdCBsaXN0X2hlYWQgKipsaF9tYXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTkwNy1cXHRsaCA9IFxcdTAwMjZicGZfbmV0X2N0eC1cXHUwMDNleHNrbWFwX21hcF9mbHVzaF9saXN0O1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTA4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19YRFBfU09DS0VUUykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTkwOS1cXHQgICAga2Vybl9mbGFncyBcXHUwMDI2IEJQRl9SSV9GX1hTS19NQVBfSU5JVCBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShsaCkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTY3Nj1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNjk3LVxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KnNiX2RldjtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjY5ODojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC02OTktXFx0LyogXFxcIm9wcyBwcm90ZWN0ZWRcXFwiLCBzZWUgY29tbWVudCBhYm91dCBuZXRfZGV2aWNlOjpsb2NrICovXFxuLS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtOS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6MTA6LyogYGBYRFBfVFhNRF9GTEFHU19WQUxJRGBgIGlzIGRlZmluZWQgb25seSB1bmRlciBgYENPTkZJR19YRFBfU09DS0VUU2BgICovXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTExLSNpZmRlZiBYRFBfVFhNRF9GTEFHU19WQUxJRFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTYyPXN0cnVjdCBuZXQge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE4My0jZW5kaWZcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MTg0OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMTg1LVxcdHN0cnVjdCBuZXRuc194ZHBcXHR4ZHA7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaD0xND1zdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9yeF9xdWV1ZS5oLTI3LVxcdCAqL1xcbmluY2x1ZGUvbmV0L25ldGRldl9yeF9xdWV1ZS5oOjI4OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaC0yOS1cXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAgICAgICAgICAgICpwb29sO1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaD0xMTc9c3RydWN0IHhza190eF9tZXRhZGF0YV9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xMjMtXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaDoxMjQ6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTI1LVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaD0yNDA9c3RhdGljIGlubGluZSB2b2lkIHhza190eF9tZXRhZGF0YV9jb21wbGV0ZShzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCxcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMjQ1LVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MjQ2OiNlbmRpZiAvKiBDT05GSUdfWERQX1NPQ0tFVFMgKi9cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTI0Ny0jZW5kaWYgLyogX0xJTlVYX1hEUF9TT0NLX0ggKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTE5PXN0cnVjdCB4c2tfY2JfZGVzYyB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0yNC1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoyNTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMjYtXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00OTM9c3RhdGljIGlubGluZSB2b2lkIHhza19idWZmX3Jhd19kbWFfc3luY19mb3JfZGV2aWNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDk4LVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oOjQ5OTojZW5kaWYgLyogQ09ORklHX1hEUF9TT0NLRVRTICovXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNTAwLVxcbi0tXFxubmV0L01ha2VmaWxlPTcyPW9iai0kKENPTkZJR19ORVRfTkNTSSlcXHRcXHQrPSBuY3NpL1xcbm5ldC9NYWtlZmlsZTo3MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpXFx0Kz0geGRwL1xcbm5ldC9NYWtlZmlsZS03NC1vYmotJChDT05GSUdfTVBUQ1ApXFx0XFx0Kz0gbXB0Y3AvXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTQ0MT1fX25ldGRldl9ubF9xdWV1ZV9maWxsX21wKHN0cnVjdCBza19idWZmICpyc3AsIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cSlcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNDQ4LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NDQ5OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTQ1MC1cXHRpZiAocnhxLVxcdTAwM2Vwb29sKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz00NzU9bmV0ZGV2X25sX3F1ZXVlX2ZpbGxfb25lKHN0cnVjdCBza19idWZmICpyc3AsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTUwNC1cXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjUwNTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy01MDYtXFx0XFx0aWYgKHR4cS1cXHUwMDNlcG9vbClcXG4tLVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jPTE4Nz1zdGF0aWMgaW50IF9fbmV0aWZfbXBfb3Blbl9yeHEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJ4cV9pZHgsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yMjAtXFx0fVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jOjIyMTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmMtMjIyLVxcdGlmIChyeHEtXFx1MDAzZXBvb2wpIHtcXG4tLVxcbm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3hkcC9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcXG5uZXQveGRwL0tjb25maWctMTMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5uZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xcbm5ldC94ZHAvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhza19idWZmX3Bvb2wub1xcbm5ldC94ZHAvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfWERQX1NPQ0tFVFNfRElBRykgKz0geHNrX2RpYWcub1xcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzcyLVxcdFxcdC8qIEFGX1hEUCBzb2NrZXRzICovXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jOjM3MzpcXHRcXHR7IFxcXCJDT05GSUdfWERQX1NPQ0tFVFNcXFwiLCB9LFxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zNzQtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9MV1RfKiBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTEyNz1DT05GSUdfVlhMQU49eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6MTI4OkNPTkZJR19YRFBfU09DS0VUUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy0xMjktQ09ORklHX1hGUk1fSU5URVJGQUNFPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0PTIyMz1DT05GSUdfWDg2X1BPV0VSTk9XX0s4PXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NDoyMjQ6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTIyNS1DT05GSUdfWEZSTV9TVUJfUE9MSUNZPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZz0xNj1DT05GSUdfVkxBTl84MDIxUT1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnOjE3OkNPTkZJR19YRFBfU09DS0VUUz15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjM0LjIyODA5Mzg0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjA3MjkyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBRl9YRFAgU29ja2V0IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byBgWERQX1NPQ0tFVFNgLCBnb3QgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBhIGZldyBrZXkgY29tcG9uZW50cyB3aXRoaW4gdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X2NvbXBsZXRlZGAsIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAuXG5cbkltbWVkaWF0ZWx5LCBJJ20gemVyb2luZyBpbiBvbiBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCBhbmQgYF9feHNrX2dlbmVyaWNfeG1pdGAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSBjcml0aWNhbCBwYXRoLiBgX194c2tfZ2VuZXJpY194bWl0YCBpcyB0aGUgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLCBzbyB0aGF0J3MgYSBjZW50cmFsIGZ1bmN0aW9uLiBBbmQgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaGFuZGxlcyByZXRyaWV2aW5nIFRYIGRlc2NyaXB0b3JzIGZyb20gdGhlIEFGX1hEUCBzb2NrZXQsIGEgY29yZSBpbnRlcmFjdGlvbiBwb2ludCB3aXRoIHRoZSBkcml2ZXJzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBtb3JlIGNvbXByZWhlbnNpdmUgbG9vayBhdCByZWxhdGVkIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgYmVpbmcgY2hhbmdlZC4gVGhlIGZvbGxvd2luZyBzeW1ib2xzIHNlZW0gcmVsZXZhbnQ6XG5cbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfY29tcGxldGVkYFxuKiAgIGBfX3hza19nZW5lcmljX3htaXRgXG4qICAgYHhza19idWlsZF9za2JgXG4qICAgYHhza19idWlsZF9za2JfemVyb2NvcHlgXG4qICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgXG4qICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYFxuKiAgIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYFxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBhbmQgYHhza190eF9jb21taXRfYmF0Y2hgIGFyZSBhbGwgc3RhdGljLiBBbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGlzIHN0YXRpYyBpbmxpbmUuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZWlyIHJlc3BlY3RpdmUgbW9kdWxlcywgYW5kIGhlbHBzIHRvIG5hcnJvdyBkb3duIHRoZSBzY29wZSBvZiBpbXBhY3QuXG5cblRoZXJlZm9yZSwgbXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIHByaW1hcnkgZnVuY3Rpb25zOlxuXG4qICAgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X2NvbXBsZXRlZGBcbiogICBgX194c2tfZ2VuZXJpY194bWl0YFxuKiAgIGB4c2tfYnVpbGRfc2tiYFxuKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YFxuXG5GaW5hbGx5LCBiZWZvcmUgSSBkaWcgZnVydGhlciwgSSBzaG91bGQganVzdCBjb25maXJtIHRoYXQgYHhza19idWlsZF9za2JgIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAgYXJlIG5vdCBzdGF0aWMsIGluIG9yZGVyIHRvIGF2b2lkIG1pc2ludGVycHJldGluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgY291bGQgYmUgY2FsbGVkLiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNDIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MjE6NDEuNzQ4ODI1NDUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzM2NTEzNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1aWxkX3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTk2ND1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDA1LVxcbm5ldC94ZHAveHNrLmM6MTAwNjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMDctXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMDgxLVxcbm5ldC94ZHAveHNrLmM6MTA4MjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwODMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTEwODktXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMDkwOlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTA5MS1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTE4OD1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyMzQtXFxubmV0L3hkcC94c2suYzoxMjM1OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG5uZXQveGRwL3hzay5jLTEyMzYtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjQzLjg4MjQ4MTc3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1Mzk2Njg1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgdGhleSd2ZSBtYWRlIGFyZSBmYWlybHkgZnVuZGFtZW50YWwsIGZvY3VzZWQgb24gZW5oYW5jaW5nIHRoZSBUeCBwYXRoIHdpdGhpbiB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGRlYWxpbmcgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgaXNzdWVzLCBhbmQgaW50cm9kdWNpbmcgc29tZSBiYXRjaGluZyBhbmQgcmVjbGFtYXRpb24gbG9naWMuIEdpdmVuIHRoYXQsIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBrZXkgc3ltYm9scyBhcmUgdGhlIHJlbGV2YW50IGZvY2FsIHBvaW50cyB0byB0cmFjazpcblxuKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgXG4qICAgYHhza190eF9jb21wbGV0ZWRgXG4qICAgYF9feHNrX2dlbmVyaWNfeG1pdGBcbiogICBgeHNrX2J1aWxkX3NrYmBcbiogICBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWBcblxuVGhvc2UgYWxsIHNlZW0gc3RhdGljIGFuZCBkaXJlY3RseSBhZGRyZXNzIHRoZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgdG8gQUZcXF9YRFAuIEkgY2FuIGNvbmZpZGVudGx5IGluY2x1ZGUgdGhvc2UgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuXG5cbk5vdywgYXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcy4uLiBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgWERQX1NPQ0tFVFNgIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgaGVyZS4gSSdsbCBkb3VibGUgY2hlY2sgdG8gYmUgZXh0cmEgY2VydGFpbiwgYnV0IEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBmbGFncy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBidWlsdCB1cG9uIHRoZSBmdW5kYW1lbnRhbCBBRlxcX1hEUCBpbmZyYXN0cnVjdHVyZS4gSSB0aGluayB3ZSBhcmUgZ29vZCB0byBnby5cblxuVGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBhbmQgbG9jayB0aGVzZSBwYXJhbWV0ZXJzIGludG8gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTI2LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoyMTo0OS40MjIxNTI4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5MDk1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgY29tcGxldGlvbiByaW5nIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgaW4gdGhlIFR4IHBhdGguIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gbG9naWMgZm9yIGRlc2NyaXB0b3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEFGX1hEUCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zIChlLmcuLCB1c2luZyBnZW5lcmljIFhEUCBtb2RlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X2NvbXBsZXRlZFwiLFxuICAgIFwiX194c2tfZ2VuZXJpY194bWl0XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGNvbXBsZXRpb24gcmluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGluIHRoZSBUeCBwYXRoLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGFuZCByZWNsYWltIGxvZ2ljIGZvciBkZXNjcmlwdG9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBBRl9YRFAgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFGX1hEUCBzb2NrZXQgb3BlcmF0aW9ucyAoZS5nLiwgdXNpbmcgZ2VuZXJpYyBYRFAgbW9kZSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-19 14:03:58 +0000 UTC FinishedAt: 2026-07-19 14:21:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS" ], "series_id": "f1a84680-81ab-4cf4-9508-acb6f7a92f65" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_tx_peek_release_desc_batch", "xsk_tx_completed", "__xsk_generic_xmit", "xsk_build_skb", "xsk_build_skb_zerocopy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoJiMzNDssCiAgICAmIzM0O3hza190eF9jb21wbGV0ZWQmIzM0OywKICAgICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYl96ZXJvY29weSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgY29tcGxldGlvbiByaW5nIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgaW4gdGhlIFR4IHBhdGguIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gbG9naWMgZm9yIGRlc2NyaXB0b3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEFGX1hEUCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zIChlLmcuLCB1c2luZyBnZW5lcmljIFhEUCBtb2RlKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdjMGQ4NTg0NTczMzkwZjdhZDU5ZGZhNWZlNTgwZmJkOTZjZTVjNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoyMToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XG5pbmRleCA1MGQ5MjA4NGE0OWM2YS4uY2MzZjBkMTZiMjhmYjYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RcbkBAIC00MywxMiAmIzQzOzQzLDEzIEBAIFVNRU0gYWxzbyBoYXMgdHdvIHJpbmdzOiB0aGUgRklMTCByaW5nIGFuZCB0aGUgQ09NUExFVElPTiByaW5nLiBUaGVcbiBGSUxMIHJpbmcgaXMgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gdG8gc2VuZCBkb3duIGFkZHIgZm9yIHRoZSBrZXJuZWxcbiB0byBmaWxsIGluIHdpdGggUlggcGFja2V0IGRhdGEuIFJlZmVyZW5jZXMgdG8gdGhlc2UgZnJhbWVzIHdpbGwgdGhlblxuIGFwcGVhciBpbiB0aGUgUlggcmluZyBvbmNlIGVhY2ggcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkLiBUaGVcbi1DT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyIHRoYXQgdGhlXG4ta2VybmVsIGhhcyB0cmFuc21pdHRlZCBjb21wbGV0ZWx5IGFuZCBjYW4gbm93IGJlIHVzZWQgYWdhaW4gYnkgdXNlclxuLXNwYWNlLCBmb3IgZWl0aGVyIFRYIG9yIFJYLiBUaHVzLCB0aGUgZnJhbWUgYWRkcnMgYXBwZWFyaW5nIGluIHRoZVxuLUNPTVBMRVRJT04gcmluZyBhcmUgYWRkcnMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdHJhbnNtaXR0ZWQgdXNpbmcgdGhlXG4tVFggcmluZy4gSW4gc3VtbWFyeSwgdGhlIFJYIGFuZCBGSUxMIHJpbmdzIGFyZSB1c2VkIGZvciB0aGUgUlggcGF0aFxuLWFuZCB0aGUgVFggYW5kIENPTVBMRVRJT04gcmluZ3MgYXJlIHVzZWQgZm9yIHRoZSBUWCBwYXRoLlxuJiM0MztDT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyZXNzZXMgZnJvbSBUeFxuJiM0MztkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIHRoYXQgY2FuIG5vdyBiZVxuJiM0Mzt1c2VkIGFnYWluIGJ5IHVzZXIgc3BhY2UsIGZvciBlaXRoZXIgVHggb3IgUnguIFRoaXMgaW5jbHVkZXMgZnJhbWVzIHdob3NlXG4mIzQzO3RyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkIGFzIHdlbGwgYXMgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeFxuJiM0MztkZXNjcmlwdG9ycyByZWplY3RlZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gdGhlcmVmb3JlIHJldHVybnNcbiYjNDM7b3duZXJzaGlwIG9mIGEgZnJhbWUgdG8gdXNlciBzcGFjZSwgYnV0IGRvZXMgbm90IGJ5IGl0c2VsZiBndWFyYW50ZWUgdGhhdFxuJiM0Mzt0aGUgcGFja2V0IHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuXG4gXG4gVGhlIHNvY2tldCBpcyB0aGVuIGZpbmFsbHkgYm91bmQgd2l0aCBhIGJpbmQoKSBjYWxsIHRvIGEgZGV2aWNlIGFuZCBhXG4gc3BlY2lmaWMgcXVldWUgaWQgb24gdGhhdCBkZXZpY2UsIGFuZCBpdCBpcyBub3QgdW50aWwgYmluZCBpc1xuQEAgLTE2OSwxNCAmIzQzOzE3MCwxNSBAQCBjaHVua3MgbW9kZSwgdGhlbiB0aGUgaW5jb21pbmcgYWRkciB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLlxuIFVNRU0gQ29tcGxldGlvbiBSaW5nXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5cbiBcbi1UaGUgQ09NUExFVElPTiBSaW5nIGlzIHVzZWQgdHJhbnNmZXIgb3duZXJzaGlwIG9mIFVNRU0gZnJhbWVzIGZyb21cbiYjNDM7VGhlIENPTVBMRVRJT04gUmluZyBpcyB1c2VkIHRvIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBVTUVNIGZyYW1lcyBmcm9tXG4ga2VybmVsLXNwYWNlIHRvIHVzZXItc3BhY2UuIEp1c3QgbGlrZSB0aGUgRklMTCByaW5nLCBVTUVNIGluZGljZXMgYXJlXG4tdXNlZC5cbi1cbi1GcmFtZXMgcGFzc2VkIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyLXNwYWNlIGFyZSBmcmFtZXMgdGhhdCBoYXMgYmVlblxuLXNlbnQgKFRYIHJpbmcpIGFuZCBjYW4gYmUgdXNlZCBieSB1c2VyLXNwYWNlIGFnYWluLlxuLVxuLVRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbnN1bWVzIFVNRU0gYWRkcnMgZnJvbSB0aGlzIHJpbmcuXG4mIzQzO3VzZWQuIEZyYW1lcyBwYXNzZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgYXJlIGZyYW1lcyByZWZlcmVuY2VkXG4mIzQzO2J5IFR4IGRlc2NyaXB0b3JzIHRoYXQgdGhlIGtlcm5lbCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhbmQgY2FuIGJlXG4mIzQzO3VzZWQgYnkgdXNlci1zcGFjZSBhZ2Fpbi4gVGhpcyBpbmNsdWRlcyBib3RoIGZyYW1lcyB3aG9zZSB0cmFuc21pc3Npb25cbiYjNDM7aGFzIGNvbXBsZXRlZCBhbmQgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeCBkZXNjcmlwdG9ycyB0aGF0IHdlcmVcbiYjNDM7cmVqZWN0ZWQgYW5kIHJlY2xhaW1lZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gZW50cnkgZG9lcyBub3RcbiYjNDM7Z3VhcmFudGVlIHN1Y2Nlc3NmdWwgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHVzZXIgYXBwbGljYXRpb24gY29uc3VtZXNcbiYjNDM7VU1FTSBhZGRycyBmcm9tIHRoaXMgcmluZy5cbiBcbiBcbiBSWCBSaW5nXG5AQCAtNTA0LDIxICYjNDM7NTA2LDI1IEBAIHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBpbnZhbGlkIGRlc2NyaXB0b3IuXG4gVGhlc2UgYXJlIHRoZSBzZW1hbnRpY3MgZm9yIHByb2R1Y2luZyBwYWNrZXRzIG9udG8gQUZfWERQIFR4IHJpbmdcbiBjb25zaXN0aW5nIG9mIG11bHRpcGxlIGZyYW1lczpcbiBcbi0qIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCBhbGwgdGhlIG90aGVyXG4tICBkZXNjcmlwdG9ycy9mcmFtZXMgb2YgdGhpcyBwYWNrZXQgYXJlIG1hcmtlZCBhcyBpbnZhbGlkIGFuZCBub3Rcbi0gIGNvbXBsZXRlZC4gVGhlIG5leHQgZGVzY3JpcHRvciBpcyB0cmVhdGVkIGFzIHRoZSBzdGFydCBvZiBhIG5ld1xuLSAgcGFja2V0LCBldmVuIGlmIHRoaXMgd2FzIG5vdCB0aGUgaW50ZW50IChiZWNhdXNlIHdlIGNhbm5vdCBndWVzc1xuLSAgdGhlIGludGVudCkuIEFzIGJlZm9yZSwgaWYgeW91ciBwcm9ncmFtIGlzIHByb2R1Y2luZyBpbnZhbGlkXG4tICBkZXNjcmlwdG9ycyB5b3UgaGF2ZSBhIGJ1ZyB0aGF0IG11c3QgYmUgZml4ZWQuXG4mIzQzOyogV2hlbiBhbiBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgZm91bmQsIHRoZSBjb21wbGV0ZSBwYWNrZXQgaXMgdHJlYXRlZCBhc1xuJiM0MzsgIGludmFsaWQuIFRoZSBrZXJuZWwgY29uc3VtZXMgZGVzY3JpcHRvcnMgdGhyb3VnaCB0aGUgZGVzY3JpcHRvciBtYXJraW5nXG4mIzQzOyAgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGFuZCByZXR1cm5zIGFsbCB0aGVpciBmcmFtZSBhZGRyZXNzZXMgdGhyb3VnaCB0aGVcbiYjNDM7ICBDT01QTEVUSU9OIHJpbmcuIEEgc3RhbmRhbG9uZSBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgdHJlYXRlZCBhcyBhXG4mIzQzOyAgb25lLWRlc2NyaXB0b3IgaW52YWxpZCBwYWNrZXQuIFRoZSBkZXNjcmlwdG9yIGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoZVxuJiM0MzsgIGludmFsaWQgcGFja2V0IGlzIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3IHBhY2tldC4gQXMgYmVmb3JlLCBpZlxuJiM0MzsgIHlvdXIgcHJvZ3JhbSBpcyBwcm9kdWNpbmcgaW52YWxpZCBkZXNjcmlwdG9ycyB5b3UgaGF2ZSBhIGJ1ZyB0aGF0IG11c3RcbiYjNDM7ICBiZSBmaXhlZC4gUmVqZWN0ZWQgZGVzY3JpcHRvcnMgYXJlIHJlcG9ydGVkIGluIHRoZSBgYHR4X2ludmFsaWRfZGVzY3NgYFxuJiM0MzsgIHN0YXRpc3RpYy5cbiBcbiAqIFplcm8gbGVuZ3RoIGRlc2NyaXB0b3JzIGFyZSB0cmVhdGVkIGFzIGludmFsaWQgZGVzY3JpcHRvcnMuXG4gXG4gKiBGb3IgY29weSBtb2RlLCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHBhY2tldCBpc1xuLSAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgJiM0MzsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbFxuLSAgZGVzY3JpcHRvcnMgYWNjdW11bGF0ZWQgc28gZmFyIGFyZSBkcm9wcGVkIGFuZCB0cmVhdGVkIGFzXG4tICBpbnZhbGlkLiBUbyBwcm9kdWNlIGFuIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCB3b3JrIG9uIGFueSBzeXN0ZW1cbi0gIHJlZ2FyZGxlc3Mgb2YgdGhpcyBjb25maWcgc2V0dGluZywgbGltaXQgdGhlIG51bWJlciBvZiBmcmFncyB0byAxOCxcbi0gIGFzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBjb25maWcgaXMgMTcuXG4mIzQzOyAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgJiM0MzsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbCBkZXNjcmlwdG9yc1xuJiM0MzsgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgb3ZlcnNpemVkIHBhY2tldCBhcmUgY29uc3VtZWQsIHRyZWF0ZWQgYXMgaW52YWxpZCxcbiYjNDM7ICBhbmQgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRvXG4mIzQzOyAgcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtIHJlZ2FyZGxlc3Mgb2YgdGhpc1xuJiM0MzsgIGNvbmZpZyBzZXR0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGZyYWdzIHRvIDE4LCBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZlxuJiM0MzsgIHRoZSBjb25maWcgaXMgMTcuXG4gXG4gKiBGb3IgemVyby1jb3B5IG1vZGUsIHRoZSBsaW1pdCBpcyB1cCB0byB3aGF0IHRoZSBOSUMgSFdcbiAgIHN1cHBvcnRzLiBVc3VhbGx5IGF0IGxlYXN0IGZpdmUgb24gdGhlIE5JQ3Mgd2UgaGF2ZSBjaGVja2VkLiBXZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5AQCAtODAsNiAmIzQzOzgwLDcgQEAgc3RydWN0IHhkcF9zb2NrIHtcbiBcdCAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuXG4gXHQgKi9cbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0Ym9vbCBkcmFpbl9jb250O1xuIFxuIFx0c3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDtcbiBcdC8qIFByb3RlY3RzIG1hcF9saXN0ICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG5pbmRleCBjY2IzYjM1MDAwMWYyNC4uMmJiMWQxMjJiMWJjNmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuQEAgLTc4LDYgJiM0Mzs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcdHUzMiBjaHVua19zaXplO1xuIFx0dTMyIGNodW5rX3NoaWZ0O1xuIFx0dTMyIGZyYW1lX2xlbjtcbiYjNDM7XHR1MzIgdHhfZGVzY3NfbmVudHJpZXM7XG4mIzQzO1x0dTMyIHJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XG4gXHR1MzIgeGRwX3pjX21heF9zZWdzO1xuIFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXG4gXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XG5AQCAtMTAyLDEyICYjNDM7MTA1LDE0IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcbiAvKiBBRl9YRFAgY29yZS4gKi9cbiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7XG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSxcbiYjNDM7XHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKTtcbiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7XG4gaW50IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHMsXG4gXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZCk7XG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTtcbiYjNDM7aW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuJiM0MztcdFx0ICAgICAgdTMyIG1heF9zZWdzKTtcbiB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuIGJvb2wgeHBfcHV0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCBiOTcwZjMwZWE5YjlkOC4uZjkwNmQ1MWI2Njk5MDQgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jXG5AQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbiBcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxuIHtcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcyA9IFJFQURfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcbiYjNDM7XHRcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5iX2VudHJpZXMgXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4mIzQzO1x0XHRcdFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xuJiM0MztcdFx0XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XG4mIzQzO1x0XHRuYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzO1xuJiM0MztcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5AQCAtNTc0LDI0ICYjNDM7NTkxLDE1NyBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50clxuIFx0cmV0dXJuIG5iX3BrdHM7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfdHhfY29tbWl0X2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuJiM0MztcdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG5iX2Rlc2NzID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGJhdGNoKTtcbiYjNDM7XHR1MzIgY3FfY2FjaGVkX3Byb2Q7XG4mIzQzO1xuJiM0MztcdGlmICghbmJfZGVzY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cdTAwM2VjcS1cdTAwM2VjYWNoZWRfcHJvZDtcbiYjNDM7XHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVx1MDAzZWNxLCBwb29sLVx1MDAzZXR4X2Rlc2NzLCBuYl9kZXNjcyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkge1xuJiM0MztcdFx0dTMyIGNxX3BlbmRpbmdfZGVzY3M7XG4mIzQzO1xuJiM0MztcdFx0LyogQ1EgaXMgcG9zaXRpb25hbC4gRGVzY3JpcHRvcnMgYWxyZWFkeSB3cml0dGVuIGJ1dCBub3RcbiYjNDM7XHRcdCAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzXG4mIzQzO1x0XHQgKiBhcHBlbmRlZCBiZWxvdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbiYjNDM7XHRcdFx0ICAgYmF0Y2gtXHUwMDNldHhfZGVzY3MgJiM0MzsgY3FfcGVuZGluZ19kZXNjcyk7XG4mIzQzO1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcykpXG4mIzQzO1x0XHRcdHhza190eF9jb21wbGV0ZWQocG9vbCwgMCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuJiM0MztfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiYjNDM7XHR1MzIgZW50cmllcztcbiYjNDM7XG4mIzQzO1x0ZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBtYXhfZGVzY3MpO1xuJiM0MztcdGlmICghZW50cmllcylcbiYjNDM7XHRcdHJldHVybiBiYXRjaDtcbiYjNDM7XG4mIzQzO1x0YmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTtcbiYjNDM7XHRpZiAoIXhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZiYXRjaCkpIHtcbiYjNDM7XHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0X194c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4mIzQzO1x0XHR4cy1cdTAwM2Vzay5za193cml0ZV9zcGFjZShcdTAwMjZ4cy1cdTAwM2Vzayk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBiYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyO1xuJiM0MztcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XG4mIzQzO1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuJiM0MztcdHUzMiBwZXJfc29ja2V0X2J1ZGdldDtcbiYjNDM7XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmFpcm5lc3MgcXVvdGEgbXVzdCBhbGxvdyBvbmUgbWF4aW11bS1zaXplZCB2YWxpZCBwYWNrZXQuICovXG4mIzQzO1x0cGVyX3NvY2tldF9idWRnZXQgPSBtYXhfdCh1MzIsIE1BWF9QRVJfU09DS0VUX0JVREdFVCxcbiYjNDM7XHRcdFx0XHQgIHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKTtcbiYjNDM7XG4mIzQzO2FnYWluOlxuJiM0MztcdGJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdCkge1xuJiM0MztcdFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nLCB1c2VkO1xuJiM0MztcdFx0c3RydWN0IHhza190eF9iYXRjaCBjdXJyX2JhdGNoO1xuJiM0MztcbiYjNDM7XHRcdC8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1FcbiYjNDM7XHRcdCAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9yc1xuJiM0MztcdFx0ICogZnJvbSBhbm90aGVyIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uXG4mIzQzO1x0XHQgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHlcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4mIzQzO1x0XHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2c3VtX2JhdGNoKTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlPSBtYXhfZGVzY3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmICh4cy1cdTAwM2V0eF9idWRnZXRfc3BlbnQgXHUwMDNlPSBwZXJfc29ja2V0X2J1ZGdldCkge1xuJiM0MztcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuJiM0MztcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRidWRnZXRfbGVmdCA9IHBlcl9zb2NrZXRfYnVkZ2V0IC0geHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xuJiM0MztcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuJiM0MztcdFx0YnVkZ2V0ID0gbWluKHJlbWFpbmluZywgYnVkZ2V0X2xlZnQpO1xuJiM0MztcbiYjNDM7XHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBwb29sLVx1MDAzZXR4X2Rlc2NzICYjNDM7IG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuJiM0MztcdFx0dXNlZCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZjdXJyX2JhdGNoKTtcbiYjNDM7XHRcdGlmICghdXNlZCkge1xuJiM0MztcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbiYjNDM7XHRcdFx0XHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ICYjNDM7PSB1c2VkO1xuJiM0MztcdFx0c3VtX2JhdGNoLnR4X2Rlc2NzICYjNDM7PSBjdXJyX2JhdGNoLnR4X2Rlc2NzO1xuJiM0MztcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgfHwgY3FfZGVzY3NfYWZ0ZXIgXHUwMDNlPSBtYXhfZGVzY3MpXG4mIzQzO1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuJiM0MztcbiYjNDM7XHQvKiBDb250aW51ZSBmaWxsaW5nIHRoZSBiYXRjaCB3aGlsZSB0aGlzIHBhc3MgbWFkZSBwcm9ncmVzcyAqL1xuJiM0MztcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXG4mIzQzO1x0XHRnb3RvIGFnYWluO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXG4mIzQzO1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdClcbiYjNDM7XHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCA9IDA7XG4mIzQzO1x0Z290byBhZ2FpbjtcbiYjNDM7fVxuJiM0MztcbiB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiB7XG4mIzQzO1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuIFx0c3RydWN0IHhkcF9zb2NrICp4cztcbiYjNDM7XHRib29sIHVtZW1fc2hhcmVkO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpKSB7XG4tXHRcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbi1cdH1cbiYjNDM7XHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcykpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4tXHR4cyA9IGxpc3RfZmlyc3Rfb3JfbnVsbF9yY3UoXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTtcbi1cdGlmICgheHMpIHtcbi1cdFx0bmJfcGt0cyA9IDA7XG4mIzQzO1x0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jayxcbiYjNDM7XHRcdFx0XHQgICAgdHhfbGlzdCk7XG4mIzQzO1x0aWYgKCF4cylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRuYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIG5iX3BrdHMpO1xuJiM0MztcdG5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XG4mIzQzO1x0aWYgKCFuYl9wa3RzKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHVtZW1fc2hhcmVkID0gIWxpc3RfaXNfc2luZ3VsYXIoXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCk7XG4mIzQzO1xuJiM0MztcdGlmICh1bWVtX3NoYXJlZCBcdTAwMjZcdTAwMjYgIShwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpO1xuJiM0MztcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20gZm9yIHRoZSBUeCBwYXRoLiBUcnkgdG9cbiBcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcbkBAIC02MDMsMTkgJiM0Mzs3NTMsMTYgQEAgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXG4gXHRpZiAoIW5iX3BrdHMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXHUwMDNldHgsIHBvb2wsIG5iX3BrdHMpO1xuLVx0aWYgKCFuYl9wa3RzKSB7XG4tXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzJiM0MzsmIzQzOztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuJiM0MztcdGJhdGNoID0gdW1lbV9zaGFyZWQgP1xuJiM0MztcdFx0eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKSA6XG4mIzQzO1x0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbiYjNDM7XHRcdFx0XHRcdFx0IHBvb2wtXHUwMDNldHhfZGVzY3MsXG4mIzQzO1x0XHRcdFx0XHRcdCBuYl9wa3RzKTtcbiYjNDM7XHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoKTtcbiBcbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBuYl9wa3RzO1xuJiM0MztcdHJldHVybiBiYXRjaC50eF9kZXNjcztcbiB9XG4gRVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gpO1xuIFxuQEAgLTczNyw2ICYjNDM7ODg0LDE5IEBAIHN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1MzIgaWR4O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlkeCA9IHhza3FfZ2V0X3Byb2QocG9vbC1cdTAwM2VjcSk7XG4mIzQzO1x0eHNrcV9wcm9kX3dyaXRlX2FkZHIocG9vbC1cdTAwM2VjcSwgaWR4LCBkZXNjLVx1MDAzZWFkZHIpO1xuJiM0MztcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlY3FfcHJvZF9sb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIHtcbiBcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuQEAgLTc5NCw4ICYjNDM7OTU0LDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHhkcF9zayhza2ItXHUwMDNlc2spLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbi1cdHhza19jb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbiYjNDM7XG4mIzQzO1x0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuJiM0MztcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbkBAIC04NzcsNyAmIzQzOzEwNDAsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxuLVx0XHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuJiM0MztcdFx0ICogeHNrX2Ryb3Bfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2JcbiBcdFx0ICogd291bGQgYmUgZHJvcHBlZCwgd2hpY2ggaW1wbGllcyBmcmVlaW5nIGFsbCBsaXN0IGVsZW1lbnRzXG4gXHRcdCAqL1xuIFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuQEAgLTk2OSw2ICYjNDM7MTEzMiw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFx0XHRcdFx0Z290byBmcmVlX2VycjtcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4mIzQzO1xuIFx0XHRcdGlmICh1bmxpa2VseShucl9mcmFncyA9PSAoTUFYX1NLQl9GUkFHUyAtIDEpIFx1MDAyNlx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xuIFx0XHRcdFx0ZXJyID0gLUVPVkVSRkxPVztcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG5AQCAtOTg2LDggJiM0MzsxMTUxLDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXG4gXHRcdFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcbiBcdFx0XHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcdTAwMjZ4cy1cdTAwM2Vzay5za193bWVtX2FsbG9jKTtcbi1cbi1cdFx0XHR4c2tfYWRkci1cdTAwM2VhZGRyc1t4c2tfYWRkci1cdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cdTAwM2VhZGRyO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTAyNSwxMyAmIzQzOzExODgsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuLVx0Ym9vbCBzZW50X2ZyYW1lID0gZmFsc2U7XG4gXHRzdHJ1Y3QgeGRwX2Rlc2MgZGVzYztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0dTMyIGNhY2hlZF9jb25zO1xuIFx0dTMyIG1heF9iYXRjaDtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4mIzQzO1x0Y2FjaGVkX2NvbnMgPSB4cy1cdTAwM2V0eC1cdTAwM2VjYWNoZWRfY29ucztcbiBcbiBcdC8qIFNpbmNlIHdlIGRyb3BwZWQgdGhlIFJDVSByZWFkIGxvY2ssIHRoZSBzb2NrZXQgc3RhdGUgbWlnaHQgaGF2ZSBjaGFuZ2VkLiAqL1xuIFx0aWYgKHVubGlrZWx5KCF4c2tfaXNfYm91bmQoeHMpKSkge1xuQEAgLTEwNjAsMTEgJiM0MzsxMjI0LDIxIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKHVubGlrZWx5KHhzLVx1MDAzZWRyYWluX2NvbnQpKSB7XG4mIzQzO1x0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuJiM0MztcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbiBcdFx0aWYgKElTX0VSUihza2IpKSB7XG4gXHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuIFx0XHRcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcbiBcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbiYjNDM7XHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMTA5MywxOCAmIzQzOzEyNjcsMzMgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHNlbnRfZnJhbWUgPSB0cnVlO1xuIFx0XHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuIFx0fVxuIFxuIFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuJiM0MztcdFx0Ym9vbCBkcmFpbiA9IHhzLVx1MDAzZXNrYiB8fCB4cy1cdTAwM2VkcmFpbl9jb250IHx8IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLVx1MDAzZXBvb2wpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzLS07XG4mIzQzO1x0XHRcdGlmICh4cy1cdTAwM2Vza2IpXG4mIzQzO1x0XHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4mIzQzO1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSBkcmFpbjtcbiYjNDM7XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRpZiAoeHMtXHUwMDNlc2tiKVxuIFx0XHRcdHhza19kcm9wX3NrYih4cy1cdTAwM2Vza2IpO1xuJiM0MztcbiYjNDM7XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuJiM0MztcbiBcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuJiM0MztcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4gXHR9XG4gXG4gb3V0OlxuLVx0aWYgKHNlbnRfZnJhbWUpXG4mIzQzO1x0aWYgKHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zICE9IGNhY2hlZF9jb25zKVxuIFx0XHRfX3hza190eF9yZWxlYXNlKHhzKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5AQCAtMTQ4Myw3ICYjNDM7MTY3Miw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogYW5kL29yIGRldmljZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cyxcbi1cdFx0XHRcdFx0XHRcdCAgICAgdW1lbV94cy1cdTAwM2V1bWVtKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIHVtZW1feHMtXHUwMDNldW1lbSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICYjNDM7MTcwNSw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXG4gXHRcdFx0ICogdXRpbGl6ZXNcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoeHMtXHUwMDNldHggXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vwb29sLVx1MDAzZXR4X2Rlc2NzKSB7XG4tXHRcdFx0XHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cdTAwM2Vwb29sLCB4cyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtXHUwMDNlcG9vbCwgeHMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgJiM0MzsxNzI0LDkgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi9cbi1cdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0pO1xuJiM0MztcdFx0eHMtXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVx1MDAzZXVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4mIzQzO1xuIFx0XHRpZiAoIXhzLVx1MDAzZXBvb2wpIHtcbiBcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19idWZmX3Bvb2wuYyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG5pbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbkBAIC00MiwxNyAmIzQzOzQyLDIyIEBAIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbiBcdGt2ZnJlZShwb29sKTtcbiB9XG4gXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4mIzQzO1x0XHQgICAgICB1MzIgbWF4X3NlZ3MpXG4ge1xuLVx0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzKTtcbiYjNDM7XHR1MzIgbmVudHJpZXMgPSBtYXgoeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMsIG1heF9zZWdzKTtcbiYjNDM7XG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXHUwMDNldHhfZGVzY3MsIG5lbnRyaWVzKTtcbiBcdGlmICghcG9vbC1cdTAwM2V0eF9kZXNjcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0cG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKVxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4mIzQzO1x0XHRcdFx0XHRcdHUzMiBtYXhfc2VncylcbiB7XG4gXHRib29sIHVuYWxpZ25lZCA9IHVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1VOQUxJR05FRF9DSFVOS19GTEFHO1xuIFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG5AQCAtNjksNyAmIzQzOzc0LDcgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRpZiAoeHMtXHUwMDNldHgpXG4tXHRcdGlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cykpXG4mIzQzO1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLjFiYzQyYzg5MDJmNGJhIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgJiM0Mzs1OCwxNyBAQCBzdHJ1Y3QgcGFyc2VkX2Rlc2Mge1xuIFx0dTMyIHZhbGlkO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB4c2tfdHhfYmF0Y2gge1xuJiM0MztcdHUzMiB0eF9kZXNjcztcbiYjNDM7XHR1MzIgcmVjbGFpbV9kZXNjcztcbiYjNDM7XHRib29sIGJ1ZGdldF9saW1pdGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJhdGNoLVx1MDAzZXR4X2Rlc2NzICYjNDM7IGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3M7XG4mIzQzO31cbiYjNDM7XG4gLyogVGhlIHN0cnVjdHVyZSBvZiB0aGUgc2hhcmVkIHN0YXRlIG9mIHRoZSByaW5ncyBhcmUgYSBzaW1wbGVcbiAgKiBjaXJjdWxhciBidWZmZXIsIGFzIG91dGxpbmVkIGluXG4gICogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jaXJjdWxhci1idWZmZXJzLnJzdC4gRm9yIHRoZSBSeCBhbmRcbkBAIC0yNjMsMTcgJiM0MzsyNzQsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlX2Rlc2Moc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRwYXJzZWQtXHUwMDNlbWIgPSB4cF9tYl9kZXNjKGRlc2MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lXG4tdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4tXHRcdFx0ICAgICAgdTMyIG1heClcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4mIzQzO3hza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heClcbiB7XG4tXHR1MzIgY2FjaGVkX2NvbnMgPSBxLVx1MDAzZWNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDtcbi1cdHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MgPSBwb29sLVx1MDAzZXR4X2Rlc2NzO1xuLVx0dTMyIHRvdGFsX2Rlc2NzID0gMCwgbnJfZnJhZ3MgPSAwO1xuJiM0MztcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4mIzQzO1x0dTMyIGNhY2hlZF9jb25zLCBuYl9lbnRyaWVzID0gMDtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307XG4mIzQzO1x0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVx1MDAzZXR4O1xuJiM0MztcdHUzMiBucl9mcmFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcbi1cdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcbi1cdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3Npbmdcbi1cdCAqL1xuIFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXHUwMDNlY2FjaGVkX3Byb2QgXHUwMDI2XHUwMDI2IG5iX2VudHJpZXMgXHUwMDNjIG1heCkge1xuIFx0XHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXHUwMDNlcmluZztcbiBcdFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFx1MDAyNiBxLVx1MDAzZXJpbmdfbWFzaztcbkBAIC0yODMsMjUgJiM0MzsyOTUsNDIgQEAgdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG4gXHRcdGNhY2hlZF9jb25zJiM0MzsmIzQzOztcbiBcdFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXHUwMDI2cGFyc2VkKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRkcmFpbiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0bnJfZnJhZ3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0bmJfZW50cmllcyYjNDM7JiM0Mzs7XG4gXG4gXHRcdGlmIChsaWtlbHkoIXBhcnNlZC5tYikpIHtcbi1cdFx0XHR0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpO1xuLVx0XHRcdG5yX2ZyYWdzID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRucl9mcmFncyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKSB7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShkcmFpbikpIHtcbiYjNDM7XHRcdFx0XHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250LCBmYWxzZSk7XG4gXHRcdFx0XHRucl9mcmFncyA9IDA7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRiYXRjaC50eF9kZXNjcyAmIzQzOz0gbnJfZnJhZ3M7XG4mIzQzO1x0XHRcdG5yX2ZyYWdzID0gMDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKVxuJiM0MztcdFx0XHRkcmFpbiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnJfZnJhZ3MpIHtcbiYjNDM7XHRcdGlmIChkcmFpbikge1xuJiM0MztcdFx0XHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgdHJ1ZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRpZiAobmJfZW50cmllcyA9PSBtYXgpXG4mIzQzO1x0XHRcdFx0YmF0Y2guYnVkZ2V0X2xpbWl0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcbiBcdFx0fVxuLVx0XHRuYl9lbnRyaWVzJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbiBcdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbiYjNDM7XHRyZXR1cm4gYmF0Y2g7XG4gfVxuIFxuIC8qIEZ1bmN0aW9ucyBmb3IgY29uc3VtZXJzICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbmluZGV4IDQ3N2FlZGJiMDFiYWQ4Li40NTQ5MzU4Y2M4YzIxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcbkBAIC00MjcsMTQgJiM0Mzs0MjcsMTQgQEAgc3RhdGljIHUzMiBwa3RfbmJfZnJhZ3ModTMyIGZyYW1lX3NpemUsIHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtLCBzdHJ1Y3QgcGtcbiBcdH1cbiBcbiBcdC8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi9cbi1cdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cdTAwM2V2YWxpZClcbiYjNDM7XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0JiM0MzsmIzQzOztcbiBcdHdoaWxlIChuZXh0X2ZyYWcmIzQzOyYjNDM7IFx1MDAzYyBwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMpIHtcbiBcdFx0bmJfZnJhZ3MmIzQzOyYjNDM7O1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwa3QmIzQzOyYjNDM7O1xuIFx0fVxuQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc1xuIFx0XHRcdGlmICghZnJhbWUtXHUwMDNldmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0XHRwYXlsb2FkJiM0MzsmIzQzOztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCkge1xuIFx0XHRcdFx0bGVuICYjNDM7PSBmcmFtZS1cdTAwM2VsZW47XG4tXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiBwa3RfY29udGludWVzKGZyYW1lLVx1MDAzZW9wdGlvbnMpKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4mIzQzO1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdHBrdC1cdTAwM2Vwa3RfbmIgPSBwa3RfbmI7XG4gXHRcdFx0cGt0LVx1MDAzZWxlbiA9IGxlbjtcbiBcdFx0XHRwa3QtXHUwMDNldmFsaWQgPSBmcmFtZS1cdTAwM2V2YWxpZDtcbkBAIC0xMjUwLDEwICYjNDM7MTI1MCw5IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbiYjNDM7XHRcdGlmIChwa3QgXHUwMDI2XHUwMDI2IHBrdC1cdTAwM2V2YWxpZClcbiBcdFx0XHR2YWxpZF9wa3RzJiM0MzsmIzQzOztcbi1cdFx0XHR2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7XG4tXHRcdH1cbiYjNDM7XHRcdHZhbGlkX2ZyYWdzICYjNDM7PSBuYl9mcmFncztcbiBcdH1cbiBcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwYWNpbmdfbXV0ZXgpO1xuQEAgLTIwOTksMTMgJiM0MzsyMDk4LDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHR7MCwgMCwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqL1xuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbi1cdFx0e3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4mIzQzO1x0XHR7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4mIzQzO1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4mIzQzO1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LFxuJiM0MztcdFx0ezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LFxuIFx0XHQvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LFxuQEAgLTIxMTcsOCAmIzQzOzIxMTksOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRcdHBrdHNbMTVdLnZhbGlkID0gdHJ1ZTtcbiYjNDM7XHRcdHBrdHNbMTZdLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdHRlc3QtXHUwMDNlbXR1ID0gTUFYX0VUSF9KVU1CT19TSVpFO1xuQEAgLTIyNzAsNyAmIzQzOzIyNzIsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgJiM0Mzs9IDE7XG4gXHR9XG4gXG4tXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMiwgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcbiYjNDM7XHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcbiBcdGlmICghcGt0cylcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcbkBAIC0yMjg4LDI0ICYjNDM7MjI5MCwzMCBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0fVxuIFx0cGt0c1ttYXhfZnJhZ3NdLm9wdGlvbnMgPSAwO1xuIFxuLVx0LyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4IGFtb3VudCBvZiBmcmFncyBidXQgc2lnbmFscyBwYWNrZXRcbi1cdCAqIGNvbnRpbnVlcyBvbiB0aGUgbGFzdCBmcmFnXG4tXHQgKi9cbi1cdGZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICYjNDM7IDE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0LyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovXG4mIzQzO1x0Zm9yIChpID0gbWF4X2ZyYWdzICYjNDM7IDE7IGkgXHUwMDNjIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMjsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cGt0c1tpXS5sZW4gPSBNSU5fUEtUX1NJWkU7XG4gXHRcdHBrdHNbaV0ub3B0aW9ucyA9IFhEUF9QS1RfQ09OVEQ7XG4tXHRcdHBrdHNbaV0udmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRcdHBrdHNbaV0udmFsaWQgPSB0cnVlO1xuIFx0fVxuJiM0MztcdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAxXS5vcHRpb25zID0gMDtcbiBcbiBcdC8qIFZhbGlkIHBhY2tldCBmb3Igc3luY2ggKi9cbi1cdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAxXS5sZW4gPSBNSU5fUEtUX1NJWkU7XG4tXHRwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlO1xuJiM0MztcdHBrdHNbMiAqIG1heF9mcmFncyAmIzQzOyAyXS5sZW4gPSBNSU5fUEtUX1NJWkU7XG4mIzQzO1x0cGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDJdLnZhbGlkID0gdHJ1ZTtcbiBcbi1cdGlmIChwa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbSh0ZXN0LCBwa3RzLCAyICogbWF4X2ZyYWdzICYjNDM7IDIpKSB7XG4mIzQzO1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHtcbiBcdFx0ZnJlZShwa3RzKTtcbiBcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBUaGUgZ2VuZXJhdGVkIFR4IHN0cmVhbSBtdXN0IGtlZXAgdGhlIHRvby1iaWcgcGFja2V0IHZhbGlkIHNvIHRoYXRcbiYjNDM7XHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4mIzQzO1x0ICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4mIzQzO1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2VuYl92YWxpZF9lbnRyaWVzLS07XG4mIzQzO1xuIFx0cmV0ID0gdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHRlc3QpO1xuIFx0ZnJlZShwa3RzKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTQ6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgVHggcGF0aC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBhbmQgcmVjbGFpbSBsb2dpYyBmb3IgZGVzY3JpcHRvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQUZfWERQIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBBRl9YRFAgc29ja2V0IG9wZXJhdGlvbnMgKGUuZy4sIHVzaW5nIGdlbmVyaWMgWERQIG1vZGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YzBkODU4NDU3MzM5MGY3YWQ1OWRmYTVmZTU4MGZiZDk2Y2U1YzQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMTkgMTQ6MjE6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0CmluZGV4IDUwZDkyMDg0YTQ5YzZhLi5jYzNmMGQxNmIyOGZiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QKQEAgLTQzLDEyICYjNDM7NDMsMTMgQEAgVU1FTSBhbHNvIGhhcyB0d28gcmluZ3M6IHRoZSBGSUxMIHJpbmcgYW5kIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRoZQogRklMTCByaW5nIGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbmQgZG93biBhZGRyIGZvciB0aGUga2VybmVsCiB0byBmaWxsIGluIHdpdGggUlggcGFja2V0IGRhdGEuIFJlZmVyZW5jZXMgdG8gdGhlc2UgZnJhbWVzIHdpbGwgdGhlbgogYXBwZWFyIGluIHRoZSBSWCByaW5nIG9uY2UgZWFjaCBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZQotQ09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkciB0aGF0IHRoZQota2VybmVsIGhhcyB0cmFuc21pdHRlZCBjb21wbGV0ZWx5IGFuZCBjYW4gbm93IGJlIHVzZWQgYWdhaW4gYnkgdXNlcgotc3BhY2UsIGZvciBlaXRoZXIgVFggb3IgUlguIFRodXMsIHRoZSBmcmFtZSBhZGRycyBhcHBlYXJpbmcgaW4gdGhlCi1DT01QTEVUSU9OIHJpbmcgYXJlIGFkZHJzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHRyYW5zbWl0dGVkIHVzaW5nIHRoZQotVFggcmluZy4gSW4gc3VtbWFyeSwgdGhlIFJYIGFuZCBGSUxMIHJpbmdzIGFyZSB1c2VkIGZvciB0aGUgUlggcGF0aAotYW5kIHRoZSBUWCBhbmQgQ09NUExFVElPTiByaW5ncyBhcmUgdXNlZCBmb3IgdGhlIFRYIHBhdGguCiYjNDM7Q09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkcmVzc2VzIGZyb20gVHgKJiM0MztkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIHRoYXQgY2FuIG5vdyBiZQomIzQzO3VzZWQgYWdhaW4gYnkgdXNlciBzcGFjZSwgZm9yIGVpdGhlciBUeCBvciBSeC4gVGhpcyBpbmNsdWRlcyBmcmFtZXMgd2hvc2UKJiM0Mzt0cmFuc21pc3Npb24gaGFzIGNvbXBsZXRlZCBhcyB3ZWxsIGFzIGZyYW1lcyByZWZlcmVuY2VkIGJ5IGludmFsaWQgVHgKJiM0MztkZXNjcmlwdG9ycyByZWplY3RlZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gdGhlcmVmb3JlIHJldHVybnMKJiM0Mztvd25lcnNoaXAgb2YgYSBmcmFtZSB0byB1c2VyIHNwYWNlLCBidXQgZG9lcyBub3QgYnkgaXRzZWxmIGd1YXJhbnRlZSB0aGF0CiYjNDM7dGhlIHBhY2tldCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkLgogCiBUaGUgc29ja2V0IGlzIHRoZW4gZmluYWxseSBib3VuZCB3aXRoIGEgYmluZCgpIGNhbGwgdG8gYSBkZXZpY2UgYW5kIGEKIHNwZWNpZmljIHF1ZXVlIGlkIG9uIHRoYXQgZGV2aWNlLCBhbmQgaXQgaXMgbm90IHVudGlsIGJpbmQgaXMKQEAgLTE2OSwxNCAmIzQzOzE3MCwxNSBAQCBjaHVua3MgbW9kZSwgdGhlbiB0aGUgaW5jb21pbmcgYWRkciB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLgogVU1FTSBDb21wbGV0aW9uIFJpbmcKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbQomIzQzO1RoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbQoga2VybmVsLXNwYWNlIHRvIHVzZXItc3BhY2UuIEp1c3QgbGlrZSB0aGUgRklMTCByaW5nLCBVTUVNIGluZGljZXMgYXJlCi11c2VkLgotCi1GcmFtZXMgcGFzc2VkIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyLXNwYWNlIGFyZSBmcmFtZXMgdGhhdCBoYXMgYmVlbgotc2VudCAoVFggcmluZykgYW5kIGNhbiBiZSB1c2VkIGJ5IHVzZXItc3BhY2UgYWdhaW4uCi0KLVRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbnN1bWVzIFVNRU0gYWRkcnMgZnJvbSB0aGlzIHJpbmcuCiYjNDM7dXNlZC4gRnJhbWVzIHBhc3NlZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSBhcmUgZnJhbWVzIHJlZmVyZW5jZWQKJiM0MztieSBUeCBkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIGNhbiBiZQomIzQzO3VzZWQgYnkgdXNlci1zcGFjZSBhZ2Fpbi4gVGhpcyBpbmNsdWRlcyBib3RoIGZyYW1lcyB3aG9zZSB0cmFuc21pc3Npb24KJiM0MztoYXMgY29tcGxldGVkIGFuZCBmcmFtZXMgcmVmZXJlbmNlZCBieSBpbnZhbGlkIFR4IGRlc2NyaXB0b3JzIHRoYXQgd2VyZQomIzQzO3JlamVjdGVkIGFuZCByZWNsYWltZWQgYnkgdGhlIGtlcm5lbC4gQSBjb21wbGV0aW9uIGVudHJ5IGRvZXMgbm90CiYjNDM7Z3VhcmFudGVlIHN1Y2Nlc3NmdWwgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHVzZXIgYXBwbGljYXRpb24gY29uc3VtZXMKJiM0MztVTUVNIGFkZHJzIGZyb20gdGhpcyByaW5nLgogCiAKIFJYIFJpbmcKQEAgLTUwNCwyMSAmIzQzOzUwNiwyNSBAQCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gaW52YWxpZCBkZXNjcmlwdG9yLgogVGhlc2UgYXJlIHRoZSBzZW1hbnRpY3MgZm9yIHByb2R1Y2luZyBwYWNrZXRzIG9udG8gQUZfWERQIFR4IHJpbmcKIGNvbnNpc3Rpbmcgb2YgbXVsdGlwbGUgZnJhbWVzOgogCi0qIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCBhbGwgdGhlIG90aGVyCi0gIGRlc2NyaXB0b3JzL2ZyYW1lcyBvZiB0aGlzIHBhY2tldCBhcmUgbWFya2VkIGFzIGludmFsaWQgYW5kIG5vdAotICBjb21wbGV0ZWQuIFRoZSBuZXh0IGRlc2NyaXB0b3IgaXMgdHJlYXRlZCBhcyB0aGUgc3RhcnQgb2YgYSBuZXcKLSAgcGFja2V0LCBldmVuIGlmIHRoaXMgd2FzIG5vdCB0aGUgaW50ZW50IChiZWNhdXNlIHdlIGNhbm5vdCBndWVzcwotICB0aGUgaW50ZW50KS4gQXMgYmVmb3JlLCBpZiB5b3VyIHByb2dyYW0gaXMgcHJvZHVjaW5nIGludmFsaWQKLSAgZGVzY3JpcHRvcnMgeW91IGhhdmUgYSBidWcgdGhhdCBtdXN0IGJlIGZpeGVkLgomIzQzOyogV2hlbiBhbiBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgZm91bmQsIHRoZSBjb21wbGV0ZSBwYWNrZXQgaXMgdHJlYXRlZCBhcwomIzQzOyAgaW52YWxpZC4gVGhlIGtlcm5lbCBjb25zdW1lcyBkZXNjcmlwdG9ycyB0aHJvdWdoIHRoZSBkZXNjcmlwdG9yIG1hcmtpbmcKJiM0MzsgIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBhbmQgcmV0dXJucyBhbGwgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIHRocm91Z2ggdGhlCiYjNDM7ICBDT01QTEVUSU9OIHJpbmcuIEEgc3RhbmRhbG9uZSBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgdHJlYXRlZCBhcyBhCiYjNDM7ICBvbmUtZGVzY3JpcHRvciBpbnZhbGlkIHBhY2tldC4gVGhlIGRlc2NyaXB0b3IgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlCiYjNDM7ICBpbnZhbGlkIHBhY2tldCBpcyB0cmVhdGVkIGFzIHRoZSBzdGFydCBvZiBhIG5ldyBwYWNrZXQuIEFzIGJlZm9yZSwgaWYKJiM0MzsgIHlvdXIgcHJvZ3JhbSBpcyBwcm9kdWNpbmcgaW52YWxpZCBkZXNjcmlwdG9ycyB5b3UgaGF2ZSBhIGJ1ZyB0aGF0IG11c3QKJiM0MzsgIGJlIGZpeGVkLiBSZWplY3RlZCBkZXNjcmlwdG9ycyBhcmUgcmVwb3J0ZWQgaW4gdGhlIGBgdHhfaW52YWxpZF9kZXNjc2BgCiYjNDM7ICBzdGF0aXN0aWMuCiAKICogWmVybyBsZW5ndGggZGVzY3JpcHRvcnMgYXJlIHRyZWF0ZWQgYXMgaW52YWxpZCBkZXNjcmlwdG9ycy4KIAogKiBGb3IgY29weSBtb2RlLCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHBhY2tldCBpcwotICBlcXVhbCB0byBDT05GSUdfTUFYX1NLQl9GUkFHUyAmIzQzOyAxLiBJZiBpdCBpcyBleGNlZWRlZCwgYWxsCi0gIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIHNvIGZhciBhcmUgZHJvcHBlZCBhbmQgdHJlYXRlZCBhcwotICBpbnZhbGlkLiBUbyBwcm9kdWNlIGFuIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCB3b3JrIG9uIGFueSBzeXN0ZW0KLSAgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZyBzZXR0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGZyYWdzIHRvIDE4LAotICBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgY29uZmlnIGlzIDE3LgomIzQzOyAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgJiM0MzsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbCBkZXNjcmlwdG9ycwomIzQzOyAgdGhyb3VnaCB0aGUgZW5kIG9mIHRoZSBvdmVyc2l6ZWQgcGFja2V0IGFyZSBjb25zdW1lZCwgdHJlYXRlZCBhcyBpbnZhbGlkLAomIzQzOyAgYW5kIHRoZWlyIGZyYW1lIGFkZHJlc3NlcyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgQ09NUExFVElPTiByaW5nLiBUbwomIzQzOyAgcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtIHJlZ2FyZGxlc3Mgb2YgdGhpcwomIzQzOyAgY29uZmlnIHNldHRpbmcsIGxpbWl0IHRoZSBudW1iZXIgb2YgZnJhZ3MgdG8gMTgsIGFzIHRoZSBtaW5pbXVtIHZhbHVlIG9mCiYjNDM7ICB0aGUgY29uZmlnIGlzIDE3LgogCiAqIEZvciB6ZXJvLWNvcHkgbW9kZSwgdGhlIGxpbWl0IGlzIHVwIHRvIHdoYXQgdGhlIE5JQyBIVwogICBzdXBwb3J0cy4gVXN1YWxseSBhdCBsZWFzdCBmaXZlIG9uIHRoZSBOSUNzIHdlIGhhdmUgY2hlY2tlZC4gV2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGRwX3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oCkBAIC04MCw2ICYjNDM7ODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sgewogCSAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuCiAJICovCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCBkcmFpbl9jb250OwogCiAJc3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDsKIAkvKiBQcm90ZWN0cyBtYXBfbGlzdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCmluZGV4IGNjYjNiMzUwMDAxZjI0Li4yYmIxZDEyMmIxYmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaApAQCAtNzgsNiAmIzQzOzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wgewogCXUzMiBjaHVua19zaXplOwogCXUzMiBjaHVua19zaGlmdDsKIAl1MzIgZnJhbWVfbGVuOwomIzQzOwl1MzIgdHhfZGVzY3NfbmVudHJpZXM7CiYjNDM7CXUzMiByZWNsYWltX2Rlc2NzOwomIzQzOwl1MzIgdHhfemNfcGVuZGluZ19kZXNjczsKIAl1MzIgeGRwX3pjX21heF9zZWdzOwogCXU4IHR4X21ldGFkYXRhX2xlbjsgLyogaW5oZXJpdGVkIGZyb20gdW1lbSAqLwogCXU4IGNhY2hlZF9uZWVkX3dha2V1cDsKQEAgLTEwMiwxMiAmIzQzOzEwNSwxNCBAQCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCB7CiAKIC8qIEFGX1hEUCBjb3JlLiAqLwogc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cywKLQkJCQkJCXN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7CiYjNDM7CQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtLAomIzQzOwkJCQkJCXUzMiBtYXhfc2Vncyk7CiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7CiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cywKIAkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpOwotaW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTsKJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkgICAgICB1MzIgbWF4X3NlZ3MpOwogdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTsKIHZvaWQgeHBfZ2V0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpOwogYm9vbCB4cF9wdXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7CmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCBiOTcwZjMwZWE5YjlkOC4uZjkwNmQ1MWI2Njk5MDQgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtNDk5LDYgJiM0Mzs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdCkKIAogdm9pZCB4c2tfdHhfY29tcGxldGVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfZW50cmllcykKIHsKJiM0MzsJdTMyIHJlY2xhaW1fZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7cmVjbGFpbV9kZXNjcyk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcyk7CiYjNDM7CiYjNDM7CQlpZiAobmJfZW50cmllcyAmbHQ7IHBlbmRpbmdfZGVzY3MpIHsKJiM0MzsJCQlXUklURV9PTkNFKHBvb2wtJmd0O3R4X3pjX3BlbmRpbmdfZGVzY3MsCiYjNDM7CQkJCSAgIHBlbmRpbmdfZGVzY3MgLSBuYl9lbnRyaWVzKTsKJiM0MzsJCQl4c2txX3Byb2Rfc3VibWl0X24ocG9vbC0mZ3Q7Y3EsIG5iX2VudHJpZXMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywgMCk7CiYjNDM7CQluYl9lbnRyaWVzICYjNDM7PSByZWNsYWltX2Rlc2NzOwomIzQzOwkJV1JJVEVfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzLCAwKTsKJiM0MzsJfQomIzQzOwogCXhza3FfcHJvZF9zdWJtaXRfbihwb29sLSZndDtjcSwgbmJfZW50cmllcyk7CiB9CiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpOwpAQCAtNTc0LDI0ICYjNDM7NTkxLDE1NyBAQCBzdGF0aWMgdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2soc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZW50cgogCXJldHVybiBuYl9wa3RzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkJc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpCiYjNDM7ewomIzQzOwl1MzIgbmJfZGVzY3MgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoYmF0Y2gpOwomIzQzOwl1MzIgY3FfY2FjaGVkX3Byb2Q7CiYjNDM7CiYjNDM7CWlmICghbmJfZGVzY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNxX2NhY2hlZF9wcm9kID0gcG9vbC0mZ3Q7Y3EtJmd0O2NhY2hlZF9wcm9kOwomIzQzOwl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX2Rlc2NzKTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKSkgewomIzQzOwkJdTMyIGNxX3BlbmRpbmdfZGVzY3M7CiYjNDM7CiYjNDM7CQkvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdAomIzQzOwkJICogc3VibWl0dGVkIG11c3QgY29tcGxldGUgYmVmb3JlIGFueSByZWNsYWltLW9ubHkgZGVzY3JpcHRvcnMKJiM0MzsJCSAqIGFwcGVuZGVkIGJlbG93LgomIzQzOwkJICovCiYjNDM7CQljcV9wZW5kaW5nX2Rlc2NzID0gY3FfY2FjaGVkX3Byb2QgLSB4c2txX2dldF9wcm9kKHBvb2wtJmd0O2NxKTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UocG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcywKJiM0MzsJCQkgICBiYXRjaC0mZ3Q7dHhfZGVzY3MgJiM0MzsgY3FfcGVuZGluZ19kZXNjcyk7CiYjNDM7CQlXUklURV9PTkNFKHBvb2wtJmd0O3JlY2xhaW1fZGVzY3MsIGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzKTsKJiM0MzsJCWlmICh1bmxpa2VseSghcG9vbC0mZ3Q7dHhfemNfcGVuZGluZ19kZXNjcykpCiYjNDM7CQkJeHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaAomIzQzO19feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAomIzQzOwkJCQkgc3RydWN0IHhkcF9kZXNjICpkZXNjcywgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTsKJiM0MzsJdTMyIGVudHJpZXM7CiYjNDM7CiYjNDM7CWVudHJpZXMgPSB4c2txX2NvbnNfbmJfZW50cmllcyh4cy0mZ3Q7dHgsIG1heF9kZXNjcyk7CiYjNDM7CWlmICghZW50cmllcykKJiM0MzsJCXJldHVybiBiYXRjaDsKJiM0MzsKJiM0MzsJYmF0Y2ggPSB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHhzLCBwb29sLCBkZXNjcywgbWF4X2Rlc2NzKTsKJiM0MzsJaWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtiYXRjaCkpIHsKJiM0MzsJCXhzLSZndDt0eC0mZ3Q7cXVldWVfZW1wdHlfZGVzY3MmIzQzOyYjNDM7OwomIzQzOwl9IGVsc2UgewomIzQzOwkJX194c2txX2NvbnNfcmVsZWFzZSh4cy0mZ3Q7dHgpOwomIzQzOwkJeHMtJmd0O3NrLnNrX3dyaXRlX3NwYWNlKCZhbXA7eHMtJmd0O3NrKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9kZXNjcykKJiM0Mzt7CiYjNDM7CXUzMiBjcV9kZXNjc19iZWZvcmUsIGNxX2Rlc2NzX2FmdGVyOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9OwomIzQzOwlib29sIGJ1ZGdldF9leGhhdXN0ZWQ7CiYjNDM7CXUzMiBwZXJfc29ja2V0X2J1ZGdldDsKJiM0MzsJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsKJiM0MzsJLyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqLwomIzQzOwlwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULAomIzQzOwkJCQkgIHBvb2wtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiYjNDM7CiYjNDM7YWdhaW46CiYjNDM7CWJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTsKJiM0MzsJY3FfZGVzY3NfYmVmb3JlID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsICZhbXA7cG9vbC0mZ3Q7eHNrX3R4X2xpc3QsIHR4X2xpc3QpIHsKJiM0MzsJCXUzMiBidWRnZXQsIGJ1ZGdldF9sZWZ0LCBvZmZzZXQsIHJlbWFpbmluZywgdXNlZDsKJiM0MzsJCXN0cnVjdCB4c2tfdHhfYmF0Y2ggY3Vycl9iYXRjaDsKJiM0MzsKJiM0MzsJCS8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1EKJiM0MzsJCSAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9ycwomIzQzOwkJICogZnJvbSBhbm90aGVyIHNvY2tldCBhZnRlciB0aGVtLiB4c2tfdHhfY29tcGxldGVkKCkgcmVsaWVzIG9uCiYjNDM7CQkgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHkKJiM0MzsJCSAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBiZSBnZW50bGUgd2hlbiBwbGF5aW5nIHdpdGggcG9vbC0mZ3Q7dHhfZGVzY3MgKi8KJiM0MzsJCW9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcygmYW1wO3N1bV9iYXRjaCk7CiYjNDM7CQlpZiAob2Zmc2V0ICZndDs9IG1heF9kZXNjcykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmICh4cy0mZ3Q7dHhfYnVkZ2V0X3NwZW50ICZndDs9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7CiYjNDM7CQkJaWYgKHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgMSkpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLSZndDt0eF9idWRnZXRfc3BlbnQ7CiYjNDM7CQlyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7CiYjNDM7CQlidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7CiYjNDM7CiYjNDM7CQljdXJyX2JhdGNoID0gX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gocG9vbCwgeHMsCiYjNDM7CQkJCQkJCSAgICAgIHBvb2wtJmd0O3R4X2Rlc2NzICYjNDM7IG9mZnNldCwKJiM0MzsJCQkJCQkJICAgICAgYnVkZ2V0KTsKJiM0MzsJCXVzZWQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoJmFtcDtjdXJyX2JhdGNoKTsKJiM0MzsJCWlmICghdXNlZCkgewomIzQzOwkJCWlmIChjdXJyX2JhdGNoLmJ1ZGdldF9saW1pdGVkICZhbXA7JmFtcDsgYnVkZ2V0X2xlZnQgJmx0OyByZW1haW5pbmcpCiYjNDM7CQkJCWJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJeHMtJmd0O3R4X2J1ZGdldF9zcGVudCAmIzQzOz0gdXNlZDsKJiM0MzsJCXN1bV9iYXRjaC50eF9kZXNjcyAmIzQzOz0gY3Vycl9iYXRjaC50eF9kZXNjczsKJiM0MzsJCXN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzID0gY3Vycl9iYXRjaC5yZWNsYWltX2Rlc2NzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNxX2Rlc2NzX2FmdGVyID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKCZhbXA7c3VtX2JhdGNoKTsKJiM0MzsKJiM0MzsJaWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyICZndDs9IG1heF9kZXNjcykKJiM0MzsJCXJldHVybiBzdW1fYmF0Y2g7CiYjNDM7CiYjNDM7CS8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovCiYjNDM7CWlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpCiYjNDM7CQlnb3RvIGFnYWluOwomIzQzOwomIzQzOwlpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpCiYjNDM7CQlyZXR1cm4gc3VtX2JhdGNoOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgJmFtcDtwb29sLSZndDt4c2tfdHhfbGlzdCwgdHhfbGlzdCkKJiM0MzsJCXhzLSZndDt0eF9idWRnZXRfc3BlbnQgPSAwOwomIzQzOwlnb3RvIGFnYWluOwomIzQzO30KJiM0MzsKIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKQogewomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307CiAJc3RydWN0IHhkcF9zb2NrICp4czsKJiM0MzsJYm9vbCB1bWVtX3NoYXJlZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoIWxpc3RfaXNfc2luZ3VsYXIoJmFtcDtwb29sLSZndDt4c2tfdHhfbGlzdCkpIHsKLQkJLyogRmFsbGJhY2sgdG8gdGhlIG5vbi1iYXRjaGVkIHZlcnNpb24gKi8KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHBvb2wsIG5iX3BrdHMpOwotCX0KJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLSZndDtyZWNsYWltX2Rlc2NzKSkpCiYjNDM7CQlnb3RvIG91dDsKIAotCXhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdSgmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssIHR4X2xpc3QpOwotCWlmICgheHMpIHsKLQkJbmJfcGt0cyA9IDA7CiYjNDM7CXhzID0gbGlzdF9maXJzdF9vcl9udWxsX3JjdSgmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0LCBzdHJ1Y3QgeGRwX3NvY2ssCiYjNDM7CQkJCSAgICB0eF9saXN0KTsKJiM0MzsJaWYgKCF4cykKIAkJZ290byBvdXQ7Ci0JfQogCi0JbmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLSZndDt0eCwgbmJfcGt0cyk7CiYjNDM7CW5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC0mZ3Q7dHhfZGVzY3NfbmVudHJpZXMpOwomIzQzOwlpZiAoIW5iX3BrdHMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJdW1lbV9zaGFyZWQgPSAhbGlzdF9pc19zaW5ndWxhcigmYW1wO3Bvb2wtJmd0O3hza190eF9saXN0KTsKJiM0MzsKJiM0MzsJaWYgKHVtZW1fc2hhcmVkICZhbXA7JmFtcDsgIShwb29sLSZndDt1bWVtLSZndDtmbGFncyAmYW1wOyBYRFBfVU1FTV9TR19GTEFHKSkgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQlyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTsKJiM0MzsJfQogCiAJLyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguIFRyeSB0bwogCSAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXQKQEAgLTYwMywxOSAmIzQzOzc1MywxNiBAQCB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cykKIAlpZiAoIW5iX3BrdHMpCiAJCWdvdG8gb3V0OwogCi0JbmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtJmd0O3R4LCBwb29sLCBuYl9wa3RzKTsKLQlpZiAoIW5iX3BrdHMpIHsKLQkJeHMtJmd0O3R4LSZndDtxdWV1ZV9lbXB0eV9kZXNjcyYjNDM7JiM0Mzs7Ci0JCWdvdG8gb3V0OwotCX0KLQotCV9feHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKLQl4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLSZndDtjcSwgcG9vbC0mZ3Q7dHhfZGVzY3MsIG5iX3BrdHMpOwotCXhzLSZndDtzay5za193cml0ZV9zcGFjZSgmYW1wO3hzLSZndDtzayk7CiYjNDM7CWJhdGNoID0gdW1lbV9zaGFyZWQgPwomIzQzOwkJeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKSA6CiYjNDM7CQlfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cywKJiM0MzsJCQkJCQkgcG9vbC0mZ3Q7dHhfZGVzY3MsCiYjNDM7CQkJCQkJIG5iX3BrdHMpOwomIzQzOwl4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsICZhbXA7YmF0Y2gpOwogCiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIG5iX3BrdHM7CiYjNDM7CXJldHVybiBiYXRjaC50eF9kZXNjczsKIH0KIEVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTsKIApAQCAtNzM3LDYgJiM0Mzs4ODQsMTkgQEAgc3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9vbC0mZ3Q7Y3FfcHJvZF9sb2NrLCBmbGFncyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIGlkeDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwb29sLSZndDtjcV9wcm9kX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWR4ID0geHNrcV9nZXRfcHJvZChwb29sLSZndDtjcSk7CiYjNDM7CXhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtJmd0O2NxLCBpZHgsIGRlc2MtJmd0O2FkZHIpOwomIzQzOwl4c2txX3Byb2Rfc3VibWl0X24ocG9vbC0mZ3Q7Y3EsIDEpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9vbC0mZ3Q7Y3FfcHJvZF9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKQogewogCXNwaW5fbG9jaygmYW1wO3Bvb2wtJmd0O2NxLSZndDtjcV9jYWNoZWRfcHJvZF9sb2NrKTsKQEAgLTc5NCw4ICYjNDM7OTU0LDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl4ZHBfc2soc2tiLSZndDtzayktJmd0O3R4LSZndDtpbnZhbGlkX2Rlc2NzICYjNDM7PSB4c2tfZ2V0X251bV9kZXNjKHNrYik7Ci0JeHNrX2NvbnN1bWVfc2tiKHNrYik7CiYjNDM7CXN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLSZndDtzayk7CiYjNDM7CiYjNDM7CXhzLSZndDt0eC0mZ3Q7aW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpOwomIzQzOwljb25zdW1lX3NrYihza2IpOwomIzQzOwl4cy0mZ3Q7c2tiID0gTlVMTDsKIH0KIAogc3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlciwKQEAgLTg3Nyw3ICYjNDM7MTA0MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAkJLyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LAotCQkgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYgomIzQzOwkJICogeHNrX2Ryb3Bfc2tiKCkgd2lsbCByZWxlYXNlIHRoaXMgbm9kZSBhcyB3aG9sZSBza2IKIAkJICogd291bGQgYmUgZHJvcHBlZCwgd2hpY2ggaW1wbGllcyBmcmVlaW5nIGFsbCBsaXN0IGVsZW1lbnRzCiAJCSAqLwogCQl4c2tfYWRkci0mZ3Q7YWRkcnNbeHNrX2FkZHItJmd0O251bV9kZXNjc10gPSBkZXNjLSZndDthZGRyOwpAQCAtOTY5LDYgJiM0MzsxMTMyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsCiAJCQkJZ290byBmcmVlX2VycjsKIAkJCX0KIAomIzQzOwkJCXhza19hZGRyLSZndDthZGRyc1t4c2tfYWRkci0mZ3Q7bnVtX2Rlc2NzXSA9IGRlc2MtJmd0O2FkZHI7CiYjNDM7CiAJCQlpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSAmYW1wOyZhbXA7IHhwX21iX2Rlc2MoZGVzYykpKSB7CiAJCQkJZXJyID0gLUVPVkVSRkxPVzsKIAkJCQlnb3RvIGZyZWVfZXJyOwpAQCAtOTg2LDggJiM0MzsxMTUxLDYgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsCiAKIAkJCXNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7CiAJCQlyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCAmYW1wO3hzLSZndDtzay5za193bWVtX2FsbG9jKTsKLQotCQkJeHNrX2FkZHItJmd0O2FkZHJzW3hza19hZGRyLSZndDtudW1fZGVzY3NdID0gZGVzYy0mZ3Q7YWRkcjsKIAkJfQogCX0KIApAQCAtMTAyNSwxMyAmIzQzOzExODgsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsCiBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7Ci0JYm9vbCBzZW50X2ZyYW1lID0gZmFsc2U7CiAJc3RydWN0IHhkcF9kZXNjIGRlc2M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdTMyIGNhY2hlZF9jb25zOwogCXUzMiBtYXhfYmF0Y2g7CiAJaW50IGVyciA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7eHMtJmd0O211dGV4KTsKJiM0MzsJY2FjaGVkX2NvbnMgPSB4cy0mZ3Q7dHgtJmd0O2NhY2hlZF9jb25zOwogCiAJLyogU2luY2Ugd2UgZHJvcHBlZCB0aGUgUkNVIHJlYWQgbG9jaywgdGhlIHNvY2tldCBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuICovCiAJaWYgKHVubGlrZWx5KCF4c2tfaXNfYm91bmQoeHMpKSkgewpAQCAtMTA2MCwxMSAmIzQzOzEyMjQsMjEgQEAgc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKQogCQkJZ290byBvdXQ7CiAJCX0KIAomIzQzOwkJaWYgKHVubGlrZWx5KHhzLSZndDtkcmFpbl9jb250KSkgewomIzQzOwkJCXhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLSZndDtwb29sLCAmYW1wO2Rlc2MpOwomIzQzOwkJCXhzLSZndDt0eC0mZ3Q7aW52YWxpZF9kZXNjcyYjNDM7JiM0Mzs7CiYjNDM7CQkJeHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKJiM0MzsJCQl4cy0mZ3Q7ZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoJmFtcDtkZXNjKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJc2tiID0geHNrX2J1aWxkX3NrYih4cywgJmFtcDtkZXNjKTsKIAkJaWYgKElTX0VSUihza2IpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHNrYik7CiAJCQlpZiAoZXJyICE9IC1FT1ZFUkZMT1cpCiAJCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKHhwX21iX2Rlc2MoJmFtcDtkZXNjKSkKJiM0MzsJCQkJeHMtJmd0O2RyYWluX2NvbnQgPSB0cnVlOwogCQkJZXJyID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMDkzLDE4ICYjNDM7MTI2NywzMyBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXNlbnRfZnJhbWUgPSB0cnVlOwogCQl4cy0mZ3Q7c2tiID0gTlVMTDsKIAl9CiAKIAlpZiAoeHNrcV9oYXNfZGVzY3MoeHMtJmd0O3R4KSkgewomIzQzOwkJYm9vbCBkcmFpbiA9IHhzLSZndDtza2IgfHwgeHMtJmd0O2RyYWluX2NvbnQgfHwgeHBfbWJfZGVzYygmYW1wO2Rlc2MpOwomIzQzOwomIzQzOwkJZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLSZndDtwb29sKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQl4cy0mZ3Q7dHgtJmd0O2ludmFsaWRfZGVzY3MtLTsKJiM0MzsJCQlpZiAoeHMtJmd0O3NrYikKJiM0MzsJCQkJeHNrX2Ryb3Bfc2tiKHhzLSZndDtza2IpOwomIzQzOwkJCXhzLSZndDtkcmFpbl9jb250ID0gZHJhaW47CiYjNDM7CQkJZXJyID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKHhzLSZndDtza2IpCiAJCQl4c2tfZHJvcF9za2IoeHMtJmd0O3NrYik7CiYjNDM7CiYjNDM7CQl4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy0mZ3Q7cG9vbCwgJmFtcDtkZXNjKTsKJiM0MzsKIAkJeHNrcV9jb25zX3JlbGVhc2UoeHMtJmd0O3R4KTsKJiM0MzsJCXhzLSZndDtkcmFpbl9jb250ID0geHBfbWJfZGVzYygmYW1wO2Rlc2MpOwogCX0KIAogb3V0OgotCWlmIChzZW50X2ZyYW1lKQomIzQzOwlpZiAoeHMtJmd0O3R4LSZndDtjYWNoZWRfY29ucyAhPSBjYWNoZWRfY29ucykKIAkJX194c2tfdHhfcmVsZWFzZSh4cyk7CiAKIAltdXRleF91bmxvY2soJmFtcDt4cy0mZ3Q7bXV0ZXgpOwpAQCAtMTQ4Myw3ICYjNDM7MTY3Miw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyCiAJCQkgKiBhbmQvb3IgZGV2aWNlLgogCQkJICovCiAJCQl4cy0mZ3Q7cG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsCi0JCQkJCQkJICAgICB1bWVtX3hzLSZndDt1bWVtKTsKJiM0MzsJCQkJCQkJICAgICB1bWVtX3hzLSZndDt1bWVtLAomIzQzOwkJCQkJCQkgICAgIGRldi0mZ3Q7eGRwX3pjX21heF9zZWdzKTsKIAkJCWlmICgheHMtJmd0O3Bvb2wpIHsKIAkJCQllcnIgPSAtRU5PTUVNOwogCQkJCXNvY2tmZF9wdXQoc29jayk7CkBAIC0xNTE1LDcgJiM0MzsxNzA1LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHIKIAkJCSAqIHV0aWxpemVzCiAJCQkgKi8KIAkJCWlmICh4cy0mZ3Q7dHggJmFtcDsmYW1wOyAheHMtJmd0O3Bvb2wtJmd0O3R4X2Rlc2NzKSB7Ci0JCQkJZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtJmd0O3Bvb2wsIHhzKTsKJiM0MzsJCQkJZXJyID0geHBfYWxsb2NfdHhfZGVzY3MoeHMtJmd0O3Bvb2wsIHhzLAomIzQzOwkJCQkJCQlkZXYtJmd0O3hkcF96Y19tYXhfc2Vncyk7CiAJCQkJaWYgKGVycikgewogCQkJCQl4cF9wdXRfcG9vbCh4cy0mZ3Q7cG9vbCk7CiAJCQkJCXhzLSZndDtwb29sID0gTlVMTDsKQEAgLTE1MzMsNyAmIzQzOzE3MjQsOSBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcgogCQlnb3RvIG91dF91bmxvY2s7CiAJfSBlbHNlIHsKIAkJLyogVGhpcyB4c2sgaGFzIGl0cyBvd24gdW1lbS4gKi8KLQkJeHMtJmd0O3Bvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy0mZ3Q7dW1lbSk7CiYjNDM7CQl4cy0mZ3Q7cG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLSZndDt1bWVtLAomIzQzOwkJCQkJCSAgICAgZGV2LSZndDt4ZHBfemNfbWF4X3NlZ3MpOwomIzQzOwogCQlpZiAoIXhzLSZndDtwb29sKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfdW5sb2NrOwpkaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuYwppbmRleCAxZjI4YTk2NDE1NzFlNC4uYTQwODk0ODBiMjJiMjUgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jCkBAIC00MiwxNyAmIzQzOzQyLDIyIEBAIHZvaWQgeHBfZGVzdHJveShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCkKIAlrdmZyZWUocG9vbCk7CiB9CiAKLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cykKJiM0MztpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiYjNDM7CQkgICAgICB1MzIgbWF4X3NlZ3MpCiB7Ci0JcG9vbC0mZ3Q7dHhfZGVzY3MgPSBrdnphbGxvY19vYmpzKCpwb29sLSZndDt0eF9kZXNjcywgeHMtJmd0O3R4LSZndDtuZW50cmllcyk7CiYjNDM7CXUzMiBuZW50cmllcyA9IG1heCh4cy0mZ3Q7dHgtJmd0O25lbnRyaWVzLCBtYXhfc2Vncyk7CiYjNDM7CiYjNDM7CXBvb2wtJmd0O3R4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC0mZ3Q7dHhfZGVzY3MsIG5lbnRyaWVzKTsKIAlpZiAoIXBvb2wtJmd0O3R4X2Rlc2NzKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlwb29sLSZndDt0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzOwogCXJldHVybiAwOwogfQogCiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLAotCQkJCQkJc3RydWN0IHhkcF91bWVtICp1bWVtKQomIzQzOwkJCQkJCXN0cnVjdCB4ZHBfdW1lbSAqdW1lbSwKJiM0MzsJCQkJCQl1MzIgbWF4X3NlZ3MpCiB7CiAJYm9vbCB1bmFsaWduZWQgPSB1bWVtLSZndDtmbGFncyAmYW1wOyBYRFBfVU1FTV9VTkFMSUdORURfQ0hVTktfRkxBRzsKIAlzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDsKQEAgLTY5LDcgJiM0Mzs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsCiAJCWdvdG8gb3V0OwogCiAJaWYgKHhzLSZndDt0eCkKLQkJaWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzKSkKJiM0MzsJCWlmICh4cF9hbGxvY190eF9kZXNjcyhwb29sLCB4cywgbWF4X3NlZ3MpKQogCQkJZ290byBvdXQ7CiAKIAlwb29sLSZndDtjaHVua19tYXNrID0gfigodTY0KXVtZW0tJmd0O2NodW5rX3NpemUgLSAxKTsKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX3F1ZXVlLmggYi9uZXQveGRwL3hza19xdWV1ZS5oCmluZGV4IDNlM2ZiYjczZDIzZTJmLi4xYmM0MmM4OTAyZjRiYSAxMDA2NDQKLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hza19xdWV1ZS5oCkBAIC01OCw2ICYjNDM7NTgsMTcgQEAgc3RydWN0IHBhcnNlZF9kZXNjIHsKIAl1MzIgdmFsaWQ7CiB9OwogCiYjNDM7c3RydWN0IHhza190eF9iYXRjaCB7CiYjNDM7CXUzMiB0eF9kZXNjczsKJiM0MzsJdTMyIHJlY2xhaW1fZGVzY3M7CiYjNDM7CWJvb2wgYnVkZ2V0X2xpbWl0ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHUzMiB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoY29uc3Qgc3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gYmF0Y2gtJmd0O3R4X2Rlc2NzICYjNDM7IGJhdGNoLSZndDtyZWNsYWltX2Rlc2NzOwomIzQzO30KJiM0MzsKIC8qIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHNoYXJlZCBzdGF0ZSBvZiB0aGUgcmluZ3MgYXJlIGEgc2ltcGxlCiAgKiBjaXJjdWxhciBidWZmZXIsIGFzIG91dGxpbmVkIGluCiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZApAQCAtMjYzLDE3ICYjNDM7Mjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAogCXBhcnNlZC0mZ3Q7bWIgPSB4cF9tYl9kZXNjKGRlc2MpOwogfQogCi1zdGF0aWMgaW5saW5lCi11MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKLQkJCSAgICAgIHUzMiBtYXgpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoCiYjNDM7eHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwKJiM0MzsJCQkgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpCiB7Ci0JdTMyIGNhY2hlZF9jb25zID0gcS0mZ3Q7Y2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwOwotCXN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MgPSBwb29sLSZndDt0eF9kZXNjczsKLQl1MzIgdG90YWxfZGVzY3MgPSAwLCBucl9mcmFncyA9IDA7CiYjNDM7CWJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtJmd0O2RyYWluX2NvbnQpOwomIzQzOwl1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwOwomIzQzOwlzdHJ1Y3QgeHNrX3R4X2JhdGNoIGJhdGNoID0ge307CiYjNDM7CXN0cnVjdCB4c2tfcXVldWUgKnEgPSB4cy0mZ3Q7dHg7CiYjNDM7CXUzMiBucl9mcmFncyA9IDA7CiYjNDM7CiYjNDM7CWNhY2hlZF9jb25zID0gcS0mZ3Q7Y2FjaGVkX2NvbnM7CiAKLQkvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kCi0JICogY3VycmVudCBwYWNrZXQgdGhhdCBjb25zaXN0cyBvZiBmcmFncyBhbmQgc3RvcCB0aGUgcHJvY2Vzc2luZwotCSAqLwogCXdoaWxlIChjYWNoZWRfY29ucyAhPSBxLSZndDtjYWNoZWRfcHJvZCAmYW1wOyZhbXA7IG5iX2VudHJpZXMgJmx0OyBtYXgpIHsKIAkJc3RydWN0IHhkcF9yeHR4X3JpbmcgKnJpbmcgPSAoc3RydWN0IHhkcF9yeHR4X3JpbmcgKilxLSZndDtyaW5nOwogCQl1MzIgaWR4ID0gY2FjaGVkX2NvbnMgJmFtcDsgcS0mZ3Q7cmluZ19tYXNrOwpAQCAtMjgzLDI1ICYjNDM7Mjk1LDQyIEBAIHUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLAogCQljYWNoZWRfY29ucyYjNDM7JiM0Mzs7CiAJCXBhcnNlX2Rlc2MocSwgcG9vbCwgJmFtcDtkZXNjc1tuYl9lbnRyaWVzXSwgJmFtcDtwYXJzZWQpOwogCQlpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpCi0JCQlicmVhazsKJiM0MzsJCQlkcmFpbiA9IHRydWU7CiYjNDM7CiYjNDM7CQlucl9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQluYl9lbnRyaWVzJiM0MzsmIzQzOzsKIAogCQlpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7Ci0JCQl0b3RhbF9kZXNjcyAmIzQzOz0gKG5yX2ZyYWdzICYjNDM7IDEpOwotCQkJbnJfZnJhZ3MgPSAwOwotCQl9IGVsc2UgewotCQkJbnJfZnJhZ3MmIzQzOyYjNDM7OwotCQkJaWYgKG5yX2ZyYWdzID09IHBvb2wtJmd0O3hkcF96Y19tYXhfc2VncykgewomIzQzOwkJCWlmICh1bmxpa2VseShkcmFpbikpIHsKJiM0MzsJCQkJYmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzOwomIzQzOwkJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCBmYWxzZSk7CiAJCQkJbnJfZnJhZ3MgPSAwOwogCQkJCWJyZWFrOwogCQkJfQomIzQzOwomIzQzOwkJCWJhdGNoLnR4X2Rlc2NzICYjNDM7PSBucl9mcmFnczsKJiM0MzsJCQlucl9mcmFncyA9IDA7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobnJfZnJhZ3MgPT0gcG9vbC0mZ3Q7eGRwX3pjX21heF9zZWdzKQomIzQzOwkJCWRyYWluID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnJfZnJhZ3MpIHsKJiM0MzsJCWlmIChkcmFpbikgewomIzQzOwkJCWJhdGNoLnJlY2xhaW1fZGVzY3MgPSBucl9mcmFnczsKJiM0MzsJCQlXUklURV9PTkNFKHhzLSZndDtkcmFpbl9jb250LCB0cnVlKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKG5iX2VudHJpZXMgPT0gbWF4KQomIzQzOwkJCQliYXRjaC5idWRnZXRfbGltaXRlZCA9IHRydWU7CiYjNDM7CQkJY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJCX0KLQkJbmJfZW50cmllcyYjNDM7JiM0Mzs7CiAJfQogCi0JY2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7CiAJLyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi8KIAl4c2txX2NvbnNfcmVsZWFzZV9uKHEsIGNhY2hlZF9jb25zIC0gcS0mZ3Q7Y2FjaGVkX2NvbnMpOwotCXJldHVybiB0b3RhbF9kZXNjczsKJiM0MzsJcmV0dXJuIGJhdGNoOwogfQogCiAvKiBGdW5jdGlvbnMgZm9yIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNDc3YWVkYmIwMWJhZDguLjQ1NDkzNThjYzhjMjFkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKQEAgLTQyNywxNCAmIzQzOzQyNywxNCBAQCBzdGF0aWMgdTMyIHBrdF9uYl9mcmFncyh1MzIgZnJhbWVfc2l6ZSwgc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW0sIHN0cnVjdCBwawogCX0KIAogCS8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi8KLQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSB8fCAhcGt0LSZndDt2YWxpZCkKJiM0MzsJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykpCiAJCXJldHVybiBuYl9mcmFnczsKIAogCW5leHRfZnJhZyA9IHBrdF9zdHJlYW0tJmd0O2N1cnJlbnRfcGt0X25iOwogCXBrdCYjNDM7JiM0Mzs7CiAJd2hpbGUgKG5leHRfZnJhZyYjNDM7JiM0MzsgJmx0OyBwa3Rfc3RyZWFtLSZndDtuYl9wa3RzKSB7CiAJCW5iX2ZyYWdzJiM0MzsmIzQzOzsKLQkJaWYgKCFwa3RfY29udGludWVzKHBrdC0mZ3Q7b3B0aW9ucykgfHwgIXBrdC0mZ3Q7dmFsaWQpCiYjNDM7CQlpZiAoIXBrdF9jb250aW51ZXMocGt0LSZndDtvcHRpb25zKSkKIAkJCWJyZWFrOwogCQlwa3QmIzQzOyYjNDM7OwogCX0KQEAgLTY2NSwxMSAmIzQzOzY2NSwxMSBAQCBzdGF0aWMgc3RydWN0IHBrdF9zdHJlYW0gKl9fcGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgcwogCQkJaWYgKCFmcmFtZS0mZ3Q7dmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQogCQkJCXBheWxvYWQmIzQzOyYjNDM7OwogCQl9IGVsc2UgewotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCkKJiM0MzsJCQlpZiAoZnJhbWUtJmd0O3ZhbGlkKSB7CiAJCQkJbGVuICYjNDM7PSBmcmFtZS0mZ3Q7bGVuOwotCQkJaWYgKGZyYW1lLSZndDt2YWxpZCAmYW1wOyZhbXA7IHBrdF9jb250aW51ZXMoZnJhbWUtJmd0O29wdGlvbnMpKQotCQkJCWNvbnRpbnVlOwotCiYjNDM7CQkJCWlmIChwa3RfY29udGludWVzKGZyYW1lLSZndDtvcHRpb25zKSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXBrdC0mZ3Q7cGt0X25iID0gcGt0X25iOwogCQkJcGt0LSZndDtsZW4gPSBsZW47CiAJCQlwa3QtJmd0O3ZhbGlkID0gZnJhbWUtJmd0O3ZhbGlkOwpAQCAtMTI1MCwxMCAmIzQzOzEyNTAsOSBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywKIAkJCX0KIAkJfQogCi0JCWlmIChwa3QgJmFtcDsmYW1wOyBwa3QtJmd0O3ZhbGlkKSB7CiYjNDM7CQlpZiAocGt0ICZhbXA7JmFtcDsgcGt0LSZndDt2YWxpZCkKIAkJCXZhbGlkX3BrdHMmIzQzOyYjNDM7OwotCQkJdmFsaWRfZnJhZ3MgJiM0Mzs9IG5iX2ZyYWdzOwotCQl9CiYjNDM7CQl2YWxpZF9mcmFncyAmIzQzOz0gbmJfZnJhZ3M7CiAJfQogCiAJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7cGFjaW5nX211dGV4KTsKQEAgLTIwOTksMTMgJiM0MzsyMDk4LDE2IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCQl7MCwgMCwgMCwgZmFsc2UsIDB9LAogCQkvKiBJbnZhbGlkIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBmcmFtZSAqLwogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSwKLQkJe3VtZW1fc3osIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7dW1lbV9zeiAqIDIsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi8KIAkJezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sCiYjNDM7CQl7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sCiAJCS8qIEludmFsaWQgb3B0aW9ucyBpbiB0aGUgbWlkZGxlICovCiAJCXswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LAogCQl7MCwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYU0tfREVTQ19fSU5WQUxJRF9PUFRJT059LAomIzQzOwkJezAsIE1JTl9QS1RfU0laRSwgMCwgZmFsc2UsIDB9LAogCQkvKiBUcmFuc21pdCAyIGZyYWdzLCByZWNlaXZlIDMgKi8KIAkJezAsIFhTS19VTUVNX19NQVhfRlJBTUVfU0laRSwgMCwgdHJ1ZSwgWERQX1BLVF9DT05URH0sCiAJCXswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIDB9LApAQCAtMjExNyw4ICYjNDM7MjExOSw4IEBAIGludCB0ZXN0YXBwX2ludmFsaWRfZGVzY19tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCiAJaWYgKHVtZW0tJmd0O3VuYWxpZ25lZF9tb2RlKSB7CiAJCS8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqLwotCQlwa3RzWzEyXS52YWxpZCA9IHRydWU7Ci0JCXBrdHNbMTNdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTVdLnZhbGlkID0gdHJ1ZTsKJiM0MzsJCXBrdHNbMTZdLnZhbGlkID0gdHJ1ZTsKIAl9CiAKIAl0ZXN0LSZndDttdHUgPSBNQVhfRVRIX0pVTUJPX1NJWkU7CkBAIC0yMjcwLDcgJiM0MzsyMjcyLDcgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKIAkJbWF4X2ZyYWdzICYjNDM7PSAxOwogCX0KIAotCXBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyAmIzQzOyAyLCBzaXplb2Yoc3RydWN0IHBrdCkpOwomIzQzOwlwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgJiM0MzsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTsKIAlpZiAoIXBrdHMpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKQEAgLTIyODgsMjQgJiM0MzsyMjkwLDMwIEBAIGludCB0ZXN0YXBwX3Rvb19tYW55X2ZyYWdzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJfQogCXBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDsKIAotCS8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0Ci0JICogY29udGludWVzIG9uIHRoZSBsYXN0IGZyYWcKLQkgKi8KLQlmb3IgKGkgPSBtYXhfZnJhZ3MgJiM0MzsgMTsgaSAmbHQ7IDIgKiBtYXhfZnJhZ3MgJiM0MzsgMTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJLyogQW4gaW52YWxpZCBwYWNrZXQgd2l0aCB0aGUgbWF4ICYjNDM7IDEgYW1vdW50IG9mIGZyYWdzICovCiYjNDM7CWZvciAoaSA9IG1heF9mcmFncyAmIzQzOyAxOyBpICZsdDsgMiAqIG1heF9mcmFncyAmIzQzOyAyOyBpJiM0MzsmIzQzOykgewogCQlwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTsKIAkJcGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDsKLQkJcGt0c1tpXS52YWxpZCA9IGZhbHNlOwomIzQzOwkJcGt0c1tpXS52YWxpZCA9IHRydWU7CiAJfQomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0ub3B0aW9ucyA9IDA7CiAKIAkvKiBWYWxpZCBwYWNrZXQgZm9yIHN5bmNoICovCi0JcGt0c1syICogbWF4X2ZyYWdzICYjNDM7IDFdLmxlbiA9IE1JTl9QS1RfU0laRTsKLQlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMV0udmFsaWQgPSB0cnVlOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0ubGVuID0gTUlOX1BLVF9TSVpFOwomIzQzOwlwa3RzWzIgKiBtYXhfZnJhZ3MgJiM0MzsgMl0udmFsaWQgPSB0cnVlOwogCi0JaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMikpIHsKJiM0MzsJaWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgJiM0MzsgMykpIHsKIAkJZnJlZShwa3RzKTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKJiM0MzsJLyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0CiYjNDM7CSAqIF9fc2VuZF9wa3RzKCkgYWNjb3VudHMgaXRzIGRlc2NyaXB0b3JzIGluIG91dHN0YW5kaW5nX3R4LiBUaGUgUngKJiM0MzsJICogc3RyZWFtLCBob3dldmVyLCBtdXN0IG5vdCBleHBlY3QgdGhpcyBwYWNrZXQgb24gdGhlIHdpcmUuCiYjNDM7CSAqLwomIzQzOwl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtwa3Rfc3RyZWFtLSZndDtwa3RzWzJdLnZhbGlkID0gZmFsc2U7CiYjNDM7CXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3BrdF9zdHJlYW0tJmd0O25iX3ZhbGlkX2VudHJpZXMtLTsKJiM0MzsKIAlyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7CiAJZnJlZShwa3RzKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRl9YRFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEFGX1hEUCBpbiB0aGUgTGludXgga2VybmVsLiBTZWVtcyBsaWtlIGEgZmFpcmx5IGludm9sdmVkIG1vZGlmaWNhdGlvbiwgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdGAsIHZhcmlvdXMgaGVhZGVyIGZpbGVzIChgeGRwX3NvY2suaGAsIGB4c2tfYnVmZl9wb29sLmhgLCBgeHNrX3F1ZXVlLmhgKSwgYW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGZpbGVzIChgeHNrLmNgLCBgeHNrX2J1ZmZfcG9vbC5jYCkuIEl0IGV2ZW4gaW5jbHVkZXMgYSBtb2RpZmljYXRpb24gdG8gYSBzZWxmdGVzdCAoYHRlc3RfeHNrLmNgKSwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSB0cml2aWFsIHR3ZWFrOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBmb2N1c2luZyBvbiBob3cgQUZfWERQIGhhbmRsZXMgcG90ZW50aWFsbHkgaW52YWxpZCBkZXNjcmlwdG9ycywgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb21wbGV0aW9uIHJpbmcsIGFuZCBiYXRjaGluZyB3aXRoaW4gYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAuCgpUaGUga2V5IGZ1bmN0aW9ucyBiZWluZyB1cGRhdGVkIGhlcmUgYXJlIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgX194c2tfZ2VuZXJpY194bWl0YCwgYHhza190eF9jb21wbGV0ZWRgLCBhbmQgdGhlIFNLQi1idWlsZGluZyBmdW5jdGlvbnMsIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YC4gVGhpcyBhbGwgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIGltcG9ydGFudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgcGVyaGFwcyBhIGZpeCBmb3Igc29tZSBpZGVudGlmaWVkIGVkZ2UgY2FzZXMuCgpJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgcGF0Y2ggaW4gZGVwdGgsIGJ1dCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVhbGluZyB3aXRoIGRldGFpbHMgb2YgZGVzY3JpcHRvciBtYW5hZ2VtZW50LgoKVGhlIG5leHQgdGhpbmcgSSB3YW50IHRvIGNvbnNpZGVyIGlzIHRoZSBhcHBsaWNhYmlsaXR5IG9mIHRoaXMgY2hhbmdlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSYjMzk7bSBnbGFkIHRoZXkgYXJlIHRoaW5raW5nIGFib3V0IHRoaXMuIEFGX1hEUCBoYXMgcHJvdmVuIHVzZWZ1bCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGJ1dCB0aGlzIHBhdGNoIGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBob3cgd2VsbCBpdCB3b3Jrcy4gSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGF0IEFGX1hEUCBpcyBzdXBwb3J0ZWQgd2l0aCBnZW5lcmljIFhEUCAoU0tCIG1vZGUpIGFuZCB2ZXRoL3ZpcnRpby1uZXQuCgpJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX1hEUF9TT0NLRVRTYCwgdG8gZW5zdXJlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBYRFBfU09DS0VUU2AgYW5kIGBBRl9YRFBgIHdpdGhpbiB0aGUgZmlsZXMgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMTQ6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WERQX1NPQ0tFVFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMTU9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZzoxMTY6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTE3LUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTEzMT1DT05GSUdfTkVUX0tFWT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjEzMjpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMzMtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6NTY6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZzo1NzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNTgtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc9NTE9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo1MjpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo1MzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnLTU0LUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc9NTg9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjU5OkNPTkZJR19YRFBfU09DS0VUUz15XG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NjA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnLTYxLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NDg9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjQ5OkNPTkZJR19YRFBfU09DS0VUUz15XG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnLTUxLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NTA9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjUxOkNPTkZJR19YRFBfU09DS0VUUz15XG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NTI6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnLTUzLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnPTQ5PUNPTkZJR19ORVRfS0VZPXlcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NTE6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy01Mi1DT05GSUdfSU5FVD15XG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTY5PUNPTkZJR19ORVRfS0VZPXlcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZzo3MDpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjcxOkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy03Mi1DT05GSUdfSU5FVD15XG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9NDc9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc6NDg6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjQ5OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnLTUwLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZz00OD1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzo0OTpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctNTEtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc9NDk9Q09ORklHX05FVF9LRVk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzo1MDpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzo1MTpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnLTUyLUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz00ND1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZzo0NTpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc6NDY6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctNDctQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz00NT1DT05GSUdfTkVUX0tFWT15XG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6NDY6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWctNDgtQ09ORklHX0lORVQ9eVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX0RJQlNfTE89eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEzNDpDT05GSUdfWERQX1NPQ0tFVFM9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEzNTpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19JTkVUPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9MTI0PUNPTkZJR19ESUJTX0xPPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMjU6Q09ORklHX1hEUF9TT0NLRVRTPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMjY6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEyNy1DT05GSUdfSU5FVD15XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlPTU5PWljZS0kKENPTkZJR19SRlNfQUNDRUwpICYjNDM7PSBpY2VfYXJmcy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU6NjA6aWNlLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0gaWNlX3hzay5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNjEtaWNlLSQoQ09ORklHX0lDRV9TV0lUQ0hERVYpICYjNDM7PSBpY2VfZXN3aXRjaC5vIGljZV9lc3dpdGNoX2JyLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oPTEwPXN0cnVjdCBpY2VfdnNpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmg6MTI6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMy1pbnQgaWNlX3hza19wb29sX3NldHVwKHN0cnVjdCBpY2VfdnNpICp2c2ksIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmg9OTg9aWNlX3F2ZWNfZGlzX2lycShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBzdHJ1Y3QgaWNlX3J4X3JpbmcgKnJ4X3JpbmcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oLTk5LVx0XHQgc3RydWN0IGljZV9xX3ZlY3RvciAqcV92ZWN0b3IpIHsgfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaDoxMDA6I2VuZGlmIC8qIENPTkZJR19YRFBfU09DS0VUUyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMDEtI2VuZGlmIC8qICFfSUNFX1hTS19IXyAqL1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE3PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTE4OiNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE5LUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTg4Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX25ldF9jdHhfZ2V0X2FsbF91c2VkX2ZsdXNoX2xpc3RzKHN0cnVjdCBsaXN0X2hlYWQgKipsaF9tYXAsXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC05MDctXHRsaCA9IFx1MDAyNmJwZl9uZXRfY3R4LVx1MDAzZXhza21hcF9tYXBfZmx1c2hfbGlzdDtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTA4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1hEUF9TT0NLRVRTKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtOTA5LVx0ICAgIGtlcm5fZmxhZ3MgXHUwMDI2IEJQRl9SSV9GX1hTS19NQVBfSU5JVCBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkobGgpKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9Njc2PXN0cnVjdCBuZXRkZXZfcXVldWUge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNjk3LVx0c3RydWN0IG5ldF9kZXZpY2VcdCpzYl9kZXY7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjY5ODojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTY5OS1cdC8qIFwmIzM0O29wcyBwcm90ZWN0ZWRcJiMzNDssIHNlZSBjb21tZW50IGFib3V0IG5ldF9kZXZpY2U6OmxvY2sgKi9cbi0tXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtOS1cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaDoxMDovKiBgYFhEUF9UWE1EX0ZMQUdTX1ZBTElEYGAgaXMgZGVmaW5lZCBvbmx5IHVuZGVyIGBgQ09ORklHX1hEUF9TT0NLRVRTYGAgKi9cbmluY2x1ZGUvbmV0L2xpYmV0aC94c2suaC0xMS0jaWZkZWYgWERQX1RYTURfRkxBR1NfVkFMSURcbi0tXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9NjI9c3RydWN0IG5ldCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE4My0jZW5kaWZcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoxODQ6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE4NS1cdHN0cnVjdCBuZXRuc194ZHBcdHhkcDtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaD0xND1zdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlIHtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaC0yNy1cdCAqL1xuaW5jbHVkZS9uZXQvbmV0ZGV2X3J4X3F1ZXVlLmg6Mjg6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuaW5jbHVkZS9uZXQvbmV0ZGV2X3J4X3F1ZXVlLmgtMjktXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAgICAgICAgICAgICpwb29sO1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg9MTE3PXN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfb3BzIHtcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTEyMy1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MTI0OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTI1LVxuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg9MjQwPXN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfdHhfbWV0YWRhdGFfY29tcGxldGUoc3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwsXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0yNDUtXG5pbmNsdWRlL25ldC94ZHBfc29jay5oOjI0NjojZW5kaWYgLyogQ09ORklHX1hEUF9TT0NLRVRTICovXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTI0Ny0jZW5kaWYgLyogX0xJTlVYX1hEUF9TT0NLX0ggKi9cbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD0xOT1zdHJ1Y3QgeHNrX2NiX2Rlc2Mge1xuLS1cbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oLTI0LVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg6MjU6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMjYtXG4tLVxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2Lmg9NDkzPXN0YXRpYyBpbmxpbmUgdm9pZCB4c2tfYnVmZl9yYXdfZG1hX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC00OTgtXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDo0OTk6I2VuZGlmIC8qIENPTkZJR19YRFBfU09DS0VUUyAqL1xuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNTAwLVxuLS1cbm5ldC9NYWtlZmlsZT03Mj1vYmotJChDT05GSUdfTkVUX05DU0kpXHRcdCYjNDM7PSBuY3NpL1xubmV0L01ha2VmaWxlOjczOm9iai0kKENPTkZJR19YRFBfU09DS0VUUylcdCYjNDM7PSB4ZHAvXG5uZXQvTWFrZWZpbGUtNzQtb2JqLSQoQ09ORklHX01QVENQKVx0XHQmIzQzOz0gbXB0Y3AvXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz00NDE9X19uZXRkZXZfbmxfcXVldWVfZmlsbF9tcChzdHJ1Y3Qgc2tfYnVmZiAqcnNwLCBzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpyeHEpXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy00NDgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjQ0OTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTQ1MC1cdGlmIChyeHEtXHUwMDNlcG9vbClcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTQ3NT1uZXRkZXZfbmxfcXVldWVfZmlsbF9vbmUoc3RydWN0IHNrX2J1ZmYgKnJzcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTUwNC1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NTA1OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNTA2LVx0XHRpZiAodHhxLVx1MDAzZXBvb2wpXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmM9MTg3PXN0YXRpYyBpbnQgX19uZXRpZl9tcF9vcGVuX3J4cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcnhxX2lkeCxcbi0tXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yMjAtXHR9XG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYzoyMjE6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmMtMjIyLVx0aWYgKHJ4cS1cdTAwM2Vwb29sKSB7XG4tLVxubmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZHAvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0xMy1cdGRlZmF1bHQgblxuLS1cbm5ldC94ZHAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXG5uZXQveGRwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vXG5uZXQveGRwL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICYjNDM7PSB4c2tfZGlhZy5vXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXG4tLVxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM3Mi1cdFx0LyogQUZfWERQIHNvY2tldHMgKi9cbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYzozNzM6XHRcdHsgXCYjMzQ7Q09ORklHX1hEUF9TT0NLRVRTXCYjMzQ7LCB9LFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jLTM3NC1cdFx0LyogQlBGX1BST0dfVFlQRV9MV1RfKiBhbmQgcmVsYXRlZCBoZWxwZXJzICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZz0xMjc9Q09ORklHX1ZYTEFOPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6MTI4OkNPTkZJR19YRFBfU09DS0VUUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLTEyOS1DT05GSUdfWEZSTV9JTlRFUkZBQ0U9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0PTIyMz1DT05GSUdfWDg2X1BPV0VSTk9XX0s4PXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0OjIyNDpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NC0yMjUtQ09ORklHX1hGUk1fU1VCX1BPTElDWT15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnPTE2PUNPTkZJR19WTEFOXzgwMjFRPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZzoxNzpDT05GSUdfWERQX1NPQ0tFVFM9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUZfWERQIFNvY2tldCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIGBYRFBfU09DS0VUU2AsIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBmdW5jdGlvbnMgYmVpbmcgdG91Y2hlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgZmV3IGtleSBjb21wb25lbnRzIHdpdGhpbiB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X2NvbXBsZXRlZGAsIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAuCgpJbW1lZGlhdGVseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgIGFuZCBgX194c2tfZ2VuZXJpY194bWl0YC4gVGhlc2UgYXJlIGRlZmluaXRlbHkgb24gdGhlIGNyaXRpY2FsIHBhdGguIGBfX3hza19nZW5lcmljX3htaXRgIGlzIHRoZSBnZW5lcmljIHRyYW5zbWl0IHBhdGgsIHNvIHRoYXQmIzM5O3MgYSBjZW50cmFsIGZ1bmN0aW9uLiBBbmQgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaGFuZGxlcyByZXRyaWV2aW5nIFRYIGRlc2NyaXB0b3JzIGZyb20gdGhlIEFGX1hEUCBzb2NrZXQsIGEgY29yZSBpbnRlcmFjdGlvbiBwb2ludCB3aXRoIHRoZSBkcml2ZXJzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBiZWluZyBjaGFuZ2VkLiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgc2VlbSByZWxldmFudDoKCiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9jb21wbGV0ZWRgCiogICBgX194c2tfZ2VuZXJpY194bWl0YAoqICAgYHhza19idWlsZF9za2JgCiogICBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAKKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoYAoqICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYAoqICAgYHhza190eF9jb21taXRfYmF0Y2hgCiogICBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAKCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgeHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaGAsIGBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAsIGFuZCBgeHNrX3R4X2NvbW1pdF9iYXRjaGAgYXJlIGFsbCBzdGF0aWMuIEFuZCBgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaGAgaXMgc3RhdGljIGlubGluZS4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgbm90IGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhlaXIgcmVzcGVjdGl2ZSBtb2R1bGVzLCBhbmQgaGVscHMgdG8gbmFycm93IGRvd24gdGhlIHNjb3BlIG9mIGltcGFjdC4KClRoZXJlZm9yZSwgbXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIHByaW1hcnkgZnVuY3Rpb25zOgoKKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGBfX3hza19nZW5lcmljX3htaXRgCiogICBgeHNrX2J1aWxkX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoKRmluYWxseSwgYmVmb3JlIEkgZGlnIGZ1cnRoZXIsIEkgc2hvdWxkIGp1c3QgY29uZmlybSB0aGF0IGB4c2tfYnVpbGRfc2tiYCBhbmQgYHhza19idWlsZF9za2JfemVyb2NvcHlgIGFyZSBub3Qgc3RhdGljLCBpbiBvcmRlciB0byBhdm9pZCBtaXNpbnRlcnByZXRpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWlsZF9za2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05NjQ9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbi0tXG5uZXQveGRwL3hzay5jLTEwMDUtXG5uZXQveGRwL3hzay5jOjEwMDY6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwMDctXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTEwODEtXG5uZXQveGRwL3hzay5jOjEwODI6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwODMtXHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTEwODktXHRpZiAoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XG5uZXQveGRwL3hzay5jOjEwOTA6XHRcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xubmV0L3hkcC94c2suYy0xMDkxLVx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbi0tXG5uZXQveGRwL3hzay5jPTExODg9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTIzNC1cbm5ldC94ZHAveHNrLmM6MTIzNTpcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG5uZXQveGRwL3hzay5jLTEyMzYtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDE0OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTI2CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgY2hhbmdlcyB0aGV5JiMzOTt2ZSBtYWRlIGFyZSBmYWlybHkgZnVuZGFtZW50YWwsIGZvY3VzZWQgb24gZW5oYW5jaW5nIHRoZSBUeCBwYXRoIHdpdGhpbiB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBkZWFsaW5nIHdpdGggaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgY29tcGxldGlvbiByaW5nIGlzc3VlcywgYW5kIGludHJvZHVjaW5nIHNvbWUgYmF0Y2hpbmcgYW5kIHJlY2xhbWF0aW9uIGxvZ2ljLiBHaXZlbiB0aGF0LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGtleSBzeW1ib2xzIGFyZSB0aGUgcmVsZXZhbnQgZm9jYWwgcG9pbnRzIHRvIHRyYWNrOgoKKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgCiogICBgeHNrX3R4X2NvbXBsZXRlZGAKKiAgIGBfX3hza19nZW5lcmljX3htaXRgCiogICBgeHNrX2J1aWxkX3NrYmAKKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YAoKVGhvc2UgYWxsIHNlZW0gc3RhdGljIGFuZCBkaXJlY3RseSBhZGRyZXNzIHRoZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgdG8gQUZcX1hEUC4gSSBjYW4gY29uZmlkZW50bHkgaW5jbHVkZSB0aG9zZSBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4KCk5vdywgYXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcy4uLiBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgWERQX1NPQ0tFVFNgIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgaGVyZS4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRvIGJlIGV4dHJhIGNlcnRhaW4sIGJ1dCBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGZsYWdzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGJ1aWx0IHVwb24gdGhlIGZ1bmRhbWVudGFsIEFGXF9YRFAgaW5mcmFzdHJ1Y3R1cmUuIEkgdGhpbmsgd2UgYXJlIGdvb2QgdG8gZ28uCgpUaW1lIHRvIGNhbGwgdGhlIHNldC1yZXN1bHRzIGZ1bmN0aW9uIGFuZCBsb2NrIHRoZXNlIHBhcmFtZXRlcnMgaW50byBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAxNDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7eHNrX3R4X2NvbXBsZXRlZCYjMzQ7LAogICAgJiMzNDtfX3hza19nZW5lcmljX3htaXQmIzM0OywKICAgICYjMzQ7eHNrX2J1aWxkX3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiX3plcm9jb3B5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgVHggcGF0aC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBhbmQgcmVjbGFpbSBsb2dpYyBmb3IgZGVzY3JpcHRvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQUZfWERQIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBBRl9YRFAgc29ja2V0IG9wZXJhdGlvbnMgKGUuZy4sIHVzaW5nIGdlbmVyaWMgWERQIG1vZGUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCYjMzQ7LAogICAgJiMzNDt4c2tfdHhfY29tcGxldGVkJiMzNDssCiAgICAmIzM0O19feHNrX2dlbmVyaWNfeG1pdCYjMzQ7LAogICAgJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgICAmIzM0O3hza19idWlsZF9za2JfemVyb2NvcHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGNvbXBsZXRpb24gcmluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGluIHRoZSBUeCBwYXRoLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGFuZCByZWNsYWltIGxvZ2ljIGZvciBkZXNjcmlwdG9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBBRl9YRFAgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFGX1hEUCBzb2NrZXQgb3BlcmF0aW9ucyAoZS5nLiwgdXNpbmcgZ2VuZXJpYyBYRFAgbW9kZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoyMToyNS41ODE2Mjg0OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxNDQ0NjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X2NvbXBsZXRlZFwiLFxuICAgIFwiX194c2tfZ2VuZXJpY194bWl0XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGNvbXBsZXRpb24gcmluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGluIHRoZSBUeCBwYXRoLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGFuZCByZWNsYWltIGxvZ2ljIGZvciBkZXNjcmlwdG9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBBRl9YRFAgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFGX1hEUCBzb2NrZXQgb3BlcmF0aW9ucyAoZS5nLiwgdXNpbmcgZ2VuZXJpYyBYRFAgbW9kZSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjI1LjU4MTYzNTg4M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzEwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2MwZDg1ODQ1NzMzOTBmN2FkNTlkZmE1ZmU1ODBmYmQ5NmNlNWM0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoyMToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XFxuaW5kZXggNTBkOTIwODRhNDljNmEuLmNjM2YwZDE2YjI4ZmI2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RcXG5AQCAtNDMsMTIgKzQzLDEzIEBAIFVNRU0gYWxzbyBoYXMgdHdvIHJpbmdzOiB0aGUgRklMTCByaW5nIGFuZCB0aGUgQ09NUExFVElPTiByaW5nLiBUaGVcXG4gRklMTCByaW5nIGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbmQgZG93biBhZGRyIGZvciB0aGUga2VybmVsXFxuIHRvIGZpbGwgaW4gd2l0aCBSWCBwYWNrZXQgZGF0YS4gUmVmZXJlbmNlcyB0byB0aGVzZSBmcmFtZXMgd2lsbCB0aGVuXFxuIGFwcGVhciBpbiB0aGUgUlggcmluZyBvbmNlIGVhY2ggcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkLiBUaGVcXG4tQ09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkciB0aGF0IHRoZVxcbi1rZXJuZWwgaGFzIHRyYW5zbWl0dGVkIGNvbXBsZXRlbHkgYW5kIGNhbiBub3cgYmUgdXNlZCBhZ2FpbiBieSB1c2VyXFxuLXNwYWNlLCBmb3IgZWl0aGVyIFRYIG9yIFJYLiBUaHVzLCB0aGUgZnJhbWUgYWRkcnMgYXBwZWFyaW5nIGluIHRoZVxcbi1DT01QTEVUSU9OIHJpbmcgYXJlIGFkZHJzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHRyYW5zbWl0dGVkIHVzaW5nIHRoZVxcbi1UWCByaW5nLiBJbiBzdW1tYXJ5LCB0aGUgUlggYW5kIEZJTEwgcmluZ3MgYXJlIHVzZWQgZm9yIHRoZSBSWCBwYXRoXFxuLWFuZCB0aGUgVFggYW5kIENPTVBMRVRJT04gcmluZ3MgYXJlIHVzZWQgZm9yIHRoZSBUWCBwYXRoLlxcbitDT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyZXNzZXMgZnJvbSBUeFxcbitkZXNjcmlwdG9ycyB0aGF0IHRoZSBrZXJuZWwgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYW5kIHRoYXQgY2FuIG5vdyBiZVxcbit1c2VkIGFnYWluIGJ5IHVzZXIgc3BhY2UsIGZvciBlaXRoZXIgVHggb3IgUnguIFRoaXMgaW5jbHVkZXMgZnJhbWVzIHdob3NlXFxuK3RyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkIGFzIHdlbGwgYXMgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeFxcbitkZXNjcmlwdG9ycyByZWplY3RlZCBieSB0aGUga2VybmVsLiBBIGNvbXBsZXRpb24gdGhlcmVmb3JlIHJldHVybnNcXG4rb3duZXJzaGlwIG9mIGEgZnJhbWUgdG8gdXNlciBzcGFjZSwgYnV0IGRvZXMgbm90IGJ5IGl0c2VsZiBndWFyYW50ZWUgdGhhdFxcbit0aGUgcGFja2V0IHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuXFxuIFxcbiBUaGUgc29ja2V0IGlzIHRoZW4gZmluYWxseSBib3VuZCB3aXRoIGEgYmluZCgpIGNhbGwgdG8gYSBkZXZpY2UgYW5kIGFcXG4gc3BlY2lmaWMgcXVldWUgaWQgb24gdGhhdCBkZXZpY2UsIGFuZCBpdCBpcyBub3QgdW50aWwgYmluZCBpc1xcbkBAIC0xNjksMTQgKzE3MCwxNSBAQCBjaHVua3MgbW9kZSwgdGhlbiB0aGUgaW5jb21pbmcgYWRkciB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLlxcbiBVTUVNIENvbXBsZXRpb24gUmluZ1xcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxcbiBcXG4tVGhlIENPTVBMRVRJT04gUmluZyBpcyB1c2VkIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBVTUVNIGZyYW1lcyBmcm9tXFxuK1RoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbVxcbiBrZXJuZWwtc3BhY2UgdG8gdXNlci1zcGFjZS4gSnVzdCBsaWtlIHRoZSBGSUxMIHJpbmcsIFVNRU0gaW5kaWNlcyBhcmVcXG4tdXNlZC5cXG4tXFxuLUZyYW1lcyBwYXNzZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgYXJlIGZyYW1lcyB0aGF0IGhhcyBiZWVuXFxuLXNlbnQgKFRYIHJpbmcpIGFuZCBjYW4gYmUgdXNlZCBieSB1c2VyLXNwYWNlIGFnYWluLlxcbi1cXG4tVGhlIHVzZXIgYXBwbGljYXRpb24gY29uc3VtZXMgVU1FTSBhZGRycyBmcm9tIHRoaXMgcmluZy5cXG4rdXNlZC4gRnJhbWVzIHBhc3NlZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSBhcmUgZnJhbWVzIHJlZmVyZW5jZWRcXG4rYnkgVHggZGVzY3JpcHRvcnMgdGhhdCB0aGUga2VybmVsIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGFuZCBjYW4gYmVcXG4rdXNlZCBieSB1c2VyLXNwYWNlIGFnYWluLiBUaGlzIGluY2x1ZGVzIGJvdGggZnJhbWVzIHdob3NlIHRyYW5zbWlzc2lvblxcbitoYXMgY29tcGxldGVkIGFuZCBmcmFtZXMgcmVmZXJlbmNlZCBieSBpbnZhbGlkIFR4IGRlc2NyaXB0b3JzIHRoYXQgd2VyZVxcbityZWplY3RlZCBhbmQgcmVjbGFpbWVkIGJ5IHRoZSBrZXJuZWwuIEEgY29tcGxldGlvbiBlbnRyeSBkb2VzIG5vdFxcbitndWFyYW50ZWUgc3VjY2Vzc2Z1bCBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGUgdXNlciBhcHBsaWNhdGlvbiBjb25zdW1lc1xcbitVTUVNIGFkZHJzIGZyb20gdGhpcyByaW5nLlxcbiBcXG4gXFxuIFJYIFJpbmdcXG5AQCAtNTA0LDIxICs1MDYsMjUgQEAgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGludmFsaWQgZGVzY3JpcHRvci5cXG4gVGhlc2UgYXJlIHRoZSBzZW1hbnRpY3MgZm9yIHByb2R1Y2luZyBwYWNrZXRzIG9udG8gQUZfWERQIFR4IHJpbmdcXG4gY29uc2lzdGluZyBvZiBtdWx0aXBsZSBmcmFtZXM6XFxuIFxcbi0qIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCBhbGwgdGhlIG90aGVyXFxuLSAgZGVzY3JpcHRvcnMvZnJhbWVzIG9mIHRoaXMgcGFja2V0IGFyZSBtYXJrZWQgYXMgaW52YWxpZCBhbmQgbm90XFxuLSAgY29tcGxldGVkLiBUaGUgbmV4dCBkZXNjcmlwdG9yIGlzIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3XFxuLSAgcGFja2V0LCBldmVuIGlmIHRoaXMgd2FzIG5vdCB0aGUgaW50ZW50IChiZWNhdXNlIHdlIGNhbm5vdCBndWVzc1xcbi0gIHRoZSBpbnRlbnQpLiBBcyBiZWZvcmUsIGlmIHlvdXIgcHJvZ3JhbSBpcyBwcm9kdWNpbmcgaW52YWxpZFxcbi0gIGRlc2NyaXB0b3JzIHlvdSBoYXZlIGEgYnVnIHRoYXQgbXVzdCBiZSBmaXhlZC5cXG4rKiBXaGVuIGFuIGludmFsaWQgZGVzY3JpcHRvciBpcyBmb3VuZCwgdGhlIGNvbXBsZXRlIHBhY2tldCBpcyB0cmVhdGVkIGFzXFxuKyAgaW52YWxpZC4gVGhlIGtlcm5lbCBjb25zdW1lcyBkZXNjcmlwdG9ycyB0aHJvdWdoIHRoZSBkZXNjcmlwdG9yIG1hcmtpbmdcXG4rICB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgYW5kIHJldHVybnMgYWxsIHRoZWlyIGZyYW1lIGFkZHJlc3NlcyB0aHJvdWdoIHRoZVxcbisgIENPTVBMRVRJT04gcmluZy4gQSBzdGFuZGFsb25lIGludmFsaWQgZGVzY3JpcHRvciBpcyB0cmVhdGVkIGFzIGFcXG4rICBvbmUtZGVzY3JpcHRvciBpbnZhbGlkIHBhY2tldC4gVGhlIGRlc2NyaXB0b3IgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlXFxuKyAgaW52YWxpZCBwYWNrZXQgaXMgdHJlYXRlZCBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFja2V0LiBBcyBiZWZvcmUsIGlmXFxuKyAgeW91ciBwcm9ncmFtIGlzIHByb2R1Y2luZyBpbnZhbGlkIGRlc2NyaXB0b3JzIHlvdSBoYXZlIGEgYnVnIHRoYXQgbXVzdFxcbisgIGJlIGZpeGVkLiBSZWplY3RlZCBkZXNjcmlwdG9ycyBhcmUgcmVwb3J0ZWQgaW4gdGhlIGBgdHhfaW52YWxpZF9kZXNjc2BgXFxuKyAgc3RhdGlzdGljLlxcbiBcXG4gKiBaZXJvIGxlbmd0aCBkZXNjcmlwdG9ycyBhcmUgdHJlYXRlZCBhcyBpbnZhbGlkIGRlc2NyaXB0b3JzLlxcbiBcXG4gKiBGb3IgY29weSBtb2RlLCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHBhY2tldCBpc1xcbi0gIGVxdWFsIHRvIENPTkZJR19NQVhfU0tCX0ZSQUdTICsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbFxcbi0gIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIHNvIGZhciBhcmUgZHJvcHBlZCBhbmQgdHJlYXRlZCBhc1xcbi0gIGludmFsaWQuIFRvIHByb2R1Y2UgYW4gYXBwbGljYXRpb24gdGhhdCB3aWxsIHdvcmsgb24gYW55IHN5c3RlbVxcbi0gIHJlZ2FyZGxlc3Mgb2YgdGhpcyBjb25maWcgc2V0dGluZywgbGltaXQgdGhlIG51bWJlciBvZiBmcmFncyB0byAxOCxcXG4tICBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgY29uZmlnIGlzIDE3LlxcbisgIGVxdWFsIHRvIENPTkZJR19NQVhfU0tCX0ZSQUdTICsgMS4gSWYgaXQgaXMgZXhjZWVkZWQsIGFsbCBkZXNjcmlwdG9yc1xcbisgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgb3ZlcnNpemVkIHBhY2tldCBhcmUgY29uc3VtZWQsIHRyZWF0ZWQgYXMgaW52YWxpZCxcXG4rICBhbmQgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRvXFxuKyAgcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtIHJlZ2FyZGxlc3Mgb2YgdGhpc1xcbisgIGNvbmZpZyBzZXR0aW5nLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGZyYWdzIHRvIDE4LCBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZlxcbisgIHRoZSBjb25maWcgaXMgMTcuXFxuIFxcbiAqIEZvciB6ZXJvLWNvcHkgbW9kZSwgdGhlIGxpbWl0IGlzIHVwIHRvIHdoYXQgdGhlIE5JQyBIV1xcbiAgIHN1cHBvcnRzLiBVc3VhbGx5IGF0IGxlYXN0IGZpdmUgb24gdGhlIE5JQ3Mgd2UgaGF2ZSBjaGVja2VkLiBXZVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZHBfc29jay5oIGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxcbmluZGV4IGViYWM2MGEzZDhhMTdiLi44YjUxODc2ZWZiZWQxYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQveGRwX3NvY2suaFxcbkBAIC04MCw2ICs4MCw3IEBAIHN0cnVjdCB4ZHBfc29jayB7XFxuIFxcdCAqIGNhbGwgb2YgX194c2tfZ2VuZXJpY194bWl0KCkuXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRib29sIGRyYWluX2NvbnQ7XFxuIFxcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG1hcF9saXN0O1xcbiBcXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmggYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcXG5pbmRleCBjY2IzYjM1MDAwMWYyNC4uMmJiMWQxMjJiMWJjNmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXFxuKysrIGIvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXFxuQEAgLTc4LDYgKzc4LDkgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xcbiBcXHR1MzIgY2h1bmtfc2l6ZTtcXG4gXFx0dTMyIGNodW5rX3NoaWZ0O1xcbiBcXHR1MzIgZnJhbWVfbGVuO1xcbitcXHR1MzIgdHhfZGVzY3NfbmVudHJpZXM7XFxuK1xcdHUzMiByZWNsYWltX2Rlc2NzO1xcbitcXHR1MzIgdHhfemNfcGVuZGluZ19kZXNjcztcXG4gXFx0dTMyIHhkcF96Y19tYXhfc2VncztcXG4gXFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXFxuIFxcdHU4IGNhY2hlZF9uZWVkX3dha2V1cDtcXG5AQCAtMTAyLDEyICsxMDUsMTQgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xcbiBcXG4gLyogQUZfWERQIGNvcmUuICovXFxuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dTMyIG1heF9zZWdzKTtcXG4gaW50IHhwX2Fzc2lnbl9kZXYoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgdTE2IHF1ZXVlX2lkLCB1MTYgZmxhZ3MpO1xcbiBpbnQgeHBfYXNzaWduX2Rldl9zaGFyZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqdW1lbV94cyxcXG4gXFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZCk7XFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyk7XFxuK2ludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4rXFx0XFx0ICAgICAgdTMyIG1heF9zZWdzKTtcXG4gdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcXG4gdm9pZCB4cF9nZXRfcG9vbChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCk7XFxuIGJvb2wgeHBfcHV0X3Bvb2woc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpO1xcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xcbmluZGV4IGI5NzBmMzBlYTliOWQ4Li5mOTA2ZDUxYjY2OTkwNCAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC00OTksNiArNDk5LDIzIEBAIHZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXFxuIFxcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxcbiB7XFxuK1xcdHUzMiByZWNsYWltX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXFx1MDAzZXJlY2xhaW1fZGVzY3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHJlY2xhaW1fZGVzY3MpKSB7XFxuK1xcdFxcdHUzMiBwZW5kaW5nX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXFx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MpO1xcbitcXG4rXFx0XFx0aWYgKG5iX2VudHJpZXMgXFx1MDAzYyBwZW5kaW5nX2Rlc2NzKSB7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcXG4rXFx0XFx0XFx0XFx0ICAgcGVuZGluZ19kZXNjcyAtIG5iX2VudHJpZXMpO1xcbitcXHRcXHRcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIG5iX2VudHJpZXMpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UocG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcywgMCk7XFxuK1xcdFxcdG5iX2VudHJpZXMgKz0gcmVjbGFpbV9kZXNjcztcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzLCAwKTtcXG4rXFx0fVxcbitcXG4gXFx0eHNrcV9wcm9kX3N1Ym1pdF9uKHBvb2wtXFx1MDAzZWNxLCBuYl9lbnRyaWVzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHhza190eF9jb21wbGV0ZWQpO1xcbkBAIC01NzQsMjQgKzU5MSwxNTcgQEAgc3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJcXG4gXFx0cmV0dXJuIG5iX3BrdHM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza190eF9jb21taXRfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxcbit7XFxuK1xcdHUzMiBuYl9kZXNjcyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhiYXRjaCk7XFxuK1xcdHUzMiBjcV9jYWNoZWRfcHJvZDtcXG4rXFxuK1xcdGlmICghbmJfZGVzY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNxX2NhY2hlZF9wcm9kID0gcG9vbC1cXHUwMDNlY3EtXFx1MDAzZWNhY2hlZF9wcm9kO1xcbitcXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVxcdTAwM2VjcSwgcG9vbC1cXHUwMDNldHhfZGVzY3MsIG5iX2Rlc2NzKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcykpIHtcXG4rXFx0XFx0dTMyIGNxX3BlbmRpbmdfZGVzY3M7XFxuK1xcbitcXHRcXHQvKiBDUSBpcyBwb3NpdGlvbmFsLiBEZXNjcmlwdG9ycyBhbHJlYWR5IHdyaXR0ZW4gYnV0IG5vdFxcbitcXHRcXHQgKiBzdWJtaXR0ZWQgbXVzdCBjb21wbGV0ZSBiZWZvcmUgYW55IHJlY2xhaW0tb25seSBkZXNjcmlwdG9yc1xcbitcXHRcXHQgKiBhcHBlbmRlZCBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNxX3BlbmRpbmdfZGVzY3MgPSBjcV9jYWNoZWRfcHJvZCAtIHhza3FfZ2V0X3Byb2QocG9vbC1cXHUwMDNlY3EpO1xcbitcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLFxcbitcXHRcXHRcXHQgICBiYXRjaC1cXHUwMDNldHhfZGVzY3MgKyBjcV9wZW5kaW5nX2Rlc2NzKTtcXG4rXFx0XFx0V1JJVEVfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzLCBiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcyk7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghcG9vbC1cXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcykpXFxuK1xcdFxcdFxcdHhza190eF9jb21wbGV0ZWQocG9vbCwgMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcXG4rX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcXG4rXFx0dTMyIGVudHJpZXM7XFxuK1xcbitcXHRlbnRyaWVzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXFx1MDAzZXR4LCBtYXhfZGVzY3MpO1xcbitcXHRpZiAoIWVudHJpZXMpXFxuK1xcdFxcdHJldHVybiBiYXRjaDtcXG4rXFxuK1xcdGJhdGNoID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cywgcG9vbCwgZGVzY3MsIG1heF9kZXNjcyk7XFxuK1xcdGlmICgheHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZiYXRjaCkpIHtcXG4rXFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VxdWV1ZV9lbXB0eV9kZXNjcysrO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdHhzLVxcdTAwM2Vzay5za193cml0ZV9zcGFjZShcXHUwMDI2eHMtXFx1MDAzZXNrKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxuK3tcXG4rXFx0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggc3VtX2JhdGNoID0ge307XFxuK1xcdGJvb2wgYnVkZ2V0X2V4aGF1c3RlZDtcXG4rXFx0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXG4rXFx0LyogVGhlIGZhaXJuZXNzIHF1b3RhIG11c3QgYWxsb3cgb25lIG1heGltdW0tc2l6ZWQgdmFsaWQgcGFja2V0LiAqL1xcbitcXHRwZXJfc29ja2V0X2J1ZGdldCA9IG1heF90KHUzMiwgTUFYX1BFUl9TT0NLRVRfQlVER0VULFxcbitcXHRcXHRcXHRcXHQgIHBvb2wtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbithZ2FpbjpcXG4rXFx0YnVkZ2V0X2V4aGF1c3RlZCA9IGZhbHNlO1xcbitcXHRjcV9kZXNjc19iZWZvcmUgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHhzLCBcXHUwMDI2cG9vbC1cXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcXG4rXFx0XFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nLCB1c2VkO1xcbitcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XFxuK1xcbitcXHRcXHQvKiBPbmNlIHJlY2xhaW0tb25seSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gYXBwZW5kZWQgdG8gdGhlIENRXFxuK1xcdFxcdCAqIGFkZHJlc3MgYXJlYSwgZG8gbm90IGFwcGVuZCBkcml2ZXItdmlzaWJsZSBUeCBkZXNjcmlwdG9yc1xcbitcXHRcXHQgKiBmcm9tIGFub3RoZXIgc29ja2V0IGFmdGVyIHRoZW0uIHhza190eF9jb21wbGV0ZWQoKSByZWxpZXMgb25cXG4rXFx0XFx0ICogYWxsIGRyaXZlci12aXNpYmxlIGRlc2NyaXB0b3JzIHByZWNlZGluZyBhbGwgcmVjbGFpbS1vbmx5XFxuK1xcdFxcdCAqIGRlc2NyaXB0b3JzIGluIENRIG9yZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVxcdTAwM2V0eF9kZXNjcyAqL1xcbitcXHRcXHRvZmZzZXQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNnN1bV9iYXRjaCk7XFxuK1xcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gbWF4X2Rlc2NzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmICh4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50IFxcdTAwM2U9IHBlcl9zb2NrZXRfYnVkZ2V0KSB7XFxuK1xcdFxcdFxcdGlmICh4c2txX2NvbnNfbmJfZW50cmllcyh4cy1cXHUwMDNldHgsIDEpKVxcbitcXHRcXHRcXHRcXHRidWRnZXRfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGJ1ZGdldF9sZWZ0ID0gcGVyX3NvY2tldF9idWRnZXQgLSB4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50O1xcbitcXHRcXHRyZW1haW5pbmcgPSBtYXhfZGVzY3MgLSBvZmZzZXQ7XFxuK1xcdFxcdGJ1ZGdldCA9IG1pbihyZW1haW5pbmcsIGJ1ZGdldF9sZWZ0KTtcXG4rXFxuK1xcdFxcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJ1ZGdldCk7XFxuK1xcdFxcdHVzZWQgPSB4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXFx1MDAyNmN1cnJfYmF0Y2gpO1xcbitcXHRcXHRpZiAoIXVzZWQpIHtcXG4rXFx0XFx0XFx0aWYgKGN1cnJfYmF0Y2guYnVkZ2V0X2xpbWl0ZWQgXFx1MDAyNlxcdTAwMjYgYnVkZ2V0X2xlZnQgXFx1MDAzYyByZW1haW5pbmcpXFxuK1xcdFxcdFxcdFxcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0eHMtXFx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSB1c2VkO1xcbitcXHRcXHRzdW1fYmF0Y2gudHhfZGVzY3MgKz0gY3Vycl9iYXRjaC50eF9kZXNjcztcXG4rXFx0XFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XFxuK1xcdH1cXG4rXFxuK1xcdGNxX2Rlc2NzX2FmdGVyID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFxcdTAwMjZzdW1fYmF0Y2gpO1xcbitcXG4rXFx0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFxcdTAwM2U9IG1heF9kZXNjcylcXG4rXFx0XFx0cmV0dXJuIHN1bV9iYXRjaDtcXG4rXFxuK1xcdC8qIENvbnRpbnVlIGZpbGxpbmcgdGhlIGJhdGNoIHdoaWxlIHRoaXMgcGFzcyBtYWRlIHByb2dyZXNzICovXFxuK1xcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXFxuK1xcdFxcdGdvdG8gYWdhaW47XFxuK1xcbitcXHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXFxuK1xcdFxcdHJldHVybiBzdW1fYmF0Y2g7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0LCB0eF9saXN0KVxcbitcXHRcXHR4cy1cXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcXG4rXFx0Z290byBhZ2FpbjtcXG4rfVxcbitcXG4gdTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxuIHtcXG4rXFx0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xcbiBcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbitcXHRib29sIHVtZW1fc2hhcmVkO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRpZiAoIWxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNnBvb2wtXFx1MDAzZXhza190eF9saXN0KSkge1xcbi1cXHRcXHQvKiBGYWxsYmFjayB0byB0aGUgbm9uLWJhdGNoZWQgdmVyc2lvbiAqL1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0cmV0dXJuIHhza190eF9wZWVrX3JlbGVhc2VfZmFsbGJhY2socG9vbCwgbmJfcGt0cyk7XFxuLVxcdH1cXG4rXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShwb29sLVxcdTAwM2VyZWNsYWltX2Rlc2NzKSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLCB0eF9saXN0KTtcXG4tXFx0aWYgKCF4cykge1xcbi1cXHRcXHRuYl9wa3RzID0gMDtcXG4rXFx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCwgc3RydWN0IHhkcF9zb2NrLFxcbitcXHRcXHRcXHRcXHQgICAgdHhfbGlzdCk7XFxuK1xcdGlmICgheHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuIFxcbi1cXHRuYl9wa3RzID0geHNrcV9jb25zX25iX2VudHJpZXMoeHMtXFx1MDAzZXR4LCBuYl9wa3RzKTtcXG4rXFx0bmJfcGt0cyA9IG1pbihuYl9wa3RzLCBwb29sLVxcdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XFxuK1xcdGlmICghbmJfcGt0cylcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR1bWVtX3NoYXJlZCA9ICFsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZwb29sLVxcdTAwM2V4c2tfdHhfbGlzdCk7XFxuK1xcbitcXHRpZiAodW1lbV9zaGFyZWQgXFx1MDAyNlxcdTAwMjYgIShwb29sLVxcdTAwM2V1bWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguIFRyeSB0b1xcbiBcXHQgKiByZXNlcnZlIHNwYWNlIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGZvciBhbGwgcGFja2V0cywgYnV0XFxuQEAgLTYwMywxOSArNzUzLDE2IEBAIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbiBcXHRpZiAoIW5iX3BrdHMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0bmJfcGt0cyA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMtXFx1MDAzZXR4LCBwb29sLCBuYl9wa3RzKTtcXG4tXFx0aWYgKCFuYl9wa3RzKSB7XFxuLVxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdF9feHNrcV9jb25zX3JlbGVhc2UoeHMtXFx1MDAzZXR4KTtcXG4tXFx0eHNrcV9wcm9kX3dyaXRlX2FkZHJfYmF0Y2gocG9vbC1cXHUwMDNlY3EsIHBvb2wtXFx1MDAzZXR4X2Rlc2NzLCBuYl9wa3RzKTtcXG4tXFx0eHMtXFx1MDAzZXNrLnNrX3dyaXRlX3NwYWNlKFxcdTAwMjZ4cy1cXHUwMDNlc2spO1xcbitcXHRiYXRjaCA9IHVtZW1fc2hhcmVkID9cXG4rXFx0XFx0eHNrX3R4X3BlZWtfcmVsZWFzZV9zaGFyZWRfZGVzY19iYXRjaChwb29sLCBuYl9wa3RzKSA6XFxuK1xcdFxcdF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHBvb2wsIHhzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgcG9vbC1cXHUwMDNldHhfZGVzY3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBuYl9wa3RzKTtcXG4rXFx0eHNrX3R4X2NvbW1pdF9iYXRjaChwb29sLCBcXHUwMDI2YmF0Y2gpO1xcbiBcXG4gb3V0OlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0cmV0dXJuIG5iX3BrdHM7XFxuK1xcdHJldHVybiBiYXRjaC50eF9kZXNjcztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxuIFxcbkBAIC03MzcsNiArODg0LDE5IEBAIHN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTMyIGlkeDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcXG4rXFx0aWR4ID0geHNrcV9nZXRfcHJvZChwb29sLVxcdTAwM2VjcSk7XFxuK1xcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXFx1MDAzZWNxLCBpZHgsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbitcXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cXHUwMDNlY3EsIDEpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxcbiB7XFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2cG9vbC1cXHUwMDNlY3EtXFx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xcbkBAIC03OTQsOCArOTU0LDExIEBAIHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0eGRwX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcyArPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuLVxcdHhza19jb25zdW1lX3NrYihza2IpO1xcbitcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cXHUwMDNlc2spO1xcbitcXG4rXFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzICs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcXG4rXFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0eHMtXFx1MDAzZXNrYiA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXFxuQEAgLTg3Nyw3ICsxMDQwLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiBcXG4gXFx0XFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxcbi1cXHRcXHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxcbitcXHRcXHQgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxcbiBcXHRcXHQgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHNcXG4gXFx0XFx0ICovXFxuIFxcdFxcdHhza19hZGRyLVxcdTAwM2VhZGRyc1t4c2tfYWRkci1cXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXFx1MDAzZWFkZHI7XFxuQEAgLTk2OSw2ICsxMTMyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuIFxcdFxcdFxcdH1cXG4gXFxuK1xcdFxcdFxcdHhza19hZGRyLVxcdTAwM2VhZGRyc1t4c2tfYWRkci1cXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXFx1MDAzZWFkZHI7XFxuK1xcbiBcXHRcXHRcXHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcXHUwMDI2XFx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRU9WRVJGTE9XO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbkBAIC05ODYsOCArMTE1MSw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiBcXG4gXFx0XFx0XFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcXG4gXFx0XFx0XFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXFx1MDAyNnhzLVxcdTAwM2Vzay5za193bWVtX2FsbG9jKTtcXG4tXFxuLVxcdFxcdFxcdHhza19hZGRyLVxcdTAwM2VhZGRyc1t4c2tfYWRkci1cXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXFx1MDAzZWFkZHI7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMTAyNSwxMyArMTE4OCwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xcbi1cXHRib29sIHNlbnRfZnJhbWUgPSBmYWxzZTtcXG4gXFx0c3RydWN0IHhkcF9kZXNjIGRlc2M7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHUzMiBjYWNoZWRfY29ucztcXG4gXFx0dTMyIG1heF9iYXRjaDtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbitcXHRjYWNoZWRfY29ucyA9IHhzLVxcdTAwM2V0eC1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuIFxcbiBcXHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cXG4gXFx0aWYgKHVubGlrZWx5KCF4c2tfaXNfYm91bmQoeHMpKSkge1xcbkBAIC0xMDYwLDExICsxMjI0LDIxIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4rXFx0XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX3NpbmdsZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIFxcdTAwMjZkZXNjKTtcXG4rXFx0XFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzKys7XFxuK1xcdFxcdFxcdHhza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcXHUwMDI2ZGVzYyk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxuIFxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcbiBcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHNrYik7XFxuIFxcdFxcdFxcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGlmICh4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKSlcXG4rXFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC0xMDkzLDE4ICsxMjY3LDMzIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNlbnRfZnJhbWUgPSB0cnVlO1xcbiBcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0Ym9vbCBkcmFpbiA9IHhzLVxcdTAwM2Vza2IgfHwgeHMtXFx1MDAzZWRyYWluX2NvbnQgfHwgeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYyk7XFxuK1xcbitcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHhzLVxcdTAwM2V0eC1cXHUwMDNlaW52YWxpZF9kZXNjcy0tO1xcbitcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZXNrYilcXG4rXFx0XFx0XFx0XFx0eHNrX2Ryb3Bfc2tiKHhzLVxcdTAwM2Vza2IpO1xcbitcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IGRyYWluO1xcbitcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKHhzLVxcdTAwM2Vza2IpXFxuIFxcdFxcdFxcdHhza19kcm9wX3NrYih4cy1cXHUwMDNlc2tiKTtcXG4rXFxuK1xcdFxcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBcXHUwMDI2ZGVzYyk7XFxuK1xcbiBcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbitcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuLVxcdGlmIChzZW50X2ZyYW1lKVxcbitcXHRpZiAoeHMtXFx1MDAzZXR4LVxcdTAwM2VjYWNoZWRfY29ucyAhPSBjYWNoZWRfY29ucylcXG4gXFx0XFx0X194c2tfdHhfcmVsZWFzZSh4cyk7XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuQEAgLTE0ODMsNyArMTY3Miw4IEBAIHN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyXFxuIFxcdFxcdFxcdCAqIGFuZC9vciBkZXZpY2UuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHR4cy1cXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW1lbV94cy1cXHUwMDNldW1lbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuIFxcdFxcdFxcdGlmICgheHMtXFx1MDAzZXBvb2wpIHtcXG4gXFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0XFx0c29ja2ZkX3B1dChzb2NrKTtcXG5AQCAtMTUxNSw3ICsxNzA1LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0XFx0XFx0ICogdXRpbGl6ZXNcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmICh4cy1cXHUwMDNldHggXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2Vwb29sLVxcdTAwM2V0eF9kZXNjcykge1xcbi1cXHRcXHRcXHRcXHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cXHUwMDNlcG9vbCwgeHMpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSB4cF9hbGxvY190eF9kZXNjcyh4cy1cXHUwMDNlcG9vbCwgeHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGRldi1cXHUwMDNleGRwX3pjX21heF9zZWdzKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRcXHRcXHR4cF9wdXRfcG9vbCh4cy1cXHUwMDNlcG9vbCk7XFxuIFxcdFxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vwb29sID0gTlVMTDtcXG5AQCAtMTUzMyw3ICsxNzI0LDkgQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqL1xcbi1cXHRcXHR4cy1cXHUwMDNlcG9vbCA9IHhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oeHMsIHhzLVxcdTAwM2V1bWVtKTtcXG4rXFx0XFx0eHMtXFx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cXHUwMDNldW1lbSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XFxuK1xcbiBcXHRcXHRpZiAoIXhzLVxcdTAwM2Vwb29sKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2tfYnVmZl9wb29sLmMgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xcbisrKyBiL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXFxuQEAgLTQyLDE3ICs0MiwyMiBAQCB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuIFxcdGt2ZnJlZShwb29sKTtcXG4gfVxcbiBcXG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuK1xcdFxcdCAgICAgIHUzMiBtYXhfc2VncylcXG4ge1xcbi1cXHRwb29sLVxcdTAwM2V0eF9kZXNjcyA9IGt2emFsbG9jX29ianMoKnBvb2wtXFx1MDAzZXR4X2Rlc2NzLCB4cy1cXHUwMDNldHgtXFx1MDAzZW5lbnRyaWVzKTtcXG4rXFx0dTMyIG5lbnRyaWVzID0gbWF4KHhzLVxcdTAwM2V0eC1cXHUwMDNlbmVudHJpZXMsIG1heF9zZWdzKTtcXG4rXFxuK1xcdHBvb2wtXFx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cXHUwMDNldHhfZGVzY3MsIG5lbnRyaWVzKTtcXG4gXFx0aWYgKCFwb29sLVxcdTAwM2V0eF9kZXNjcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRwb29sLVxcdTAwM2V0eF9kZXNjc19uZW50cmllcyA9IG5lbnRyaWVzO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RydWN0IHhza19idWZmX3Bvb2wgKnhwX2NyZWF0ZV9hbmRfYXNzaWduX3VtZW0oc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhkcF91bWVtICp1bWVtKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHUzMiBtYXhfc2VncylcXG4ge1xcbiBcXHRib29sIHVuYWxpZ25lZCA9IHVtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWERQX1VNRU1fVU5BTElHTkVEX0NIVU5LX0ZMQUc7XFxuIFxcdHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sO1xcbkBAIC02OSw3ICs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aWYgKHhzLVxcdTAwM2V0eClcXG4tXFx0XFx0aWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzKSlcXG4rXFx0XFx0aWYgKHhwX2FsbG9jX3R4X2Rlc2NzKHBvb2wsIHhzLCBtYXhfc2VncykpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0cG9vbC1cXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVxcdTAwM2VjaHVua19zaXplIC0gMSk7XFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX3F1ZXVlLmggYi9uZXQveGRwL3hza19xdWV1ZS5oXFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLjFiYzQyYzg5MDJmNGJhIDEwMDY0NFxcbi0tLSBhL25ldC94ZHAveHNrX3F1ZXVlLmhcXG4rKysgYi9uZXQveGRwL3hza19xdWV1ZS5oXFxuQEAgLTU4LDYgKzU4LDE3IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XFxuIFxcdHUzMiB2YWxpZDtcXG4gfTtcXG4gXFxuK3N0cnVjdCB4c2tfdHhfYmF0Y2gge1xcbitcXHR1MzIgdHhfZGVzY3M7XFxuK1xcdHUzMiByZWNsYWltX2Rlc2NzO1xcbitcXHRib29sIGJ1ZGdldF9saW1pdGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSB1MzIgeHNrX3R4X2JhdGNoX2NxX2Rlc2NzKGNvbnN0IHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxcbit7XFxuK1xcdHJldHVybiBiYXRjaC1cXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cXHUwMDNlcmVjbGFpbV9kZXNjcztcXG4rfVxcbitcXG4gLyogVGhlIHN0cnVjdHVyZSBvZiB0aGUgc2hhcmVkIHN0YXRlIG9mIHRoZSByaW5ncyBhcmUgYSBzaW1wbGVcXG4gICogY2lyY3VsYXIgYnVmZmVyLCBhcyBvdXRsaW5lZCBpblxcbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxcbkBAIC0yNjMsMTcgKzI3NCwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfZGVzYyhzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0cGFyc2VkLVxcdTAwM2VtYiA9IHhwX21iX2Rlc2MoZGVzYyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmVcXG4tdTMyIHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19xdWV1ZSAqcSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLVxcdFxcdFxcdCAgICAgIHUzMiBtYXgpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhza190eF9iYXRjaFxcbit4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbitcXHRcXHRcXHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXFxuIHtcXG4tXFx0dTMyIGNhY2hlZF9jb25zID0gcS1cXHUwMDNlY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xcbi1cXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cXHUwMDNldHhfZGVzY3M7XFxuLVxcdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcXG4rXFx0Ym9vbCBkcmFpbiA9IFJFQURfT05DRSh4cy1cXHUwMDNlZHJhaW5fY29udCk7XFxuK1xcdHUzMiBjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XFxuK1xcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcXG4rXFx0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVxcdTAwM2V0eDtcXG4rXFx0dTMyIG5yX2ZyYWdzID0gMDtcXG4rXFxuK1xcdGNhY2hlZF9jb25zID0gcS1cXHUwMDNlY2FjaGVkX2NvbnM7XFxuIFxcbi1cXHQvKiB0cmFjayBmaXJzdCBlbnRyeSwgaWYgc3R1bWJsZSB1cG9uICphbnkqIGludmFsaWQgZGVzY3JpcHRvciwgcmV3aW5kXFxuLVxcdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3NpbmdcXG4tXFx0ICovXFxuIFxcdHdoaWxlIChjYWNoZWRfY29ucyAhPSBxLVxcdTAwM2VjYWNoZWRfcHJvZCBcXHUwMDI2XFx1MDAyNiBuYl9lbnRyaWVzIFxcdTAwM2MgbWF4KSB7XFxuIFxcdFxcdHN0cnVjdCB4ZHBfcnh0eF9yaW5nICpyaW5nID0gKHN0cnVjdCB4ZHBfcnh0eF9yaW5nICopcS1cXHUwMDNlcmluZztcXG4gXFx0XFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFxcdTAwMjYgcS1cXHUwMDNlcmluZ19tYXNrO1xcbkBAIC0yODMsMjUgKzI5NSw0MiBAQCB1MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4gXFx0XFx0Y2FjaGVkX2NvbnMrKztcXG4gXFx0XFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcXHUwMDI2ZGVzY3NbbmJfZW50cmllc10sIFxcdTAwMjZwYXJzZWQpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBhcnNlZC52YWxpZCkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRkcmFpbiA9IHRydWU7XFxuK1xcbitcXHRcXHRucl9mcmFncysrO1xcbitcXHRcXHRuYl9lbnRyaWVzKys7XFxuIFxcbiBcXHRcXHRpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7XFxuLVxcdFxcdFxcdHRvdGFsX2Rlc2NzICs9IChucl9mcmFncyArIDEpO1xcbi1cXHRcXHRcXHRucl9mcmFncyA9IDA7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdG5yX2ZyYWdzKys7XFxuLVxcdFxcdFxcdGlmIChucl9mcmFncyA9PSBwb29sLVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpIHtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KGRyYWluKSkge1xcbitcXHRcXHRcXHRcXHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UoeHMtXFx1MDAzZWRyYWluX2NvbnQsIGZhbHNlKTtcXG4gXFx0XFx0XFx0XFx0bnJfZnJhZ3MgPSAwO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0YmF0Y2gudHhfZGVzY3MgKz0gbnJfZnJhZ3M7XFxuK1xcdFxcdFxcdG5yX2ZyYWdzID0gMDtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChucl9mcmFncyA9PSBwb29sLVxcdTAwM2V4ZHBfemNfbWF4X3NlZ3MpXFxuK1xcdFxcdFxcdGRyYWluID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG5yX2ZyYWdzKSB7XFxuK1xcdFxcdGlmIChkcmFpbikge1xcbitcXHRcXHRcXHRiYXRjaC5yZWNsYWltX2Rlc2NzID0gbnJfZnJhZ3M7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoeHMtXFx1MDAzZWRyYWluX2NvbnQsIHRydWUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpZiAobmJfZW50cmllcyA9PSBtYXgpXFxuK1xcdFxcdFxcdFxcdGJhdGNoLmJ1ZGdldF9saW1pdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y2FjaGVkX2NvbnMgLT0gbnJfZnJhZ3M7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bmJfZW50cmllcysrO1xcbiBcXHR9XFxuIFxcbi1cXHRjYWNoZWRfY29ucyAtPSBucl9mcmFncztcXG4gXFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cXG4gXFx0eHNrcV9jb25zX3JlbGVhc2VfbihxLCBjYWNoZWRfY29ucyAtIHEtXFx1MDAzZWNhY2hlZF9jb25zKTtcXG4tXFx0cmV0dXJuIHRvdGFsX2Rlc2NzO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuIH1cXG4gXFxuIC8qIEZ1bmN0aW9ucyBmb3IgY29uc3VtZXJzICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuaW5kZXggNDc3YWVkYmIwMWJhZDguLjQ1NDkzNThjYzhjMjFkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFNlYXJjaCBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGluIHZlcmJhdGltIG1vZGUgKi9cXG4tXFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cXHUwMDNldmFsaWQpXFxuK1xcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpKVxcbiBcXHRcXHRyZXR1cm4gbmJfZnJhZ3M7XFxuIFxcbiBcXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVxcdTAwM2VjdXJyZW50X3BrdF9uYjtcXG4gXFx0cGt0Kys7XFxuIFxcdHdoaWxlIChuZXh0X2ZyYWcrKyBcXHUwMDNjIHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMpIHtcXG4gXFx0XFx0bmJfZnJhZ3MrKztcXG4tXFx0XFx0aWYgKCFwa3RfY29udGludWVzKHBrdC1cXHUwMDNlb3B0aW9ucykgfHwgIXBrdC1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXFx1MDAzZW9wdGlvbnMpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cGt0Kys7XFxuIFxcdH1cXG5AQCAtNjY1LDExICs2NjUsMTEgQEAgc3RhdGljIHN0cnVjdCBwa3Rfc3RyZWFtICpfX3BrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHNcXG4gXFx0XFx0XFx0aWYgKCFmcmFtZS1cXHUwMDNldmFsaWQgfHwgIXBrdF9jb250aW51ZXMoZnJhbWUtXFx1MDAzZW9wdGlvbnMpKVxcbiBcXHRcXHRcXHRcXHRwYXlsb2FkKys7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmIChmcmFtZS1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdFxcdGlmIChmcmFtZS1cXHUwMDNldmFsaWQpIHtcXG4gXFx0XFx0XFx0XFx0bGVuICs9IGZyYW1lLVxcdTAwM2VsZW47XFxuLVxcdFxcdFxcdGlmIChmcmFtZS1cXHUwMDNldmFsaWQgXFx1MDAyNlxcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cXHUwMDNlb3B0aW9ucykpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4rXFx0XFx0XFx0XFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXFx1MDAzZW9wdGlvbnMpKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRwa3QtXFx1MDAzZXBrdF9uYiA9IHBrdF9uYjtcXG4gXFx0XFx0XFx0cGt0LVxcdTAwM2VsZW4gPSBsZW47XFxuIFxcdFxcdFxcdHBrdC1cXHUwMDNldmFsaWQgPSBmcmFtZS1cXHUwMDNldmFsaWQ7XFxuQEAgLTEyNTAsMTAgKzEyNTAsOSBAQCBzdGF0aWMgaW50IF9fc2VuZF9wa3RzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAocGt0IFxcdTAwMjZcXHUwMDI2IHBrdC1cXHUwMDNldmFsaWQpIHtcXG4rXFx0XFx0aWYgKHBrdCBcXHUwMDI2XFx1MDAyNiBwa3QtXFx1MDAzZXZhbGlkKVxcbiBcXHRcXHRcXHR2YWxpZF9wa3RzKys7XFxuLVxcdFxcdFxcdHZhbGlkX2ZyYWdzICs9IG5iX2ZyYWdzO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHZhbGlkX2ZyYWdzICs9IG5iX2ZyYWdzO1xcbiBcXHR9XFxuIFxcbiBcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnBhY2luZ19tdXRleCk7XFxuQEAgLTIwOTksMTMgKzIwOTgsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdFxcdHswLCAwLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbi1cXHRcXHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcXG4rXFx0XFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxcbitcXHRcXHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXFxuIFxcdFxcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cXG4gXFx0XFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXFxuK1xcdFxcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcXG4gXFx0XFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXFxuIFxcdFxcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxcbiBcXHRcXHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcXG5AQCAtMjExNyw4ICsyMTE5LDggQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcbiBcXHRpZiAodW1lbS1cXHUwMDNldW5hbGlnbmVkX21vZGUpIHtcXG4gXFx0XFx0LyogQ3Jvc3NpbmcgYSBjaHVuayBib3VuZGFyeSBhbGxvd2VkICovXFxuLVxcdFxcdHBrdHNbMTJdLnZhbGlkID0gdHJ1ZTtcXG4tXFx0XFx0cGt0c1sxM10udmFsaWQgPSB0cnVlO1xcbitcXHRcXHRwa3RzWzE1XS52YWxpZCA9IHRydWU7XFxuK1xcdFxcdHBrdHNbMTZdLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0dGVzdC1cXHUwMDNlbXR1ID0gTUFYX0VUSF9KVU1CT19TSVpFO1xcbkBAIC0yMjcwLDcgKzIyNzIsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRcXHRtYXhfZnJhZ3MgKz0gMTtcXG4gXFx0fVxcbiBcXG4tXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMiwgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4rXFx0cGt0cyA9IGNhbGxvYygyICogbWF4X2ZyYWdzICsgMywgc2l6ZW9mKHN0cnVjdCBwa3QpKTtcXG4gXFx0aWYgKCFwa3RzKVxcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXG5AQCAtMjI4OCwyNCArMjI5MCwzMCBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHR9XFxuIFxcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcXG4gXFxuLVxcdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XFxuLVxcdCAqIGNvbnRpbnVlcyBvbiB0aGUgbGFzdCBmcmFnXFxuLVxcdCAqL1xcbi1cXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDE7IGkrKykge1xcbitcXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xcbitcXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFxcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xcbiBcXHRcXHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4gXFx0XFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcXG4tXFx0XFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcXG4gXFx0fVxcbitcXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS5vcHRpb25zID0gMDtcXG4gXFxuIFxcdC8qIFZhbGlkIHBhY2tldCBmb3Igc3luY2ggKi9cXG4tXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xcbi1cXHRwa3RzWzIgKiBtYXhfZnJhZ3MgKyAxXS52YWxpZCA9IHRydWU7XFxuK1xcdHBrdHNbMiAqIG1heF9mcmFncyArIDJdLmxlbiA9IE1JTl9QS1RfU0laRTtcXG4rXFx0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xcbiBcXG4tXFx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xcbitcXHRpZiAocGt0X3N0cmVhbV9nZW5lcmF0ZV9jdXN0b20odGVzdCwgcGt0cywgMiAqIG1heF9mcmFncyArIDMpKSB7XFxuIFxcdFxcdGZyZWUocGt0cyk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIFRoZSBnZW5lcmF0ZWQgVHggc3RyZWFtIG11c3Qga2VlcCB0aGUgdG9vLWJpZyBwYWNrZXQgdmFsaWQgc28gdGhhdFxcbitcXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XFxuK1xcdCAqIHN0cmVhbSwgaG93ZXZlciwgbXVzdCBub3QgZXhwZWN0IHRoaXMgcGFja2V0IG9uIHRoZSB3aXJlLlxcbitcXHQgKi9cXG4rXFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzay1cXHUwMDNlcGt0X3N0cmVhbS1cXHUwMDNlcGt0c1syXS52YWxpZCA9IGZhbHNlO1xcbitcXHR0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrLVxcdTAwM2Vwa3Rfc3RyZWFtLVxcdTAwM2VuYl92YWxpZF9lbnRyaWVzLS07XFxuK1xcbiBcXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XFxuIFxcdGZyZWUocGt0cyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjI2LjAzMzY2NjcwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM0NjIzOTk2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hcIixcbiAgICBcInhza190eF9jb21wbGV0ZWRcIixcbiAgICBcIl9feHNrX2dlbmVyaWNfeG1pdFwiLFxuICAgIFwieHNrX2J1aWxkX3NrYlwiLFxuICAgIFwieHNrX2J1aWxkX3NrYl96ZXJvY29weVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBRl9YRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgVHggcGF0aC4gSXQgaW50cm9kdWNlcyBiYXRjaGluZyBhbmQgcmVjbGFpbSBsb2dpYyBmb3IgZGVzY3JpcHRvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgQUZfWERQIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBBRl9YRFAgc29ja2V0IG9wZXJhdGlvbnMgKGUuZy4sIHVzaW5nIGdlbmVyaWMgWERQIG1vZGUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjMGQ4NTg0NTczMzkwZjdhZDU5ZGZhNWZlNTgwZmJkOTZjZTVjNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAxNDoyMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RcbmluZGV4IDUwZDkyMDg0YTQ5YzZhLi5jYzNmMGQxNmIyOGZiNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdFxuQEAgLTQzLDEyICs0MywxMyBAQCBVTUVNIGFsc28gaGFzIHR3byByaW5nczogdGhlIEZJTEwgcmluZyBhbmQgdGhlIENPTVBMRVRJT04gcmluZy4gVGhlXG4gRklMTCByaW5nIGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbmQgZG93biBhZGRyIGZvciB0aGUga2VybmVsXG4gdG8gZmlsbCBpbiB3aXRoIFJYIHBhY2tldCBkYXRhLiBSZWZlcmVuY2VzIHRvIHRoZXNlIGZyYW1lcyB3aWxsIHRoZW5cbiBhcHBlYXIgaW4gdGhlIFJYIHJpbmcgb25jZSBlYWNoIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZC4gVGhlXG4tQ09NUExFVElPTiByaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgY29udGFpbnMgZnJhbWUgYWRkciB0aGF0IHRoZVxuLWtlcm5lbCBoYXMgdHJhbnNtaXR0ZWQgY29tcGxldGVseSBhbmQgY2FuIG5vdyBiZSB1c2VkIGFnYWluIGJ5IHVzZXJcbi1zcGFjZSwgZm9yIGVpdGhlciBUWCBvciBSWC4gVGh1cywgdGhlIGZyYW1lIGFkZHJzIGFwcGVhcmluZyBpbiB0aGVcbi1DT01QTEVUSU9OIHJpbmcgYXJlIGFkZHJzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHRyYW5zbWl0dGVkIHVzaW5nIHRoZVxuLVRYIHJpbmcuIEluIHN1bW1hcnksIHRoZSBSWCBhbmQgRklMTCByaW5ncyBhcmUgdXNlZCBmb3IgdGhlIFJYIHBhdGhcbi1hbmQgdGhlIFRYIGFuZCBDT01QTEVUSU9OIHJpbmdzIGFyZSB1c2VkIGZvciB0aGUgVFggcGF0aC5cbitDT01QTEVUSU9OIHJpbmcsIG9uIHRoZSBvdGhlciBoYW5kLCBjb250YWlucyBmcmFtZSBhZGRyZXNzZXMgZnJvbSBUeFxuK2Rlc2NyaXB0b3JzIHRoYXQgdGhlIGtlcm5lbCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhbmQgdGhhdCBjYW4gbm93IGJlXG4rdXNlZCBhZ2FpbiBieSB1c2VyIHNwYWNlLCBmb3IgZWl0aGVyIFR4IG9yIFJ4LiBUaGlzIGluY2x1ZGVzIGZyYW1lcyB3aG9zZVxuK3RyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkIGFzIHdlbGwgYXMgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeFxuK2Rlc2NyaXB0b3JzIHJlamVjdGVkIGJ5IHRoZSBrZXJuZWwuIEEgY29tcGxldGlvbiB0aGVyZWZvcmUgcmV0dXJuc1xuK293bmVyc2hpcCBvZiBhIGZyYW1lIHRvIHVzZXIgc3BhY2UsIGJ1dCBkb2VzIG5vdCBieSBpdHNlbGYgZ3VhcmFudGVlIHRoYXRcbit0aGUgcGFja2V0IHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQuXG4gXG4gVGhlIHNvY2tldCBpcyB0aGVuIGZpbmFsbHkgYm91bmQgd2l0aCBhIGJpbmQoKSBjYWxsIHRvIGEgZGV2aWNlIGFuZCBhXG4gc3BlY2lmaWMgcXVldWUgaWQgb24gdGhhdCBkZXZpY2UsIGFuZCBpdCBpcyBub3QgdW50aWwgYmluZCBpc1xuQEAgLTE2OSwxNCArMTcwLDE1IEBAIGNodW5rcyBtb2RlLCB0aGVuIHRoZSBpbmNvbWluZyBhZGRyIHdpbGwgYmUgbGVmdCB1bnRvdWNoZWQuXG4gVU1FTSBDb21wbGV0aW9uIFJpbmdcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuLVRoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbVxuK1RoZSBDT01QTEVUSU9OIFJpbmcgaXMgdXNlZCB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YgVU1FTSBmcmFtZXMgZnJvbVxuIGtlcm5lbC1zcGFjZSB0byB1c2VyLXNwYWNlLiBKdXN0IGxpa2UgdGhlIEZJTEwgcmluZywgVU1FTSBpbmRpY2VzIGFyZVxuLXVzZWQuXG4tXG4tRnJhbWVzIHBhc3NlZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlci1zcGFjZSBhcmUgZnJhbWVzIHRoYXQgaGFzIGJlZW5cbi1zZW50IChUWCByaW5nKSBhbmQgY2FuIGJlIHVzZWQgYnkgdXNlci1zcGFjZSBhZ2Fpbi5cbi1cbi1UaGUgdXNlciBhcHBsaWNhdGlvbiBjb25zdW1lcyBVTUVNIGFkZHJzIGZyb20gdGhpcyByaW5nLlxuK3VzZWQuIEZyYW1lcyBwYXNzZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXItc3BhY2UgYXJlIGZyYW1lcyByZWZlcmVuY2VkXG4rYnkgVHggZGVzY3JpcHRvcnMgdGhhdCB0aGUga2VybmVsIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGFuZCBjYW4gYmVcbit1c2VkIGJ5IHVzZXItc3BhY2UgYWdhaW4uIFRoaXMgaW5jbHVkZXMgYm90aCBmcmFtZXMgd2hvc2UgdHJhbnNtaXNzaW9uXG4raGFzIGNvbXBsZXRlZCBhbmQgZnJhbWVzIHJlZmVyZW5jZWQgYnkgaW52YWxpZCBUeCBkZXNjcmlwdG9ycyB0aGF0IHdlcmVcbityZWplY3RlZCBhbmQgcmVjbGFpbWVkIGJ5IHRoZSBrZXJuZWwuIEEgY29tcGxldGlvbiBlbnRyeSBkb2VzIG5vdFxuK2d1YXJhbnRlZSBzdWNjZXNzZnVsIHBhY2tldCB0cmFuc21pc3Npb24uIFRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbnN1bWVzXG4rVU1FTSBhZGRycyBmcm9tIHRoaXMgcmluZy5cbiBcbiBcbiBSWCBSaW5nXG5AQCAtNTA0LDIxICs1MDYsMjUgQEAgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGludmFsaWQgZGVzY3JpcHRvci5cbiBUaGVzZSBhcmUgdGhlIHNlbWFudGljcyBmb3IgcHJvZHVjaW5nIHBhY2tldHMgb250byBBRl9YRFAgVHggcmluZ1xuIGNvbnNpc3Rpbmcgb2YgbXVsdGlwbGUgZnJhbWVzOlxuIFxuLSogV2hlbiBhbiBpbnZhbGlkIGRlc2NyaXB0b3IgaXMgZm91bmQsIGFsbCB0aGUgb3RoZXJcbi0gIGRlc2NyaXB0b3JzL2ZyYW1lcyBvZiB0aGlzIHBhY2tldCBhcmUgbWFya2VkIGFzIGludmFsaWQgYW5kIG5vdFxuLSAgY29tcGxldGVkLiBUaGUgbmV4dCBkZXNjcmlwdG9yIGlzIHRyZWF0ZWQgYXMgdGhlIHN0YXJ0IG9mIGEgbmV3XG4tICBwYWNrZXQsIGV2ZW4gaWYgdGhpcyB3YXMgbm90IHRoZSBpbnRlbnQgKGJlY2F1c2Ugd2UgY2Fubm90IGd1ZXNzXG4tICB0aGUgaW50ZW50KS4gQXMgYmVmb3JlLCBpZiB5b3VyIHByb2dyYW0gaXMgcHJvZHVjaW5nIGludmFsaWRcbi0gIGRlc2NyaXB0b3JzIHlvdSBoYXZlIGEgYnVnIHRoYXQgbXVzdCBiZSBmaXhlZC5cbisqIFdoZW4gYW4gaW52YWxpZCBkZXNjcmlwdG9yIGlzIGZvdW5kLCB0aGUgY29tcGxldGUgcGFja2V0IGlzIHRyZWF0ZWQgYXNcbisgIGludmFsaWQuIFRoZSBrZXJuZWwgY29uc3VtZXMgZGVzY3JpcHRvcnMgdGhyb3VnaCB0aGUgZGVzY3JpcHRvciBtYXJraW5nXG4rICB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgYW5kIHJldHVybnMgYWxsIHRoZWlyIGZyYW1lIGFkZHJlc3NlcyB0aHJvdWdoIHRoZVxuKyAgQ09NUExFVElPTiByaW5nLiBBIHN0YW5kYWxvbmUgaW52YWxpZCBkZXNjcmlwdG9yIGlzIHRyZWF0ZWQgYXMgYVxuKyAgb25lLWRlc2NyaXB0b3IgaW52YWxpZCBwYWNrZXQuIFRoZSBkZXNjcmlwdG9yIGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoZVxuKyAgaW52YWxpZCBwYWNrZXQgaXMgdHJlYXRlZCBhcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFja2V0LiBBcyBiZWZvcmUsIGlmXG4rICB5b3VyIHByb2dyYW0gaXMgcHJvZHVjaW5nIGludmFsaWQgZGVzY3JpcHRvcnMgeW91IGhhdmUgYSBidWcgdGhhdCBtdXN0XG4rICBiZSBmaXhlZC4gUmVqZWN0ZWQgZGVzY3JpcHRvcnMgYXJlIHJlcG9ydGVkIGluIHRoZSBgYHR4X2ludmFsaWRfZGVzY3NgYFxuKyAgc3RhdGlzdGljLlxuIFxuICogWmVybyBsZW5ndGggZGVzY3JpcHRvcnMgYXJlIHRyZWF0ZWQgYXMgaW52YWxpZCBkZXNjcmlwdG9ycy5cbiBcbiAqIEZvciBjb3B5IG1vZGUsIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBudW1iZXIgb2YgZnJhbWVzIGluIGEgcGFja2V0IGlzXG4tICBlcXVhbCB0byBDT05GSUdfTUFYX1NLQl9GUkFHUyArIDEuIElmIGl0IGlzIGV4Y2VlZGVkLCBhbGxcbi0gIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIHNvIGZhciBhcmUgZHJvcHBlZCBhbmQgdHJlYXRlZCBhc1xuLSAgaW52YWxpZC4gVG8gcHJvZHVjZSBhbiBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgd29yayBvbiBhbnkgc3lzdGVtXG4tICByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHNldHRpbmcsIGxpbWl0IHRoZSBudW1iZXIgb2YgZnJhZ3MgdG8gMTgsXG4tICBhcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgY29uZmlnIGlzIDE3LlxuKyAgZXF1YWwgdG8gQ09ORklHX01BWF9TS0JfRlJBR1MgKyAxLiBJZiBpdCBpcyBleGNlZWRlZCwgYWxsIGRlc2NyaXB0b3JzXG4rICB0aHJvdWdoIHRoZSBlbmQgb2YgdGhlIG92ZXJzaXplZCBwYWNrZXQgYXJlIGNvbnN1bWVkLCB0cmVhdGVkIGFzIGludmFsaWQsXG4rICBhbmQgdGhlaXIgZnJhbWUgYWRkcmVzc2VzIGFyZSByZXR1cm5lZCB0aHJvdWdoIHRoZSBDT01QTEVUSU9OIHJpbmcuIFRvXG4rICBwcm9kdWNlIGFuIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCB3b3JrIG9uIGFueSBzeXN0ZW0gcmVnYXJkbGVzcyBvZiB0aGlzXG4rICBjb25maWcgc2V0dGluZywgbGltaXQgdGhlIG51bWJlciBvZiBmcmFncyB0byAxOCwgYXMgdGhlIG1pbmltdW0gdmFsdWUgb2ZcbisgIHRoZSBjb25maWcgaXMgMTcuXG4gXG4gKiBGb3IgemVyby1jb3B5IG1vZGUsIHRoZSBsaW1pdCBpcyB1cCB0byB3aGF0IHRoZSBOSUMgSFdcbiAgIHN1cHBvcnRzLiBVc3VhbGx5IGF0IGxlYXN0IGZpdmUgb24gdGhlIE5JQ3Mgd2UgaGF2ZSBjaGVja2VkLiBXZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hkcF9zb2NrLmggYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5pbmRleCBlYmFjNjBhM2Q4YTE3Yi4uOGI1MTg3NmVmYmVkMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZHBfc29jay5oXG4rKysgYi9pbmNsdWRlL25ldC94ZHBfc29jay5oXG5AQCAtODAsNiArODAsNyBAQCBzdHJ1Y3QgeGRwX3NvY2sge1xuIFx0ICogY2FsbCBvZiBfX3hza19nZW5lcmljX3htaXQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgZHJhaW5fY29udDtcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbWFwX2xpc3Q7XG4gXHQvKiBQcm90ZWN0cyBtYXBfbGlzdCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaCBiL2luY2x1ZGUvbmV0L3hza19idWZmX3Bvb2wuaFxuaW5kZXggY2NiM2IzNTAwMDFmMjQuLjJiYjFkMTIyYjFiYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveHNrX2J1ZmZfcG9vbC5oXG4rKysgYi9pbmNsdWRlL25ldC94c2tfYnVmZl9wb29sLmhcbkBAIC03OCw2ICs3OCw5IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sIHtcbiBcdHUzMiBjaHVua19zaXplO1xuIFx0dTMyIGNodW5rX3NoaWZ0O1xuIFx0dTMyIGZyYW1lX2xlbjtcbitcdHUzMiB0eF9kZXNjc19uZW50cmllcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0dTMyIHR4X3pjX3BlbmRpbmdfZGVzY3M7XG4gXHR1MzIgeGRwX3pjX21heF9zZWdzO1xuIFx0dTggdHhfbWV0YWRhdGFfbGVuOyAvKiBpbmhlcml0ZWQgZnJvbSB1bWVtICovXG4gXHR1OCBjYWNoZWRfbmVlZF93YWtldXA7XG5AQCAtMTAyLDEyICsxMDUsMTQgQEAgc3RydWN0IHhza19idWZmX3Bvb2wge1xuIFxuIC8qIEFGX1hEUCBjb3JlLiAqL1xuIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tXHRcdFx0XHRcdFx0c3RydWN0IHhkcF91bWVtICp1bWVtKTtcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4rXHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKTtcbiBpbnQgeHBfYXNzaWduX2RldihzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICB1MTYgcXVldWVfaWQsIHUxNiBmbGFncyk7XG4gaW50IHhwX2Fzc2lnbl9kZXZfc2hhcmVkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnVtZW1feHMsXG4gXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZCk7XG4taW50IHhwX2FsbG9jX3R4X2Rlc2NzKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzKTtcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4rXHRcdCAgICAgIHUzMiBtYXhfc2Vncyk7XG4gdm9pZCB4cF9kZXN0cm95KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiB2b2lkIHhwX2dldF9wb29sKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbiBib29sIHhwX3B1dF9wb29sKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggYjk3MGYzMGVhOWI5ZDguLmY5MDZkNTFiNjY5OTA0IDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTQ5OSw2ICs0OTksMjMgQEAgdm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbiBcbiB2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxuIHtcbitcdHUzMiByZWNsYWltX2Rlc2NzID0gUkVBRF9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcyk7XG4rXG4rXHRpZiAodW5saWtlbHkocmVjbGFpbV9kZXNjcykpIHtcbitcdFx0dTMyIHBlbmRpbmdfZGVzY3MgPSBSRUFEX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzKTtcbitcbitcdFx0aWYgKG5iX2VudHJpZXMgXHUwMDNjIHBlbmRpbmdfZGVzY3MpIHtcbitcdFx0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcyxcbitcdFx0XHRcdCAgIHBlbmRpbmdfZGVzY3MgLSBuYl9lbnRyaWVzKTtcbitcdFx0XHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdFdSSVRFX09OQ0UocG9vbC1cdTAwM2V0eF96Y19wZW5kaW5nX2Rlc2NzLCAwKTtcbitcdFx0bmJfZW50cmllcyArPSByZWNsYWltX2Rlc2NzO1xuK1x0XHRXUklURV9PTkNFKHBvb2wtXHUwMDNlcmVjbGFpbV9kZXNjcywgMCk7XG4rXHR9XG4rXG4gXHR4c2txX3Byb2Rfc3VibWl0X24ocG9vbC1cdTAwM2VjcSwgbmJfZW50cmllcyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5AQCAtNTc0LDI0ICs1OTEsMTU3IEBAIHN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyXG4gXHRyZXR1cm4gbmJfcGt0cztcbiB9XG4gXG4rc3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHRcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggKmJhdGNoKVxuK3tcbitcdHUzMiBuYl9kZXNjcyA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhiYXRjaCk7XG4rXHR1MzIgY3FfY2FjaGVkX3Byb2Q7XG4rXG4rXHRpZiAoIW5iX2Rlc2NzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjcV9jYWNoZWRfcHJvZCA9IHBvb2wtXHUwMDNlY3EtXHUwMDNlY2FjaGVkX3Byb2Q7XG4rXHR4c2txX3Byb2Rfd3JpdGVfYWRkcl9iYXRjaChwb29sLVx1MDAzZWNxLCBwb29sLVx1MDAzZXR4X2Rlc2NzLCBuYl9kZXNjcyk7XG4rXG4rXHRpZiAodW5saWtlbHkoYmF0Y2gtXHUwMDNlcmVjbGFpbV9kZXNjcykpIHtcbitcdFx0dTMyIGNxX3BlbmRpbmdfZGVzY3M7XG4rXG4rXHRcdC8qIENRIGlzIHBvc2l0aW9uYWwuIERlc2NyaXB0b3JzIGFscmVhZHkgd3JpdHRlbiBidXQgbm90XG4rXHRcdCAqIHN1Ym1pdHRlZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSBhbnkgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzXG4rXHRcdCAqIGFwcGVuZGVkIGJlbG93LlxuK1x0XHQgKi9cbitcdFx0Y3FfcGVuZGluZ19kZXNjcyA9IGNxX2NhY2hlZF9wcm9kIC0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbitcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXR4X3pjX3BlbmRpbmdfZGVzY3MsXG4rXHRcdFx0ICAgYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBjcV9wZW5kaW5nX2Rlc2NzKTtcbitcdFx0V1JJVEVfT05DRShwb29sLVx1MDAzZXJlY2xhaW1fZGVzY3MsIGJhdGNoLVx1MDAzZXJlY2xhaW1fZGVzY3MpO1xuK1x0XHRpZiAodW5saWtlbHkoIXBvb2wtXHUwMDNldHhfemNfcGVuZGluZ19kZXNjcykpXG4rXHRcdFx0eHNrX3R4X2NvbXBsZXRlZChwb29sLCAwKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbitfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cyxcbitcdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuK3tcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbitcdHUzMiBlbnRyaWVzO1xuK1xuK1x0ZW50cmllcyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBtYXhfZGVzY3MpO1xuK1x0aWYgKCFlbnRyaWVzKVxuK1x0XHRyZXR1cm4gYmF0Y2g7XG4rXG4rXHRiYXRjaCA9IHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2goeHMsIHBvb2wsIGRlc2NzLCBtYXhfZGVzY3MpO1xuK1x0aWYgKCF4c2tfdHhfYmF0Y2hfY3FfZGVzY3MoXHUwMDI2YmF0Y2gpKSB7XG4rXHRcdHhzLVx1MDAzZXR4LVx1MDAzZXF1ZXVlX2VtcHR5X2Rlc2NzKys7XG4rXHR9IGVsc2Uge1xuK1x0XHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbitcdFx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0fVxuK1x0cmV0dXJuIGJhdGNoO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxuK3hza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG4re1xuK1x0dTMyIGNxX2Rlc2NzX2JlZm9yZSwgY3FfZGVzY3NfYWZ0ZXI7XG4rXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIHN1bV9iYXRjaCA9IHt9O1xuK1x0Ym9vbCBidWRnZXRfZXhoYXVzdGVkO1xuK1x0dTMyIHBlcl9zb2NrZXRfYnVkZ2V0O1xuK1x0c3RydWN0IHhkcF9zb2NrICp4cztcbitcbitcdC8qIFRoZSBmYWlybmVzcyBxdW90YSBtdXN0IGFsbG93IG9uZSBtYXhpbXVtLXNpemVkIHZhbGlkIHBhY2tldC4gKi9cbitcdHBlcl9zb2NrZXRfYnVkZ2V0ID0gbWF4X3QodTMyLCBNQVhfUEVSX1NPQ0tFVF9CVURHRVQsXG4rXHRcdFx0XHQgIHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKTtcbitcbithZ2FpbjpcbitcdGJ1ZGdldF9leGhhdXN0ZWQgPSBmYWxzZTtcbitcdGNxX2Rlc2NzX2JlZm9yZSA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeHMsIFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHR4X2xpc3QpIHtcbitcdFx0dTMyIGJ1ZGdldCwgYnVkZ2V0X2xlZnQsIG9mZnNldCwgcmVtYWluaW5nLCB1c2VkO1xuK1x0XHRzdHJ1Y3QgeHNrX3R4X2JhdGNoIGN1cnJfYmF0Y2g7XG4rXG4rXHRcdC8qIE9uY2UgcmVjbGFpbS1vbmx5IGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBhcHBlbmRlZCB0byB0aGUgQ1FcbitcdFx0ICogYWRkcmVzcyBhcmVhLCBkbyBub3QgYXBwZW5kIGRyaXZlci12aXNpYmxlIFR4IGRlc2NyaXB0b3JzXG4rXHRcdCAqIGZyb20gYW5vdGhlciBzb2NrZXQgYWZ0ZXIgdGhlbS4geHNrX3R4X2NvbXBsZXRlZCgpIHJlbGllcyBvblxuK1x0XHQgKiBhbGwgZHJpdmVyLXZpc2libGUgZGVzY3JpcHRvcnMgcHJlY2VkaW5nIGFsbCByZWNsYWltLW9ubHlcbitcdFx0ICogZGVzY3JpcHRvcnMgaW4gQ1Egb3JkZXIuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGJlIGdlbnRsZSB3aGVuIHBsYXlpbmcgd2l0aCBwb29sLVx1MDAzZXR4X2Rlc2NzICovXG4rXHRcdG9mZnNldCA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoeHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50IFx1MDAzZT0gcGVyX3NvY2tldF9idWRnZXQpIHtcbitcdFx0XHRpZiAoeHNrcV9jb25zX25iX2VudHJpZXMoeHMtXHUwMDNldHgsIDEpKVxuK1x0XHRcdFx0YnVkZ2V0X2V4aGF1c3RlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0YnVkZ2V0X2xlZnQgPSBwZXJfc29ja2V0X2J1ZGdldCAtIHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudDtcbitcdFx0cmVtYWluaW5nID0gbWF4X2Rlc2NzIC0gb2Zmc2V0O1xuK1x0XHRidWRnZXQgPSBtaW4ocmVtYWluaW5nLCBidWRnZXRfbGVmdCk7XG4rXG4rXHRcdGN1cnJfYmF0Y2ggPSBfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHRcdCAgICAgIHBvb2wtXHUwMDNldHhfZGVzY3MgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0XHQgICAgICBidWRnZXQpO1xuK1x0XHR1c2VkID0geHNrX3R4X2JhdGNoX2NxX2Rlc2NzKFx1MDAyNmN1cnJfYmF0Y2gpO1xuK1x0XHRpZiAoIXVzZWQpIHtcbitcdFx0XHRpZiAoY3Vycl9iYXRjaC5idWRnZXRfbGltaXRlZCBcdTAwMjZcdTAwMjYgYnVkZ2V0X2xlZnQgXHUwMDNjIHJlbWFpbmluZylcbitcdFx0XHRcdGJ1ZGdldF9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdHhzLVx1MDAzZXR4X2J1ZGdldF9zcGVudCArPSB1c2VkO1xuK1x0XHRzdW1fYmF0Y2gudHhfZGVzY3MgKz0gY3Vycl9iYXRjaC50eF9kZXNjcztcbitcdFx0c3VtX2JhdGNoLnJlY2xhaW1fZGVzY3MgPSBjdXJyX2JhdGNoLnJlY2xhaW1fZGVzY3M7XG4rXHR9XG4rXG4rXHRjcV9kZXNjc19hZnRlciA9IHhza190eF9iYXRjaF9jcV9kZXNjcyhcdTAwMjZzdW1fYmF0Y2gpO1xuK1xuK1x0aWYgKHN1bV9iYXRjaC5yZWNsYWltX2Rlc2NzIHx8IGNxX2Rlc2NzX2FmdGVyIFx1MDAzZT0gbWF4X2Rlc2NzKVxuK1x0XHRyZXR1cm4gc3VtX2JhdGNoO1xuK1xuK1x0LyogQ29udGludWUgZmlsbGluZyB0aGUgYmF0Y2ggd2hpbGUgdGhpcyBwYXNzIG1hZGUgcHJvZ3Jlc3MgKi9cbitcdGlmIChjcV9kZXNjc19iZWZvcmUgIT0gY3FfZGVzY3NfYWZ0ZXIpXG4rXHRcdGdvdG8gYWdhaW47XG4rXG4rXHRpZiAoIWJ1ZGdldF9leGhhdXN0ZWQpXG4rXHRcdHJldHVybiBzdW1fYmF0Y2g7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4cywgXHUwMDI2cG9vbC1cdTAwM2V4c2tfdHhfbGlzdCwgdHhfbGlzdClcbitcdFx0eHMtXHUwMDNldHhfYnVkZ2V0X3NwZW50ID0gMDtcbitcdGdvdG8gYWdhaW47XG4rfVxuK1xuIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxuIHtcbitcdHN0cnVjdCB4c2tfdHhfYmF0Y2ggYmF0Y2ggPSB7fTtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4rXHRib29sIHVtZW1fc2hhcmVkO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWYgKCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QpKSB7XG4tXHRcdC8qIEZhbGxiYWNrIHRvIHRoZSBub24tYmF0Y2hlZCB2ZXJzaW9uICovXG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbi1cdH1cbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UocG9vbC1cdTAwM2VyZWNsYWltX2Rlc2NzKSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuLVx0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jaywgdHhfbGlzdCk7XG4tXHRpZiAoIXhzKSB7XG4tXHRcdG5iX3BrdHMgPSAwO1xuK1x0eHMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KFx1MDAyNnBvb2wtXHUwMDNleHNrX3R4X2xpc3QsIHN0cnVjdCB4ZHBfc29jayxcbitcdFx0XHRcdCAgICB0eF9saXN0KTtcbitcdGlmICgheHMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0bmJfcGt0cyA9IHhza3FfY29uc19uYl9lbnRyaWVzKHhzLVx1MDAzZXR4LCBuYl9wa3RzKTtcbitcdG5iX3BrdHMgPSBtaW4obmJfcGt0cywgcG9vbC1cdTAwM2V0eF9kZXNjc19uZW50cmllcyk7XG4rXHRpZiAoIW5iX3BrdHMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0dW1lbV9zaGFyZWQgPSAhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZwb29sLVx1MDAzZXhza190eF9saXN0KTtcbitcbitcdGlmICh1bWVtX3NoYXJlZCBcdTAwMjZcdTAwMjYgIShwb29sLVx1MDAzZXVtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhEUF9VTUVNX1NHX0ZMQUcpKSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4geHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhwb29sLCBuYl9wa3RzKTtcbitcdH1cbiBcbiBcdC8qIFRoaXMgaXMgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20gZm9yIHRoZSBUeCBwYXRoLiBUcnkgdG9cbiBcdCAqIHJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgZm9yIGFsbCBwYWNrZXRzLCBidXRcbkBAIC02MDMsMTkgKzc1MywxNiBAQCB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbiBcdGlmICghbmJfcGt0cylcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRuYl9wa3RzID0geHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaCh4cy1cdTAwM2V0eCwgcG9vbCwgbmJfcGt0cyk7XG4tXHRpZiAoIW5iX3BrdHMpIHtcbi1cdFx0eHMtXHUwMDNldHgtXHUwMDNlcXVldWVfZW1wdHlfZGVzY3MrKztcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4tXHRfX3hza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbi1cdHhza3FfcHJvZF93cml0ZV9hZGRyX2JhdGNoKHBvb2wtXHUwMDNlY3EsIHBvb2wtXHUwMDNldHhfZGVzY3MsIG5iX3BrdHMpO1xuLVx0eHMtXHUwMDNlc2suc2tfd3JpdGVfc3BhY2UoXHUwMDI2eHMtXHUwMDNlc2spO1xuK1x0YmF0Y2ggPSB1bWVtX3NoYXJlZCA/XG4rXHRcdHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2gocG9vbCwgbmJfcGt0cykgOlxuK1x0XHRfX3hza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChwb29sLCB4cyxcbitcdFx0XHRcdFx0XHQgcG9vbC1cdTAwM2V0eF9kZXNjcyxcbitcdFx0XHRcdFx0XHQgbmJfcGt0cyk7XG4rXHR4c2tfdHhfY29tbWl0X2JhdGNoKHBvb2wsIFx1MDAyNmJhdGNoKTtcbiBcbiBvdXQ6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBuYl9wa3RzO1xuK1x0cmV0dXJuIGJhdGNoLnR4X2Rlc2NzO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG4gXG5AQCAtNzM3LDYgKzg4NCwxOSBAQCBzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBpZHg7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWNxX3Byb2RfbG9jaywgZmxhZ3MpO1xuK1x0aWR4ID0geHNrcV9nZXRfcHJvZChwb29sLVx1MDAzZWNxKTtcbitcdHhza3FfcHJvZF93cml0ZV9hZGRyKHBvb2wtXHUwMDNlY3EsIGlkeCwgZGVzYy1cdTAwM2VhZGRyKTtcbitcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIHtcbiBcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuQEAgLTc5NCw4ICs5NTQsMTEgQEAgc3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0eGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyArPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XG4tXHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbitcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbitcbitcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG5AQCAtODc3LDcgKzEwNDAsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdFx0LyogaW4gY2FzZSBvZiAtRU9WRVJGTE9XIHRoYXQgY291bGQgaGFwcGVuIGJlbG93LFxuLVx0XHQgKiB4c2tfY29uc3VtZV9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuK1x0XHQgKiB4c2tfZHJvcF9za2IoKSB3aWxsIHJlbGVhc2UgdGhpcyBub2RlIGFzIHdob2xlIHNrYlxuIFx0XHQgKiB3b3VsZCBiZSBkcm9wcGVkLCB3aGljaCBpbXBsaWVzIGZyZWVpbmcgYWxsIGxpc3QgZWxlbWVudHNcbiBcdFx0ICovXG4gXHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG5AQCAtOTY5LDYgKzExMzIsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbiBcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4rXG4gXHRcdFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXHUwMDI2XHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuIFx0XHRcdFx0Z290byBmcmVlX2VycjtcbkBAIC05ODYsOCArMTE1MSw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIFxuIFx0XHRcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XG4gXHRcdFx0cmVmY291bnRfYWRkKFBBR0VfU0laRSwgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4tXG4tXHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTEwMjUsMTMgKzExODgsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gc3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuLVx0Ym9vbCBzZW50X2ZyYW1lID0gZmFsc2U7XG4gXHRzdHJ1Y3QgeGRwX2Rlc2MgZGVzYztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHR1MzIgY2FjaGVkX2NvbnM7XG4gXHR1MzIgbWF4X2JhdGNoO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbitcdGNhY2hlZF9jb25zID0geHMtXHUwMDNldHgtXHUwMDNlY2FjaGVkX2NvbnM7XG4gXG4gXHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cbiBcdGlmICh1bmxpa2VseSgheHNrX2lzX2JvdW5kKHhzKSkpIHtcbkBAIC0xMDYwLDExICsxMjI0LDIxIEBAIHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbitcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbitcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzKys7XG4rXHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuK1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFx1MDAyNmRlc2MpO1xuIFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4gXHRcdFx0aWYgKGVyciAhPSAtRU9WRVJGTE9XKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHhwX21iX2Rlc2MoXHUwMDI2ZGVzYykpXG4rXHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0gdHJ1ZTtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMTA5MywxOCArMTI2NywzMyBAQCBzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0c2VudF9mcmFtZSA9IHRydWU7XG4gXHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gXHR9XG4gXG4gXHRpZiAoeHNrcV9oYXNfZGVzY3MoeHMtXHUwMDNldHgpKSB7XG4rXHRcdGJvb2wgZHJhaW4gPSB4cy1cdTAwM2Vza2IgfHwgeHMtXHUwMDNlZHJhaW5fY29udCB8fCB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuK1xuK1x0XHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzLS07XG4rXHRcdFx0aWYgKHhzLVx1MDAzZXNrYilcbitcdFx0XHRcdHhza19kcm9wX3NrYih4cy1cdTAwM2Vza2IpO1xuK1x0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSBkcmFpbjtcbitcdFx0XHRlcnIgPSAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4gXHRcdGlmICh4cy1cdTAwM2Vza2IpXG4gXHRcdFx0eHNrX2Ryb3Bfc2tiKHhzLVx1MDAzZXNrYik7XG4rXG4rXHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuK1xuIFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4rXHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFx1MDAyNmRlc2MpO1xuIFx0fVxuIFxuIG91dDpcbi1cdGlmIChzZW50X2ZyYW1lKVxuK1x0aWYgKHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zICE9IGNhY2hlZF9jb25zKVxuIFx0XHRfX3hza190eF9yZWxlYXNlKHhzKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5AQCAtMTQ4Myw3ICsxNjcyLDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiBhbmQvb3IgZGV2aWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLFxuLVx0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0pO1xuK1x0XHRcdFx0XHRcdFx0ICAgICB1bWVtX3hzLVx1MDAzZXVtZW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2V4ZHBfemNfbWF4X3NlZ3MpO1xuIFx0XHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0XHRcdHNvY2tmZF9wdXQoc29jayk7XG5AQCAtMTUxNSw3ICsxNzA1LDggQEAgc3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJcbiBcdFx0XHQgKiB1dGlsaXplc1xuIFx0XHRcdCAqL1xuIFx0XHRcdGlmICh4cy1cdTAwM2V0eCBcdTAwMjZcdTAwMjYgIXhzLVx1MDAzZXBvb2wtXHUwMDNldHhfZGVzY3MpIHtcbi1cdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzKTtcbitcdFx0XHRcdGVyciA9IHhwX2FsbG9jX3R4X2Rlc2NzKHhzLVx1MDAzZXBvb2wsIHhzLFxuK1x0XHRcdFx0XHRcdFx0ZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4gXHRcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRcdHhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpO1xuIFx0XHRcdFx0XHR4cy1cdTAwM2Vwb29sID0gTlVMTDtcbkBAIC0xNTMzLDcgKzE3MjQsOSBAQCBzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkclxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBUaGlzIHhzayBoYXMgaXRzIG93biB1bWVtLiAqL1xuLVx0XHR4cy1cdTAwM2Vwb29sID0geHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbSh4cywgeHMtXHUwMDNldW1lbSk7XG4rXHRcdHhzLVx1MDAzZXBvb2wgPSB4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHhzLCB4cy1cdTAwM2V1bWVtLFxuK1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZXhkcF96Y19tYXhfc2Vncyk7XG4rXG4gXHRcdGlmICgheHMtXHUwMDNlcG9vbCkge1xuIFx0XHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jIGIvbmV0L3hkcC94c2tfYnVmZl9wb29sLmNcbmluZGV4IDFmMjhhOTY0MTU3MWU0Li5hNDA4OTQ4MGIyMmIyNSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrX2J1ZmZfcG9vbC5jXG4rKysgYi9uZXQveGRwL3hza19idWZmX3Bvb2wuY1xuQEAgLTQyLDE3ICs0MiwyMiBAQCB2b2lkIHhwX2Rlc3Ryb3koc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG4gXHRrdmZyZWUocG9vbCk7XG4gfVxuIFxuLWludCB4cF9hbGxvY190eF9kZXNjcyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9zb2NrICp4cylcbitpbnQgeHBfYWxsb2NfdHhfZGVzY3Moc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4rXHRcdCAgICAgIHUzMiBtYXhfc2VncylcbiB7XG4tXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgeHMtXHUwMDNldHgtXHUwMDNlbmVudHJpZXMpO1xuK1x0dTMyIG5lbnRyaWVzID0gbWF4KHhzLVx1MDAzZXR4LVx1MDAzZW5lbnRyaWVzLCBtYXhfc2Vncyk7XG4rXG4rXHRwb29sLVx1MDAzZXR4X2Rlc2NzID0ga3Z6YWxsb2Nfb2JqcygqcG9vbC1cdTAwM2V0eF9kZXNjcywgbmVudHJpZXMpO1xuIFx0aWYgKCFwb29sLVx1MDAzZXR4X2Rlc2NzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBvb2wtXHUwMDNldHhfZGVzY3NfbmVudHJpZXMgPSBuZW50cmllcztcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHBfY3JlYXRlX2FuZF9hc3NpZ25fdW1lbShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCB4ZHBfdW1lbSAqdW1lbSlcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgeGRwX3VtZW0gKnVtZW0sXG4rXHRcdFx0XHRcdFx0dTMyIG1heF9zZWdzKVxuIHtcbiBcdGJvb2wgdW5hbGlnbmVkID0gdW1lbS1cdTAwM2VmbGFncyBcdTAwMjYgWERQX1VNRU1fVU5BTElHTkVEX0NIVU5LX0ZMQUc7XG4gXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbDtcbkBAIC02OSw3ICs3NCw3IEBAIHN0cnVjdCB4c2tfYnVmZl9wb29sICp4cF9jcmVhdGVfYW5kX2Fzc2lnbl91bWVtKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aWYgKHhzLVx1MDAzZXR4KVxuLVx0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMpKVxuK1x0XHRpZiAoeHBfYWxsb2NfdHhfZGVzY3MocG9vbCwgeHMsIG1heF9zZWdzKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdHBvb2wtXHUwMDNlY2h1bmtfbWFzayA9IH4oKHU2NCl1bWVtLVx1MDAzZWNodW5rX3NpemUgLSAxKTtcbmRpZmYgLS1naXQgYS9uZXQveGRwL3hza19xdWV1ZS5oIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuaW5kZXggM2UzZmJiNzNkMjNlMmYuLjFiYzQyYzg5MDJmNGJhIDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2tfcXVldWUuaFxuKysrIGIvbmV0L3hkcC94c2tfcXVldWUuaFxuQEAgLTU4LDYgKzU4LDE3IEBAIHN0cnVjdCBwYXJzZWRfZGVzYyB7XG4gXHR1MzIgdmFsaWQ7XG4gfTtcbiBcbitzdHJ1Y3QgeHNrX3R4X2JhdGNoIHtcbitcdHUzMiB0eF9kZXNjcztcbitcdHUzMiByZWNsYWltX2Rlc2NzO1xuK1x0Ym9vbCBidWRnZXRfbGltaXRlZDtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIHhza190eF9iYXRjaF9jcV9kZXNjcyhjb25zdCBzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcbit7XG4rXHRyZXR1cm4gYmF0Y2gtXHUwMDNldHhfZGVzY3MgKyBiYXRjaC1cdTAwM2VyZWNsYWltX2Rlc2NzO1xuK31cbitcbiAvKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBzaGFyZWQgc3RhdGUgb2YgdGhlIHJpbmdzIGFyZSBhIHNpbXBsZVxuICAqIGNpcmN1bGFyIGJ1ZmZlciwgYXMgb3V0bGluZWQgaW5cbiAgKiBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL2NpcmN1bGFyLWJ1ZmZlcnMucnN0LiBGb3IgdGhlIFJ4IGFuZFxuQEAgLTI2MywxNyArMjc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZV9kZXNjKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIFx0cGFyc2VkLVx1MDAzZW1iID0geHBfbWJfZGVzYyhkZXNjKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZVxuLXUzMiB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfcXVldWUgKnEsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLVx0XHRcdCAgICAgIHUzMiBtYXgpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgeHNrX3R4X2JhdGNoXG4reHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbitcdFx0XHQgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXgpXG4ge1xuLVx0dTMyIGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucywgbmJfZW50cmllcyA9IDA7XG4tXHRzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzID0gcG9vbC1cdTAwM2V0eF9kZXNjcztcbi1cdHUzMiB0b3RhbF9kZXNjcyA9IDAsIG5yX2ZyYWdzID0gMDtcbitcdGJvb2wgZHJhaW4gPSBSRUFEX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCk7XG4rXHR1MzIgY2FjaGVkX2NvbnMsIG5iX2VudHJpZXMgPSAwO1xuK1x0c3RydWN0IHhza190eF9iYXRjaCBiYXRjaCA9IHt9O1xuK1x0c3RydWN0IHhza19xdWV1ZSAqcSA9IHhzLVx1MDAzZXR4O1xuK1x0dTMyIG5yX2ZyYWdzID0gMDtcbitcbitcdGNhY2hlZF9jb25zID0gcS1cdTAwM2VjYWNoZWRfY29ucztcbiBcbi1cdC8qIHRyYWNrIGZpcnN0IGVudHJ5LCBpZiBzdHVtYmxlIHVwb24gKmFueSogaW52YWxpZCBkZXNjcmlwdG9yLCByZXdpbmRcbi1cdCAqIGN1cnJlbnQgcGFja2V0IHRoYXQgY29uc2lzdHMgb2YgZnJhZ3MgYW5kIHN0b3AgdGhlIHByb2Nlc3Npbmdcbi1cdCAqL1xuIFx0d2hpbGUgKGNhY2hlZF9jb25zICE9IHEtXHUwMDNlY2FjaGVkX3Byb2QgXHUwMDI2XHUwMDI2IG5iX2VudHJpZXMgXHUwMDNjIG1heCkge1xuIFx0XHRzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqcmluZyA9IChzdHJ1Y3QgeGRwX3J4dHhfcmluZyAqKXEtXHUwMDNlcmluZztcbiBcdFx0dTMyIGlkeCA9IGNhY2hlZF9jb25zIFx1MDAyNiBxLVx1MDAzZXJpbmdfbWFzaztcbkBAIC0yODMsMjUgKzI5NSw0MiBAQCB1MzIgeHNrcV9jb25zX3JlYWRfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX3F1ZXVlICpxLCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbiBcdFx0Y2FjaGVkX2NvbnMrKztcbiBcdFx0cGFyc2VfZGVzYyhxLCBwb29sLCBcdTAwMjZkZXNjc1tuYl9lbnRyaWVzXSwgXHUwMDI2cGFyc2VkKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYXJzZWQudmFsaWQpKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdGRyYWluID0gdHJ1ZTtcbitcbitcdFx0bnJfZnJhZ3MrKztcbitcdFx0bmJfZW50cmllcysrO1xuIFxuIFx0XHRpZiAobGlrZWx5KCFwYXJzZWQubWIpKSB7XG4tXHRcdFx0dG90YWxfZGVzY3MgKz0gKG5yX2ZyYWdzICsgMSk7XG4tXHRcdFx0bnJfZnJhZ3MgPSAwO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdG5yX2ZyYWdzKys7XG4tXHRcdFx0aWYgKG5yX2ZyYWdzID09IHBvb2wtXHUwMDNleGRwX3pjX21heF9zZWdzKSB7XG4rXHRcdFx0aWYgKHVubGlrZWx5KGRyYWluKSkge1xuK1x0XHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuK1x0XHRcdFx0V1JJVEVfT05DRSh4cy1cdTAwM2VkcmFpbl9jb250LCBmYWxzZSk7XG4gXHRcdFx0XHRucl9mcmFncyA9IDA7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4rXG4rXHRcdFx0YmF0Y2gudHhfZGVzY3MgKz0gbnJfZnJhZ3M7XG4rXHRcdFx0bnJfZnJhZ3MgPSAwO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChucl9mcmFncyA9PSBwb29sLVx1MDAzZXhkcF96Y19tYXhfc2VncylcbitcdFx0XHRkcmFpbiA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAobnJfZnJhZ3MpIHtcbitcdFx0aWYgKGRyYWluKSB7XG4rXHRcdFx0YmF0Y2gucmVjbGFpbV9kZXNjcyA9IG5yX2ZyYWdzO1xuK1x0XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlZHJhaW5fY29udCwgdHJ1ZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKG5iX2VudHJpZXMgPT0gbWF4KVxuK1x0XHRcdFx0YmF0Y2guYnVkZ2V0X2xpbWl0ZWQgPSB0cnVlO1xuK1x0XHRcdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0XHR9XG4tXHRcdG5iX2VudHJpZXMrKztcbiBcdH1cbiBcbi1cdGNhY2hlZF9jb25zIC09IG5yX2ZyYWdzO1xuIFx0LyogUmVsZWFzZSB2YWxpZCBwbHVzIGFueSBpbnZhbGlkIGVudHJpZXMgKi9cbiBcdHhza3FfY29uc19yZWxlYXNlX24ocSwgY2FjaGVkX2NvbnMgLSBxLVx1MDAzZWNhY2hlZF9jb25zKTtcbi1cdHJldHVybiB0b3RhbF9kZXNjcztcbitcdHJldHVybiBiYXRjaDtcbiB9XG4gXG4gLyogRnVuY3Rpb25zIGZvciBjb25zdW1lcnMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuaW5kZXggNDc3YWVkYmIwMWJhZDguLjQ1NDkzNThjYzhjMjFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTQyNywxNCArNDI3LDE0IEBAIHN0YXRpYyB1MzIgcGt0X25iX2ZyYWdzKHUzMiBmcmFtZV9zaXplLCBzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbSwgc3RydWN0IHBrXG4gXHR9XG4gXG4gXHQvKiBTZWFyY2ggZm9yIHRoZSBlbmQgb2YgdGhlIHBhY2tldCBpbiB2ZXJiYXRpbSBtb2RlICovXG4tXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpKVxuIFx0XHRyZXR1cm4gbmJfZnJhZ3M7XG4gXG4gXHRuZXh0X2ZyYWcgPSBwa3Rfc3RyZWFtLVx1MDAzZWN1cnJlbnRfcGt0X25iO1xuIFx0cGt0Kys7XG4gXHR3aGlsZSAobmV4dF9mcmFnKysgXHUwMDNjIHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cykge1xuIFx0XHRuYl9mcmFncysrO1xuLVx0XHRpZiAoIXBrdF9jb250aW51ZXMocGt0LVx1MDAzZW9wdGlvbnMpIHx8ICFwa3QtXHUwMDNldmFsaWQpXG4rXHRcdGlmICghcGt0X2NvbnRpbnVlcyhwa3QtXHUwMDNlb3B0aW9ucykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHBrdCsrO1xuIFx0fVxuQEAgLTY2NSwxMSArNjY1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGt0X3N0cmVhbSAqX19wa3Rfc3RyZWFtX2dlbmVyYXRlX2N1c3RvbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzXG4gXHRcdFx0aWYgKCFmcmFtZS1cdTAwM2V2YWxpZCB8fCAhcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbiBcdFx0XHRcdHBheWxvYWQrKztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoZnJhbWUtXHUwMDNldmFsaWQpXG4rXHRcdFx0aWYgKGZyYW1lLVx1MDAzZXZhbGlkKSB7XG4gXHRcdFx0XHRsZW4gKz0gZnJhbWUtXHUwMDNlbGVuO1xuLVx0XHRcdGlmIChmcmFtZS1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgcGt0X2NvbnRpbnVlcyhmcmFtZS1cdTAwM2VvcHRpb25zKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuK1x0XHRcdFx0aWYgKHBrdF9jb250aW51ZXMoZnJhbWUtXHUwMDNlb3B0aW9ucykpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0XHRwa3QtXHUwMDNlcGt0X25iID0gcGt0X25iO1xuIFx0XHRcdHBrdC1cdTAwM2VsZW4gPSBsZW47XG4gXHRcdFx0cGt0LVx1MDAzZXZhbGlkID0gZnJhbWUtXHUwMDNldmFsaWQ7XG5AQCAtMTI1MCwxMCArMTI1MCw5IEBAIHN0YXRpYyBpbnQgX19zZW5kX3BrdHMoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRpZiAocGt0IFx1MDAyNlx1MDAyNiBwa3QtXHUwMDNldmFsaWQpIHtcbitcdFx0aWYgKHBrdCBcdTAwMjZcdTAwMjYgcGt0LVx1MDAzZXZhbGlkKVxuIFx0XHRcdHZhbGlkX3BrdHMrKztcbi1cdFx0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbi1cdFx0fVxuK1x0XHR2YWxpZF9mcmFncyArPSBuYl9mcmFncztcbiBcdH1cbiBcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwYWNpbmdfbXV0ZXgpO1xuQEAgLTIwOTksMTMgKzIwOTgsMTYgQEAgaW50IHRlc3RhcHBfaW52YWxpZF9kZXNjX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRcdHswLCAwLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgYWRkcmVzcyBpbiB0aGUgc2Vjb25kIGZyYW1lICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuLVx0XHR7dW1lbV9zeiwgWFNLX1VNRU1fX0xBUkdFX0ZSQU1FX1NJWkUsIDAsIGZhbHNlLCBYRFBfUEtUX0NPTlREfSxcbitcdFx0e3VtZW1fc3ogKiAyLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhEUF9QS1RfQ09OVER9LFxuK1x0XHR7MCwgTUlOX1BLVF9TSVpFLCAwLCBmYWxzZSwgMH0sXG4gXHRcdC8qIEludmFsaWQgbGVuIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fSU5WQUxJRF9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogSW52YWxpZCBvcHRpb25zIGluIHRoZSBtaWRkbGUgKi9cbiBcdFx0ezAsIFhTS19VTUVNX19MQVJHRV9GUkFNRV9TSVpFLCAwLCBmYWxzZSwgWERQX1BLVF9DT05URH0sXG4gXHRcdHswLCBYU0tfVU1FTV9fTEFSR0VfRlJBTUVfU0laRSwgMCwgZmFsc2UsIFhTS19ERVNDX19JTlZBTElEX09QVElPTn0sXG4rXHRcdHswLCBNSU5fUEtUX1NJWkUsIDAsIGZhbHNlLCAwfSxcbiBcdFx0LyogVHJhbnNtaXQgMiBmcmFncywgcmVjZWl2ZSAzICovXG4gXHRcdHswLCBYU0tfVU1FTV9fTUFYX0ZSQU1FX1NJWkUsIDAsIHRydWUsIFhEUF9QS1RfQ09OVER9LFxuIFx0XHR7MCwgWFNLX1VNRU1fX01BWF9GUkFNRV9TSVpFLCAwLCB0cnVlLCAwfSxcbkBAIC0yMTE3LDggKzIxMTksOCBAQCBpbnQgdGVzdGFwcF9pbnZhbGlkX2Rlc2NfbWIoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcbiBcdGlmICh1bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlKSB7XG4gXHRcdC8qIENyb3NzaW5nIGEgY2h1bmsgYm91bmRhcnkgYWxsb3dlZCAqL1xuLVx0XHRwa3RzWzEyXS52YWxpZCA9IHRydWU7XG4tXHRcdHBrdHNbMTNdLnZhbGlkID0gdHJ1ZTtcbitcdFx0cGt0c1sxNV0udmFsaWQgPSB0cnVlO1xuK1x0XHRwa3RzWzE2XS52YWxpZCA9IHRydWU7XG4gXHR9XG4gXG4gXHR0ZXN0LVx1MDAzZW10dSA9IE1BWF9FVEhfSlVNQk9fU0laRTtcbkBAIC0yMjcwLDcgKzIyNzIsNyBAQCBpbnQgdGVzdGFwcF90b29fbWFueV9mcmFncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRtYXhfZnJhZ3MgKz0gMTtcbiBcdH1cbiBcbi1cdHBrdHMgPSBjYWxsb2MoMiAqIG1heF9mcmFncyArIDIsIHNpemVvZihzdHJ1Y3QgcGt0KSk7XG4rXHRwa3RzID0gY2FsbG9jKDIgKiBtYXhfZnJhZ3MgKyAzLCBzaXplb2Yoc3RydWN0IHBrdCkpO1xuIFx0aWYgKCFwa3RzKVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuQEAgLTIyODgsMjQgKzIyOTAsMzAgQEAgaW50IHRlc3RhcHBfdG9vX21hbnlfZnJhZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdH1cbiBcdHBrdHNbbWF4X2ZyYWdzXS5vcHRpb25zID0gMDtcbiBcbi1cdC8qIEFuIGludmFsaWQgcGFja2V0IHdpdGggdGhlIG1heCBhbW91bnQgb2YgZnJhZ3MgYnV0IHNpZ25hbHMgcGFja2V0XG4tXHQgKiBjb250aW51ZXMgb24gdGhlIGxhc3QgZnJhZ1xuLVx0ICovXG4tXHRmb3IgKGkgPSBtYXhfZnJhZ3MgKyAxOyBpIFx1MDAzYyAyICogbWF4X2ZyYWdzICsgMTsgaSsrKSB7XG4rXHQvKiBBbiBpbnZhbGlkIHBhY2tldCB3aXRoIHRoZSBtYXggKyAxIGFtb3VudCBvZiBmcmFncyAqL1xuK1x0Zm9yIChpID0gbWF4X2ZyYWdzICsgMTsgaSBcdTAwM2MgMiAqIG1heF9mcmFncyArIDI7IGkrKykge1xuIFx0XHRwa3RzW2ldLmxlbiA9IE1JTl9QS1RfU0laRTtcbiBcdFx0cGt0c1tpXS5vcHRpb25zID0gWERQX1BLVF9DT05URDtcbi1cdFx0cGt0c1tpXS52YWxpZCA9IGZhbHNlO1xuK1x0XHRwa3RzW2ldLnZhbGlkID0gdHJ1ZTtcbiBcdH1cbitcdHBrdHNbMiAqIG1heF9mcmFncyArIDFdLm9wdGlvbnMgPSAwO1xuIFxuIFx0LyogVmFsaWQgcGFja2V0IGZvciBzeW5jaCAqL1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0ubGVuID0gTUlOX1BLVF9TSVpFO1xuLVx0cGt0c1syICogbWF4X2ZyYWdzICsgMV0udmFsaWQgPSB0cnVlO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0ubGVuID0gTUlOX1BLVF9TSVpFO1xuK1x0cGt0c1syICogbWF4X2ZyYWdzICsgMl0udmFsaWQgPSB0cnVlO1xuIFxuLVx0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAyKSkge1xuK1x0aWYgKHBrdF9zdHJlYW1fZ2VuZXJhdGVfY3VzdG9tKHRlc3QsIHBrdHMsIDIgKiBtYXhfZnJhZ3MgKyAzKSkge1xuIFx0XHRmcmVlKHBrdHMpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuK1x0LyogVGhlIGdlbmVyYXRlZCBUeCBzdHJlYW0gbXVzdCBrZWVwIHRoZSB0b28tYmlnIHBhY2tldCB2YWxpZCBzbyB0aGF0XG4rXHQgKiBfX3NlbmRfcGt0cygpIGFjY291bnRzIGl0cyBkZXNjcmlwdG9ycyBpbiBvdXRzdGFuZGluZ190eC4gVGhlIFJ4XG4rXHQgKiBzdHJlYW0sIGhvd2V2ZXIsIG11c3Qgbm90IGV4cGVjdCB0aGlzIHBhY2tldCBvbiB0aGUgd2lyZS5cbitcdCAqL1xuK1x0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzJdLnZhbGlkID0gZmFsc2U7XG4rXHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzay1cdTAwM2Vwa3Rfc3RyZWFtLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMtLTtcbitcbiBcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcbiBcdGZyZWUocGt0cyk7XG4gXHRyZXR1cm4gcmV0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MjE6MjYuMDMzNjY4NTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIwMzE4MTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRl9YRFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBBRl9YRFAgaW4gdGhlIExpbnV4IGtlcm5lbC4gU2VlbXMgbGlrZSBhIGZhaXJseSBpbnZvbHZlZCBtb2RpZmljYXRpb24sIHRvdWNoaW5nIHNldmVyYWwga2V5IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3RgLCB2YXJpb3VzIGhlYWRlciBmaWxlcyAoYHhkcF9zb2NrLmhgLCBgeHNrX2J1ZmZfcG9vbC5oYCwgYHhza19xdWV1ZS5oYCksIGFuZCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBmaWxlcyAoYHhzay5jYCwgYHhza19idWZmX3Bvb2wuY2ApLiBJdCBldmVuIGluY2x1ZGVzIGEgbW9kaWZpY2F0aW9uIHRvIGEgc2VsZnRlc3QgKGB0ZXN0X3hzay5jYCksIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBUaGlzIGlzbid0IGp1c3QgYSB0cml2aWFsIHR3ZWFrOyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGZvY3VzaW5nIG9uIGhvdyBBRl9YRFAgaGFuZGxlcyBwb3RlbnRpYWxseSBpbnZhbGlkIGRlc2NyaXB0b3JzLCB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbXBsZXRpb24gcmluZywgYW5kIGJhdGNoaW5nIHdpdGhpbiBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYC5cblxuVGhlIGtleSBmdW5jdGlvbnMgYmVpbmcgdXBkYXRlZCBoZXJlIGFyZSBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGB4c2tfdHhfY29tcGxldGVkYCwgYW5kIHRoZSBTS0ItYnVpbGRpbmcgZnVuY3Rpb25zLCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAuIFRoaXMgYWxsIHN1Z2dlc3RzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBpbXBvcnRhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBlcmhhcHMgYSBmaXggZm9yIHNvbWUgaWRlbnRpZmllZCBlZGdlIGNhc2VzLlxuXG5JJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCBpbiBkZXB0aCwgYnV0IG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBkZWFsaW5nIHdpdGggZGV0YWlscyBvZiBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuXG5cblRoZSBuZXh0IHRoaW5nIEkgd2FudCB0byBjb25zaWRlciBpcyB0aGUgYXBwbGljYWJpbGl0eSBvZiB0aGlzIGNoYW5nZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBnbGFkIHRoZXkgYXJlIHRoaW5raW5nIGFib3V0IHRoaXMuIEFGX1hEUCBoYXMgcHJvdmVuIHVzZWZ1bCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGJ1dCB0aGlzIHBhdGNoIGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBob3cgd2VsbCBpdCB3b3Jrcy4gSSdtIGdsYWQgdG8gc2VlIHRoYXQgQUZfWERQIGlzIHN1cHBvcnRlZCB3aXRoIGdlbmVyaWMgWERQIChTS0IgbW9kZSkgYW5kIHZldGgvdmlydGlvLW5ldC5cblxuSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX1hEUF9TT0NLRVRTYCwgdG8gZW5zdXJlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEknbGwgc2VhcmNoIGZvciBgWERQX1NPQ0tFVFNgIGFuZCBgQUZfWERQYCB3aXRoaW4gdGhlIGZpbGVzIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjMyLjIzNjg1MTYzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkxMjMyNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhEUF9TT0NLRVRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9MTE1PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjExNjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTE3LUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTMxPUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjEzMjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTMzLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZz01NT1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjU2OkNPTkZJR19YRFBfU09DS0VUUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjU3OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNTgtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz01MT1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo1MjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWc6NTM6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNTQtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTU4PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NTk6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NjA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy02MS1DT05GSUdfSU5FVD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NDg9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzo0OTpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzo1MDpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnLTUxLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZz01MD1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjUxOkNPTkZJR19YRFBfU09DS0VUUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnOjUyOkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNTMtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz00OT1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzo1MDpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NTE6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctNTItQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTY5PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NzA6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NzE6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy03Mi1DT05GSUdfSU5FVD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz00Nz1DT05GSUdfTkVUX0tFWT15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc6NDg6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZzo0OTpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctNTAtQ09ORklHX0lORVQ9eVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9NDg9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjQ5OkNPTkZJR19YRFBfU09DS0VUUz15XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnLTUxLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc9NDk9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NTA6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnOjUxOkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnLTUyLUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnPTQ0PUNPTkZJR19ORVRfS0VZPXlcXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZzo0NTpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjQ2OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZy00Ny1DT05GSUdfSU5FVD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9NDU9Q09ORklHX05FVF9LRVk9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NjpDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NzpDT05GSUdfWERQX1NPQ0tFVFNfRElBRz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTQ4LUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xMzM9Q09ORklHX0RJQlNfTE89eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxMzQ6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTM1OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTM2LUNPTkZJR19JTkVUPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0xMjQ9Q09ORklHX0RJQlNfTE89eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxMjU6Q09ORklHX1hEUF9TT0NLRVRTPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTI2OkNPTkZJR19YRFBfU09DS0VUU19ESUFHPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMTI3LUNPTkZJR19JTkVUPXlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT01OT1pY2UtJChDT05GSUdfUkZTX0FDQ0VMKSArPSBpY2VfYXJmcy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjYwOmljZS0kKENPTkZJR19YRFBfU09DS0VUUykgKz0gaWNlX3hzay5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlLTYxLWljZS0kKENPTkZJR19JQ0VfU1dJVENIREVWKSArPSBpY2VfZXN3aXRjaC5vIGljZV9lc3dpdGNoX2JyLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmg9MTA9c3RydWN0IGljZV92c2k7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oOjEyOiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oLTEzLWludCBpY2VfeHNrX3Bvb2xfc2V0dXAoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oPTk4PWljZV9xdmVjX2Rpc19pcnEoc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV9yeF9yaW5nICpyeF9yaW5nLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfeHNrLmgtOTktXFx0XFx0IHN0cnVjdCBpY2VfcV92ZWN0b3IgKnFfdmVjdG9yKSB7IH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3hzay5oOjEwMDojZW5kaWYgLyogQ09ORklHX1hEUF9TT0NLRVRTICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV94c2suaC0xMDEtI2VuZGlmIC8qICFfSUNFX1hTS19IXyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMTc9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTE4OiNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTExOS1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTg4Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX25ldF9jdHhfZ2V0X2FsbF91c2VkX2ZsdXNoX2xpc3RzKHN0cnVjdCBsaXN0X2hlYWQgKipsaF9tYXAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTkwNy1cXHRsaCA9IFxcdTAwMjZicGZfbmV0X2N0eC1cXHUwMDNleHNrbWFwX21hcF9mbHVzaF9saXN0O1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6OTA4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19YRFBfU09DS0VUUykgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTkwOS1cXHQgICAga2Vybl9mbGFncyBcXHUwMDI2IEJQRl9SSV9GX1hTS19NQVBfSU5JVCBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShsaCkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTY3Nj1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNjk3LVxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KnNiX2RldjtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjY5ODojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC02OTktXFx0LyogXFxcIm9wcyBwcm90ZWN0ZWRcXFwiLCBzZWUgY29tbWVudCBhYm91dCBuZXRfZGV2aWNlOjpsb2NrICovXFxuLS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmgtOS1cXG5pbmNsdWRlL25ldC9saWJldGgveHNrLmg6MTA6LyogYGBYRFBfVFhNRF9GTEFHU19WQUxJRGBgIGlzIGRlZmluZWQgb25seSB1bmRlciBgYENPTkZJR19YRFBfU09DS0VUU2BgICovXFxuaW5jbHVkZS9uZXQvbGliZXRoL3hzay5oLTExLSNpZmRlZiBYRFBfVFhNRF9GTEFHU19WQUxJRFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTYyPXN0cnVjdCBuZXQge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTE4My0jZW5kaWZcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MTg0OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgtMTg1LVxcdHN0cnVjdCBuZXRuc194ZHBcXHR4ZHA7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaD0xND1zdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9yeF9xdWV1ZS5oLTI3LVxcdCAqL1xcbmluY2x1ZGUvbmV0L25ldGRldl9yeF9xdWV1ZS5oOjI4OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5pbmNsdWRlL25ldC9uZXRkZXZfcnhfcXVldWUuaC0yOS1cXHRzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAgICAgICAgICAgICpwb29sO1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaD0xMTc9c3RydWN0IHhza190eF9tZXRhZGF0YV9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaC0xMjMtXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaDoxMjQ6I2lmZGVmIENPTkZJR19YRFBfU09DS0VUU1xcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMTI1LVxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2suaD0yNDA9c3RhdGljIGlubGluZSB2b2lkIHhza190eF9tZXRhZGF0YV9jb21wbGV0ZShzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCxcXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmgtMjQ1LVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrLmg6MjQ2OiNlbmRpZiAvKiBDT05GSUdfWERQX1NPQ0tFVFMgKi9cXG5pbmNsdWRlL25ldC94ZHBfc29jay5oLTI0Ny0jZW5kaWYgLyogX0xJTlVYX1hEUF9TT0NLX0ggKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oPTE5PXN0cnVjdCB4c2tfY2JfZGVzYyB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaC0yNC1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaDoyNTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtMjYtXFxuLS1cXG5pbmNsdWRlL25ldC94ZHBfc29ja19kcnYuaD00OTM9c3RhdGljIGlubGluZSB2b2lkIHhza19idWZmX3Jhd19kbWFfc3luY19mb3JfZGV2aWNlKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNDk4LVxcbmluY2x1ZGUvbmV0L3hkcF9zb2NrX2Rydi5oOjQ5OTojZW5kaWYgLyogQ09ORklHX1hEUF9TT0NLRVRTICovXFxuaW5jbHVkZS9uZXQveGRwX3NvY2tfZHJ2LmgtNTAwLVxcbi0tXFxubmV0L01ha2VmaWxlPTcyPW9iai0kKENPTkZJR19ORVRfTkNTSSlcXHRcXHQrPSBuY3NpL1xcbm5ldC9NYWtlZmlsZTo3MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpXFx0Kz0geGRwL1xcbm5ldC9NYWtlZmlsZS03NC1vYmotJChDT05GSUdfTVBUQ1ApXFx0XFx0Kz0gbXB0Y3AvXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTQ0MT1fX25ldGRldl9ubF9xdWV1ZV9maWxsX21wKHN0cnVjdCBza19idWZmICpyc3AsIHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cSlcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNDQ4LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NDQ5OiNpZmRlZiBDT05GSUdfWERQX1NPQ0tFVFNcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTQ1MC1cXHRpZiAocnhxLVxcdTAwM2Vwb29sKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz00NzU9bmV0ZGV2X25sX3F1ZXVlX2ZpbGxfb25lKHN0cnVjdCBza19idWZmICpyc3AsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTUwNC1cXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjUwNTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy01MDYtXFx0XFx0aWYgKHR4cS1cXHUwMDNlcG9vbClcXG4tLVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jPTE4Nz1zdGF0aWMgaW50IF9fbmV0aWZfbXBfb3Blbl9yeHEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJ4cV9pZHgsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yMjAtXFx0fVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jOjIyMTojaWZkZWYgQ09ORklHX1hEUF9TT0NLRVRTXFxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmMtMjIyLVxcdGlmIChyeHEtXFx1MDAzZXBvb2wpIHtcXG4tLVxcbm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3hkcC9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcXG5uZXQveGRwL0tjb25maWctMTMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5uZXQveGRwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xcbm5ldC94ZHAvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICs9IHhza19idWZmX3Bvb2wub1xcbm5ldC94ZHAvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfWERQX1NPQ0tFVFNfRElBRykgKz0geHNrX2RpYWcub1xcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jPTMyOD1zdGF0aWMgdm9pZCBwcm9iZV9rZXJuZWxfaW1hZ2VfY29uZmlnKGNvbnN0IGNoYXIgKmRlZmluZV9wcmVmaXgpXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC9mZWF0dXJlLmMtMzcyLVxcdFxcdC8qIEFGX1hEUCBzb2NrZXRzICovXFxudG9vbHMvYnBmL2JwZnRvb2wvZmVhdHVyZS5jOjM3MzpcXHRcXHR7IFxcXCJDT05GSUdfWERQX1NPQ0tFVFNcXFwiLCB9LFxcbnRvb2xzL2JwZi9icGZ0b29sL2ZlYXR1cmUuYy0zNzQtXFx0XFx0LyogQlBGX1BST0dfVFlQRV9MV1RfKiBhbmQgcmVsYXRlZCBoZWxwZXJzICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnPTEyNz1DT05GSUdfVlhMQU49eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWc6MTI4OkNPTkZJR19YRFBfU09DS0VUUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy0xMjktQ09ORklHX1hGUk1fSU5URVJGQUNFPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0PTIyMz1DT05GSUdfWDg2X1BPV0VSTk9XX0s4PXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLng4Nl82NDoyMjQ6Q09ORklHX1hEUF9TT0NLRVRTX0RJQUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcueDg2XzY0LTIyNS1DT05GSUdfWEZSTV9TVUJfUE9MSUNZPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZz0xNj1DT05GSUdfVkxBTl84MDIxUT1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnOjE3OkNPTkZJR19YRFBfU09DS0VUUz15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjM0LjIyODA5Mzg0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjA3MjkyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBRl9YRFAgU29ja2V0IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byBgWERQX1NPQ0tFVFNgLCBnb3QgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBhIGZldyBrZXkgY29tcG9uZW50cyB3aXRoaW4gdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQncyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBgeHNrX3R4X2NvbXBsZXRlZGAsIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAuXG5cbkltbWVkaWF0ZWx5LCBJJ20gemVyb2luZyBpbiBvbiBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYCBhbmQgYF9feHNrX2dlbmVyaWNfeG1pdGAuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSBjcml0aWNhbCBwYXRoLiBgX194c2tfZ2VuZXJpY194bWl0YCBpcyB0aGUgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLCBzbyB0aGF0J3MgYSBjZW50cmFsIGZ1bmN0aW9uLiBBbmQgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGAgaGFuZGxlcyByZXRyaWV2aW5nIFRYIGRlc2NyaXB0b3JzIGZyb20gdGhlIEFGX1hEUCBzb2NrZXQsIGEgY29yZSBpbnRlcmFjdGlvbiBwb2ludCB3aXRoIHRoZSBkcml2ZXJzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBtb3JlIGNvbXByZWhlbnNpdmUgbG9vayBhdCByZWxhdGVkIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgYmVpbmcgY2hhbmdlZC4gVGhlIGZvbGxvd2luZyBzeW1ib2xzIHNlZW0gcmVsZXZhbnQ6XG5cbiogICBgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfY29tcGxldGVkYFxuKiAgIGBfX3hza19nZW5lcmljX3htaXRgXG4qICAgYHhza19idWlsZF9za2JgXG4qICAgYHhza19idWlsZF9za2JfemVyb2NvcHlgXG4qICAgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgXG4qICAgYF9feHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoYFxuKiAgIGB4c2tfdHhfY29tbWl0X2JhdGNoYFxuKiAgIGB4c2txX2NvbnNfcmVhZF9kZXNjX2JhdGNoYFxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYHhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2hgLCBgX194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgLCBhbmQgYHhza190eF9jb21taXRfYmF0Y2hgIGFyZSBhbGwgc3RhdGljLiBBbmQgYHhza3FfY29uc19yZWFkX2Rlc2NfYmF0Y2hgIGlzIHN0YXRpYyBpbmxpbmUuIFRoaXMgbWVhbnMgdGhleSBhcmUgbGlrZWx5IG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZWlyIHJlc3BlY3RpdmUgbW9kdWxlcywgYW5kIGhlbHBzIHRvIG5hcnJvdyBkb3duIHRoZSBzY29wZSBvZiBpbXBhY3QuXG5cblRoZXJlZm9yZSwgbXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIHByaW1hcnkgZnVuY3Rpb25zOlxuXG4qICAgYHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaGBcbiogICBgeHNrX3R4X2NvbXBsZXRlZGBcbiogICBgX194c2tfZ2VuZXJpY194bWl0YFxuKiAgIGB4c2tfYnVpbGRfc2tiYFxuKiAgIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YFxuXG5GaW5hbGx5LCBiZWZvcmUgSSBkaWcgZnVydGhlciwgSSBzaG91bGQganVzdCBjb25maXJtIHRoYXQgYHhza19idWlsZF9za2JgIGFuZCBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAgYXJlIG5vdCBzdGF0aWMsIGluIG9yZGVyIHRvIGF2b2lkIG1pc2ludGVycHJldGluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgY291bGQgYmUgY2FsbGVkLiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNDIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMTQ6MjE6NDEuNzQ4ODI1NDUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzM2NTEzNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1aWxkX3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTk2ND1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDA1LVxcbm5ldC94ZHAveHNrLmM6MTAwNjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMDctXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMDgxLVxcbm5ldC94ZHAveHNrLmM6MTA4MjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwODMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTEwODktXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMDkwOlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTA5MS1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTE4OD1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyMzQtXFxubmV0L3hkcC94c2suYzoxMjM1OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG5uZXQveGRwL3hzay5jLTEyMzYtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDE0OjIxOjQzLjg4MjQ4MTc3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1Mzk2Njg1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgdGhleSd2ZSBtYWRlIGFyZSBmYWlybHkgZnVuZGFtZW50YWwsIGZvY3VzZWQgb24gZW5oYW5jaW5nIHRoZSBUeCBwYXRoIHdpdGhpbiB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIGRlYWxpbmcgd2l0aCBpbnZhbGlkIGRlc2NyaXB0b3JzIGFuZCBjb21wbGV0aW9uIHJpbmcgaXNzdWVzLCBhbmQgaW50cm9kdWNpbmcgc29tZSBiYXRjaGluZyBhbmQgcmVjbGFtYXRpb24gbG9naWMuIEdpdmVuIHRoYXQsIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBrZXkgc3ltYm9scyBhcmUgdGhlIHJlbGV2YW50IGZvY2FsIHBvaW50cyB0byB0cmFjazpcblxuKiAgIGB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2hgXG4qICAgYHhza190eF9jb21wbGV0ZWRgXG4qICAgYF9feHNrX2dlbmVyaWNfeG1pdGBcbiogICBgeHNrX2J1aWxkX3NrYmBcbiogICBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWBcblxuVGhvc2UgYWxsIHNlZW0gc3RhdGljIGFuZCBkaXJlY3RseSBhZGRyZXNzIHRoZSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgdG8gQUZcXF9YRFAuIEkgY2FuIGNvbmZpZGVudGx5IGluY2x1ZGUgdGhvc2UgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuXG5cbk5vdywgYXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcy4uLiBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBgWERQX1NPQ0tFVFNgIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgaGVyZS4gSSdsbCBkb3VibGUgY2hlY2sgdG8gYmUgZXh0cmEgY2VydGFpbiwgYnV0IEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBmbGFncy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBidWlsdCB1cG9uIHRoZSBmdW5kYW1lbnRhbCBBRlxcX1hEUCBpbmZyYXN0cnVjdHVyZS4gSSB0aGluayB3ZSBhcmUgZ29vZCB0byBnby5cblxuVGltZSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBhbmQgbG9jayB0aGVzZSBwYXJhbWV0ZXJzIGludG8gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTI2LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQxNDoyMTo0OS40MjIxNTI4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5MDk1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoXCIsXG4gICAgXCJ4c2tfdHhfY29tcGxldGVkXCIsXG4gICAgXCJfX3hza19nZW5lcmljX3htaXRcIixcbiAgICBcInhza19idWlsZF9za2JcIixcbiAgICBcInhza19idWlsZF9za2JfemVyb2NvcHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUZfWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgaW52YWxpZCBkZXNjcmlwdG9ycyBhbmQgY29tcGxldGlvbiByaW5nIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgaW4gdGhlIFR4IHBhdGguIEl0IGludHJvZHVjZXMgYmF0Y2hpbmcgYW5kIHJlY2xhaW0gbG9naWMgZm9yIGRlc2NyaXB0b3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIEFGX1hEUCBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgQUZfWERQIHNvY2tldCBvcGVyYXRpb25zIChlLmcuLCB1c2luZyBnZW5lcmljIFhEUCBtb2RlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaFwiLFxuICAgIFwieHNrX3R4X2NvbXBsZXRlZFwiLFxuICAgIFwiX194c2tfZ2VuZXJpY194bWl0XCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiXCIsXG4gICAgXCJ4c2tfYnVpbGRfc2tiX3plcm9jb3B5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFGX1hEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIGludmFsaWQgZGVzY3JpcHRvcnMgYW5kIGNvbXBsZXRpb24gcmluZyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGluIHRoZSBUeCBwYXRoLiBJdCBpbnRyb2R1Y2VzIGJhdGNoaW5nIGFuZCByZWNsYWltIGxvZ2ljIGZvciBkZXNjcmlwdG9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBBRl9YRFAgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIEFGX1hEUCBzb2NrZXQgb3BlcmF0aW9ucyAoZS5nLiwgdXNpbmcgZ2VuZXJpYyBYRFAgbW9kZSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[1] Phase: Succeeded StartedAt: 2026-07-19 14:22:01 +0000 UTC FinishedAt: 2026-07-19 14:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-19 14:22:01 +0000 UTC FinishedAt: 2026-07-19 14:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2] Phase: Succeeded StartedAt: 2026-07-19 14:22:01 +0000 UTC FinishedAt: 2026-07-19 18:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-19 14:22:01 +0000 UTC FinishedAt: 2026-07-19 18:36:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-19 14:22:01 +0000 UTC FinishedAt: 2026-07-19 14:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-19 14:22:01 +0000 UTC FinishedAt: 2026-07-19 14:22:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7ggsn/series-workflow7ggsn-convert-artifact-2200196944/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-19 14:22:11 +0000 UTC FinishedAt: 2026-07-19 14:51:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-19 14:22:11 +0000 UTC FinishedAt: 2026-07-19 14:51:26 +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:*71bbc6da-5f53-43c4-bc72-1d16096a9ebb,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-workflow7ggsn/series-workflow7ggsn-convert-artifact-2200196944/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": "a963ca76-eefb-4e1c-8a54-f21f7ae0cbfc", "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-workflow7ggsn/series-workflow7ggsn-build-action-3315025366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-19 14:22:11 +0000 UTC FinishedAt: 2026-07-19 14:51:16 +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:*71bbc6da-5f53-43c4-bc72-1d16096a9ebb,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-workflow7ggsn/series-workflow7ggsn-convert-artifact-2200196944/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": "a963ca76-eefb-4e1c-8a54-f21f7ae0cbfc", "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-workflow7ggsn/series-workflow7ggsn-build-action-3315025366/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-19 14:51:26 +0000 UTC FinishedAt: 2026-07-19 14:51:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-19 14:51:26 +0000 UTC FinishedAt: 2026-07-19 14:51:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-19 14:51:26 +0000 UTC FinishedAt: 2026-07-19 14:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-19 14:51:26 +0000 UTC FinishedAt: 2026-07-19 14:51:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7ggsn/series-workflow7ggsn-convert-artifact-1510430391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-19 14:51:36 +0000 UTC FinishedAt: 2026-07-19 14:53:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-19 14:51:36 +0000 UTC FinishedAt: 2026-07-19 14:53:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a963ca76-eefb-4e1c-8a54-f21f7ae0cbfc,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-workflow7ggsn/series-workflow7ggsn-build-action-3315025366/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-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-19 14:53:41 +0000 UTC FinishedAt: 2026-07-19 14:53:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-19 14:53:41 +0000 UTC FinishedAt: 2026-07-19 14:53:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-19 14:53:41 +0000 UTC FinishedAt: 2026-07-19 15:30:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-19 14:53:41 +0000 UTC FinishedAt: 2026-07-19 15:30:52 +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:*71bbc6da-5f53-43c4-bc72-1d16096a9ebb,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-workflow7ggsn/series-workflow7ggsn-convert-artifact-1510430391/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": "5b5cbdad-45b8-4994-b81b-e21755d27db0", "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-workflow7ggsn/series-workflow7ggsn-build-action-3279599227/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-19 14:53:41 +0000 UTC FinishedAt: 2026-07-19 15:30:40 +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:*71bbc6da-5f53-43c4-bc72-1d16096a9ebb,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-workflow7ggsn/series-workflow7ggsn-convert-artifact-1510430391/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": "5b5cbdad-45b8-4994-b81b-e21755d27db0", "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-workflow7ggsn/series-workflow7ggsn-build-action-3279599227/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-19 15:30:52 +0000 UTC FinishedAt: 2026-07-19 15:30:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-19 15:30:52 +0000 UTC FinishedAt: 2026-07-19 15:30:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-19 15:30:52 +0000 UTC FinishedAt: 2026-07-19 15:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-19 15:30:52 +0000 UTC FinishedAt: 2026-07-19 15:32:42 +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:*5b5cbdad-45b8-4994-b81b-e21755d27db0,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-workflow7ggsn/series-workflow7ggsn-build-action-3279599227/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-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-19 15:32:53 +0000 UTC FinishedAt: 2026-07-19 18:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-19 15:32:53 +0000 UTC FinishedAt: 2026-07-19 15:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-19 15:32:53 +0000 UTC FinishedAt: 2026-07-19 15:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-19 15:32:54 +0000 UTC FinishedAt: 2026-07-19 18:36:28 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"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:*a963ca76-eefb-4e1c-8a54-f21f7ae0cbfc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b5cbdad-45b8-4994-b81b-e21755d27db0,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-workflow7ggsn/series-workflow7ggsn-build-action-3315025366/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-workflow7ggsn/series-workflow7ggsn-build-action-3279599227/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-19 15:32:54 +0000 UTC FinishedAt: 2026-07-19 15:33:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-19 15:32:54 +0000 UTC FinishedAt: 2026-07-19 15:33:30 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"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-workflow7ggsn/series-workflow7ggsn-convert-artifact-1561797360/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-19 15:32:54 +0000 UTC FinishedAt: 2026-07-19 15:32:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-19 15:33:39 +0000 UTC FinishedAt: 2026-07-19 18:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ggsn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_tx_peek_release_desc_batch","xsk_tx_completed","__xsk_generic_xmit","xsk_build_skb","xsk_build_skb_zerocopy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS"],"series_id":"f1a84680-81ab-4cf4-9508-acb6f7a92f65","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-19 15:33:39 +0000 UTC FinishedAt: 2026-07-19 18:36:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a963ca76-eefb-4e1c-8a54-f21f7ae0cbfc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b5cbdad-45b8-4994-b81b-e21755d27db0,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-workflow7ggsn/series-workflow7ggsn-build-action-3315025366/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-workflow7ggsn/series-workflow7ggsn-build-action-3279599227/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-workflow7ggsn/series-workflow7ggsn-convert-artifact-1561797360/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,}