Name: series-workflowg7k24 Phase: Succeeded StartedAt: 2026-09-02 04:53:57 +0000 UTC FinishedAt: 2026-09-02 09:01:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[0] Phase: Succeeded StartedAt: 2026-09-02 04:53:57 +0000 UTC FinishedAt: 2026-09-02 05:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 04:53:57 +0000 UTC FinishedAt: 2026-09-02 05:20:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "95df7d29-9c90-4935-80bb-4a818e798b44" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mem_alloc", "bpf_mem_free", "bpf_mem_free_rcu", "bpf_mem_cache_alloc", "bpf_mem_cache_free", "bpf_mem_cache_free_rcu", "bpf_mem_alloc_init", "bpf_mem_alloc_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfbWVtX2ZyZWUmIzM0OywKICAgICYjMzQ7YnBmX21lbV9mcmVlX3JjdSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfbWVtX2FsbG9jX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3IHNwaW5sb2NrIChgcmF3X3NwaW5sb2NrX3QgbG9ja2ApIGluIGBzdHJ1Y3QgYnBmX21lbV9jYWNoZWAgdG8gc3luY2hyb25pemUgY29uY3VycmVudCBsaXN0IG9wZXJhdGlvbnMgKGBsbGlzdF9kZWxfZmlyc3RgIGFuZCBgbGxpc3RfZGVsX2FsbGApIG9uIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLiBcblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhd19zcGlubG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBmcmVlX2J5X3JjdV90dHJhY2UgYW5kIHdhaXRpbmdfZm9yX2dwX3R0cmFjZSBsb2NrbGVzcyBsaXN0cyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYyksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGJ1bGsgYWxsb2NhdGlvbiwgUkNVIHByb2Nlc3NpbmcsIGFuZCBkcmFpbmluZy4gRnV6emluZyBCUEYgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIGVudHJ5IHBvaW50cyBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdGhyZWFkLXNhZmV0eSBhbmQgYXZvaWQgZGVhZGxvY2tzIG9yIGRhdGEgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM2Y2FjMzZhMWQ2M2YwZjk0N2JiYTM3YWQzN2JiYzZjZGZmZjNiZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA1OjE5OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuaW5kZXggZTk2NjJkYjcxOThmZS4uNTkyNzk0M2M3NjVhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5AQCAtMTE5LDYgJiM0MzsxMTksNyBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2U7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X3R0cmFjZTtcbiBcdGF0b21pY190IGNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcztcbiYjNDM7XHRyYXdfc3BpbmxvY2tfdCBsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJwZl9tZW1fY2FjaGVzIHtcbkBAIC0yMTQsMjUgJiM0MzsyMTUsMjUgQEAgc3RhdGljIHZvaWQgYWxsb2NfYnVsayhzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNudCwgaW50IG5vZGUsIGJvb2wgYXRvbWljKVxuIFx0Z2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDtcbiBcdGdmcCB8PSBhdG9taWMgPyBHRlBfTk9XQUlUIDogR0ZQX0tFUk5FTDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4tXHRcdCAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0XG4tXHRcdCAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuXG4tXHRcdCAqL1xuLVx0XHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuLVx0XHRpZiAoIW9iailcbi1cdFx0XHRicmVhaztcbi1cdFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcbi1cdH1cbi1cdGlmIChpIFx1MDAzZT0gY250KVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4mIzQzO1x0XHRcdCAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0XG4mIzQzO1x0XHRcdCAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuJiM0MztcdFx0XHRpZiAoIW9iailcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcbiYjNDM7XHRcdH1cbiBcbi1cdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4tXHRcdGlmICghb2JqKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuJiM0MztcdFx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbiYjNDM7XHRcdFx0aWYgKCFvYmopXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRpZiAoaSBcdTAwM2U9IGNudClcbiBcdFx0cmV0dXJuO1xuQEAgLTI3OSw4ICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyXG4gc3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuIFx0c3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdV90dHJhY2UpO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKVxuJiM0MztcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4gXG4tXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiYjNDM7XHRmcmVlX2FsbChjLCBsbG5vZGUsICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiB9XG4gXG5AQCAtMzAwLDcgJiM0MzszMDUsOCBAQCBzdGF0aWMgdm9pZCBkb19jYWxsX3JjdV90dHJhY2Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXG4gXG4gXHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDEpKSB7XG4gXHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0UoYy1cdTAwM2VkcmFpbmluZykpKSB7XG4tXHRcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4mIzQzO1x0XHRcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKVxuJiM0MztcdFx0XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuIFx0XHRcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5AQCAtNTM1LDYgJiM0Mzs1NDEsNyBAQCBpbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxuIFx0XHRcdGMtXHUwMDNlb2JqY2cgPSBvYmpjZztcbiBcdFx0XHRjLVx1MDAzZXBlcmNwdV9zaXplID0gcGVyY3B1X3NpemU7XG4gXHRcdFx0Yy1cdTAwM2V0Z3QgPSBjO1xuJiM0MztcdFx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRpbml0X3JlZmlsbF93b3JrKGMpO1xuIFx0XHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHRcdH1cbkBAIC01NTcsNyAmIzQzOzU2NCw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXG4gXHRcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0XHRjLVx1MDAzZXRndCA9IGM7XG4tXG4mIzQzO1x0XHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZjLVx1MDAzZWxvY2spO1xuIFx0XHRcdGluaXRfcmVmaWxsX3dvcmsoYyk7XG4gXHRcdFx0cHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTtcbiBcdFx0fVxuQEAgLTYwOSw3ICYjNDM7NjE2LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxuIFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0Yy1cdTAwM2V0Z3QgPSBjO1xuLVxuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdGluaXRfcmVmaWxsX3dvcmsoYyk7XG4gXHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWVtX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fZnJlZSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX21lbV9jYWNoZV9mcmVlJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfZnJlZV9yY3UmIzM0OywKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3X3NwaW5sb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGZyZWVfYnlfcmN1X3R0cmFjZSBhbmQgd2FpdGluZ19mb3JfZ3BfdHRyYWNlIGxvY2tsZXNzIGxpc3RzIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciAoa2VybmVsL2JwZi9tZW1hbGxvYy5jKSwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgYnVsayBhbGxvY2F0aW9uLCBSQ1UgcHJvY2Vzc2luZywgYW5kIGRyYWluaW5nLiBGdXp6aW5nIEJQRiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVjbGFtYXRpb24gZW50cnkgcG9pbnRzIGlzIHZhbHVhYmxlIHRvIHZlcmlmeSB0aHJlYWQtc2FmZXR5IGFuZCBhdm9pZCBkZWFkbG9ja3Mgb3IgZGF0YSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZjYWMzNmExZDYzZjBmOTQ3YmJhMzdhZDM3YmJjNmNkZmZmM2JmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDU6MTk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmMKaW5kZXggZTk2NjJkYjcxOThmZS4uNTkyNzk0M2M3NjVhNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwpAQCAtMTE5LDYgJiM0MzsxMTksNyBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7CiAJc3RydWN0IGxsaXN0X2hlYWQgd2FpdGluZ19mb3JfZ3BfdHRyYWNlOwogCXN0cnVjdCByY3VfaGVhZCByY3VfdHRyYWNlOwogCWF0b21pY190IGNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzczsKJiM0MzsJcmF3X3NwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0cnVjdCBicGZfbWVtX2NhY2hlcyB7CkBAIC0yMTQsMjUgJiM0MzsyMTUsMjUgQEAgc3RhdGljIHZvaWQgYWxsb2NfYnVsayhzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNudCwgaW50IG5vZGUsIGJvb2wgYXRvbWljKQogCWdmcCA9IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX0FDQ09VTlQ7CiAJZ2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKLQkJLyoKLQkJICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdCgmYW1wO2MtJmd0O2ZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzCi0JCSAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0Ci0JCSAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuCi0JCSAqLwotCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOwotCQlpZiAoIW9iaikKLQkJCWJyZWFrOwotCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwotCX0KLQlpZiAoaSAmZ3Q7PSBjbnQpCi0JCXJldHVybjsKJiM0MzsJc2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCAmYW1wO2MtJmd0O2xvY2spIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBGb3IgZXZlcnkgJiMzOTtjJiMzOTsgbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXMKJiM0MzsJCQkgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodAomIzQzOwkJCSAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuCiYjNDM7CQkJICovCiYjNDM7CQkJb2JqID0gbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsKJiM0MzsJCQlpZiAoIW9iaikKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJYWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTsKJiM0MzsJCX0KIAotCWZvciAoOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewotCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpOwotCQlpZiAoIW9iaikKLQkJCWJyZWFrOwotCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwomIzQzOwkJZm9yICg7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJb2JqID0gbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKTsKJiM0MzsJCQlpZiAoIW9iaikKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJYWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTsKJiM0MzsJCX0KIAl9CiAJaWYgKGkgJmd0Oz0gY250KQogCQlyZXR1cm47CkBAIC0yNzksOCAmIzQzOzI4MCwxMiBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlcgogc3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdV90dHJhY2UpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZhbXA7Yy0mZ3Q7bG9jaykKJiM0MzsJCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpOwogCi0JZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSksICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwomIzQzOwlmcmVlX2FsbChjLCBsbG5vZGUsICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwogCWF0b21pY19zZXQoJmFtcDtjLSZndDtjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApOwogfQogCkBAIC0zMDAsNyAmIzQzOzMwNSw4IEBAIHN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYykKIAogCWlmIChhdG9taWNfeGNoZygmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMSkpIHsKIAkJaWYgKHVubGlrZWx5KFJFQURfT05DRShjLSZndDtkcmFpbmluZykpKSB7Ci0JCQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsKJiM0MzsJCQlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZhbXA7Yy0mZ3Q7bG9jaykKJiM0MzsJCQkJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O2ZyZWVfYnlfcmN1X3R0cmFjZSk7CiAJCQlmcmVlX2FsbChjLCBsbG5vZGUsICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwogCQl9CiAJCXJldHVybjsKQEAgLTUzNSw2ICYjNDM7NTQxLDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSkKIAkJCWMtJmd0O29iamNnID0gb2JqY2c7CiAJCQljLSZndDtwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplOwogCQkJYy0mZ3Q7dGd0ID0gYzsKJiM0MzsJCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtjLSZndDtsb2NrKTsKIAkJCWluaXRfcmVmaWxsX3dvcmsoYyk7CiAJCQlwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpOwogCQl9CkBAIC01NTcsNyAmIzQzOzU2NCw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpCiAJCQljLSZndDtvYmpjZyA9IG9iamNnOwogCQkJYy0mZ3Q7cGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTsKIAkJCWMtJmd0O3RndCA9IGM7Ci0KJiM0MzsJCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtjLSZndDtsb2NrKTsKIAkJCWluaXRfcmVmaWxsX3dvcmsoYyk7CiAJCQlwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpOwogCQl9CkBAIC02MDksNyAmIzQzOzYxNiw3IEBAIGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSkKIAkJYy0mZ3Q7b2JqY2cgPSBvYmpjZzsKIAkJYy0mZ3Q7cGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTsKIAkJYy0mZ3Q7dGd0ID0gYzsKLQomIzQzOwkJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7Yy0mZ3Q7bG9jayk7CiAJCWluaXRfcmVmaWxsX3dvcmsoYyk7CiAJCXByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIExvb2tzIGxpa2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3QgbG9jaztgIHdpdGhpbiB0aGUgYHN0cnVjdCBicGZfbWVtX2NhY2hlYC4gQWgsIHNvIHRoaXMgaXMgdG8gYWRkIGZpbmUtZ3JhaW5lZCBsb2NraW5nLiBFeGNlbGxlbnQuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLCBsaWtlbHkgYXJvdW5kIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjYWNoZSBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktQ1BVIGVudmlyb25tZW50LCBhcyB0aGlzIGlzIEJQRiwgYW5kIHdlIGFyZSB3b3JraW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIGlzIGxpa2VseSB0byBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suCgpUaGUgbG9ja2luZyBzZWVtcyB0byBiZSBwcmltYXJpbHkgYXJvdW5kIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBhY2Nlc3NlcyB3aXRoaW4gYGFsbG9jX2J1bGtgLCBgX19mcmVlX3JjdWAsIGFuZCBgZG9fY2FsbF9yY3VfdHRyYWNlYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiBmcmVlaW5nIG1lbW9yeSB2aWEgUkNVIChSZWFkLUNvcHktVXBkYXRlKSwgYW5kIHRob3NlIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBzeW5jaHJvbml6ZWQgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3BpbmxvY2sgdXNpbmcgYHJhd19zcGluX2xvY2tfaW5pdCgmYW1wO2MtJmd0O2xvY2spYCBpbiBgYnBmX21lbV9hbGxvY19pbml0YCBhbmQgYGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdGAgY29uZmlybXMgdGhhdC4gR29vZCwgcHJvcGVyIGluaXRpYWxpemF0aW9uIGlzIGtleS4KCk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nLCBJIHNob3VsZCBwcm9iYWJseSB1c2UgYSB0b29sIGxpa2UgYGdyZXBwZXJgIChvciBqdXN0IGEgcXVpY2sgYHJlYWQtZmlsZWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UpIHRvIGluc3BlY3QgdGhlIGNvZGUgZGlyZWN0bHkuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGNoYW5nZSB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGxvY2sgYWRkaXRpb25zLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgdGhlIGFzc29jaWF0ZWQgY29uZmlncyBhbmQgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZmlsZSwganVzdCB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9ucyBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21lbV9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcdTAwM2Vcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz00ODc9c3RhdGljIHZvaWQgcHJlZmlsbF9tZW1fY2FjaGUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjcHUpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUwNy0gKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1MDg6aW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MDkte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NzYtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTc3OmludCBicGZfbWVtX2FsbG9jX3BlcmNwdV9pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU3OC17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU5MC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1OTE6aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU5Mi17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTY0Nz1zdGF0aWMgdm9pZCBjaGVja19tZW1fY2FjaGUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY1Ny1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo2NTg6c3RhdGljIHZvaWQgY2hlY2tfbGVha2VkX29ianMoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY1OS17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY4MC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo2ODE6c3RhdGljIHZvaWQgZnJlZV9tZW1fYWxsb2Nfbm9fYmFycmllcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjgyLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjkyLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjY5MzpzdGF0aWMgdm9pZCBmcmVlX21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjk0LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NzEwPXN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTEte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcxMjpcdHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYywgd29yayk7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzEzLVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTctXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzE4OnN0YXRpYyB2b2lkIGRlc3Ryb3lfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHJjdV9pbl9wcm9ncmVzcylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTkte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcyMDpcdHN0cnVjdCBicGZfbWVtX2FsbG9jICpjb3B5O1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcyMS1cbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzQyLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjc0Mzp2b2lkIGJwZl9tZW1fYWxsb2NfZGVzdHJveShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzQ0LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NzgzPXN0YXRpYyB2b2lkIG5vdHJhY2UgKnVuaXRfYWxsb2Moc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5MC1cdCAqIHByb2dfQVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjc5MTpcdCAqICAgYnBmX21lbV9hbGxvY1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5Mi1cdCAqICAgICAgcHJlZW1wdGlvbiBvciBpcnEgLVx1MDAzZSBwcm9nX0Jcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3OTM6XHQgKiAgICAgICAgYnBmX21lbV9hbGxvY1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5NC1cdCAqXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTg2Nj1zdGF0aWMgdm9pZCBub3RyYWNlIHVuaXRfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKnB0cilcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODg5LSAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjg5MDp2b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04OTEte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MDctXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTA4OnZvaWQgbm90cmFjZSBicGZfbWVtX2ZyZWUoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTA5LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTIzLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkyNDp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MjUte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MzktXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTQwOnZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQxLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQ3LVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk0ODp2b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk0OS17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk1NS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5NTY6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTU3LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTY4LSAqIEl0IGNvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmN1X3Rhc2tzX3RyYWNlIGNhbGxiYWNrIGRvZXMgbm90IGhhdmVcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5Njk6ICogYSBob2xkIG9uIHRoZSBvcmlnaW5hbCBicGZfbWVtX2FsbG9jIG9iamVjdCB0aGF0IGFsbG9jYXRlZCB0aGVcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NzAtICogJiMzOTtwdHImIzM5Oy4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRoZSB1bmNvbW1vbiBjb2RlIHBhdGguXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTcxOiAqIE90aGVyd2lzZSwgdGhlIGJwZl9tZW1fYWxsb2MmIzM5O3MgZnJlZV9sbGlzdCBjYW5ub3QgYmUgcmVmaWxsZWRcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NzItICogYW5kIG1heSBhZmZlY3QgcGVyZm9ybWFuY2UuXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk3ND12b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODUtICovXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTg2OnZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvY19mbGFncyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGdmcF90IGZsYWdzKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk4Ny17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTEwMDgtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAwOTppbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDEwLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAxOC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxMDE5OnZvaWQgYnBmX21lbV9hbGxvY19zZXRfZHRvcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyMC1cdFx0XHQgICAgdm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCksIHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTcxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBrZXJuZWwgQlBGIGJ1aWxkIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBDb21waWxhdGlvbiBDb250ZXh0KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBUaGlzIGlzbiYjMzk7dCBhIGh1Z2Ugc3VycHJpc2UsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCAqYXNzdW1lKiB0aGUgaW5jbHVkZSBwYXRocyBhbmQgY29uZmlndXJhdGlvbiBmbGFncy4gTXkgYmVzdCBiZXQgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSByZWxldmFudCBNYWtlZmlsZSBhbmQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIGFuZCB3aXRoIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGBtZW1hbGxvYy5jYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQmIzM5O3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBmbG93IGZvciB0aGF0IHNwZWNpZmljIGNvbXBvbmVudCBhbmQgdG8gdHJvdWJsZXNob290IGJ1aWxkIGlzc3VlcyBpZiB0aGV5IGFyaXNlIGxhdGVyLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSB0cmlnZ2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1hbGxvY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzIwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkNoZWNraW5nIHRoZSBCUEYgU3ljYWxsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdHJpZ2dlcmluZyB0aGUgY29tcGlsYXRpb24gb2YgYG1lbWFsbG9jLm9gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBgQlBGX1NZU0NBTExgIHNob3VsZCBiZSBkZWZpbmVkIHNvbWV3aGVyZSB0aGF0IGNvbnRyb2xzIHRoZSBhdmFpbGFiaWxpdHkgb2YgQlBGIHN5c2NhbGwgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSB0aGlua2luZyB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoZSBLY29uZmlnIGZpbGUgYXJlIGBpbml0L0tjb25maWdgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBhbmQgdGhlbiBJIHNob3VsZCBiZSBhYmxlIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoeSB0aGlzIG9iamVjdCBmaWxlIGlzIGJlaW5nIHB1bGxlZCBpbiBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipFeGFtaW5pbmcgQlBGX1NZU0NBTEwgRGVwZW5kZW5jaWVzKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEJQRl9TWVNDQUxMYC4gTXkgZmlyc3Qgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byB0cmFjZSBpdCBiYWNrIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgQlBGIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9TWVNDQUxMYCBuZWF0bHkgbGFpZCBvdXQgdGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgZW5hYmxlZCwgYW55IG90aGVyIGZlYXR1cmVzIGl0IGRlcGVuZHMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXRzIGF2YWlsYWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IHNwZWNpZmljIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyB0byBpdHMgZnVuY3Rpb25zLiBBZnRlciBhIGNhcmVmdWwgcmVhZCwgSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uOiBhIHJhdyBzcGlubG9jaywgYGxvY2tgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBzaWduYWxpbmcgY29uY3VycmVuY3kgaXNzdWVzIGJlaW5nIGFkZHJlc3NlZC4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgYHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjLSZndDtsb2NrKWAgYXJvdW5kIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIGxpa2VseSB0aGUgc291cmNlIG9mIHJhY2UgY29uZGl0aW9ucy4gV3JhcHBpbmcgdGhlIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBhY2Nlc3NlcyBpbiBgYWxsb2NfYnVsa2AsIGFuZCB0aGUgbWFuaXB1bGF0aW9ucyBvZiBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBpbiBgX19mcmVlX3JjdWAsIGFuZCBgZnJlZV9ieV9yY3VfdHRyYWNlYCBpbiBgZG9fY2FsbF9yY3VfdHRyYWNlYCBjb25maXJtcyB0aGlzLiBUaGUgc3BpbmxvY2sgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBzdGFydHVwIG9mIHRoZSBhbGxvY2F0b3IuCgpUaGlzIGlzIGEgY2xlYXItY3V0IGNvbmN1cnJlbmN5IGZpeCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGl0c2VsZiwgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwuIENvbnNpZGVyaW5nIHRoYXQgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGlzIGZ1bmRhbWVudGFsIHRvIEJQRiBtYXBzLCBsaWtlIGhhc2ggbWFwcywgYW5kIHRoZSBsaWZlY3ljbGUgb2YgQlBGIHByb2dyYW1zLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYGtwdHJgIGRlcmVmZXJlbmNlcyBhbmQgYGJwZl9vYmpfbmV3L2Ryb3BgIG9wZXJhdGlvbnMsIHRoaXMgaW1wYWN0cyBhIGxvdC4gVGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgZXhlY3V0aW9uIG9mIGFueSBCUEYgcHJvZ3JhbSBvciBtYXAgb3BlcmF0aW9uIHdpbGwgdG91Y2ggdGhpcyBjb2RlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGEgcmVzdWx0IG9mIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgYnV0IGV4cGxvaXRhYmxlLCByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBlbnRyeXBvaW50cyBhbmQgdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBgYWxsb2NfYnVsa2AsIGB1bml0X2FsbG9jYCwgYW5kIGB1bml0X2ZyZWVfcmN1YCBhcmUgY2FsbGVkIGZyb20gdG8gc2VlIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIExldCYjMzk7cyBsaXN0IHRoZSBleHBvc2VkLCBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yOiBgYnBmX21lbV9hbGxvY19pbml0YCwgYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzYCwgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgLCBhbmQgYGJwZl9tZW1fYWxsb2NfZGVzdHJveWAuIFRoZSBjYWxsIGdyYXBoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYWxsb2NfYnVsa2AgaXMgYWN0dWFsbHkgY2FsbGVkIHdpdGhpbiBga2VybmVsL2JwZi9tZW1hbGxvYy5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ld2x5IGFkZGVkIGxvY2sgaXMgcHJvdGVjdGluZyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19idWxrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYz0xNzI9c3RhdGljIHZvaWQgaW5jX2FjdGl2ZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTE4MC1cdFx0bG9jYWxfaXJxX3NhdmUoKmZsYWdzKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxODE6XHQvKiBhbGxvY19idWxrIHJ1bnMgZnJvbSBpcnFfd29yayB3aGljaCB3aWxsIG5vdCBwcmVlbXB0IGEgYnBmXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTgyLVx0ICogcHJvZ3JhbSB0aGF0IGRvZXMgdW5pdF9hbGxvYy91bml0X2ZyZWUgc2luY2UgSVJRcyBhcmVcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MTk3PXN0YXRpYyB2b2lkIGFkZF9vYmpfdG9fZnJlZV9saXN0KHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTIwNy0vKiBNb3N0bHkgcnVucyBmcm9tIGlycV93b3JrIGV4Y2VwdCBfX2luaXQgcGhhc2UuICovXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MjA4OnN0YXRpYyB2b2lkIGFsbG9jX2J1bGsoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjbnQsIGludCBub2RlLCBib29sIGF0b21pYylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0yMDkte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz00MjY9c3RhdGljIHZvaWQgYnBmX21lbV9yZWZpbGwoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00MzYtXHRcdCAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjQzNzpcdFx0YWxsb2NfYnVsayhjLCBjLVx1MDAzZWJhdGNoLCBOVU1BX05PX05PREUsIHRydWUpO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTQzOC1cdGVsc2UgaWYgKGNudCBcdTAwM2UgYy1cdTAwM2VoaWdoX3dhdGVybWFyaylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDg3PXN0YXRpYyB2b2lkIHByZWZpbGxfbWVtX2NhY2hlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00OTctXHRcdGNudCA9IDQ7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NDk4Olx0YWxsb2NfYnVsayhjLCBjbnQsIGNwdV90b19ub2RlKGNwdSksIGZhbHNlKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00OTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgTWVtb3J5IEFsbG9jYXRpb24gYW5kIEZyZWVpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIGhvdyB0aGUgYGFsbG9jX2J1bGtgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxhbmRzY2FwZS4gSSBrbm93IHRoYXQgYGFsbG9jX2J1bGtgIGlzIHVzZWQgZHVyaW5nIGBwcmVmaWxsX21lbV9jYWNoZWAsIHdoaWNoIGl0c2VsZiBpcyBwYXJ0IG9mIHRoZSBgYnBmX21lbV9hbGxvY19pbml0YCBzZXF1ZW5jZS4gVGhpcyBpcyB0aGUgc2V0dXAgcGhhc2UuIFRoZW4sIGl0JiMzOTtzIGFsc28gaW52b2tlZCB3aXRoaW4gYGJwZl9tZW1fcmVmaWxsYCwgd2hpY2ggaXMgc2NoZWR1bGVkIGFzIGBpcnFfd29ya2AgZHVyaW5nIGNhbGxzIHRvIGB1bml0X2FsbG9jYCBvciBgYnBmX21lbV9hbGxvY2AsIG9yIHRoZSBgYnBmX21lbV9jYWNoZV9hbGxvY2AgZnVuY3Rpb25zLiBTbywgdGhlc2UgYXJlIHRoZSBhbGxvY2F0aW9uIHBhdGhzLgoKTm93LCBvbiB0aGUgZnJlZWluZyBzaWRlLCBgX19mcmVlX3JjdWAgcG9wcyB1cC4gSSBrbm93IHRoYXQgaXQmIzM5O3MgYW4gUkNVIGNhbGxiYWNrLCBzY2hlZHVsZWQgYnkgYGRvX2NhbGxfcmN1X3R0cmFjZWAuIFRoaXMgd2hvbGUgcGF0aCBraWNrcyBvZmYgd2hlbiBvYmplY3RzIGFyZSBiZWluZyBmcmVlZCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVuaXRfZnJlZV9yY3VgIHdoaWNoIHRoZW4gZmxvd3MgaW50byBgYnBmX21lbV9mcmVlX3JjdWAsIGFuZCB0aGVuIGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBhbmQgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgIG9yIHRoZSBtb3JlIGdlbmVyYWwgYGJwZl9tZW1fZnJlZWAgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBkZWFsbG9jYXRpb24gcGFydCBvZiB0aGUgcHV6emxlLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZXh0ZXJuYWxseS4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgd2l0aGluIGB2bWxpbnV4YC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2ZyZWVfcmN1YCwgYGJwZl9tZW1fY2FjaGVfYWxsb2NgLCBgYnBmX21lbV9jYWNoZV9mcmVlYCwgYGJwZl9tZW1fY2FjaGVfZnJlZV9yY3VgLCBhbmQgYGJwZl9tZW1fYWxsb2NfaW5pdGAgYXJlIGFsbCBhY3R1YWxseSBhdmFpbGFibGUgYXMgZW50cnkgcG9pbnRzLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZ2FpbiBhbiBvdmVydmlldyBvZiB0aGUgbGFuZHNjYXBlLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9icGZfbWVtX2FsbG9jLmhgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZGVjbGFyZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgd2lsbCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAyMiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAgIDM6XHQjaWZuZGVmIF9CUEZfTUVNX0FMTE9DX0hcbiAgIDQ6XHQjZGVmaW5lIF9CUEZfTUVNX0FMTE9DX0hcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlcl90eXBlcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAgIDc6XHRcbiAgIDg6XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZTtcbiAgIDk6XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZXM7XG4gIDEwOlx0XG4gIDExOlx0c3RydWN0IGJwZl9tZW1fYWxsb2Mge1xuICAxMjpcdFx0c3RydWN0IGJwZl9tZW1fY2FjaGVzIF9fcGVyY3B1ICpjYWNoZXM7XG4gIDEzOlx0XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSBfX3BlcmNwdSAqY2FjaGU7XG4gIDE0Olx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gIDE1Olx0XHRib29sIHBlcmNwdTtcbiAgMTY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuICAxNzpcdFx0dm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCk7XG4gIDE4Olx0XHR2b2lkICpkdG9yX2N0eDtcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdC8qICYjMzk7c2l6ZSAhPSAwJiMzOTsgaXMgZm9yIGJwZl9tZW1fYWxsb2Mgd2hpY2ggbWFuYWdlcyBmaXhlZC1zaXplIG9iamVjdHMuXG4gIDIyOlx0ICogQWxsb2MgYW5kIGZyZWUgYXJlIGRvbmUgd2l0aCBicGZfbWVtX2NhY2hlX3thbGxvYyxmcmVlfSgpLlxuICAyMzpcdCAqXG4gIDI0Olx0ICogJiMzOTtzaXplID0gMCYjMzk7IGlzIGZvciBicGZfbWVtX2FsbG9jIHdoaWNoIG1hbmFnZXMgbWFueSBmaXhlZC1zaXplIG9iamVjdHMuXG4gIDI1Olx0ICogQWxsb2MgYW5kIGZyZWUgYXJlIGRvbmUgd2l0aCBicGZfbWVtX3thbGxvYyxmcmVlfSgpIGFuZCB0aGUgc2l6ZSBvZlxuICAyNjpcdCAqIHRoZSByZXR1cm5lZCBvYmplY3QgaXMgZ2l2ZW4gYnkgdGhlIHNpemUgYXJndW1lbnQgb2YgYnBmX21lbV9hbGxvYygpLlxuICAyNzpcdCAqIElmIHBlcmNwdSBlcXVhbHMgdHJ1ZSwgZXJyb3Igd2lsbCBiZSByZXR1cm5lZCBpbiBvcmRlciB0byBhdm9pZFxuICAyODpcdCAqIGxhcmdlIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgdGhlIGJlbG93IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdCgpXG4gIDI5Olx0ICogc2hvdWxkIGJlIHVzZWQgdG8gZG8gb24tZGVtYW5kIHBlci1jcHUgYWxsb2NhdGlvbiBmb3IgZWFjaCBzaXplLlxuICAzMDpcdCAqL1xuICAzMTpcdGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpO1xuICAzMjpcdC8qIEluaXRpYWxpemUgYSBub24tZml4LXNpemUgcGVyY3B1IG1lbW9yeSBhbGxvY2F0b3IgKi9cbiAgMzM6XHRpbnQgYnBmX21lbV9hbGxvY19wZXJjcHVfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gIDM0Olx0LyogVGhlIHBlcmNwdSBhbGxvY2F0aW9uIHdpdGggYSBzcGVjaWZpYyB1bml0IHNpemUuICovXG4gIDM1Olx0aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKTtcbiAgMzY6XHR2b2lkIGJwZl9tZW1fYWxsb2NfZGVzdHJveShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpO1xuICAzNzpcdHZvaWQgYnBmX21lbV9hbGxvY19zZXRfZHRvcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4gIDM4Olx0XHRcdFx0ICAgIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXG4gIDM5Olx0XHRcdFx0ICAgIHZvaWQgKCpkdG9yX2N0eF9mcmVlKSh2b2lkICpjdHgpLFxuICA0MDpcdFx0XHRcdCAgICB2b2lkICpjdHgpO1xuICA0MTpcdFxuICA0MjpcdC8qIENoZWNrIHRoZSBhbGxvY2F0aW9uIHNpemUgZm9yIGttYWxsb2MgZXF1aXZhbGVudCBhbGxvY2F0b3IgKi9cbiAgNDM6XHRpbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSk7XG4gIDQ0Olx0XG4gIDQ1Olx0Lyoga21hbGxvYy9rZnJlZSBlcXVpdmFsZW50OiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc1MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIGBicGZfbWVtX2FsbG9jLmhgKioKCkFscmlnaHQsIHRpbWUgdG8gc2hpZnQgZ2VhcnMgYW5kIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsZXZlbCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtYW5hZ2luZyBCUEYgcHJvZ3JhbSBtZW1vcnkgcmVzaWRlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIGhlYWRlciBmaWxlIGhvbGRzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl9tZW1fYWxsb2MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDY6XHR2b2lkICpicGZfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgc2l6ZV90IHNpemUpO1xuICA0NzpcdHZvaWQgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcbiAgNDg6XHR2b2lkIGJwZl9tZW1fZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpO1xuICA0OTpcdFxuICA1MDpcdC8qIGttZW1fY2FjaGVfYWxsb2MvZnJlZSBlcXVpdmFsZW50OiAqL1xuICA1MTpcdHZvaWQgKmJwZl9tZW1fY2FjaGVfYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKTtcbiAgNTI6XHR2b2lkIGJwZl9tZW1fY2FjaGVfZnJlZShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cik7XG4gIDUzOlx0dm9pZCBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcbiAgNTQ6XHR2b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKTtcbiAgNTU6XHR2b2lkICpicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgZ2ZwX3QgZmxhZ3MpO1xuICA1NjpcdFxuICA1NzpcdCNlbmRpZiAvKiBfQlBGX01FTV9BTExPQ19IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgQlBGIE1lbW9yeSBBbGxvY2F0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBjb2RlLiBGcm9tIHdoYXQgSSByZWNhbGwsIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIOKAkyBhcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlnIGRlcGVuZGVuY2llcywgb3IgcGVyaGFwcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYGlmZGVmc2ApIHdpdGhpbiBgbWVtYWxsb2MuY2AgaXRzZWxmIHRoYXQgY291bGQgaW1wYWN0IGl0cyBjb21waWxhdGlvbiBvciBiZWhhdmlvcj8gQmVzdCB0byB0YWtlIGEgbG9vayB3aXRoaW4gYG1lbWFsbG9jLmNgIGl0c2VsZiBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jPTE2MT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1jZyhjb25zdCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjIte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjE2MzojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTY0LVx0aWYgKGMtXHUwMDNlb2JqY2cpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTUwOD1pbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MzEtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MzMtXHRcdGlmIChtZW1jZ19icGZfZW5hYmxlZCgpKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NTQtXHRcdHJldHVybiAtRU5PTUVNO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjU1NTojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTU2LVx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTkKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaGVyZS4gSXQmIzM5O3MgdGhlIGtleSB0byBlbmFibGluZyB0aGUgYEJQRmAgZnVuY3Rpb25hbGl0eSwgYXMgYEJQRmAgaXMgc2VsZWN0ZWQgYnkgYEJQRl9TWVNDQUxMYC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZC4gUmlnaHQsIGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIGEgYm9vbGVhbiBzZXR0aW5nIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYXMgZXhwZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSYjMzk7dmUgZ290IGFsbCB0aGUgcmVxdWlyZW1lbnRzIGxpbmVkIHVwLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LgoKSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGBicGZfbWVtX2FsbG9jX2luaXRgLCBhbmQgYGJwZl9tZW1fYWxsb2NfZGVzdHJveWAuIFRoZXNlIGFyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiByb3V0aW5lcyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYykuIFRoYXQmIzM5O3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaC4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYHJhd19zcGlubG9ja2Agc3luY2hyb25pemF0aW9uIHRvIHByb3RlY3QgdGhlIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBsbGlzdCBvcGVyYXRpb25zLCBhbmQgdGhhdCBtYXR0ZXJzIGZvciBjb25jdXJyZW50IGFjY2VzcyBpbiBhbGxvY19idWxrLCBfX2ZyZWVfcmN1LCBhbmQgZG9fY2FsbF9yY3VfdHRyYWNlLiBCYXNpY2FsbHksIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgc3RhbmRhcmQgYW5kIHNlbnNpYmxlIGFwcHJvYWNoIHRvIGVuc3VyaW5nIHRocmVhZCBzYWZldHkgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50LgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tZW1fYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX21lbV9mcmVlJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fZnJlZV9yY3UmIzM0OywKICAgICYjMzQ7YnBmX21lbV9jYWNoZV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2ZyZWUmIzM0OywKICAgICYjMzQ7YnBmX21lbV9jYWNoZV9mcmVlX3JjdSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2FsbG9jX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX21lbV9hbGxvY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfbWVtX2ZyZWUmIzM0OywKICAgICYjMzQ7YnBmX21lbV9mcmVlX3JjdSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfbWVtX2FsbG9jX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhd19zcGlubG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBmcmVlX2J5X3JjdV90dHJhY2UgYW5kIHdhaXRpbmdfZm9yX2dwX3R0cmFjZSBsb2NrbGVzcyBsaXN0cyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYyksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGJ1bGsgYWxsb2NhdGlvbiwgUkNVIHByb2Nlc3NpbmcsIGFuZCBkcmFpbmluZy4gRnV6emluZyBCUEYgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIGVudHJ5IHBvaW50cyBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdGhyZWFkLXNhZmV0eSBhbmQgYXZvaWQgZGVhZGxvY2tzIG9yIGRhdGEgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXcgc3BpbmxvY2sgKGByYXdfc3BpbmxvY2tfdCBsb2NrYCkgaW4gYHN0cnVjdCBicGZfbWVtX2NhY2hlYCB0byBzeW5jaHJvbml6ZSBjb25jdXJyZW50IGxpc3Qgb3BlcmF0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgYW5kIGBsbGlzdF9kZWxfYWxsYCkgb24gYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBsaXN0IGNvcnJ1cHRpb24pLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBvciBmaXhlZCBoZXJlIChzdWNoIGFzIGxvY2tpbmcgdmlvbGF0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSAvIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBsaXN0IGNvcnJ1cHRpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNmNhYzM2YTFkNjNmMGY5NDdiYmEzN2FkMzdiYmM2Y2RmZmYzYmZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwNToxOTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwppbmRleCBlOTY2MmRiNzE5OGZlLi41OTI3OTQzYzc2NWE3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jCkBAIC0xMTksNiAmIzQzOzExOSw3IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2U7CiAJc3RydWN0IHJjdV9oZWFkIHJjdV90dHJhY2U7CiAJYXRvbWljX3QgY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzOwomIzQzOwlyYXdfc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RydWN0IGJwZl9tZW1fY2FjaGVzIHsKQEAgLTIxNCwyNSAmIzQzOzIxNSwyNSBAQCBzdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpCiAJZ2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDsKIAlnZnAgfD0gYXRvbWljID8gR0ZQX05PV0FJVCA6IEdGUF9LRVJORUw7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewotCQkvKgotCQkgKiBGb3IgZXZlcnkgJiMzOTtjJiMzOTsgbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXMKLQkJICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHQKLQkJICogbGxpc3RfYWRkKCkgYW5kIGxsaXN0X2RlbF9hbGwoKSBpbiBwYXJhbGxlbC4KLQkJICovCi0JCW9iaiA9IGxsaXN0X2RlbF9maXJzdCgmYW1wO2MtJmd0O2ZyZWVfYnlfcmN1X3R0cmFjZSk7Ci0JCWlmICghb2JqKQotCQkJYnJlYWs7Ci0JCWFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7Ci0JfQotCWlmIChpICZndDs9IGNudCkKLQkJcmV0dXJuOwomIzQzOwlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZhbXA7Yy0mZ3Q7bG9jaykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEZvciBldmVyeSAmIzM5O2MmIzM5OyBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOyBpcwomIzQzOwkJCSAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0CiYjNDM7CQkJICogbGxpc3RfYWRkKCkgYW5kIGxsaXN0X2RlbF9hbGwoKSBpbiBwYXJhbGxlbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOwomIzQzOwkJCWlmICghb2JqKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwomIzQzOwkJfQogCi0JZm9yICg7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCW9iaiA9IGxsaXN0X2RlbF9maXJzdCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSk7Ci0JCWlmICghb2JqKQotCQkJYnJlYWs7Ci0JCWFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7CiYjNDM7CQlmb3IgKDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpOwomIzQzOwkJCWlmICghb2JqKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwomIzQzOwkJfQogCX0KIAlpZiAoaSAmZ3Q7PSBjbnQpCiAJCXJldHVybjsKQEAgLTI3OSw4ICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyCiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjLSZndDtsb2NrKQomIzQzOwkJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSk7CiAKLQlmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7CiYjNDM7CWZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7CiAJYXRvbWljX3NldCgmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7CiB9CiAKQEAgLTMwMCw3ICYjNDM7MzA1LDggQEAgc3RhdGljIHZvaWQgZG9fY2FsbF9yY3VfdHRyYWNlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKQogCiAJaWYgKGF0b21pY194Y2hnKCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAxKSkgewogCQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKGMtJmd0O2RyYWluaW5nKSkpIHsKLQkJCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOwomIzQzOwkJCXNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjLSZndDtsb2NrKQomIzQzOwkJCQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsKIAkJCWZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7CiAJCX0KIAkJcmV0dXJuOwpAQCAtNTM1LDYgJiM0Mzs1NDEsNyBAQCBpbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KQogCQkJYy0mZ3Q7b2JqY2cgPSBvYmpjZzsKIAkJCWMtJmd0O3BlcmNwdV9zaXplID0gcGVyY3B1X3NpemU7CiAJCQljLSZndDt0Z3QgPSBjOwomIzQzOwkJCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO2MtJmd0O2xvY2spOwogCQkJaW5pdF9yZWZpbGxfd29yayhjKTsKIAkJCXByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7CiAJCX0KQEAgLTU1Nyw3ICYjNDM7NTY0LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSkKIAkJCWMtJmd0O29iamNnID0gb2JqY2c7CiAJCQljLSZndDtwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplOwogCQkJYy0mZ3Q7dGd0ID0gYzsKLQomIzQzOwkJCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO2MtJmd0O2xvY2spOwogCQkJaW5pdF9yZWZpbGxfd29yayhjKTsKIAkJCXByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7CiAJCX0KQEAgLTYwOSw3ICYjNDM7NjE2LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKQogCQljLSZndDtvYmpjZyA9IG9iamNnOwogCQljLSZndDtwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplOwogCQljLSZndDt0Z3QgPSBjOwotCiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtjLSZndDtsb2NrKTsKIAkJaW5pdF9yZWZpbGxfd29yayhjKTsKIAkJcHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgaXRzIG93biBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhbGwgYWJvdXQgYWRkaW5nIGEgc3BpbmxvY2sgdG8gdGhlIGBicGZfbWVtX2NhY2hlYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gdXNpbmcgaXQgdG8gcHJvdGVjdCBhIGZldyBsaW5rZWQgbGlzdCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQ6IGBhbGxvY19idWxrYCwgYF9fZnJlZV9yY3VgLCBgZG9fY2FsbF9yY3VfdHRyYWNlYCwgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIGFsbCBjZW50ZXJlZCBhcm91bmQgcHJvdGVjdGluZyBhY2Nlc3MgdG8gbGlua2VkIGxpc3RzIHRoYXQgc2VlbSB0byBiZSBpbnZvbHZlZCBpbiBSQ1UgZnJlZWluZyBvciB0cmFjZXBvaW50IGRhdGEuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGxpbmtlZCBsaXN0cy4gQXJlIHRoZXNlIHBvdGVudGlhbCBzb3VyY2VzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlmIG5vdCBwcm9wZXJseSBzeW5jaHJvbml6ZWQ/IEkgd2lsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEJhc2VkIG9uIGEgcXVpY2sgc2tpbSwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGl0IGNvdWxkIGFkZHJlc3Mgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIEJQRiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBjb250ZXh0LCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaWYgdGhlIGxvY2tpbmcgaXMgaW5jb3JyZWN0IG9yIGluY29tcGxldGUuIFRoaXMgY291bGQgYmUgYSBjYW5kaWRhdGUgZm9yIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiB0byBlbnN1cmUgdGhlc2UgY2hhbmdlcyBhcmUgZWZmZWN0aXZlIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMLCAqb2xkX21lbWNnO1xuIDIxMTpcdFx0Z2ZwX3QgZ2ZwO1xuIDIxMjpcdFx0dm9pZCAqb2JqO1xuIDIxMzpcdFx0aW50IGk7XG4gMjE0Olx0XG4gMjE1Olx0XHRnZnAgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UO1xuIDIxNjpcdFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xuIDIxNzpcdFxuIDIxODpcdFx0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spIHtcbiAyMTk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuIDIyMDpcdFx0XHRcdC8qXG4gMjIxOlx0XHRcdFx0ICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4gMjIyOlx0XHRcdFx0ICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHRcbiAyMjM6XHRcdFx0XHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxuIDIyNDpcdFx0XHRcdCAqL1xuIDIyNTpcdFx0XHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4gMjI2Olx0XHRcdFx0aWYgKCFvYmopXG4gMjI3Olx0XHRcdFx0XHRicmVhaztcbiAyMjg6XHRcdFx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuIDIyOTpcdFx0XHR9XG4gMjMwOlx0XG4gMjMxOlx0XHRcdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4gMjMyOlx0XHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbiAyMzM6XHRcdFx0XHRpZiAoIW9iailcbiAyMzQ6XHRcdFx0XHRcdGJyZWFrO1xuIDIzNTpcdFx0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4gMjM2Olx0XHRcdH1cbiAyMzc6XHRcdH1cbiAyMzg6XHRcdGlmIChpIFx1MDAzZT0gY250KVxuIDIzOTpcdFx0XHRyZXR1cm47XG4gMjQwOlx0XG4gMjQxOlx0XHRtZW1jZyA9IGdldF9tZW1jZyhjKTtcbiAyNDI6XHRcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xuIDI0MzpcdFx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiAyNDQ6XHRcdFx0LyogQWxsb2NhdGUsIGJ1dCBkb24mIzM5O3QgZGVwbGV0ZSBhdG9taWMgcmVzZXJ2ZXMgdGhhdCB0eXBpY2FsXG4gMjQ1Olx0XHRcdCAqIEdGUF9BVE9NSUMgd291bGQgZG8uIGlycV93b3JrIHJ1bnMgb24gdGhpcyBjcHUgYW5kIGttYWxsb2NcbiAyNDY6XHRcdFx0ICogd2lsbCBhbGxvY2F0ZSBmcm9tIHRoZSBjdXJyZW50IG51bWEgbm9kZSB3aGljaCBpcyB3aGF0IHdlXG4gMjQ3Olx0XHRcdCAqIHdhbnQgaGVyZS5cbiAyNDg6XHRcdFx0ICovXG4gMjQ5Olx0XHRcdG9iaiA9IF9fYWxsb2MoYywgbm9kZSwgZ2ZwKTtcbiAyNTA6XHRcdFx0aWYgKCFvYmopXG4gMjUxOlx0XHRcdFx0YnJlYWs7XG4gMjUyOlx0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG4gMjU1Olx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gMjU2Olx0fVxuIDI1NzpcdFxuIDI1ODpcdHN0YXRpYyB2b2lkIGZyZWVfb25lKHZvaWQgKm9iaiwgYm9vbCBwZXJjcHUpXG4gMjU5Olx0e1xuIDI2MDpcdFx0aWYgKHBlcmNwdSlcbiAyNjE6XHRcdFx0ZnJlZV9wZXJjcHUoKCh2b2lkIF9fcGVyY3B1ICoqKW9iailbMV0pO1xuIDI2MjpcdFxuIDI2MzpcdFx0a2ZyZWUob2JqKTtcbiAyNjQ6XHR9XG4gMjY1Olx0XG4gMjY2Olx0c3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJjcHUpXG4gMjY3Olx0e1xuIDI2ODpcdFx0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKnQ7XG4gMjY5Olx0XHRpbnQgY250ID0gMDtcbiAyNzA6XHRcbiAyNzE6XHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiAyNzI6XHRcdFx0aWYgKGMtXHUwMDNlZHRvcilcbiAyNzM6XHRcdFx0XHRjLVx1MDAzZWR0b3IoKHZvaWQgKilwb3MgJiM0MzsgTExJU1RfTk9ERV9TWiwgYy1cdTAwM2VkdG9yX2N0eCk7XG4gMjc0Olx0XHRcdGZyZWVfb25lKHBvcywgcGVyY3B1KTtcbiAyNzU6XHRcdFx0Y250JiM0MzsmIzQzOztcbiAyNzY6XHRcdH1cbiAyNzc6XHRcdHJldHVybiBjbnQ7XG4gMjc4Olx0fVxuIDI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTExCgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDUxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGNvbmN1cnJlbmN5IHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSB0aGUgYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AgZmlsZS4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3QgbG9ja2AgdG8gZ3VhcmQgYWNjZXNzIHRvIHRoZSBsb2NrbGVzcyBsaXN0cyBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAuIFRoZSBjb3JlIGlzc3VlIGl0JiMzOTtzIGFkZHJlc3NpbmcgaXMgcmFjZSBjb25kaXRpb25zIGFyaXNpbmcgZnJvbSBjb25jdXJyZW50IGRlbGV0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgaW4gYGFsbG9jX2J1bGtgIGFuZCBgbGxpc3RfZGVsX2FsbGAgaW4gYF9fZnJlZV9yY3VgIGFuZCBgZG9fY2FsbF9yY3VfdHRyYWNlYCkuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgc2VyaWFsaXppbmcgdGhvc2UgbGlzdCByZW1vdmFsIG9wZXJhdGlvbnMgd2l0aCBhIHNwaW5sb2NrIHRvIGVuc3VyZSBtdXR1YWwgZXhjbHVzaW9uLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciB1cyBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0LCBubyBuZXcgbWVtb3J5IGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCB2ZWN0b3IuIFdlJiMzOTtyZSBub3QgcmVhZGluZyBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG5vciBpcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDcml0aWNhbGx5LCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBzZW1hbnRpY3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBib3VuZHMgY2hlY2tzLiBUaGUgYnVncyBpdCYjMzk7cyBmaXhpbmcgYXJlIGZpcm1seSBpbiB0aGUgY29uY3VycmVuY3kvbG9ja2luZy9yYWNlIGNvbmRpdGlvbiBkb21haW47IHRoZSBleGlzdGluZyBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBkYXRhLXJhY2UvbG9jayBkZWJ1Z2dpbmcgdG9vbHMpIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMuIFRoZXkmIzM5O2xsIHBpY2sgdXAgb24gcG90ZW50aWFsIGxpc3QgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgc3RlbW1pbmcgZnJvbSB0aGUgcmFjZXMuCgpMZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGNyaXRlcmlhOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOZWdhdGl2ZS4KMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXQgZmllbGRzIHJlYWQgbGF0ZXI/IE5vLgo0LiAgQm91bmRzIGNoZWNrcy9sZW5ndGhzIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXQgYnl0ZXM/IEFic29sdXRlbHkgbm90LgoKU28sICpOZWVkc0tNU0FOID0gZmFsc2UqLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoaXMgcmVhc29uaW5nLiBXZSYjMzk7cmUgZm9jdXNpbmcgb24gS01TQU4gdnMgS0FTQU4uIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBvdXIgYWxsaWVzIGhlcmUg4oCTIEtBU0FOIGZsYWdzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlKSwgYW5kIExPQ0tERVAgdmVyaWZpZXMgbG9ja2luZyBjb3JyZWN0bmVzcy4gS01TQU4sIGhvd2V2ZXIsIGlzIGFsbCBhYm91dCB0cmFja2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgZGV0ZWN0aW5nIGxlYWtzIHRvIHVzZXJzcGFjZSBvciByZWFkcyBpbiBicmFuY2hpbmcvcG9pbnRlciBhcml0aG1ldGljLiBUaGUgcGF0Y2ggKnB1cmVseSogYWRkcyBzeW5jaHJvbml6YXRpb24g4oCTIGEgc3BpbmxvY2sg4oCTIHRvIHNlcmlhbGl6ZSBsaXN0IG1hbmlwdWxhdGlvbnMgb24gUkNVIHRyYWNlIGxpc3RzIGluIGBicGZfbWVtX2NhY2hlYC4gVGhlcmUmIzM5O3Mgbm90aGluZyBpbiBoZXJlIHRoYXQgdG91Y2hlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpdHNlbGYgb3IgY291bGQgZXhwb3NlIGl0LiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZmxhZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3IHNwaW5sb2NrIChgcmF3X3NwaW5sb2NrX3QgbG9ja2ApIGluIGBzdHJ1Y3QgYnBmX21lbV9jYWNoZWAgdG8gc3luY2hyb25pemUgY29uY3VycmVudCBsaXN0IG9wZXJhdGlvbnMgKGBsbGlzdF9kZWxfZmlyc3RgIGFuZCBgbGxpc3RfZGVsX2FsbGApIG9uIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLiBcblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXcgc3BpbmxvY2sgKGByYXdfc3BpbmxvY2tfdCBsb2NrYCkgaW4gYHN0cnVjdCBicGZfbWVtX2NhY2hlYCB0byBzeW5jaHJvbml6ZSBjb25jdXJyZW50IGxpc3Qgb3BlcmF0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgYW5kIGBsbGlzdF9kZWxfYWxsYCkgb24gYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBsaXN0IGNvcnJ1cHRpb24pLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBvciBmaXhlZCBoZXJlIChzdWNoIGFzIGxvY2tpbmcgdmlvbGF0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSAvIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBsaXN0IGNvcnJ1cHRpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToxOTo0NC4yOTM3ODQyNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM5NTg1NzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NcIixcbiAgICBcImJwZl9tZW1fZnJlZVwiLFxuICAgIFwiYnBmX21lbV9mcmVlX3JjdVwiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2luaXRcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfZGVzdHJveVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhdyBzcGlubG9jayAoYHJhd19zcGlubG9ja190IGxvY2tgKSBpbiBgc3RydWN0IGJwZl9tZW1fY2FjaGVgIHRvIHN5bmNocm9uaXplIGNvbmN1cnJlbnQgbGlzdCBvcGVyYXRpb25zIChgbGxpc3RfZGVsX2ZpcnN0YCBhbmQgYGxsaXN0X2RlbF9hbGxgKSBvbiBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAgd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvci4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjQ0LjI5Mzc4OTEwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMjE3ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzZjYWMzNmExZDYzZjBmOTQ3YmJhMzdhZDM3YmJjNmNkZmZmM2JmZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDA1OjE5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xcbmluZGV4IGU5NjYyZGI3MTk4ZmUuLjU5Mjc5NDNjNzY1YTcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jXFxuKysrIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXFxuQEAgLTExOSw2ICsxMTksNyBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwX3R0cmFjZTtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIHJjdV90dHJhY2U7XFxuIFxcdGF0b21pY190IGNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcztcXG4rXFx0cmF3X3NwaW5sb2NrX3QgbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfbWVtX2NhY2hlcyB7XFxuQEAgLTIxNCwyNSArMjE1LDI1IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2J1bGsoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjbnQsIGludCBub2RlLCBib29sIGF0b21pYylcXG4gXFx0Z2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDtcXG4gXFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpOyBpc1xcbi1cXHRcXHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxcbi1cXHRcXHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xcbi1cXHRcXHRpZiAoIW9iailcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuLVxcdH1cXG4tXFx0aWYgKGkgXFx1MDAzZT0gY250KVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmMtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpOyBpc1xcbitcXHRcXHRcXHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxcbitcXHRcXHRcXHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xcbitcXHRcXHRcXHRpZiAoIW9iailcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdGZvciAoOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4tXFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbi1cXHRcXHRpZiAoIW9iailcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuK1xcdFxcdGZvciAoOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbitcXHRcXHRcXHRpZiAoIW9iailcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAoaSBcXHUwMDNlPSBjbnQpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjc5LDggKzI4MCwxMiBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlclxcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZjLVxcdTAwM2Vsb2NrKVxcbitcXHRcXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbiBcXG4tXFx0ZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbChcXHUwMDI2Yy1cXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuK1xcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNmMtXFx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XFxuIH1cXG4gXFxuQEAgLTMwMCw3ICszMDUsOCBAQCBzdGF0aWMgdm9pZCBkb19jYWxsX3JjdV90dHJhY2Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXFxuIFxcbiBcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNmMtXFx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMSkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVxcdTAwM2VkcmFpbmluZykpKSB7XFxuLVxcdFxcdFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmMtXFx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XFxuK1xcdFxcdFxcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmMtXFx1MDAzZWxvY2spXFxuK1xcdFxcdFxcdFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmMtXFx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XFxuIFxcdFxcdFxcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC01MzUsNiArNTQxLDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcXG4gXFx0XFx0XFx0Yy1cXHUwMDNldGd0ID0gYztcXG4rXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0aW5pdF9yZWZpbGxfd29yayhjKTtcXG4gXFx0XFx0XFx0cHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTtcXG4gXFx0XFx0fVxcbkBAIC01NTcsNyArNTY0LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcXG4gXFx0XFx0XFx0Yy1cXHUwMDNldGd0ID0gYztcXG4tXFxuK1xcdFxcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2Yy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdGluaXRfcmVmaWxsX3dvcmsoYyk7XFxuIFxcdFxcdFxcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XFxuIFxcdFxcdH1cXG5AQCAtNjA5LDcgKzYxNiw3IEBAIGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSlcXG4gXFx0XFx0Yy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4gXFx0XFx0Yy1cXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcXG4gXFx0XFx0Yy1cXHUwMDNldGd0ID0gYztcXG4tXFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2Yy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGluaXRfcmVmaWxsX3dvcmsoYyk7XFxuIFxcdFxcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NDQuNzM1NTk4ODY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjc5NjAzODMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NcIixcbiAgICBcImJwZl9tZW1fZnJlZVwiLFxuICAgIFwiYnBmX21lbV9mcmVlX3JjdVwiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2luaXRcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM2Y2FjMzZhMWQ2M2YwZjk0N2JiYTM3YWQzN2JiYzZjZGZmZjNiZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA1OjE5OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tZW1hbGxvYy5jIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5pbmRleCBlOTY2MmRiNzE5OGZlLi41OTI3OTQzYzc2NWE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jXG4rKysgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbkBAIC0xMTksNiArMTE5LDcgQEAgc3RydWN0IGJwZl9tZW1fY2FjaGUge1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgd2FpdGluZ19mb3JfZ3BfdHRyYWNlO1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdV90dHJhY2U7XG4gXHRhdG9taWNfdCBjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3M7XG4rXHRyYXdfc3BpbmxvY2tfdCBsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJwZl9tZW1fY2FjaGVzIHtcbkBAIC0yMTQsMjUgKzIxNSwyNSBAQCBzdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpXG4gXHRnZnAgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UO1xuIFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpKyspIHtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV2ZXJ5ICdjJyBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpOyBpc1xuLVx0XHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxuLVx0XHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxuLVx0XHQgKi9cbi1cdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTtcbi1cdFx0aWYgKCFvYmopXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4tXHR9XG4tXHRpZiAoaSBcdTAwM2U9IGNudClcbi1cdFx0cmV0dXJuO1xuK1x0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpKyspIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXNcbitcdFx0XHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxuK1x0XHRcdCAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuXG4rXHRcdFx0ICovXG4rXHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTtcbitcdFx0XHRpZiAoIW9iailcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4rXHRcdH1cbiBcbi1cdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuLVx0XHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xuLVx0XHRpZiAoIW9iailcbi1cdFx0XHRicmVhaztcbi1cdFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcbitcdFx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbitcdFx0XHRpZiAoIW9iailcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4rXHRcdH1cbiBcdH1cbiBcdGlmIChpIFx1MDAzZT0gY250KVxuIFx0XHRyZXR1cm47XG5AQCAtMjc5LDggKzI4MCwxMiBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlclxuIHN0YXRpYyB2b2lkIF9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWVtX2NhY2hlICpjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3VfdHRyYWNlKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmMtXHUwMDNlbG9jaylcbitcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4gXG4tXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbitcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiBcdGF0b21pY19zZXQoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApO1xuIH1cbiBcbkBAIC0zMDAsNyArMzA1LDggQEAgc3RhdGljIHZvaWQgZG9fY2FsbF9yY3VfdHRyYWNlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxuIFxuIFx0aWYgKGF0b21pY194Y2hnKFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAxKSkge1xuIFx0XHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKGMtXHUwMDNlZHJhaW5pbmcpKSkge1xuLVx0XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuK1x0XHRcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKVxuK1x0XHRcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4gXHRcdFx0ZnJlZV9hbGwoYywgbGxub2RlLCAhIWMtXHUwMDNlcGVyY3B1X3NpemUpO1xuIFx0XHR9XG4gXHRcdHJldHVybjtcbkBAIC01MzUsNiArNTQxLDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcbiBcdFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdFx0Yy1cdTAwM2VwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplO1xuIFx0XHRcdGMtXHUwMDNldGd0ID0gYztcbitcdFx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRpbml0X3JlZmlsbF93b3JrKGMpO1xuIFx0XHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHRcdH1cbkBAIC01NTcsNyArNTY0LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcbiBcdFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdFx0Yy1cdTAwM2VwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplO1xuIFx0XHRcdGMtXHUwMDNldGd0ID0gYztcbi1cbitcdFx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRpbml0X3JlZmlsbF93b3JrKGMpO1xuIFx0XHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHRcdH1cbkBAIC02MDksNyArNjE2LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxuIFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0Yy1cdTAwM2V0Z3QgPSBjO1xuLVxuK1x0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0aW5pdF9yZWZpbGxfd29yayhjKTtcbiBcdFx0cHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjQ0LjczNTYwMDEyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1ODg2ODgxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIExvb2tzIGxpa2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3QgbG9jaztgIHdpdGhpbiB0aGUgYHN0cnVjdCBicGZfbWVtX2NhY2hlYC4gQWgsIHNvIHRoaXMgaXMgdG8gYWRkIGZpbmUtZ3JhaW5lZCBsb2NraW5nLiBFeGNlbGxlbnQuIEknbSBhc3N1bWluZyB0aGlzIGlzIHRvIHByb3RlY3QgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMsIGxpa2VseSBhcm91bmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGNhY2hlIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aS1DUFUgZW52aXJvbm1lbnQsIGFzIHRoaXMgaXMgQlBGLCBhbmQgd2UgYXJlIHdvcmtpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiwgd2hpY2ggaXMgbGlrZWx5IHRvIGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay5cblxuVGhlIGxvY2tpbmcgc2VlbXMgdG8gYmUgcHJpbWFyaWx5IGFyb3VuZCBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAgYWNjZXNzZXMgd2l0aGluIGBhbGxvY19idWxrYCwgYF9fZnJlZV9yY3VgLCBhbmQgYGRvX2NhbGxfcmN1X3R0cmFjZWAuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gZnJlZWluZyBtZW1vcnkgdmlhIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSksIGFuZCB0aG9zZSBvcGVyYXRpb25zIG5lZWQgdG8gYmUgc3luY2hyb25pemVkIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNwaW5sb2NrIHVzaW5nIGByYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKWAgaW4gYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXRgIGNvbmZpcm1zIHRoYXQuIEdvb2QsIHByb3BlciBpbml0aWFsaXphdGlvbiBpcyBrZXkuXG5cbk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nLCBJIHNob3VsZCBwcm9iYWJseSB1c2UgYSB0b29sIGxpa2UgYGdyZXBwZXJgIChvciBqdXN0IGEgcXVpY2sgYHJlYWQtZmlsZWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UpIHRvIGluc3BlY3QgdGhlIGNvZGUgZGlyZWN0bHkuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGNoYW5nZSB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGxvY2sgYWRkaXRpb25zLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgdGhlIGFzc29jaWF0ZWQgY29uZmlncyBhbmQgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZmlsZSwganVzdCB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9ucyBoYXZlbid0IGludHJvZHVjZWQgYW55IHVuaW50ZW5kZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjUyLjMyNDI5MTA3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE5MDM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWVtX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX21lbV9hbGxvYy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDg3PXN0YXRpYyB2b2lkIHByZWZpbGxfbWVtX2NhY2hlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUwNy0gKi9cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTA4OmludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUwOS17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTc2LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1Nzc6aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU3OC17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTkwLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1OTE6aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01OTIte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTY0Nz1zdGF0aWMgdm9pZCBjaGVja19tZW1fY2FjaGUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjU3LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo2NTg6c3RhdGljIHZvaWQgY2hlY2tfbGVha2VkX29ianMoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02NTkte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY4MC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NjgxOnN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jX25vX2JhcnJpZXIoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02ODIte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY5Mi1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NjkzOnN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSlcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjk0LXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYz03MTA9c3RhdGljIHZvaWQgZnJlZV9tZW1fYWxsb2NfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTEte1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3MTI6XFx0c3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBicGZfbWVtX2FsbG9jLCB3b3JrKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzEzLVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxNy1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzE4OnN0YXRpYyB2b2lkIGRlc3Ryb3lfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHJjdV9pbl9wcm9ncmVzcylcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE5LXtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzIwOlxcdHN0cnVjdCBicGZfbWVtX2FsbG9jICpjb3B5O1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MjEtXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzQyLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3NDM6dm9pZCBicGZfbWVtX2FsbG9jX2Rlc3Ryb3koc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NDQte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTc4Mz1zdGF0aWMgdm9pZCBub3RyYWNlICp1bml0X2FsbG9jKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5MC1cXHQgKiBwcm9nX0FcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzkxOlxcdCAqICAgYnBmX21lbV9hbGxvY1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03OTItXFx0ICogICAgICBwcmVlbXB0aW9uIG9yIGlycSAtXFx1MDAzZSBwcm9nX0JcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzkzOlxcdCAqICAgICAgICBicGZfbWVtX2FsbG9jXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5NC1cXHQgKlxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTg2Nj1zdGF0aWMgdm9pZCBub3RyYWNlIHVuaXRfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04ODktICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjg5MDp2b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODkxLXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MDctXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkwODp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MDkte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkyMy1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTI0OnZvaWQgbm90cmFjZSBicGZfbWVtX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MjUte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkzOS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTQwOnZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk0MS17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQ3LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5NDg6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQ5LXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NTUtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk1Njp2b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTU3LXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NjgtICogSXQgY291bGQgYmUgdXNlZCB3aGVuIHRoZSByY3VfdGFza3NfdHJhY2UgY2FsbGJhY2sgZG9lcyBub3QgaGF2ZVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5Njk6ICogYSBob2xkIG9uIHRoZSBvcmlnaW5hbCBicGZfbWVtX2FsbG9jIG9iamVjdCB0aGF0IGFsbG9jYXRlZCB0aGVcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTcwLSAqICdwdHInLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gdGhlIHVuY29tbW9uIGNvZGUgcGF0aC5cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTcxOiAqIE90aGVyd2lzZSwgdGhlIGJwZl9tZW1fYWxsb2MncyBmcmVlX2xsaXN0IGNhbm5vdCBiZSByZWZpbGxlZFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NzItICogYW5kIG1heSBhZmZlY3QgcGVyZm9ybWFuY2UuXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9OTc0PXZvaWQgYnBmX21lbV9jYWNoZV9yYXdfZnJlZSh2b2lkICpwdHIpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTg1LSAqL1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5ODY6dm9pZCBub3RyYWNlICpicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgZ2ZwX3QgZmxhZ3MpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAwOC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAwOTppbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSlcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAxMC17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAxOC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAxOTp2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICgqZHRvcikodm9pZCAqb2JqLCB2b2lkICpjdHgpLFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDIwLVxcdFxcdFxcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToxOTo1Mi4zODc0ODU0ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ5MTQyNDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBrZXJuZWwgQlBGIGJ1aWxkIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIENvbXBpbGF0aW9uIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGZvciBga2VybmVsL2JwZi9tZW1hbGxvYy5jYC4gVGhpcyBpc24ndCBhIGh1Z2Ugc3VycHJpc2UsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCAqYXNzdW1lKiB0aGUgaW5jbHVkZSBwYXRocyBhbmQgY29uZmlndXJhdGlvbiBmbGFncy4gTXkgYmVzdCBiZXQgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSByZWxldmFudCBNYWtlZmlsZSBhbmQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IHdpdGggYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBzaG91bGQgdGVsbCBtZSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgYW5kIHdpdGggd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYG1lbWFsbG9jLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgZmxvdyBmb3IgdGhhdCBzcGVjaWZpYyBjb21wb25lbnQgYW5kIHRvIHRyb3VibGVzaG9vdCBidWlsZCBpc3N1ZXMgaWYgdGhleSBhcmlzZSBsYXRlci4gSSdtIGxvb2tpbmcgZm9yIHRoZSB0cmlnZ2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjU0LjIzNjYzMDkyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1NjY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1hbGxvY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTQuMjg0MTk0MTc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY4ODk0MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkNoZWNraW5nIHRoZSBCUEYgU3ljYWxsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0cmlnZ2VyaW5nIHRoZSBjb21waWxhdGlvbiBvZiBgbWVtYWxsb2Mub2AuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIExldCdzIHNlZS4uLiBgQlBGX1NZU0NBTExgIHNob3VsZCBiZSBkZWZpbmVkIHNvbWV3aGVyZSB0aGF0IGNvbnRyb2xzIHRoZSBhdmFpbGFiaWxpdHkgb2YgQlBGIHN5c2NhbGwgZnVuY3Rpb25hbGl0eSwgc28gSSdtIHRoaW5raW5nIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhlIEtjb25maWcgZmlsZSBhcmUgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgYW5kIHRoZW4gSSBzaG91bGQgYmUgYWJsZSB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aHkgdGhpcyBvYmplY3QgZmlsZSBpcyBiZWluZyBwdWxsZWQgaW4gYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzIwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTUuOTczMTQwMzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE4MTMxMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTcuNTY0OTcyNDE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NTA1MTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkV4YW1pbmluZyBCUEZfU1lTQ0FMTCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBCUEZfU1lTQ0FMTGAuIE15IGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdHJhY2UgaXQgYmFjayB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSdsbCBoZWFkIHN0cmFpZ2h0IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBCUEYgb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIG5lYXRseSBsYWlkIG91dCB0aGVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgZW5hYmxlZCwgYW55IG90aGVyIGZlYXR1cmVzIGl0IGRlcGVuZHMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXRzIGF2YWlsYWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IHNwZWNpZmljIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToxOTo1OS4zNTAwMjY4MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTkuMzUwMDg5NjY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2OTY3MTQ3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyB0byBpdHMgZnVuY3Rpb25zLiBBZnRlciBhIGNhcmVmdWwgcmVhZCwgSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uOiBhIHJhdyBzcGlubG9jaywgYGxvY2tgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBzaWduYWxpbmcgY29uY3VycmVuY3kgaXNzdWVzIGJlaW5nIGFkZHJlc3NlZC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spYCBhcm91bmQgb3BlcmF0aW9ucyB0aGF0IHdlcmUgbGlrZWx5IHRoZSBzb3VyY2Ugb2YgcmFjZSBjb25kaXRpb25zLiBXcmFwcGluZyB0aGUgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGFjY2Vzc2VzIGluIGBhbGxvY19idWxrYCwgYW5kIHRoZSBtYW5pcHVsYXRpb25zIG9mIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGluIGBfX2ZyZWVfcmN1YCwgYW5kIGBmcmVlX2J5X3JjdV90dHJhY2VgIGluIGBkb19jYWxsX3JjdV90dHJhY2VgIGNvbmZpcm1zIHRoaXMuIFRoZSBzcGlubG9jayBpcyBpbml0aWFsaXplZCBkdXJpbmcgdGhlIHN0YXJ0dXAgb2YgdGhlIGFsbG9jYXRvci5cblxuVGhpcyBpcyBhIGNsZWFyLWN1dCBjb25jdXJyZW5jeSBmaXggd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciBpdHNlbGYsIGFuZCB0aGF0J3MgY3JpdGljYWwuIENvbnNpZGVyaW5nIHRoYXQgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGlzIGZ1bmRhbWVudGFsIHRvIEJQRiBtYXBzLCBsaWtlIGhhc2ggbWFwcywgYW5kIHRoZSBsaWZlY3ljbGUgb2YgQlBGIHByb2dyYW1zLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYGtwdHJgIGRlcmVmZXJlbmNlcyBhbmQgYGJwZl9vYmpfbmV3L2Ryb3BgIG9wZXJhdGlvbnMsIHRoaXMgaW1wYWN0cyBhIGxvdC4gVGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgZXhlY3V0aW9uIG9mIGFueSBCUEYgcHJvZ3JhbSBvciBtYXAgb3BlcmF0aW9uIHdpbGwgdG91Y2ggdGhpcyBjb2RlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGEgcmVzdWx0IG9mIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgYnV0IGV4cGxvaXRhYmxlLCByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZW50cnlwb2ludHMgYW5kIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBzZWUgd2hlcmUgYGFsbG9jX2J1bGtgLCBgdW5pdF9hbGxvY2AsIGFuZCBgdW5pdF9mcmVlX3JjdWAgYXJlIGNhbGxlZCBmcm9tIHRvIHNlZSB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBMZXQncyBsaXN0IHRoZSBleHBvc2VkLCBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yOiBgYnBmX21lbV9hbGxvY19pbml0YCwgYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzYCwgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgLCBhbmQgYGJwZl9tZW1fYWxsb2NfZGVzdHJveWAuIFRoZSBjYWxsIGdyYXBoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhbGxvY19idWxrYCBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbmV3bHkgYWRkZWQgbG9jayBpcyBwcm90ZWN0aW5nIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDowNS4wNDY4MDYzMjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODM2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2J1bGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuYz0xNzI9c3RhdGljIHZvaWQgaW5jX2FjdGl2ZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTgwLVxcdFxcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjE4MTpcXHQvKiBhbGxvY19idWxrIHJ1bnMgZnJvbSBpcnFfd29yayB3aGljaCB3aWxsIG5vdCBwcmVlbXB0IGEgYnBmXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTE4Mi1cXHQgKiBwcm9ncmFtIHRoYXQgZG9lcyB1bml0X2FsbG9jL3VuaXRfZnJlZSBzaW5jZSBJUlFzIGFyZVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTE5Nz1zdGF0aWMgdm9pZCBhZGRfb2JqX3RvX2ZyZWVfbGlzdChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTIwNy0vKiBNb3N0bHkgcnVucyBmcm9tIGlycV93b3JrIGV4Y2VwdCBfX2luaXQgcGhhc2UuICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjIwODpzdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTIwOS17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDI2PXN0YXRpYyB2b2lkIGJwZl9tZW1fcmVmaWxsKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00MzYtXFx0XFx0ICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjQzNzpcXHRcXHRhbGxvY19idWxrKGMsIGMtXFx1MDAzZWJhdGNoLCBOVU1BX05PX05PREUsIHRydWUpO1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00MzgtXFx0ZWxzZSBpZiAoY250IFxcdTAwM2UgYy1cXHUwMDNlaGlnaF93YXRlcm1hcmspXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDg3PXN0YXRpYyB2b2lkIHByZWZpbGxfbWVtX2NhY2hlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTQ5Ny1cXHRcXHRjbnQgPSA0O1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo0OTg6XFx0YWxsb2NfYnVsayhjLCBjbnQsIGNwdV90b19ub2RlKGNwdSksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNDk5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MDUuMDk2NjQ1NzQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NDc1MTQyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgRnJlZWluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIGhvdyB0aGUgYGFsbG9jX2J1bGtgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxhbmRzY2FwZS4gSSBrbm93IHRoYXQgYGFsbG9jX2J1bGtgIGlzIHVzZWQgZHVyaW5nIGBwcmVmaWxsX21lbV9jYWNoZWAsIHdoaWNoIGl0c2VsZiBpcyBwYXJ0IG9mIHRoZSBgYnBmX21lbV9hbGxvY19pbml0YCBzZXF1ZW5jZS4gVGhpcyBpcyB0aGUgc2V0dXAgcGhhc2UuIFRoZW4sIGl0J3MgYWxzbyBpbnZva2VkIHdpdGhpbiBgYnBmX21lbV9yZWZpbGxgLCB3aGljaCBpcyBzY2hlZHVsZWQgYXMgYGlycV93b3JrYCBkdXJpbmcgY2FsbHMgdG8gYHVuaXRfYWxsb2NgIG9yIGBicGZfbWVtX2FsbG9jYCwgb3IgdGhlIGBicGZfbWVtX2NhY2hlX2FsbG9jYCBmdW5jdGlvbnMuIFNvLCB0aGVzZSBhcmUgdGhlIGFsbG9jYXRpb24gcGF0aHMuXG5cbk5vdywgb24gdGhlIGZyZWVpbmcgc2lkZSwgYF9fZnJlZV9yY3VgIHBvcHMgdXAuIEkga25vdyB0aGF0IGl0J3MgYW4gUkNVIGNhbGxiYWNrLCBzY2hlZHVsZWQgYnkgYGRvX2NhbGxfcmN1X3R0cmFjZWAuIFRoaXMgd2hvbGUgcGF0aCBraWNrcyBvZmYgd2hlbiBvYmplY3RzIGFyZSBiZWluZyBmcmVlZCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVuaXRfZnJlZV9yY3VgIHdoaWNoIHRoZW4gZmxvd3MgaW50byBgYnBmX21lbV9mcmVlX3JjdWAsIGFuZCB0aGVuIGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBhbmQgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgIG9yIHRoZSBtb3JlIGdlbmVyYWwgYGJwZl9tZW1fZnJlZWAgZnVuY3Rpb25zLiBUaGF0J3MgdGhlIGRlYWxsb2NhdGlvbiBwYXJ0IG9mIHRoZSBwdXp6bGUuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGV4dGVybmFsbHkuIEkgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgd2l0aGluIGB2bWxpbnV4YC4gU28sIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGFuZCBgYnBmX21lbV9hbGxvY19pbml0YCBhcmUgYWxsIGFjdHVhbGx5IGF2YWlsYWJsZSBhcyBlbnRyeSBwb2ludHMuXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGdhaW4gYW4gb3ZlcnZpZXcgb2YgdGhlIGxhbmRzY2FwZSwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZGVjbGFyZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgd2lsbCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MDguNjQ0MTYyNDI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDIyIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbiAgIDM6XFx0I2lmbmRlZiBfQlBGX01FTV9BTExPQ19IXFxuICAgNDpcXHQjZGVmaW5lIF9CUEZfTUVNX0FMTE9DX0hcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlcl90eXBlcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZTtcXG4gICA5OlxcdHN0cnVjdCBicGZfbWVtX2NhY2hlcztcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RydWN0IGJwZl9tZW1fYWxsb2Mge1xcbiAgMTI6XFx0XFx0c3RydWN0IGJwZl9tZW1fY2FjaGVzIF9fcGVyY3B1ICpjYWNoZXM7XFxuICAxMzpcXHRcXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSBfX3BlcmNwdSAqY2FjaGU7XFxuICAxNDpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuICAxNTpcXHRcXHRib29sIHBlcmNwdTtcXG4gIDE2OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiAgMTc6XFx0XFx0dm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCk7XFxuICAxODpcXHRcXHR2b2lkICpkdG9yX2N0eDtcXG4gIDE5OlxcdH07XFxuICAyMDpcXHRcXG4gIDIxOlxcdC8qICdzaXplICE9IDAnIGlzIGZvciBicGZfbWVtX2FsbG9jIHdoaWNoIG1hbmFnZXMgZml4ZWQtc2l6ZSBvYmplY3RzLlxcbiAgMjI6XFx0ICogQWxsb2MgYW5kIGZyZWUgYXJlIGRvbmUgd2l0aCBicGZfbWVtX2NhY2hlX3thbGxvYyxmcmVlfSgpLlxcbiAgMjM6XFx0ICpcXG4gIDI0OlxcdCAqICdzaXplID0gMCcgaXMgZm9yIGJwZl9tZW1fYWxsb2Mgd2hpY2ggbWFuYWdlcyBtYW55IGZpeGVkLXNpemUgb2JqZWN0cy5cXG4gIDI1OlxcdCAqIEFsbG9jIGFuZCBmcmVlIGFyZSBkb25lIHdpdGggYnBmX21lbV97YWxsb2MsZnJlZX0oKSBhbmQgdGhlIHNpemUgb2ZcXG4gIDI2OlxcdCAqIHRoZSByZXR1cm5lZCBvYmplY3QgaXMgZ2l2ZW4gYnkgdGhlIHNpemUgYXJndW1lbnQgb2YgYnBmX21lbV9hbGxvYygpLlxcbiAgMjc6XFx0ICogSWYgcGVyY3B1IGVxdWFscyB0cnVlLCBlcnJvciB3aWxsIGJlIHJldHVybmVkIGluIG9yZGVyIHRvIGF2b2lkXFxuICAyODpcXHQgKiBsYXJnZSBtZW1vcnkgY29uc3VtcHRpb24gYW5kIHRoZSBiZWxvdyBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoKVxcbiAgMjk6XFx0ICogc2hvdWxkIGJlIHVzZWQgdG8gZG8gb24tZGVtYW5kIHBlci1jcHUgYWxsb2NhdGlvbiBmb3IgZWFjaCBzaXplLlxcbiAgMzA6XFx0ICovXFxuICAzMTpcXHRpbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KTtcXG4gIDMyOlxcdC8qIEluaXRpYWxpemUgYSBub24tZml4LXNpemUgcGVyY3B1IG1lbW9yeSBhbGxvY2F0b3IgKi9cXG4gIDMzOlxcdGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV9pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcXG4gIDM0OlxcdC8qIFRoZSBwZXJjcHUgYWxsb2NhdGlvbiB3aXRoIGEgc3BlY2lmaWMgdW5pdCBzaXplLiAqL1xcbiAgMzU6XFx0aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKTtcXG4gIDM2OlxcdHZvaWQgYnBmX21lbV9hbGxvY19kZXN0cm95KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSk7XFxuICAzNzpcXHR2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXFxuICAzOTpcXHRcXHRcXHRcXHQgICAgdm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCksXFxuICA0MDpcXHRcXHRcXHRcXHQgICAgdm9pZCAqY3R4KTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0LyogQ2hlY2sgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Iga21hbGxvYyBlcXVpdmFsZW50IGFsbG9jYXRvciAqL1xcbiAgNDM6XFx0aW50IGJwZl9tZW1fYWxsb2NfY2hlY2tfc2l6ZShib29sIHBlcmNwdSwgc2l6ZV90IHNpemUpO1xcbiAgNDQ6XFx0XFxuICA0NTpcXHQvKiBrbWFsbG9jL2tmcmVlIGVxdWl2YWxlbnQ6ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjIwOjA4LjY0NDIyODY1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY3NTIyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfbWVtX2FsbG9jLmhgKipcblxuQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbGV2ZWwgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtYW5hZ2luZyBCUEYgcHJvZ3JhbSBtZW1vcnkgcmVzaWRlLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiBmb3IgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIExldCdzIHNlZSB3aGF0IGdlbXMgdGhpcyBoZWFkZXIgZmlsZSBob2xkcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxMC41MTE3NTM1NjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9icGZfbWVtX2FsbG9jLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDY6XFx0dm9pZCAqYnBmX21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHNpemVfdCBzaXplKTtcXG4gIDQ3OlxcdHZvaWQgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcXG4gIDQ4OlxcdHZvaWQgYnBmX21lbV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cik7XFxuICA0OTpcXHRcXG4gIDUwOlxcdC8qIGttZW1fY2FjaGVfYWxsb2MvZnJlZSBlcXVpdmFsZW50OiAqL1xcbiAgNTE6XFx0dm9pZCAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpO1xcbiAgNTI6XFx0dm9pZCBicGZfbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpO1xcbiAgNTM6XFx0dm9pZCBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcXG4gIDU0OlxcdHZvaWQgYnBmX21lbV9jYWNoZV9yYXdfZnJlZSh2b2lkICpwdHIpO1xcbiAgNTU6XFx0dm9pZCAqYnBmX21lbV9jYWNoZV9hbGxvY19mbGFncyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGdmcF90IGZsYWdzKTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0I2VuZGlmIC8qIF9CUEZfTUVNX0FMTE9DX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MTAuNTExODE1NDQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDAzMzAzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgQlBGIE1lbW9yeSBBbGxvY2F0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29kZS4gRnJvbSB3aGF0IEkgcmVjYWxsLCBga2VybmVsL2JwZi9tZW1hbGxvYy5jYCBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIOKAkyBhcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlnIGRlcGVuZGVuY2llcywgb3IgcGVyaGFwcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYGlmZGVmc2ApIHdpdGhpbiBgbWVtYWxsb2MuY2AgaXRzZWxmIHRoYXQgY291bGQgaW1wYWN0IGl0cyBjb21waWxhdGlvbiBvciBiZWhhdmlvcj8gQmVzdCB0byB0YWtlIGEgbG9vayB3aXRoaW4gYG1lbWFsbG9jLmNgIGl0c2VsZiBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxMi44MTIxNDg1MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTg1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTE2MT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1jZyhjb25zdCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTYyLXtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTY0LVxcdGlmIChjLVxcdTAwM2VvYmpjZylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYz01MDg9aW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MzEtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjUzMjojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUzMy1cXHRcXHRpZiAobWVtY2dfYnBmX2VuYWJsZWQoKSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NTQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjU1NTojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU1Ni1cXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fY3VycmVudCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxMi44NjU3NDMyOThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU5NDI2NzkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSdyZSBmb2N1c2luZyBvbiBoZXJlLiBJdCdzIHRoZSBrZXkgdG8gZW5hYmxpbmcgdGhlIGBCUEZgIGZ1bmN0aW9uYWxpdHksIGFzIGBCUEZgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZC4gUmlnaHQsIGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIGEgYm9vbGVhbiBzZXR0aW5nIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UndmUgZ290IGFsbCB0aGUgcmVxdWlyZW1lbnRzIGxpbmVkIHVwLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LlxuXG5JJ20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2ZyZWVfcmN1YCwgYGJwZl9tZW1fY2FjaGVfYWxsb2NgLCBgYnBmX21lbV9jYWNoZV9mcmVlYCwgYGJwZl9tZW1fY2FjaGVfZnJlZV9yY3VgLCBgYnBmX21lbV9hbGxvY19pbml0YCwgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcm91dGluZXMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLiBUaGF0J3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaC5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBgcmF3X3NwaW5sb2NrYCBzeW5jaHJvbml6YXRpb24gdG8gcHJvdGVjdCB0aGUgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGxsaXN0IG9wZXJhdGlvbnMsIGFuZCB0aGF0IG1hdHRlcnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIGluIGFsbG9jX2J1bGssIF9fZnJlZV9yY3UsIGFuZCBkb19jYWxsX3JjdV90dHJhY2UuIEJhc2ljYWxseSwgdGhleSdyZSBhZGRyZXNzaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBwYXRocy4gVGhpcyBpcyBhIHN0YW5kYXJkIGFuZCBzZW5zaWJsZSBhcHByb2FjaCB0byBlbnN1cmluZyB0aHJlYWQgc2FmZXR5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5OSwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MTcuNDYwMDEzODI2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MjA5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21lbV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2FsbG9jXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVcIixcbiAgICBcImJwZl9tZW1fY2FjaGVfZnJlZV9yY3VcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICAgIFwiYnBmX21lbV9hbGxvY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhd19zcGlubG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBmcmVlX2J5X3JjdV90dHJhY2UgYW5kIHdhaXRpbmdfZm9yX2dwX3R0cmFjZSBsb2NrbGVzcyBsaXN0cyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYyksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGJ1bGsgYWxsb2NhdGlvbiwgUkNVIHByb2Nlc3NpbmcsIGFuZCBkcmFpbmluZy4gRnV6emluZyBCUEYgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIGVudHJ5IHBvaW50cyBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdGhyZWFkLXNhZmV0eSBhbmQgYXZvaWQgZGVhZGxvY2tzIG9yIGRhdGEgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NcIixcbiAgICBcImJwZl9tZW1fZnJlZVwiLFxuICAgIFwiYnBmX21lbV9mcmVlX3JjdVwiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2luaXRcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjIwOjE3LjUzMTY0MDg3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE1Nzk5MDM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjIwOjE3LjUzMjA5Mjk3M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkxNTc1MzM3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXcgc3BpbmxvY2sgKGByYXdfc3BpbmxvY2tfdCBsb2NrYCkgaW4gYHN0cnVjdCBicGZfbWVtX2NhY2hlYCB0byBzeW5jaHJvbml6ZSBjb25jdXJyZW50IGxpc3Qgb3BlcmF0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgYW5kIGBsbGlzdF9kZWxfYWxsYCkgb24gYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IuIFxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyAocHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIGxpc3QgY29ycnVwdGlvbikuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIG9yIGZpeGVkIGhlcmUgKHN1Y2ggYXMgbG9ja2luZyB2aW9sYXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIC8gYmFkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHJlc3VsdGluZyBmcm9tIGxpc3QgY29ycnVwdGlvbikgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBcXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmNhYzM2YTFkNjNmMGY5NDdiYmEzN2FkMzdiYmM2Y2RmZmYzYmZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNToxOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuaW5kZXggZTk2NjJkYjcxOThmZS4uNTkyNzk0M2M3NjVhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuKysrIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5AQCAtMTE5LDYgKzExOSw3IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwX3R0cmFjZTtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3VfdHRyYWNlO1xuIFx0YXRvbWljX3QgY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzO1xuK1x0cmF3X3NwaW5sb2NrX3QgbG9jaztcbiB9O1xuIFxuIHN0cnVjdCBicGZfbWVtX2NhY2hlcyB7XG5AQCAtMjE0LDI1ICsyMTUsMjUgQEAgc3RhdGljIHZvaWQgYWxsb2NfYnVsayhzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNudCwgaW50IG5vZGUsIGJvb2wgYXRvbWljKVxuIFx0Z2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDtcbiBcdGdmcCB8PSBhdG9taWMgPyBHRlBfTk9XQUlUIDogR0ZQX0tFUk5FTDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXNcbi1cdFx0ICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHRcbi1cdFx0ICogbGxpc3RfYWRkKCkgYW5kIGxsaXN0X2RlbF9hbGwoKSBpbiBwYXJhbGxlbC5cbi1cdFx0ICovXG4tXHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4tXHRcdGlmICghb2JqKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuLVx0fVxuLVx0aWYgKGkgXHUwMDNlPSBjbnQpXG4tXHRcdHJldHVybjtcbitcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBGb3IgZXZlcnkgJ2MnIGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4rXHRcdFx0ICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHRcbitcdFx0XHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4rXHRcdFx0aWYgKCFvYmopXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuK1x0XHR9XG4gXG4tXHRmb3IgKDsgaSBcdTAwM2MgY250OyBpKyspIHtcbi1cdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbi1cdFx0aWYgKCFvYmopXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4rXHRcdFx0aWYgKCFvYmopXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuK1x0XHR9XG4gXHR9XG4gXHRpZiAoaSBcdTAwM2U9IGNudClcbiBcdFx0cmV0dXJuO1xuQEAgLTI3OSw4ICsyODAsMTIgQEAgc3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spXG4rXHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xuIFxuLVx0ZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSksICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4rXHRmcmVlX2FsbChjLCBsbG5vZGUsICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiB9XG4gXG5AQCAtMzAwLDcgKzMwNSw4IEBAIHN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbiBcbiBcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMSkpIHtcbiBcdFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVx1MDAzZWRyYWluaW5nKSkpIHtcbi1cdFx0XHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTtcbitcdFx0XHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmMtXHUwMDNlbG9jaylcbitcdFx0XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuIFx0XHRcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5AQCAtNTM1LDYgKzU0MSw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXG4gXHRcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0XHRjLVx1MDAzZXRndCA9IGM7XG4rXHRcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aW5pdF9yZWZpbGxfd29yayhjKTtcbiBcdFx0XHRwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpO1xuIFx0XHR9XG5AQCAtNTU3LDcgKzU2NCw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXG4gXHRcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0XHRjLVx1MDAzZXRndCA9IGM7XG4tXG4rXHRcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aW5pdF9yZWZpbGxfd29yayhjKTtcbiBcdFx0XHRwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpO1xuIFx0XHR9XG5AQCAtNjA5LDcgKzYxNiw3IEBAIGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSlcbiBcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRjLVx1MDAzZXBlcmNwdV9zaXplID0gcGVyY3B1X3NpemU7XG4gXHRcdGMtXHUwMDNldGd0ID0gYztcbi1cbitcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdGluaXRfcmVmaWxsX3dvcmsoYyk7XG4gXHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxNy41MzIwOTM5NzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ5NjI4NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgaXRzIG93biBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBhYm91dCBhZGRpbmcgYSBzcGlubG9jayB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdHVyZSBhbmQgdGhlbiB1c2luZyBpdCB0byBwcm90ZWN0IGEgZmV3IGxpbmtlZCBsaXN0IG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDogYGFsbG9jX2J1bGtgLCBgX19mcmVlX3JjdWAsIGBkb19jYWxsX3JjdV90dHJhY2VgLCBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGNlbnRlcmVkIGFyb3VuZCBwcm90ZWN0aW5nIGFjY2VzcyB0byBsaW5rZWQgbGlzdHMgdGhhdCBzZWVtIHRvIGJlIGludm9sdmVkIGluIFJDVSBmcmVlaW5nIG9yIHRyYWNlcG9pbnQgZGF0YS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBsaW5rZWQgbGlzdHMuIEFyZSB0aGVzZSBwb3RlbnRpYWwgc291cmNlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBpZiBub3QgcHJvcGVybHkgc3luY2hyb25pemVkPyBJIHdpbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEJhc2VkIG9uIGEgcXVpY2sgc2tpbSwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGl0IGNvdWxkIGFkZHJlc3Mgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIEJQRiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBjb250ZXh0LCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaWYgdGhlIGxvY2tpbmcgaXMgaW5jb3JyZWN0IG9yIGluY29tcGxldGUuIFRoaXMgY291bGQgYmUgYSBjYW5kaWRhdGUgZm9yIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiB0byBlbnN1cmUgdGhlc2UgY2hhbmdlcyBhcmUgZWZmZWN0aXZlIGFuZCBkb24ndCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoyMS4wMjgzODIzMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZztcXG4gMjExOlxcdFxcdGdmcF90IGdmcDtcXG4gMjEyOlxcdFxcdHZvaWQgKm9iajtcXG4gMjEzOlxcdFxcdGludCBpO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRnZnAgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UO1xcbiAyMTY6XFx0XFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZjLVxcdTAwM2Vsb2NrKSB7XFxuIDIxOTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4gMjIwOlxcdFxcdFxcdFxcdC8qXFxuIDIyMTpcXHRcXHRcXHRcXHQgKiBGb3IgZXZlcnkgJ2MnIGxsaXN0X2RlbF9maXJzdChcXHUwMDI2Yy1cXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXNcXG4gMjIyOlxcdFxcdFxcdFxcdCAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0XFxuIDIyMzpcXHRcXHRcXHRcXHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxcbiAyMjQ6XFx0XFx0XFx0XFx0ICovXFxuIDIyNTpcXHRcXHRcXHRcXHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXFx1MDAyNmMtXFx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XFxuIDIyNjpcXHRcXHRcXHRcXHRpZiAoIW9iailcXG4gMjI3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMjg6XFx0XFx0XFx0XFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcXG4gMjI5OlxcdFxcdFxcdH1cXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbiAyMzI6XFx0XFx0XFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbiAyMzM6XFx0XFx0XFx0XFx0aWYgKCFvYmopXFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMjM1OlxcdFxcdFxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuIDIzNjpcXHRcXHRcXHR9XFxuIDIzNzpcXHRcXHR9XFxuIDIzODpcXHRcXHRpZiAoaSBcXHUwMDNlPSBjbnQpXFxuIDIzOTpcXHRcXHRcXHRyZXR1cm47XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdG1lbWNnID0gZ2V0X21lbWNnKGMpO1xcbiAyNDI6XFx0XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuIDI0MzpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIDI0NDpcXHRcXHRcXHQvKiBBbGxvY2F0ZSwgYnV0IGRvbid0IGRlcGxldGUgYXRvbWljIHJlc2VydmVzIHRoYXQgdHlwaWNhbFxcbiAyNDU6XFx0XFx0XFx0ICogR0ZQX0FUT01JQyB3b3VsZCBkby4gaXJxX3dvcmsgcnVucyBvbiB0aGlzIGNwdSBhbmQga21hbGxvY1xcbiAyNDY6XFx0XFx0XFx0ICogd2lsbCBhbGxvY2F0ZSBmcm9tIHRoZSBjdXJyZW50IG51bWEgbm9kZSB3aGljaCBpcyB3aGF0IHdlXFxuIDI0NzpcXHRcXHRcXHQgKiB3YW50IGhlcmUuXFxuIDI0ODpcXHRcXHRcXHQgKi9cXG4gMjQ5OlxcdFxcdFxcdG9iaiA9IF9fYWxsb2MoYywgbm9kZSwgZ2ZwKTtcXG4gMjUwOlxcdFxcdFxcdGlmICghb2JqKVxcbiAyNTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI1MjpcXHRcXHRcXHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcbiAyNTU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiAyNTY6XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRzdGF0aWMgdm9pZCBmcmVlX29uZSh2b2lkICpvYmosIGJvb2wgcGVyY3B1KVxcbiAyNTk6XFx0e1xcbiAyNjA6XFx0XFx0aWYgKHBlcmNwdSlcXG4gMjYxOlxcdFxcdFxcdGZyZWVfcGVyY3B1KCgodm9pZCBfX3BlcmNwdSAqKilvYmopWzFdKTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0a2ZyZWUob2JqKTtcXG4gMjY0OlxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0c3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJjcHUpXFxuIDI2NzpcXHR7XFxuIDI2ODpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqdDtcXG4gMjY5OlxcdFxcdGludCBjbnQgPSAwO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XFxuIDI3MjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlZHRvcilcXG4gMjczOlxcdFxcdFxcdFxcdGMtXFx1MDAzZWR0b3IoKHZvaWQgKilwb3MgKyBMTElTVF9OT0RFX1NaLCBjLVxcdTAwM2VkdG9yX2N0eCk7XFxuIDI3NDpcXHRcXHRcXHRmcmVlX29uZShwb3MsIHBlcmNwdSk7XFxuIDI3NTpcXHRcXHRcXHRjbnQrKztcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcdHJldHVybiBjbnQ7XFxuIDI3ODpcXHR9XFxuIDI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MjEuMDI4NDk5OTg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NjExMDYwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNpbmcgb24gY29uY3VycmVuY3kgd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBga2VybmVsL2JwZi9tZW1hbGxvYy5jYCBmaWxlLiBJdCdzIGludHJvZHVjaW5nIGEgYHJhd19zcGlubG9ja190IGxvY2tgIHRvIGd1YXJkIGFjY2VzcyB0byB0aGUgbG9ja2xlc3MgbGlzdHMgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgLiBUaGUgY29yZSBpc3N1ZSBpdCdzIGFkZHJlc3NpbmcgaXMgcmFjZSBjb25kaXRpb25zIGFyaXNpbmcgZnJvbSBjb25jdXJyZW50IGRlbGV0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgaW4gYGFsbG9jX2J1bGtgIGFuZCBgbGxpc3RfZGVsX2FsbGAgaW4gYF9fZnJlZV9yY3VgIGFuZCBgZG9fY2FsbF9yY3VfdHRyYWNlYCkuIEVzc2VudGlhbGx5LCB3ZSdyZSBzZXJpYWxpemluZyB0aG9zZSBsaXN0IHJlbW92YWwgb3BlcmF0aW9ucyB3aXRoIGEgc3BpbmxvY2sgdG8gZW5zdXJlIG11dHVhbCBleGNsdXNpb24uXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgdXMgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0LCBubyBuZXcgbWVtb3J5IGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCB2ZWN0b3IuIFdlJ3JlIG5vdCByZWFkaW5nIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENyaXRpY2FsbHksIHRoZSBwYXRjaCBkb2Vzbid0IG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzLCBidWZmZXIgbGVuZ3Rocywgb3IgYm91bmRzIGNoZWNrcy4gVGhlIGJ1Z3MgaXQncyBmaXhpbmcgYXJlIGZpcm1seSBpbiB0aGUgY29uY3VycmVuY3kvbG9ja2luZy9yYWNlIGNvbmRpdGlvbiBkb21haW47IHRoZSBleGlzdGluZyBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBkYXRhLXJhY2UvbG9jayBkZWJ1Z2dpbmcgdG9vbHMpIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMuIFRoZXknbGwgcGljayB1cCBvbiBwb3RlbnRpYWwgbGlzdCBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBzdGVtbWluZyBmcm9tIHRoZSByYWNlcy5cblxuTGV0J3MgdmVyaWZ5IHRoZXNlIGNyaXRlcmlhOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOZWdhdGl2ZS5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIHdpdGggdW5pbml0IGZpZWxkcyByZWFkIGxhdGVyPyBOby5cbjQuICBCb3VuZHMgY2hlY2tzL2xlbmd0aHMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdCBieXRlcz8gQWJzb2x1dGVseSBub3QuXG5cblNvLCAqTmVlZHNLTVNBTiA9IGZhbHNlKi5cblxuQWxyaWdodCwgbGV0J3Mgc29saWRpZnkgdGhpcyByZWFzb25pbmcuIFdlJ3JlIGZvY3VzaW5nIG9uIEtNU0FOIHZzIEtBU0FOLiBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgb3VyIGFsbGllcyBoZXJlIOKAkyBLQVNBTiBmbGFncyBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSksIGFuZCBMT0NLREVQIHZlcmlmaWVzIGxvY2tpbmcgY29ycmVjdG5lc3MuIEtNU0FOLCBob3dldmVyLCBpcyBhbGwgYWJvdXQgdHJhY2tpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGRldGVjdGluZyBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZHMgaW4gYnJhbmNoaW5nL3BvaW50ZXIgYXJpdGhtZXRpYy4gVGhlIHBhdGNoICpwdXJlbHkqIGFkZHMgc3luY2hyb25pemF0aW9uIOKAkyBhIHNwaW5sb2NrIOKAkyB0byBzZXJpYWxpemUgbGlzdCBtYW5pcHVsYXRpb25zIG9uIFJDVSB0cmFjZSBsaXN0cyBpbiBgYnBmX21lbV9jYWNoZWAuIFRoZXJlJ3Mgbm90aGluZyBpbiBoZXJlIHRoYXQgdG91Y2hlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpdHNlbGYgb3IgY291bGQgZXhwb3NlIGl0LiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgY2hhbmdlLiBMZXQncyBmbGFnIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMTEsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MjYuNjg5NjA5NjM5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3IHNwaW5sb2NrIChgcmF3X3NwaW5sb2NrX3QgbG9ja2ApIGluIGBzdHJ1Y3QgYnBmX21lbV9jYWNoZWAgdG8gc3luY2hyb25pemUgY29uY3VycmVudCBsaXN0IG9wZXJhdGlvbnMgKGBsbGlzdF9kZWxfZmlyc3RgIGFuZCBgbGxpc3RfZGVsX2FsbGApIG9uIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLiBcXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBsaXN0IGNvcnJ1cHRpb24pLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBvciBmaXhlZCBoZXJlIChzdWNoIGFzIGxvY2tpbmcgdmlvbGF0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSAvIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBsaXN0IGNvcnJ1cHRpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhdyBzcGlubG9jayAoYHJhd19zcGlubG9ja190IGxvY2tgKSBpbiBgc3RydWN0IGJwZl9tZW1fY2FjaGVgIHRvIHN5bmNocm9uaXplIGNvbmN1cnJlbnQgbGlzdCBvcGVyYXRpb25zIChgbGxpc3RfZGVsX2ZpcnN0YCBhbmQgYGxsaXN0X2RlbF9hbGxgKSBvbiBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAgd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvci4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowg7k24[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 04:53:57 +0000 UTC FinishedAt: 2026-09-02 05:20:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "28d75dd3eb60812b3a87cbdf0d52c42f51b28a78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "95df7d29-9c90-4935-80bb-4a818e798b44" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mem_alloc", "bpf_mem_free", "bpf_mem_free_rcu", "bpf_mem_cache_alloc", "bpf_mem_cache_free", "bpf_mem_cache_free_rcu", "bpf_mem_alloc_init", "bpf_mem_alloc_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfbWVtX2ZyZWUmIzM0OywKICAgICYjMzQ7YnBmX21lbV9mcmVlX3JjdSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfbWVtX2FsbG9jX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3IHNwaW5sb2NrIChgcmF3X3NwaW5sb2NrX3QgbG9ja2ApIGluIGBzdHJ1Y3QgYnBmX21lbV9jYWNoZWAgdG8gc3luY2hyb25pemUgY29uY3VycmVudCBsaXN0IG9wZXJhdGlvbnMgKGBsbGlzdF9kZWxfZmlyc3RgIGFuZCBgbGxpc3RfZGVsX2FsbGApIG9uIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLiBcblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhd19zcGlubG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBmcmVlX2J5X3JjdV90dHJhY2UgYW5kIHdhaXRpbmdfZm9yX2dwX3R0cmFjZSBsb2NrbGVzcyBsaXN0cyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYyksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGJ1bGsgYWxsb2NhdGlvbiwgUkNVIHByb2Nlc3NpbmcsIGFuZCBkcmFpbmluZy4gRnV6emluZyBCUEYgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIGVudHJ5IHBvaW50cyBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdGhyZWFkLXNhZmV0eSBhbmQgYXZvaWQgZGVhZGxvY2tzIG9yIGRhdGEgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM2Y2FjMzZhMWQ2M2YwZjk0N2JiYTM3YWQzN2JiYzZjZGZmZjNiZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA1OjE5OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuaW5kZXggZTk2NjJkYjcxOThmZS4uNTkyNzk0M2M3NjVhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5AQCAtMTE5LDYgJiM0MzsxMTksNyBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2U7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1X3R0cmFjZTtcbiBcdGF0b21pY190IGNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcztcbiYjNDM7XHRyYXdfc3BpbmxvY2tfdCBsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJwZl9tZW1fY2FjaGVzIHtcbkBAIC0yMTQsMjUgJiM0MzsyMTUsMjUgQEAgc3RhdGljIHZvaWQgYWxsb2NfYnVsayhzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNudCwgaW50IG5vZGUsIGJvb2wgYXRvbWljKVxuIFx0Z2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDtcbiBcdGdmcCB8PSBhdG9taWMgPyBHRlBfTk9XQUlUIDogR0ZQX0tFUk5FTDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4tXHRcdCAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0XG4tXHRcdCAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuXG4tXHRcdCAqL1xuLVx0XHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuLVx0XHRpZiAoIW9iailcbi1cdFx0XHRicmVhaztcbi1cdFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcbi1cdH1cbi1cdGlmIChpIFx1MDAzZT0gY250KVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4mIzQzO1x0XHRcdCAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0XG4mIzQzO1x0XHRcdCAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuJiM0MztcdFx0XHRpZiAoIW9iailcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcbiYjNDM7XHRcdH1cbiBcbi1cdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4tXHRcdGlmICghb2JqKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuJiM0MztcdFx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbiYjNDM7XHRcdFx0aWYgKCFvYmopXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRpZiAoaSBcdTAwM2U9IGNudClcbiBcdFx0cmV0dXJuO1xuQEAgLTI3OSw4ICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyXG4gc3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuIFx0c3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdV90dHJhY2UpO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKVxuJiM0MztcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4gXG4tXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiYjNDM7XHRmcmVlX2FsbChjLCBsbG5vZGUsICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiB9XG4gXG5AQCAtMzAwLDcgJiM0MzszMDUsOCBAQCBzdGF0aWMgdm9pZCBkb19jYWxsX3JjdV90dHJhY2Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXG4gXG4gXHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDEpKSB7XG4gXHRcdGlmICh1bmxpa2VseShSRUFEX09OQ0UoYy1cdTAwM2VkcmFpbmluZykpKSB7XG4tXHRcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4mIzQzO1x0XHRcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKVxuJiM0MztcdFx0XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuIFx0XHRcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5AQCAtNTM1LDYgJiM0Mzs1NDEsNyBAQCBpbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxuIFx0XHRcdGMtXHUwMDNlb2JqY2cgPSBvYmpjZztcbiBcdFx0XHRjLVx1MDAzZXBlcmNwdV9zaXplID0gcGVyY3B1X3NpemU7XG4gXHRcdFx0Yy1cdTAwM2V0Z3QgPSBjO1xuJiM0MztcdFx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRpbml0X3JlZmlsbF93b3JrKGMpO1xuIFx0XHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHRcdH1cbkBAIC01NTcsNyAmIzQzOzU2NCw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXG4gXHRcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0XHRjLVx1MDAzZXRndCA9IGM7XG4tXG4mIzQzO1x0XHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZjLVx1MDAzZWxvY2spO1xuIFx0XHRcdGluaXRfcmVmaWxsX3dvcmsoYyk7XG4gXHRcdFx0cHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTtcbiBcdFx0fVxuQEAgLTYwOSw3ICYjNDM7NjE2LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxuIFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0Yy1cdTAwM2V0Z3QgPSBjO1xuLVxuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdGluaXRfcmVmaWxsX3dvcmsoYyk7XG4gXHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWVtX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fZnJlZSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX21lbV9jYWNoZV9mcmVlJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfZnJlZV9yY3UmIzM0OywKICAgICYjMzQ7YnBmX21lbV9hbGxvY19pbml0JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3X3NwaW5sb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGZyZWVfYnlfcmN1X3R0cmFjZSBhbmQgd2FpdGluZ19mb3JfZ3BfdHRyYWNlIGxvY2tsZXNzIGxpc3RzIGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciAoa2VybmVsL2JwZi9tZW1hbGxvYy5jKSwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGNvbmN1cnJlbnQgYnVsayBhbGxvY2F0aW9uLCBSQ1UgcHJvY2Vzc2luZywgYW5kIGRyYWluaW5nLiBGdXp6aW5nIEJQRiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVjbGFtYXRpb24gZW50cnkgcG9pbnRzIGlzIHZhbHVhYmxlIHRvIHZlcmlmeSB0aHJlYWQtc2FmZXR5IGFuZCBhdm9pZCBkZWFkbG9ja3Mgb3IgZGF0YSBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzZjYWMzNmExZDYzZjBmOTQ3YmJhMzdhZDM3YmJjNmNkZmZmM2JmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDU6MTk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmMKaW5kZXggZTk2NjJkYjcxOThmZS4uNTkyNzk0M2M3NjVhNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwpAQCAtMTE5LDYgJiM0MzsxMTksNyBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7CiAJc3RydWN0IGxsaXN0X2hlYWQgd2FpdGluZ19mb3JfZ3BfdHRyYWNlOwogCXN0cnVjdCByY3VfaGVhZCByY3VfdHRyYWNlOwogCWF0b21pY190IGNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzczsKJiM0MzsJcmF3X3NwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0cnVjdCBicGZfbWVtX2NhY2hlcyB7CkBAIC0yMTQsMjUgJiM0MzsyMTUsMjUgQEAgc3RhdGljIHZvaWQgYWxsb2NfYnVsayhzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNudCwgaW50IG5vZGUsIGJvb2wgYXRvbWljKQogCWdmcCA9IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX0FDQ09VTlQ7CiAJZ2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKLQkJLyoKLQkJICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdCgmYW1wO2MtJmd0O2ZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzCi0JCSAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0Ci0JCSAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuCi0JCSAqLwotCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOwotCQlpZiAoIW9iaikKLQkJCWJyZWFrOwotCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwotCX0KLQlpZiAoaSAmZ3Q7PSBjbnQpCi0JCXJldHVybjsKJiM0MzsJc2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCAmYW1wO2MtJmd0O2xvY2spIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBGb3IgZXZlcnkgJiMzOTtjJiMzOTsgbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXMKJiM0MzsJCQkgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodAomIzQzOwkJCSAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuCiYjNDM7CQkJICovCiYjNDM7CQkJb2JqID0gbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsKJiM0MzsJCQlpZiAoIW9iaikKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJYWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTsKJiM0MzsJCX0KIAotCWZvciAoOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewotCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpOwotCQlpZiAoIW9iaikKLQkJCWJyZWFrOwotCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwomIzQzOwkJZm9yICg7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJb2JqID0gbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKTsKJiM0MzsJCQlpZiAoIW9iaikKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJYWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTsKJiM0MzsJCX0KIAl9CiAJaWYgKGkgJmd0Oz0gY250KQogCQlyZXR1cm47CkBAIC0yNzksOCAmIzQzOzI4MCwxMiBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlcgogc3RhdGljIHZvaWQgX19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9tZW1fY2FjaGUsIHJjdV90dHJhY2UpOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZhbXA7Yy0mZ3Q7bG9jaykKJiM0MzsJCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpOwogCi0JZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSksICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwomIzQzOwlmcmVlX2FsbChjLCBsbG5vZGUsICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwogCWF0b21pY19zZXQoJmFtcDtjLSZndDtjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApOwogfQogCkBAIC0zMDAsNyAmIzQzOzMwNSw4IEBAIHN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYykKIAogCWlmIChhdG9taWNfeGNoZygmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMSkpIHsKIAkJaWYgKHVubGlrZWx5KFJFQURfT05DRShjLSZndDtkcmFpbmluZykpKSB7Ci0JCQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsKJiM0MzsJCQlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZhbXA7Yy0mZ3Q7bG9jaykKJiM0MzsJCQkJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O2ZyZWVfYnlfcmN1X3R0cmFjZSk7CiAJCQlmcmVlX2FsbChjLCBsbG5vZGUsICEhYy0mZ3Q7cGVyY3B1X3NpemUpOwogCQl9CiAJCXJldHVybjsKQEAgLTUzNSw2ICYjNDM7NTQxLDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSkKIAkJCWMtJmd0O29iamNnID0gb2JqY2c7CiAJCQljLSZndDtwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplOwogCQkJYy0mZ3Q7dGd0ID0gYzsKJiM0MzsJCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtjLSZndDtsb2NrKTsKIAkJCWluaXRfcmVmaWxsX3dvcmsoYyk7CiAJCQlwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpOwogCQl9CkBAIC01NTcsNyAmIzQzOzU2NCw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpCiAJCQljLSZndDtvYmpjZyA9IG9iamNnOwogCQkJYy0mZ3Q7cGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTsKIAkJCWMtJmd0O3RndCA9IGM7Ci0KJiM0MzsJCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtjLSZndDtsb2NrKTsKIAkJCWluaXRfcmVmaWxsX3dvcmsoYyk7CiAJCQlwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpOwogCQl9CkBAIC02MDksNyAmIzQzOzYxNiw3IEBAIGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSkKIAkJYy0mZ3Q7b2JqY2cgPSBvYmpjZzsKIAkJYy0mZ3Q7cGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTsKIAkJYy0mZ3Q7dGd0ID0gYzsKLQomIzQzOwkJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7Yy0mZ3Q7bG9jayk7CiAJCWluaXRfcmVmaWxsX3dvcmsoYyk7CiAJCXByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIExvb2tzIGxpa2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3QgbG9jaztgIHdpdGhpbiB0aGUgYHN0cnVjdCBicGZfbWVtX2NhY2hlYC4gQWgsIHNvIHRoaXMgaXMgdG8gYWRkIGZpbmUtZ3JhaW5lZCBsb2NraW5nLiBFeGNlbGxlbnQuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLCBsaWtlbHkgYXJvdW5kIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBjYWNoZSBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktQ1BVIGVudmlyb25tZW50LCBhcyB0aGlzIGlzIEJQRiwgYW5kIHdlIGFyZSB3b3JraW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIHdoaWNoIGlzIGxpa2VseSB0byBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suCgpUaGUgbG9ja2luZyBzZWVtcyB0byBiZSBwcmltYXJpbHkgYXJvdW5kIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBhY2Nlc3NlcyB3aXRoaW4gYGFsbG9jX2J1bGtgLCBgX19mcmVlX3JjdWAsIGFuZCBgZG9fY2FsbF9yY3VfdHRyYWNlYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiBmcmVlaW5nIG1lbW9yeSB2aWEgUkNVIChSZWFkLUNvcHktVXBkYXRlKSwgYW5kIHRob3NlIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBzeW5jaHJvbml6ZWQgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3BpbmxvY2sgdXNpbmcgYHJhd19zcGluX2xvY2tfaW5pdCgmYW1wO2MtJmd0O2xvY2spYCBpbiBgYnBmX21lbV9hbGxvY19pbml0YCBhbmQgYGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdGAgY29uZmlybXMgdGhhdC4gR29vZCwgcHJvcGVyIGluaXRpYWxpemF0aW9uIGlzIGtleS4KCk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nLCBJIHNob3VsZCBwcm9iYWJseSB1c2UgYSB0b29sIGxpa2UgYGdyZXBwZXJgIChvciBqdXN0IGEgcXVpY2sgYHJlYWQtZmlsZWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UpIHRvIGluc3BlY3QgdGhlIGNvZGUgZGlyZWN0bHkuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGNoYW5nZSB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGxvY2sgYWRkaXRpb25zLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgdGhlIGFzc29jaWF0ZWQgY29uZmlncyBhbmQgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZmlsZSwganVzdCB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9ucyBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21lbV9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcdTAwM2Vcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz00ODc9c3RhdGljIHZvaWQgcHJlZmlsbF9tZW1fY2FjaGUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjcHUpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUwNy0gKi9cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1MDg6aW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MDkte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NzYtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTc3OmludCBicGZfbWVtX2FsbG9jX3BlcmNwdV9pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU3OC17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU5MC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1OTE6aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU5Mi17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTY0Nz1zdGF0aWMgdm9pZCBjaGVja19tZW1fY2FjaGUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY1Ny1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo2NTg6c3RhdGljIHZvaWQgY2hlY2tfbGVha2VkX29ianMoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY1OS17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY4MC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo2ODE6c3RhdGljIHZvaWQgZnJlZV9tZW1fYWxsb2Nfbm9fYmFycmllcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjgyLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjkyLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjY5MzpzdGF0aWMgdm9pZCBmcmVlX21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjk0LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NzEwPXN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jX2RlZmVycmVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTEte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcxMjpcdHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYywgd29yayk7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzEzLVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTctXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzE4OnN0YXRpYyB2b2lkIGRlc3Ryb3lfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHJjdV9pbl9wcm9ncmVzcylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTkte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjcyMDpcdHN0cnVjdCBicGZfbWVtX2FsbG9jICpjb3B5O1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcyMS1cbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzQyLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjc0Mzp2b2lkIGJwZl9tZW1fYWxsb2NfZGVzdHJveShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzQ0LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NzgzPXN0YXRpYyB2b2lkIG5vdHJhY2UgKnVuaXRfYWxsb2Moc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5MC1cdCAqIHByb2dfQVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjc5MTpcdCAqICAgYnBmX21lbV9hbGxvY1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5Mi1cdCAqICAgICAgcHJlZW1wdGlvbiBvciBpcnEgLVx1MDAzZSBwcm9nX0Jcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3OTM6XHQgKiAgICAgICAgYnBmX21lbV9hbGxvY1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5NC1cdCAqXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTg2Nj1zdGF0aWMgdm9pZCBub3RyYWNlIHVuaXRfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKnB0cilcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODg5LSAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjg5MDp2b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04OTEte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MDctXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTA4OnZvaWQgbm90cmFjZSBicGZfbWVtX2ZyZWUoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTA5LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTIzLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkyNDp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MjUte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MzktXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTQwOnZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQxLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQ3LVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk0ODp2b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk0OS17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk1NS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5NTY6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTU3LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTY4LSAqIEl0IGNvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmN1X3Rhc2tzX3RyYWNlIGNhbGxiYWNrIGRvZXMgbm90IGhhdmVcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5Njk6ICogYSBob2xkIG9uIHRoZSBvcmlnaW5hbCBicGZfbWVtX2FsbG9jIG9iamVjdCB0aGF0IGFsbG9jYXRlZCB0aGVcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NzAtICogJiMzOTtwdHImIzM5Oy4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRoZSB1bmNvbW1vbiBjb2RlIHBhdGguXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTcxOiAqIE90aGVyd2lzZSwgdGhlIGJwZl9tZW1fYWxsb2MmIzM5O3MgZnJlZV9sbGlzdCBjYW5ub3QgYmUgcmVmaWxsZWRcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NzItICogYW5kIG1heSBhZmZlY3QgcGVyZm9ybWFuY2UuXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk3ND12b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05ODUtICovXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTg2OnZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvY19mbGFncyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGdmcF90IGZsYWdzKVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk4Ny17XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTEwMDgtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAwOTppbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDEwLXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAxOC1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxMDE5OnZvaWQgYnBmX21lbV9hbGxvY19zZXRfZHRvcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAyMC1cdFx0XHQgICAgdm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCksIHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTcxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBrZXJuZWwgQlBGIGJ1aWxkIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJQRiBDb21waWxhdGlvbiBDb250ZXh0KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBUaGlzIGlzbiYjMzk7dCBhIGh1Z2Ugc3VycHJpc2UsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCAqYXNzdW1lKiB0aGUgaW5jbHVkZSBwYXRocyBhbmQgY29uZmlndXJhdGlvbiBmbGFncy4gTXkgYmVzdCBiZXQgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSByZWxldmFudCBNYWtlZmlsZSBhbmQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCB3aXRoIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIGFuZCB3aXRoIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGBtZW1hbGxvYy5jYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQmIzM5O3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBmbG93IGZvciB0aGF0IHNwZWNpZmljIGNvbXBvbmVudCBhbmQgdG8gdHJvdWJsZXNob290IGJ1aWxkIGlzc3VlcyBpZiB0aGV5IGFyaXNlIGxhdGVyLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSB0cmlnZ2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1hbGxvY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzIwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkNoZWNraW5nIHRoZSBCUEYgU3ljYWxsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdHJpZ2dlcmluZyB0aGUgY29tcGlsYXRpb24gb2YgYG1lbWFsbG9jLm9gLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBgQlBGX1NZU0NBTExgIHNob3VsZCBiZSBkZWZpbmVkIHNvbWV3aGVyZSB0aGF0IGNvbnRyb2xzIHRoZSBhdmFpbGFiaWxpdHkgb2YgQlBGIHN5c2NhbGwgZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSB0aGlua2luZyB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoZSBLY29uZmlnIGZpbGUgYXJlIGBpbml0L0tjb25maWdgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBhbmQgdGhlbiBJIHNob3VsZCBiZSBhYmxlIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoeSB0aGlzIG9iamVjdCBmaWxlIGlzIGJlaW5nIHB1bGxlZCBpbiBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipFeGFtaW5pbmcgQlBGX1NZU0NBTEwgRGVwZW5kZW5jaWVzKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEJQRl9TWVNDQUxMYC4gTXkgZmlyc3Qgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byB0cmFjZSBpdCBiYWNrIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgQlBGIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9TWVNDQUxMYCBuZWF0bHkgbGFpZCBvdXQgdGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQmIzM5O3MgZW5hYmxlZCwgYW55IG90aGVyIGZlYXR1cmVzIGl0IGRlcGVuZHMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXRzIGF2YWlsYWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IHNwZWNpZmljIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbiAgNjM6XHRcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxuICA2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgU3luY2hyb25pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyB0byBpdHMgZnVuY3Rpb25zLiBBZnRlciBhIGNhcmVmdWwgcmVhZCwgSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uOiBhIHJhdyBzcGlubG9jaywgYGxvY2tgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBzaWduYWxpbmcgY29uY3VycmVuY3kgaXNzdWVzIGJlaW5nIGFkZHJlc3NlZC4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgYHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjLSZndDtsb2NrKWAgYXJvdW5kIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIGxpa2VseSB0aGUgc291cmNlIG9mIHJhY2UgY29uZGl0aW9ucy4gV3JhcHBpbmcgdGhlIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBhY2Nlc3NlcyBpbiBgYWxsb2NfYnVsa2AsIGFuZCB0aGUgbWFuaXB1bGF0aW9ucyBvZiBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBpbiBgX19mcmVlX3JjdWAsIGFuZCBgZnJlZV9ieV9yY3VfdHRyYWNlYCBpbiBgZG9fY2FsbF9yY3VfdHRyYWNlYCBjb25maXJtcyB0aGlzLiBUaGUgc3BpbmxvY2sgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBzdGFydHVwIG9mIHRoZSBhbGxvY2F0b3IuCgpUaGlzIGlzIGEgY2xlYXItY3V0IGNvbmN1cnJlbmN5IGZpeCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGl0c2VsZiwgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwuIENvbnNpZGVyaW5nIHRoYXQgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGlzIGZ1bmRhbWVudGFsIHRvIEJQRiBtYXBzLCBsaWtlIGhhc2ggbWFwcywgYW5kIHRoZSBsaWZlY3ljbGUgb2YgQlBGIHByb2dyYW1zLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYGtwdHJgIGRlcmVmZXJlbmNlcyBhbmQgYGJwZl9vYmpfbmV3L2Ryb3BgIG9wZXJhdGlvbnMsIHRoaXMgaW1wYWN0cyBhIGxvdC4gVGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgZXhlY3V0aW9uIG9mIGFueSBCUEYgcHJvZ3JhbSBvciBtYXAgb3BlcmF0aW9uIHdpbGwgdG91Y2ggdGhpcyBjb2RlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGEgcmVzdWx0IG9mIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgYnV0IGV4cGxvaXRhYmxlLCByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBlbnRyeXBvaW50cyBhbmQgdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIHNlZSB3aGVyZSBgYWxsb2NfYnVsa2AsIGB1bml0X2FsbG9jYCwgYW5kIGB1bml0X2ZyZWVfcmN1YCBhcmUgY2FsbGVkIGZyb20gdG8gc2VlIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIExldCYjMzk7cyBsaXN0IHRoZSBleHBvc2VkLCBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yOiBgYnBmX21lbV9hbGxvY19pbml0YCwgYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzYCwgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgLCBhbmQgYGJwZl9tZW1fYWxsb2NfZGVzdHJveWAuIFRoZSBjYWxsIGdyYXBoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYWxsb2NfYnVsa2AgaXMgYWN0dWFsbHkgY2FsbGVkIHdpdGhpbiBga2VybmVsL2JwZi9tZW1hbGxvYy5jYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ld2x5IGFkZGVkIGxvY2sgaXMgcHJvdGVjdGluZyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19idWxrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYz0xNzI9c3RhdGljIHZvaWQgaW5jX2FjdGl2ZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTE4MC1cdFx0bG9jYWxfaXJxX3NhdmUoKmZsYWdzKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoxODE6XHQvKiBhbGxvY19idWxrIHJ1bnMgZnJvbSBpcnFfd29yayB3aGljaCB3aWxsIG5vdCBwcmVlbXB0IGEgYnBmXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTgyLVx0ICogcHJvZ3JhbSB0aGF0IGRvZXMgdW5pdF9hbGxvYy91bml0X2ZyZWUgc2luY2UgSVJRcyBhcmVcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MTk3PXN0YXRpYyB2b2lkIGFkZF9vYmpfdG9fZnJlZV9saXN0KHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCB2b2lkICpvYmopXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTIwNy0vKiBNb3N0bHkgcnVucyBmcm9tIGlycV93b3JrIGV4Y2VwdCBfX2luaXQgcGhhc2UuICovXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MjA4OnN0YXRpYyB2b2lkIGFsbG9jX2J1bGsoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjbnQsIGludCBub2RlLCBib29sIGF0b21pYylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0yMDkte1xuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYz00MjY9c3RhdGljIHZvaWQgYnBmX21lbV9yZWZpbGwoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00MzYtXHRcdCAqL1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjQzNzpcdFx0YWxsb2NfYnVsayhjLCBjLVx1MDAzZWJhdGNoLCBOVU1BX05PX05PREUsIHRydWUpO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTQzOC1cdGVsc2UgaWYgKGNudCBcdTAwM2UgYy1cdTAwM2VoaWdoX3dhdGVybWFyaylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDg3PXN0YXRpYyB2b2lkIHByZWZpbGxfbWVtX2NhY2hlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00OTctXHRcdGNudCA9IDQ7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NDk4Olx0YWxsb2NfYnVsayhjLCBjbnQsIGNwdV90b19ub2RlKGNwdSksIGZhbHNlKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00OTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgTWVtb3J5IEFsbG9jYXRpb24gYW5kIEZyZWVpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIGhvdyB0aGUgYGFsbG9jX2J1bGtgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxhbmRzY2FwZS4gSSBrbm93IHRoYXQgYGFsbG9jX2J1bGtgIGlzIHVzZWQgZHVyaW5nIGBwcmVmaWxsX21lbV9jYWNoZWAsIHdoaWNoIGl0c2VsZiBpcyBwYXJ0IG9mIHRoZSBgYnBmX21lbV9hbGxvY19pbml0YCBzZXF1ZW5jZS4gVGhpcyBpcyB0aGUgc2V0dXAgcGhhc2UuIFRoZW4sIGl0JiMzOTtzIGFsc28gaW52b2tlZCB3aXRoaW4gYGJwZl9tZW1fcmVmaWxsYCwgd2hpY2ggaXMgc2NoZWR1bGVkIGFzIGBpcnFfd29ya2AgZHVyaW5nIGNhbGxzIHRvIGB1bml0X2FsbG9jYCBvciBgYnBmX21lbV9hbGxvY2AsIG9yIHRoZSBgYnBmX21lbV9jYWNoZV9hbGxvY2AgZnVuY3Rpb25zLiBTbywgdGhlc2UgYXJlIHRoZSBhbGxvY2F0aW9uIHBhdGhzLgoKTm93LCBvbiB0aGUgZnJlZWluZyBzaWRlLCBgX19mcmVlX3JjdWAgcG9wcyB1cC4gSSBrbm93IHRoYXQgaXQmIzM5O3MgYW4gUkNVIGNhbGxiYWNrLCBzY2hlZHVsZWQgYnkgYGRvX2NhbGxfcmN1X3R0cmFjZWAuIFRoaXMgd2hvbGUgcGF0aCBraWNrcyBvZmYgd2hlbiBvYmplY3RzIGFyZSBiZWluZyBmcmVlZCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVuaXRfZnJlZV9yY3VgIHdoaWNoIHRoZW4gZmxvd3MgaW50byBgYnBmX21lbV9mcmVlX3JjdWAsIGFuZCB0aGVuIGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBhbmQgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgIG9yIHRoZSBtb3JlIGdlbmVyYWwgYGJwZl9tZW1fZnJlZWAgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHRoZSBkZWFsbG9jYXRpb24gcGFydCBvZiB0aGUgcHV6emxlLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZXh0ZXJuYWxseS4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgd2l0aGluIGB2bWxpbnV4YC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2ZyZWVfcmN1YCwgYGJwZl9tZW1fY2FjaGVfYWxsb2NgLCBgYnBmX21lbV9jYWNoZV9mcmVlYCwgYGJwZl9tZW1fY2FjaGVfZnJlZV9yY3VgLCBhbmQgYGJwZl9tZW1fYWxsb2NfaW5pdGAgYXJlIGFsbCBhY3R1YWxseSBhdmFpbGFibGUgYXMgZW50cnkgcG9pbnRzLgoKRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZ2FpbiBhbiBvdmVydmlldyBvZiB0aGUgbGFuZHNjYXBlLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgaW5jbHVkZS9saW51eC9icGZfbWVtX2FsbG9jLmhgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgZGVjbGFyZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgd2lsbCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuICAgMjpcdC8qIENvcHlyaWdodCAoYykgMjAyMiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAgIDM6XHQjaWZuZGVmIF9CUEZfTUVNX0FMTE9DX0hcbiAgIDQ6XHQjZGVmaW5lIF9CUEZfTUVNX0FMTE9DX0hcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlcl90eXBlcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAgIDc6XHRcbiAgIDg6XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZTtcbiAgIDk6XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZXM7XG4gIDEwOlx0XG4gIDExOlx0c3RydWN0IGJwZl9tZW1fYWxsb2Mge1xuICAxMjpcdFx0c3RydWN0IGJwZl9tZW1fY2FjaGVzIF9fcGVyY3B1ICpjYWNoZXM7XG4gIDEzOlx0XHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSBfX3BlcmNwdSAqY2FjaGU7XG4gIDE0Olx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gIDE1Olx0XHRib29sIHBlcmNwdTtcbiAgMTY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuICAxNzpcdFx0dm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCk7XG4gIDE4Olx0XHR2b2lkICpkdG9yX2N0eDtcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdC8qICYjMzk7c2l6ZSAhPSAwJiMzOTsgaXMgZm9yIGJwZl9tZW1fYWxsb2Mgd2hpY2ggbWFuYWdlcyBmaXhlZC1zaXplIG9iamVjdHMuXG4gIDIyOlx0ICogQWxsb2MgYW5kIGZyZWUgYXJlIGRvbmUgd2l0aCBicGZfbWVtX2NhY2hlX3thbGxvYyxmcmVlfSgpLlxuICAyMzpcdCAqXG4gIDI0Olx0ICogJiMzOTtzaXplID0gMCYjMzk7IGlzIGZvciBicGZfbWVtX2FsbG9jIHdoaWNoIG1hbmFnZXMgbWFueSBmaXhlZC1zaXplIG9iamVjdHMuXG4gIDI1Olx0ICogQWxsb2MgYW5kIGZyZWUgYXJlIGRvbmUgd2l0aCBicGZfbWVtX3thbGxvYyxmcmVlfSgpIGFuZCB0aGUgc2l6ZSBvZlxuICAyNjpcdCAqIHRoZSByZXR1cm5lZCBvYmplY3QgaXMgZ2l2ZW4gYnkgdGhlIHNpemUgYXJndW1lbnQgb2YgYnBmX21lbV9hbGxvYygpLlxuICAyNzpcdCAqIElmIHBlcmNwdSBlcXVhbHMgdHJ1ZSwgZXJyb3Igd2lsbCBiZSByZXR1cm5lZCBpbiBvcmRlciB0byBhdm9pZFxuICAyODpcdCAqIGxhcmdlIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgdGhlIGJlbG93IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdCgpXG4gIDI5Olx0ICogc2hvdWxkIGJlIHVzZWQgdG8gZG8gb24tZGVtYW5kIHBlci1jcHUgYWxsb2NhdGlvbiBmb3IgZWFjaCBzaXplLlxuICAzMDpcdCAqL1xuICAzMTpcdGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpO1xuICAzMjpcdC8qIEluaXRpYWxpemUgYSBub24tZml4LXNpemUgcGVyY3B1IG1lbW9yeSBhbGxvY2F0b3IgKi9cbiAgMzM6XHRpbnQgYnBmX21lbV9hbGxvY19wZXJjcHVfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gIDM0Olx0LyogVGhlIHBlcmNwdSBhbGxvY2F0aW9uIHdpdGggYSBzcGVjaWZpYyB1bml0IHNpemUuICovXG4gIDM1Olx0aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKTtcbiAgMzY6XHR2b2lkIGJwZl9tZW1fYWxsb2NfZGVzdHJveShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpO1xuICAzNzpcdHZvaWQgYnBmX21lbV9hbGxvY19zZXRfZHRvcihzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4gIDM4Olx0XHRcdFx0ICAgIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXG4gIDM5Olx0XHRcdFx0ICAgIHZvaWQgKCpkdG9yX2N0eF9mcmVlKSh2b2lkICpjdHgpLFxuICA0MDpcdFx0XHRcdCAgICB2b2lkICpjdHgpO1xuICA0MTpcdFxuICA0MjpcdC8qIENoZWNrIHRoZSBhbGxvY2F0aW9uIHNpemUgZm9yIGttYWxsb2MgZXF1aXZhbGVudCBhbGxvY2F0b3IgKi9cbiAgNDM6XHRpbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSk7XG4gIDQ0Olx0XG4gIDQ1Olx0Lyoga21hbGxvYy9rZnJlZSBlcXVpdmFsZW50OiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc1MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIGBicGZfbWVtX2FsbG9jLmhgKioKCkFscmlnaHQsIHRpbWUgdG8gc2hpZnQgZ2VhcnMgYW5kIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBsZXZlbCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtYW5hZ2luZyBCUEYgcHJvZ3JhbSBtZW1vcnkgcmVzaWRlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIGhlYWRlciBmaWxlIGhvbGRzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl9tZW1fYWxsb2MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDY6XHR2b2lkICpicGZfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgc2l6ZV90IHNpemUpO1xuICA0NzpcdHZvaWQgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcbiAgNDg6XHR2b2lkIGJwZl9tZW1fZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpO1xuICA0OTpcdFxuICA1MDpcdC8qIGttZW1fY2FjaGVfYWxsb2MvZnJlZSBlcXVpdmFsZW50OiAqL1xuICA1MTpcdHZvaWQgKmJwZl9tZW1fY2FjaGVfYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKTtcbiAgNTI6XHR2b2lkIGJwZl9tZW1fY2FjaGVfZnJlZShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cik7XG4gIDUzOlx0dm9pZCBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcbiAgNTQ6XHR2b2lkIGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWUodm9pZCAqcHRyKTtcbiAgNTU6XHR2b2lkICpicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgZ2ZwX3QgZmxhZ3MpO1xuICA1NjpcdFxuICA1NzpcdCNlbmRpZiAvKiBfQlBGX01FTV9BTExPQ19IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgQlBGIE1lbW9yeSBBbGxvY2F0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBjb2RlLiBGcm9tIHdoYXQgSSByZWNhbGwsIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIGdldHMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIOKAkyBhcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlnIGRlcGVuZGVuY2llcywgb3IgcGVyaGFwcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYGlmZGVmc2ApIHdpdGhpbiBgbWVtYWxsb2MuY2AgaXRzZWxmIHRoYXQgY291bGQgaW1wYWN0IGl0cyBjb21waWxhdGlvbiBvciBiZWhhdmlvcj8gQmVzdCB0byB0YWtlIGEgbG9vayB3aXRoaW4gYG1lbWFsbG9jLmNgIGl0c2VsZiBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21lbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9tZW1hbGxvYy5jPTE2MT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1jZyhjb25zdCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xNjIte1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjE2MzojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTY0LVx0aWYgKGMtXHUwMDNlb2JqY2cpXG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTUwOD1pbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MzEtXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTMyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MzMtXHRcdGlmIChtZW1jZ19icGZfZW5hYmxlZCgpKVxuLS1cbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NTQtXHRcdHJldHVybiAtRU5PTUVNO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jOjU1NTojaWZkZWYgQ09ORklHX01FTUNHXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTU2LVx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTkKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaGVyZS4gSXQmIzM5O3MgdGhlIGtleSB0byBlbmFibGluZyB0aGUgYEJQRmAgZnVuY3Rpb25hbGl0eSwgYXMgYEJQRmAgaXMgc2VsZWN0ZWQgYnkgYEJQRl9TWVNDQUxMYC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZC4gUmlnaHQsIGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIGEgYm9vbGVhbiBzZXR0aW5nIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYXMgZXhwZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSYjMzk7dmUgZ290IGFsbCB0aGUgcmVxdWlyZW1lbnRzIGxpbmVkIHVwLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LgoKSSYjMzk7bSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGBicGZfbWVtX2FsbG9jX2luaXRgLCBhbmQgYGJwZl9tZW1fYWxsb2NfZGVzdHJveWAuIFRoZXNlIGFyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiByb3V0aW5lcyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYykuIFRoYXQmIzM5O3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaC4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYHJhd19zcGlubG9ja2Agc3luY2hyb25pemF0aW9uIHRvIHByb3RlY3QgdGhlIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBsbGlzdCBvcGVyYXRpb25zLCBhbmQgdGhhdCBtYXR0ZXJzIGZvciBjb25jdXJyZW50IGFjY2VzcyBpbiBhbGxvY19idWxrLCBfX2ZyZWVfcmN1LCBhbmQgZG9fY2FsbF9yY3VfdHRyYWNlLiBCYXNpY2FsbHksIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIHBhdGhzLiBUaGlzIGlzIGEgc3RhbmRhcmQgYW5kIHNlbnNpYmxlIGFwcHJvYWNoIHRvIGVuc3VyaW5nIHRocmVhZCBzYWZldHkgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50LgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tZW1fYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX21lbV9mcmVlJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fZnJlZV9yY3UmIzM0OywKICAgICYjMzQ7YnBmX21lbV9jYWNoZV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2ZyZWUmIzM0OywKICAgICYjMzQ7YnBmX21lbV9jYWNoZV9mcmVlX3JjdSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2FsbG9jX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX21lbV9hbGxvY19kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21lbV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfbWVtX2ZyZWUmIzM0OywKICAgICYjMzQ7YnBmX21lbV9mcmVlX3JjdSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9tZW1fY2FjaGVfZnJlZSYjMzQ7LAogICAgJiMzNDticGZfbWVtX2NhY2hlX2ZyZWVfcmN1JiMzNDssCiAgICAmIzM0O2JwZl9tZW1fYWxsb2NfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfbWVtX2FsbG9jX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhd19zcGlubG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBmcmVlX2J5X3JjdV90dHJhY2UgYW5kIHdhaXRpbmdfZm9yX2dwX3R0cmFjZSBsb2NrbGVzcyBsaXN0cyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYyksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGJ1bGsgYWxsb2NhdGlvbiwgUkNVIHByb2Nlc3NpbmcsIGFuZCBkcmFpbmluZy4gRnV6emluZyBCUEYgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIGVudHJ5IHBvaW50cyBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdGhyZWFkLXNhZmV0eSBhbmQgYXZvaWQgZGVhZGxvY2tzIG9yIGRhdGEgY29ycnVwdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDU6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXcgc3BpbmxvY2sgKGByYXdfc3BpbmxvY2tfdCBsb2NrYCkgaW4gYHN0cnVjdCBicGZfbWVtX2NhY2hlYCB0byBzeW5jaHJvbml6ZSBjb25jdXJyZW50IGxpc3Qgb3BlcmF0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgYW5kIGBsbGlzdF9kZWxfYWxsYCkgb24gYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBsaXN0IGNvcnJ1cHRpb24pLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBvciBmaXhlZCBoZXJlIChzdWNoIGFzIGxvY2tpbmcgdmlvbGF0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSAvIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBsaXN0IGNvcnJ1cHRpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNmNhYzM2YTFkNjNmMGY5NDdiYmEzN2FkMzdiYmM2Y2RmZmYzYmZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwNToxOTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuYwppbmRleCBlOTY2MmRiNzE5OGZlLi41OTI3OTQzYzc2NWE3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21lbWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tZW1hbGxvYy5jCkBAIC0xMTksNiAmIzQzOzExOSw3IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2U7CiAJc3RydWN0IHJjdV9oZWFkIHJjdV90dHJhY2U7CiAJYXRvbWljX3QgY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzOwomIzQzOwlyYXdfc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RydWN0IGJwZl9tZW1fY2FjaGVzIHsKQEAgLTIxNCwyNSAmIzQzOzIxNSwyNSBAQCBzdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpCiAJZ2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDsKIAlnZnAgfD0gYXRvbWljID8gR0ZQX05PV0FJVCA6IEdGUF9LRVJORUw7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewotCQkvKgotCQkgKiBGb3IgZXZlcnkgJiMzOTtjJiMzOTsgbGxpc3RfZGVsX2ZpcnN0KCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXMKLQkJICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHQKLQkJICogbGxpc3RfYWRkKCkgYW5kIGxsaXN0X2RlbF9hbGwoKSBpbiBwYXJhbGxlbC4KLQkJICovCi0JCW9iaiA9IGxsaXN0X2RlbF9maXJzdCgmYW1wO2MtJmd0O2ZyZWVfYnlfcmN1X3R0cmFjZSk7Ci0JCWlmICghb2JqKQotCQkJYnJlYWs7Ci0JCWFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7Ci0JfQotCWlmIChpICZndDs9IGNudCkKLQkJcmV0dXJuOwomIzQzOwlzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsICZhbXA7Yy0mZ3Q7bG9jaykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEZvciBldmVyeSAmIzM5O2MmIzM5OyBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOyBpcwomIzQzOwkJCSAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0CiYjNDM7CQkJICogbGxpc3RfYWRkKCkgYW5kIGxsaXN0X2RlbF9hbGwoKSBpbiBwYXJhbGxlbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOwomIzQzOwkJCWlmICghb2JqKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwomIzQzOwkJfQogCi0JZm9yICg7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCW9iaiA9IGxsaXN0X2RlbF9maXJzdCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSk7Ci0JCWlmICghb2JqKQotCQkJYnJlYWs7Ci0JCWFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7CiYjNDM7CQlmb3IgKDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlvYmogPSBsbGlzdF9kZWxfZmlyc3QoJmFtcDtjLSZndDt3YWl0aW5nX2Zvcl9ncF90dHJhY2UpOwomIzQzOwkJCWlmICghb2JqKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopOwomIzQzOwkJfQogCX0KIAlpZiAoaSAmZ3Q7PSBjbnQpCiAJCXJldHVybjsKQEAgLTI3OSw4ICYjNDM7MjgwLDEyIEBAIHN0YXRpYyBpbnQgZnJlZV9hbGwoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsIGJvb2wgcGVyCiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjLSZndDtsb2NrKQomIzQzOwkJbGxub2RlID0gbGxpc3RfZGVsX2FsbCgmYW1wO2MtJmd0O3dhaXRpbmdfZm9yX2dwX3R0cmFjZSk7CiAKLQlmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7d2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7CiYjNDM7CWZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7CiAJYXRvbWljX3NldCgmYW1wO2MtJmd0O2NhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7CiB9CiAKQEAgLTMwMCw3ICYjNDM7MzA1LDggQEAgc3RhdGljIHZvaWQgZG9fY2FsbF9yY3VfdHRyYWNlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKQogCiAJaWYgKGF0b21pY194Y2hnKCZhbXA7Yy0mZ3Q7Y2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAxKSkgewogCQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKGMtJmd0O2RyYWluaW5nKSkpIHsKLQkJCWxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtjLSZndDtmcmVlX2J5X3JjdV90dHJhY2UpOwomIzQzOwkJCXNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDtjLSZndDtsb2NrKQomIzQzOwkJCQlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Yy0mZ3Q7ZnJlZV9ieV9yY3VfdHRyYWNlKTsKIAkJCWZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLSZndDtwZXJjcHVfc2l6ZSk7CiAJCX0KIAkJcmV0dXJuOwpAQCAtNTM1LDYgJiM0Mzs1NDEsNyBAQCBpbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KQogCQkJYy0mZ3Q7b2JqY2cgPSBvYmpjZzsKIAkJCWMtJmd0O3BlcmNwdV9zaXplID0gcGVyY3B1X3NpemU7CiAJCQljLSZndDt0Z3QgPSBjOwomIzQzOwkJCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO2MtJmd0O2xvY2spOwogCQkJaW5pdF9yZWZpbGxfd29yayhjKTsKIAkJCXByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7CiAJCX0KQEAgLTU1Nyw3ICYjNDM7NTY0LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSkKIAkJCWMtJmd0O29iamNnID0gb2JqY2c7CiAJCQljLSZndDtwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplOwogCQkJYy0mZ3Q7dGd0ID0gYzsKLQomIzQzOwkJCXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO2MtJmd0O2xvY2spOwogCQkJaW5pdF9yZWZpbGxfd29yayhjKTsKIAkJCXByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7CiAJCX0KQEAgLTYwOSw3ICYjNDM7NjE2LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKQogCQljLSZndDtvYmpjZyA9IG9iamNnOwogCQljLSZndDtwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplOwogCQljLSZndDt0Z3QgPSBjOwotCiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtjLSZndDtsb2NrKTsKIAkJaW5pdF9yZWZpbGxfd29yayhjKTsKIAkJcHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgaXRzIG93biBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhbGwgYWJvdXQgYWRkaW5nIGEgc3BpbmxvY2sgdG8gdGhlIGBicGZfbWVtX2NhY2hlYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gdXNpbmcgaXQgdG8gcHJvdGVjdCBhIGZldyBsaW5rZWQgbGlzdCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQ6IGBhbGxvY19idWxrYCwgYF9fZnJlZV9yY3VgLCBgZG9fY2FsbF9yY3VfdHRyYWNlYCwgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIGFsbCBjZW50ZXJlZCBhcm91bmQgcHJvdGVjdGluZyBhY2Nlc3MgdG8gbGlua2VkIGxpc3RzIHRoYXQgc2VlbSB0byBiZSBpbnZvbHZlZCBpbiBSQ1UgZnJlZWluZyBvciB0cmFjZXBvaW50IGRhdGEuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGxpbmtlZCBsaXN0cy4gQXJlIHRoZXNlIHBvdGVudGlhbCBzb3VyY2VzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlmIG5vdCBwcm9wZXJseSBzeW5jaHJvbml6ZWQ/IEkgd2lsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEJhc2VkIG9uIGEgcXVpY2sgc2tpbSwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGl0IGNvdWxkIGFkZHJlc3Mgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIEJQRiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBjb250ZXh0LCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaWYgdGhlIGxvY2tpbmcgaXMgaW5jb3JyZWN0IG9yIGluY29tcGxldGUuIFRoaXMgY291bGQgYmUgYSBjYW5kaWRhdGUgZm9yIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiB0byBlbnN1cmUgdGhlc2UgY2hhbmdlcyBhcmUgZWZmZWN0aXZlIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIG5ldyBpc3N1ZXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWVtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMLCAqb2xkX21lbWNnO1xuIDIxMTpcdFx0Z2ZwX3QgZ2ZwO1xuIDIxMjpcdFx0dm9pZCAqb2JqO1xuIDIxMzpcdFx0aW50IGk7XG4gMjE0Olx0XG4gMjE1Olx0XHRnZnAgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UO1xuIDIxNjpcdFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xuIDIxNzpcdFxuIDIxODpcdFx0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spIHtcbiAyMTk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuIDIyMDpcdFx0XHRcdC8qXG4gMjIxOlx0XHRcdFx0ICogRm9yIGV2ZXJ5ICYjMzk7YyYjMzk7IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4gMjIyOlx0XHRcdFx0ICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHRcbiAyMjM6XHRcdFx0XHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxuIDIyNDpcdFx0XHRcdCAqL1xuIDIyNTpcdFx0XHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4gMjI2Olx0XHRcdFx0aWYgKCFvYmopXG4gMjI3Olx0XHRcdFx0XHRicmVhaztcbiAyMjg6XHRcdFx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuIDIyOTpcdFx0XHR9XG4gMjMwOlx0XG4gMjMxOlx0XHRcdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4gMjMyOlx0XHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbiAyMzM6XHRcdFx0XHRpZiAoIW9iailcbiAyMzQ6XHRcdFx0XHRcdGJyZWFrO1xuIDIzNTpcdFx0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4gMjM2Olx0XHRcdH1cbiAyMzc6XHRcdH1cbiAyMzg6XHRcdGlmIChpIFx1MDAzZT0gY250KVxuIDIzOTpcdFx0XHRyZXR1cm47XG4gMjQwOlx0XG4gMjQxOlx0XHRtZW1jZyA9IGdldF9tZW1jZyhjKTtcbiAyNDI6XHRcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xuIDI0MzpcdFx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbiAyNDQ6XHRcdFx0LyogQWxsb2NhdGUsIGJ1dCBkb24mIzM5O3QgZGVwbGV0ZSBhdG9taWMgcmVzZXJ2ZXMgdGhhdCB0eXBpY2FsXG4gMjQ1Olx0XHRcdCAqIEdGUF9BVE9NSUMgd291bGQgZG8uIGlycV93b3JrIHJ1bnMgb24gdGhpcyBjcHUgYW5kIGttYWxsb2NcbiAyNDY6XHRcdFx0ICogd2lsbCBhbGxvY2F0ZSBmcm9tIHRoZSBjdXJyZW50IG51bWEgbm9kZSB3aGljaCBpcyB3aGF0IHdlXG4gMjQ3Olx0XHRcdCAqIHdhbnQgaGVyZS5cbiAyNDg6XHRcdFx0ICovXG4gMjQ5Olx0XHRcdG9iaiA9IF9fYWxsb2MoYywgbm9kZSwgZ2ZwKTtcbiAyNTA6XHRcdFx0aWYgKCFvYmopXG4gMjUxOlx0XHRcdFx0YnJlYWs7XG4gMjUyOlx0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG4gMjU1Olx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gMjU2Olx0fVxuIDI1NzpcdFxuIDI1ODpcdHN0YXRpYyB2b2lkIGZyZWVfb25lKHZvaWQgKm9iaiwgYm9vbCBwZXJjcHUpXG4gMjU5Olx0e1xuIDI2MDpcdFx0aWYgKHBlcmNwdSlcbiAyNjE6XHRcdFx0ZnJlZV9wZXJjcHUoKCh2b2lkIF9fcGVyY3B1ICoqKW9iailbMV0pO1xuIDI2MjpcdFxuIDI2MzpcdFx0a2ZyZWUob2JqKTtcbiAyNjQ6XHR9XG4gMjY1Olx0XG4gMjY2Olx0c3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJjcHUpXG4gMjY3Olx0e1xuIDI2ODpcdFx0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKnQ7XG4gMjY5Olx0XHRpbnQgY250ID0gMDtcbiAyNzA6XHRcbiAyNzE6XHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0LCBsbG5vZGUpIHtcbiAyNzI6XHRcdFx0aWYgKGMtXHUwMDNlZHRvcilcbiAyNzM6XHRcdFx0XHRjLVx1MDAzZWR0b3IoKHZvaWQgKilwb3MgJiM0MzsgTExJU1RfTk9ERV9TWiwgYy1cdTAwM2VkdG9yX2N0eCk7XG4gMjc0Olx0XHRcdGZyZWVfb25lKHBvcywgcGVyY3B1KTtcbiAyNzU6XHRcdFx0Y250JiM0MzsmIzQzOztcbiAyNzY6XHRcdH1cbiAyNzc6XHRcdHJldHVybiBjbnQ7XG4gMjc4Olx0fVxuIDI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTExCgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDUxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGNvbmN1cnJlbmN5IHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSB0aGUgYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AgZmlsZS4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3QgbG9ja2AgdG8gZ3VhcmQgYWNjZXNzIHRvIHRoZSBsb2NrbGVzcyBsaXN0cyBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAuIFRoZSBjb3JlIGlzc3VlIGl0JiMzOTtzIGFkZHJlc3NpbmcgaXMgcmFjZSBjb25kaXRpb25zIGFyaXNpbmcgZnJvbSBjb25jdXJyZW50IGRlbGV0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgaW4gYGFsbG9jX2J1bGtgIGFuZCBgbGxpc3RfZGVsX2FsbGAgaW4gYF9fZnJlZV9yY3VgIGFuZCBgZG9fY2FsbF9yY3VfdHRyYWNlYCkuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgc2VyaWFsaXppbmcgdGhvc2UgbGlzdCByZW1vdmFsIG9wZXJhdGlvbnMgd2l0aCBhIHNwaW5sb2NrIHRvIGVuc3VyZSBtdXR1YWwgZXhjbHVzaW9uLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciB1cyBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0LCBubyBuZXcgbWVtb3J5IGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCB2ZWN0b3IuIFdlJiMzOTtyZSBub3QgcmVhZGluZyBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG5vciBpcyB0aGVyZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBDcml0aWNhbGx5LCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBzZW1hbnRpY3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBib3VuZHMgY2hlY2tzLiBUaGUgYnVncyBpdCYjMzk7cyBmaXhpbmcgYXJlIGZpcm1seSBpbiB0aGUgY29uY3VycmVuY3kvbG9ja2luZy9yYWNlIGNvbmRpdGlvbiBkb21haW47IHRoZSBleGlzdGluZyBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBkYXRhLXJhY2UvbG9jayBkZWJ1Z2dpbmcgdG9vbHMpIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMuIFRoZXkmIzM5O2xsIHBpY2sgdXAgb24gcG90ZW50aWFsIGxpc3QgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgc3RlbW1pbmcgZnJvbSB0aGUgcmFjZXMuCgpMZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGNyaXRlcmlhOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOZWdhdGl2ZS4KMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXQgZmllbGRzIHJlYWQgbGF0ZXI/IE5vLgo0LiAgQm91bmRzIGNoZWNrcy9sZW5ndGhzIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXQgYnl0ZXM/IEFic29sdXRlbHkgbm90LgoKU28sICpOZWVkc0tNU0FOID0gZmFsc2UqLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoaXMgcmVhc29uaW5nLiBXZSYjMzk7cmUgZm9jdXNpbmcgb24gS01TQU4gdnMgS0FTQU4uIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBvdXIgYWxsaWVzIGhlcmUg4oCTIEtBU0FOIGZsYWdzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlKSwgYW5kIExPQ0tERVAgdmVyaWZpZXMgbG9ja2luZyBjb3JyZWN0bmVzcy4gS01TQU4sIGhvd2V2ZXIsIGlzIGFsbCBhYm91dCB0cmFja2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgZGV0ZWN0aW5nIGxlYWtzIHRvIHVzZXJzcGFjZSBvciByZWFkcyBpbiBicmFuY2hpbmcvcG9pbnRlciBhcml0aG1ldGljLiBUaGUgcGF0Y2ggKnB1cmVseSogYWRkcyBzeW5jaHJvbml6YXRpb24g4oCTIGEgc3BpbmxvY2sg4oCTIHRvIHNlcmlhbGl6ZSBsaXN0IG1hbmlwdWxhdGlvbnMgb24gUkNVIHRyYWNlIGxpc3RzIGluIGBicGZfbWVtX2NhY2hlYC4gVGhlcmUmIzM5O3Mgbm90aGluZyBpbiBoZXJlIHRoYXQgdG91Y2hlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpdHNlbGYgb3IgY291bGQgZXhwb3NlIGl0LiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZmxhZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3IHNwaW5sb2NrIChgcmF3X3NwaW5sb2NrX3QgbG9ja2ApIGluIGBzdHJ1Y3QgYnBmX21lbV9jYWNoZWAgdG8gc3luY2hyb25pemUgY29uY3VycmVudCBsaXN0IG9wZXJhdGlvbnMgKGBsbGlzdF9kZWxfZmlyc3RgIGFuZCBgbGxpc3RfZGVsX2FsbGApIG9uIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLiBcblxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXcgc3BpbmxvY2sgKGByYXdfc3BpbmxvY2tfdCBsb2NrYCkgaW4gYHN0cnVjdCBicGZfbWVtX2NhY2hlYCB0byBzeW5jaHJvbml6ZSBjb25jdXJyZW50IGxpc3Qgb3BlcmF0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgYW5kIGBsbGlzdF9kZWxfYWxsYCkgb24gYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IuIFxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBsaXN0IGNvcnJ1cHRpb24pLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBvciBmaXhlZCBoZXJlIChzdWNoIGFzIGxvY2tpbmcgdmlvbGF0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSAvIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBsaXN0IGNvcnJ1cHRpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToxOTo0NC4yOTM3ODQyNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM5NTg1NzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NcIixcbiAgICBcImJwZl9tZW1fZnJlZVwiLFxuICAgIFwiYnBmX21lbV9mcmVlX3JjdVwiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2luaXRcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfZGVzdHJveVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhdyBzcGlubG9jayAoYHJhd19zcGlubG9ja190IGxvY2tgKSBpbiBgc3RydWN0IGJwZl9tZW1fY2FjaGVgIHRvIHN5bmNocm9uaXplIGNvbmN1cnJlbnQgbGlzdCBvcGVyYXRpb25zIChgbGxpc3RfZGVsX2ZpcnN0YCBhbmQgYGxsaXN0X2RlbF9hbGxgKSBvbiBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAgd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvci4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjQ0LjI5Mzc4OTEwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMjE3ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzZjYWMzNmExZDYzZjBmOTQ3YmJhMzdhZDM3YmJjNmNkZmZmM2JmZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDA1OjE5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xcbmluZGV4IGU5NjYyZGI3MTk4ZmUuLjU5Mjc5NDNjNzY1YTcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jXFxuKysrIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXFxuQEAgLTExOSw2ICsxMTksNyBAQCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSB7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwX3R0cmFjZTtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIHJjdV90dHJhY2U7XFxuIFxcdGF0b21pY190IGNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcztcXG4rXFx0cmF3X3NwaW5sb2NrX3QgbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBicGZfbWVtX2NhY2hlcyB7XFxuQEAgLTIxNCwyNSArMjE1LDI1IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2J1bGsoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjbnQsIGludCBub2RlLCBib29sIGF0b21pYylcXG4gXFx0Z2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDtcXG4gXFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpOyBpc1xcbi1cXHRcXHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxcbi1cXHRcXHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xcbi1cXHRcXHRpZiAoIW9iailcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuLVxcdH1cXG4tXFx0aWYgKGkgXFx1MDAzZT0gY250KVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmMtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpOyBpc1xcbitcXHRcXHRcXHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxcbitcXHRcXHRcXHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xcbitcXHRcXHRcXHRpZiAoIW9iailcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdGZvciAoOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4tXFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbi1cXHRcXHRpZiAoIW9iailcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuK1xcdFxcdGZvciAoOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbitcXHRcXHRcXHRpZiAoIW9iailcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAoaSBcXHUwMDNlPSBjbnQpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjc5LDggKzI4MCwxMiBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlclxcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZjLVxcdTAwM2Vsb2NrKVxcbitcXHRcXHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbiBcXG4tXFx0ZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbChcXHUwMDI2Yy1cXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuK1xcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNmMtXFx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMCk7XFxuIH1cXG4gXFxuQEAgLTMwMCw3ICszMDUsOCBAQCBzdGF0aWMgdm9pZCBkb19jYWxsX3JjdV90dHJhY2Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXFxuIFxcbiBcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNmMtXFx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMSkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVxcdTAwM2VkcmFpbmluZykpKSB7XFxuLVxcdFxcdFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmMtXFx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XFxuK1xcdFxcdFxcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNmMtXFx1MDAzZWxvY2spXFxuK1xcdFxcdFxcdFxcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmMtXFx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XFxuIFxcdFxcdFxcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVxcdTAwM2VwZXJjcHVfc2l6ZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC01MzUsNiArNTQxLDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcXG4gXFx0XFx0XFx0Yy1cXHUwMDNldGd0ID0gYztcXG4rXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0aW5pdF9yZWZpbGxfd29yayhjKTtcXG4gXFx0XFx0XFx0cHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTtcXG4gXFx0XFx0fVxcbkBAIC01NTcsNyArNTY0LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4gXFx0XFx0XFx0Yy1cXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcXG4gXFx0XFx0XFx0Yy1cXHUwMDNldGd0ID0gYztcXG4tXFxuK1xcdFxcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2Yy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdFxcdGluaXRfcmVmaWxsX3dvcmsoYyk7XFxuIFxcdFxcdFxcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XFxuIFxcdFxcdH1cXG5AQCAtNjA5LDcgKzYxNiw3IEBAIGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSlcXG4gXFx0XFx0Yy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4gXFx0XFx0Yy1cXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcXG4gXFx0XFx0Yy1cXHUwMDNldGd0ID0gYztcXG4tXFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2Yy1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGluaXRfcmVmaWxsX3dvcmsoYyk7XFxuIFxcdFxcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NDQuNzM1NTk4ODY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjc5NjAzODMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NcIixcbiAgICBcImJwZl9tZW1fZnJlZVwiLFxuICAgIFwiYnBmX21lbV9mcmVlX3JjdVwiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2luaXRcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM2Y2FjMzZhMWQ2M2YwZjk0N2JiYTM3YWQzN2JiYzZjZGZmZjNiZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA1OjE5OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tZW1hbGxvYy5jIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5pbmRleCBlOTY2MmRiNzE5OGZlLi41OTI3OTQzYzc2NWE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tZW1hbGxvYy5jXG4rKysgYi9rZXJuZWwvYnBmL21lbWFsbG9jLmNcbkBAIC0xMTksNiArMTE5LDcgQEAgc3RydWN0IGJwZl9tZW1fY2FjaGUge1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgd2FpdGluZ19mb3JfZ3BfdHRyYWNlO1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdV90dHJhY2U7XG4gXHRhdG9taWNfdCBjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3M7XG4rXHRyYXdfc3BpbmxvY2tfdCBsb2NrO1xuIH07XG4gXG4gc3RydWN0IGJwZl9tZW1fY2FjaGVzIHtcbkBAIC0yMTQsMjUgKzIxNSwyNSBAQCBzdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpXG4gXHRnZnAgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UO1xuIFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpKyspIHtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV2ZXJ5ICdjJyBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpOyBpc1xuLVx0XHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxuLVx0XHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxuLVx0XHQgKi9cbi1cdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTtcbi1cdFx0aWYgKCFvYmopXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4tXHR9XG4tXHRpZiAoaSBcdTAwM2U9IGNudClcbi1cdFx0cmV0dXJuO1xuK1x0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpKyspIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXNcbitcdFx0XHQgKiBkb25lIG9ubHkgYnkgb25lIENQVSA9PSBjdXJyZW50IENQVS4gT3RoZXIgQ1BVcyBtaWdodFxuK1x0XHRcdCAqIGxsaXN0X2FkZCgpIGFuZCBsbGlzdF9kZWxfYWxsKCkgaW4gcGFyYWxsZWwuXG4rXHRcdFx0ICovXG4rXHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTtcbitcdFx0XHRpZiAoIW9iailcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4rXHRcdH1cbiBcbi1cdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuLVx0XHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xuLVx0XHRpZiAoIW9iailcbi1cdFx0XHRicmVhaztcbi1cdFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcbitcdFx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbitcdFx0XHRpZiAoIW9iailcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4rXHRcdH1cbiBcdH1cbiBcdGlmIChpIFx1MDAzZT0gY250KVxuIFx0XHRyZXR1cm47XG5AQCAtMjc5LDggKzI4MCwxMiBAQCBzdGF0aWMgaW50IGZyZWVfYWxsKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlLCBib29sIHBlclxuIHN0YXRpYyB2b2lkIF9fZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWVtX2NhY2hlICpjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfbWVtX2NhY2hlLCByY3VfdHRyYWNlKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGU7XG4rXG4rXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmMtXHUwMDNlbG9jaylcbitcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4gXG4tXHRmcmVlX2FsbChjLCBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbitcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiBcdGF0b21pY19zZXQoXHUwMDI2Yy1cdTAwM2VjYWxsX3JjdV90dHJhY2VfaW5fcHJvZ3Jlc3MsIDApO1xuIH1cbiBcbkBAIC0zMDAsNyArMzA1LDggQEAgc3RhdGljIHZvaWQgZG9fY2FsbF9yY3VfdHRyYWNlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxuIFxuIFx0aWYgKGF0b21pY194Y2hnKFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAxKSkge1xuIFx0XHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKGMtXHUwMDNlZHJhaW5pbmcpKSkge1xuLVx0XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuK1x0XHRcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKVxuK1x0XHRcdFx0bGxub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4gXHRcdFx0ZnJlZV9hbGwoYywgbGxub2RlLCAhIWMtXHUwMDNlcGVyY3B1X3NpemUpO1xuIFx0XHR9XG4gXHRcdHJldHVybjtcbkBAIC01MzUsNiArNTQxLDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcbiBcdFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdFx0Yy1cdTAwM2VwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplO1xuIFx0XHRcdGMtXHUwMDNldGd0ID0gYztcbitcdFx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRpbml0X3JlZmlsbF93b3JrKGMpO1xuIFx0XHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHRcdH1cbkBAIC01NTcsNyArNTY0LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcbiBcdFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdFx0Yy1cdTAwM2VwZXJjcHVfc2l6ZSA9IHBlcmNwdV9zaXplO1xuIFx0XHRcdGMtXHUwMDNldGd0ID0gYztcbi1cbitcdFx0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRpbml0X3JlZmlsbF93b3JrKGMpO1xuIFx0XHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHRcdH1cbkBAIC02MDksNyArNjE2LDcgQEAgaW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxuIFx0XHRjLVx1MDAzZW9iamNnID0gb2JqY2c7XG4gXHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0Yy1cdTAwM2V0Z3QgPSBjO1xuLVxuK1x0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcdFx0aW5pdF9yZWZpbGxfd29yayhjKTtcbiBcdFx0cHJlZmlsbF9tZW1fY2FjaGUoYywgY3B1KTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjQ0LjczNTYwMDEyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1ODg2ODgxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gYGtlcm5lbC9icGYvbWVtYWxsb2MuY2AuIExvb2tzIGxpa2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gaW50cm9kdWNpbmcgYSBgcmF3X3NwaW5sb2NrX3QgbG9jaztgIHdpdGhpbiB0aGUgYHN0cnVjdCBicGZfbWVtX2NhY2hlYC4gQWgsIHNvIHRoaXMgaXMgdG8gYWRkIGZpbmUtZ3JhaW5lZCBsb2NraW5nLiBFeGNlbGxlbnQuIEknbSBhc3N1bWluZyB0aGlzIGlzIHRvIHByb3RlY3QgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMsIGxpa2VseSBhcm91bmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGNhY2hlIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aS1DUFUgZW52aXJvbm1lbnQsIGFzIHRoaXMgaXMgQlBGLCBhbmQgd2UgYXJlIHdvcmtpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiwgd2hpY2ggaXMgbGlrZWx5IHRvIGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay5cblxuVGhlIGxvY2tpbmcgc2VlbXMgdG8gYmUgcHJpbWFyaWx5IGFyb3VuZCBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAgYWNjZXNzZXMgd2l0aGluIGBhbGxvY19idWxrYCwgYF9fZnJlZV9yY3VgLCBhbmQgYGRvX2NhbGxfcmN1X3R0cmFjZWAuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gZnJlZWluZyBtZW1vcnkgdmlhIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSksIGFuZCB0aG9zZSBvcGVyYXRpb25zIG5lZWQgdG8gYmUgc3luY2hyb25pemVkIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNwaW5sb2NrIHVzaW5nIGByYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2Yy1cdTAwM2Vsb2NrKWAgaW4gYGJwZl9tZW1fYWxsb2NfaW5pdGAgYW5kIGBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXRgIGNvbmZpcm1zIHRoYXQuIEdvb2QsIHByb3BlciBpbml0aWFsaXphdGlvbiBpcyBrZXkuXG5cbk5vdywgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nLCBJIHNob3VsZCBwcm9iYWJseSB1c2UgYSB0b29sIGxpa2UgYGdyZXBwZXJgIChvciBqdXN0IGEgcXVpY2sgYHJlYWQtZmlsZWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UpIHRvIGluc3BlY3QgdGhlIGNvZGUgZGlyZWN0bHkuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGNoYW5nZSB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGxvY2sgYWRkaXRpb25zLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgdGhlIGFzc29jaWF0ZWQgY29uZmlncyBhbmQgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgZmlsZSwganVzdCB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9ucyBoYXZlbid0IGludHJvZHVjZWQgYW55IHVuaW50ZW5kZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjUyLjMyNDI5MTA3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE5MDM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWVtX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX21lbV9hbGxvYy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDg3PXN0YXRpYyB2b2lkIHByZWZpbGxfbWVtX2NhY2hlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUwNy0gKi9cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NTA4OmludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUwOS17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTc2LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1Nzc6aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU3OC17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNTkwLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo1OTE6aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01OTIte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTY0Nz1zdGF0aWMgdm9pZCBjaGVja19tZW1fY2FjaGUoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjU3LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo2NTg6c3RhdGljIHZvaWQgY2hlY2tfbGVha2VkX29ianMoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02NTkte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY4MC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NjgxOnN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jX25vX2JhcnJpZXIoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy02ODIte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTY5Mi1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NjkzOnN0YXRpYyB2b2lkIGZyZWVfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSlcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNjk0LXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYz03MTA9c3RhdGljIHZvaWQgZnJlZV9tZW1fYWxsb2NfZGVmZXJyZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MTEte1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3MTI6XFx0c3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBicGZfbWVtX2FsbG9jLCB3b3JrKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzEzLVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTcxNy1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzE4OnN0YXRpYyB2b2lkIGRlc3Ryb3lfbWVtX2FsbG9jKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHJjdV9pbl9wcm9ncmVzcylcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzE5LXtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzIwOlxcdHN0cnVjdCBicGZfbWVtX2FsbG9jICpjb3B5O1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03MjEtXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNzQyLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo3NDM6dm9pZCBicGZfbWVtX2FsbG9jX2Rlc3Ryb3koc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03NDQte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTc4Mz1zdGF0aWMgdm9pZCBub3RyYWNlICp1bml0X2FsbG9jKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5MC1cXHQgKiBwcm9nX0FcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzkxOlxcdCAqICAgYnBmX21lbV9hbGxvY1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy03OTItXFx0ICogICAgICBwcmVlbXB0aW9uIG9yIGlycSAtXFx1MDAzZSBwcm9nX0JcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6NzkzOlxcdCAqICAgICAgICBicGZfbWVtX2FsbG9jXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTc5NC1cXHQgKlxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTg2Nj1zdGF0aWMgdm9pZCBub3RyYWNlIHVuaXRfZnJlZV9yY3Uoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy04ODktICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjg5MDp2b2lkIG5vdHJhY2UgKmJwZl9tZW1fYWxsb2Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBzaXplX3Qgc2l6ZSlcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtODkxLXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MDctXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjkwODp2b2lkIG5vdHJhY2UgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MDkte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkyMy1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTI0OnZvaWQgbm90cmFjZSBicGZfbWVtX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05MjUte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTkzOS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTQwOnZvaWQgbm90cmFjZSAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk0MS17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQ3LVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5NDg6dm9pZCBub3RyYWNlIGJwZl9tZW1fY2FjaGVfZnJlZShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTQ5LXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NTUtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk1Njp2b2lkIG5vdHJhY2UgYnBmX21lbV9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTU3LXtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NjgtICogSXQgY291bGQgYmUgdXNlZCB3aGVuIHRoZSByY3VfdGFza3NfdHJhY2UgY2FsbGJhY2sgZG9lcyBub3QgaGF2ZVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5Njk6ICogYSBob2xkIG9uIHRoZSBvcmlnaW5hbCBicGZfbWVtX2FsbG9jIG9iamVjdCB0aGF0IGFsbG9jYXRlZCB0aGVcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTcwLSAqICdwdHInLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gdGhlIHVuY29tbW9uIGNvZGUgcGF0aC5cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6OTcxOiAqIE90aGVyd2lzZSwgdGhlIGJwZl9tZW1fYWxsb2MncyBmcmVlX2xsaXN0IGNhbm5vdCBiZSByZWZpbGxlZFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05NzItICogYW5kIG1heSBhZmZlY3QgcGVyZm9ybWFuY2UuXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9OTc0PXZvaWQgYnBmX21lbV9jYWNoZV9yYXdfZnJlZSh2b2lkICpwdHIpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTg1LSAqL1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5ODY6dm9pZCBub3RyYWNlICpicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgZ2ZwX3QgZmxhZ3MpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAwOC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAwOTppbnQgYnBmX21lbV9hbGxvY19jaGVja19zaXplKGJvb2wgcGVyY3B1LCBzaXplX3Qgc2l6ZSlcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAxMC17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTAxOC1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTAxOTp2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICgqZHRvcikodm9pZCAqb2JqLCB2b2lkICpjdHgpLFxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0xMDIwLVxcdFxcdFxcdCAgICB2b2lkICgqZHRvcl9jdHhfZnJlZSkodm9pZCAqY3R4KSwgdm9pZCAqY3R4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToxOTo1Mi4zODc0ODU0ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ5MTQyNDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBrZXJuZWwgQlBGIGJ1aWxkIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIENvbXBpbGF0aW9uIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGZvciBga2VybmVsL2JwZi9tZW1hbGxvYy5jYC4gVGhpcyBpc24ndCBhIGh1Z2Ugc3VycHJpc2UsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCAqYXNzdW1lKiB0aGUgaW5jbHVkZSBwYXRocyBhbmQgY29uZmlndXJhdGlvbiBmbGFncy4gTXkgYmVzdCBiZXQgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSByZWxldmFudCBNYWtlZmlsZSBhbmQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIHN0YXJ0IHdpdGggYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBzaG91bGQgdGVsbCBtZSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgYW5kIHdpdGggd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYG1lbWFsbG9jLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgZmxvdyBmb3IgdGhhdCBzcGVjaWZpYyBjb21wb25lbnQgYW5kIHRvIHRyb3VibGVzaG9vdCBidWlsZCBpc3N1ZXMgaWYgdGhleSBhcmlzZSBsYXRlci4gSSdtIGxvb2tpbmcgZm9yIHRoZSB0cmlnZ2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjE5OjU0LjIzNjYzMDkyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1NjY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1hbGxvY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTQuMjg0MTk0MTc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY4ODk0MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkNoZWNraW5nIHRoZSBCUEYgU3ljYWxsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0cmlnZ2VyaW5nIHRoZSBjb21waWxhdGlvbiBvZiBgbWVtYWxsb2Mub2AuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIExldCdzIHNlZS4uLiBgQlBGX1NZU0NBTExgIHNob3VsZCBiZSBkZWZpbmVkIHNvbWV3aGVyZSB0aGF0IGNvbnRyb2xzIHRoZSBhdmFpbGFiaWxpdHkgb2YgQlBGIHN5c2NhbGwgZnVuY3Rpb25hbGl0eSwgc28gSSdtIHRoaW5raW5nIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhlIEtjb25maWcgZmlsZSBhcmUgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgYW5kIHRoZW4gSSBzaG91bGQgYmUgYWJsZSB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aHkgdGhpcyBvYmplY3QgZmlsZSBpcyBiZWluZyBwdWxsZWQgaW4gYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzIwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTUuOTczMTQwMzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE4MTMxMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTcuNTY0OTcyNDE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4NTA1MTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkV4YW1pbmluZyBCUEZfU1lTQ0FMTCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBCUEZfU1lTQ0FMTGAuIE15IGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gdHJhY2UgaXQgYmFjayB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSdsbCBoZWFkIHN0cmFpZ2h0IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBCUEYgb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQlBGX1NZU0NBTExgIG5lYXRseSBsYWlkIG91dCB0aGVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgZW5hYmxlZCwgYW55IG90aGVyIGZlYXR1cmVzIGl0IGRlcGVuZHMgb24sIGFuZCBwZXJoYXBzIGV2ZW4gdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXRzIGF2YWlsYWJpbGl0eS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IHNwZWNpZmljIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToxOTo1OS4zNTAwMjY4MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MTk6NTkuMzUwMDg5NjY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2OTY3MTQ3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyB0byBpdHMgZnVuY3Rpb25zLiBBZnRlciBhIGNhcmVmdWwgcmVhZCwgSSBzZWUgdGhlIGNvcmUgbW9kaWZpY2F0aW9uOiBhIHJhdyBzcGlubG9jaywgYGxvY2tgLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdHVyZS4gVGhpcyBpcyBpbW1lZGlhdGVseSBzaWduYWxpbmcgY29uY3VycmVuY3kgaXNzdWVzIGJlaW5nIGFkZHJlc3NlZC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spYCBhcm91bmQgb3BlcmF0aW9ucyB0aGF0IHdlcmUgbGlrZWx5IHRoZSBzb3VyY2Ugb2YgcmFjZSBjb25kaXRpb25zLiBXcmFwcGluZyB0aGUgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGFjY2Vzc2VzIGluIGBhbGxvY19idWxrYCwgYW5kIHRoZSBtYW5pcHVsYXRpb25zIG9mIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGluIGBfX2ZyZWVfcmN1YCwgYW5kIGBmcmVlX2J5X3JjdV90dHJhY2VgIGluIGBkb19jYWxsX3JjdV90dHJhY2VgIGNvbmZpcm1zIHRoaXMuIFRoZSBzcGlubG9jayBpcyBpbml0aWFsaXplZCBkdXJpbmcgdGhlIHN0YXJ0dXAgb2YgdGhlIGFsbG9jYXRvci5cblxuVGhpcyBpcyBhIGNsZWFyLWN1dCBjb25jdXJyZW5jeSBmaXggd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciBpdHNlbGYsIGFuZCB0aGF0J3MgY3JpdGljYWwuIENvbnNpZGVyaW5nIHRoYXQgdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIGlzIGZ1bmRhbWVudGFsIHRvIEJQRiBtYXBzLCBsaWtlIGhhc2ggbWFwcywgYW5kIHRoZSBsaWZlY3ljbGUgb2YgQlBGIHByb2dyYW1zLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYGtwdHJgIGRlcmVmZXJlbmNlcyBhbmQgYGJwZl9vYmpfbmV3L2Ryb3BgIG9wZXJhdGlvbnMsIHRoaXMgaW1wYWN0cyBhIGxvdC4gVGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgZXhlY3V0aW9uIG9mIGFueSBCUEYgcHJvZ3JhbSBvciBtYXAgb3BlcmF0aW9uIHdpbGwgdG91Y2ggdGhpcyBjb2RlLiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGEgcmVzdWx0IG9mIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgYnV0IGV4cGxvaXRhYmxlLCByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZW50cnlwb2ludHMgYW5kIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBzZWUgd2hlcmUgYGFsbG9jX2J1bGtgLCBgdW5pdF9hbGxvY2AsIGFuZCBgdW5pdF9mcmVlX3JjdWAgYXJlIGNhbGxlZCBmcm9tIHRvIHNlZSB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBMZXQncyBsaXN0IHRoZSBleHBvc2VkLCBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yOiBgYnBmX21lbV9hbGxvY19pbml0YCwgYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGBicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzYCwgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgLCBhbmQgYGJwZl9tZW1fYWxsb2NfZGVzdHJveWAuIFRoZSBjYWxsIGdyYXBoIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGtleS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhbGxvY19idWxrYCBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgbmV3bHkgYWRkZWQgbG9jayBpcyBwcm90ZWN0aW5nIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDowNS4wNDY4MDYzMjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODM2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2J1bGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuYz0xNzI9c3RhdGljIHZvaWQgaW5jX2FjdGl2ZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTgwLVxcdFxcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjE4MTpcXHQvKiBhbGxvY19idWxrIHJ1bnMgZnJvbSBpcnFfd29yayB3aGljaCB3aWxsIG5vdCBwcmVlbXB0IGEgYnBmXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTE4Mi1cXHQgKiBwcm9ncmFtIHRoYXQgZG9lcyB1bml0X2FsbG9jL3VuaXRfZnJlZSBzaW5jZSBJUlFzIGFyZVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTE5Nz1zdGF0aWMgdm9pZCBhZGRfb2JqX3RvX2ZyZWVfbGlzdChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTIwNy0vKiBNb3N0bHkgcnVucyBmcm9tIGlycV93b3JrIGV4Y2VwdCBfX2luaXQgcGhhc2UuICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjIwODpzdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTIwOS17XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDI2PXN0YXRpYyB2b2lkIGJwZl9tZW1fcmVmaWxsKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00MzYtXFx0XFx0ICovXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjQzNzpcXHRcXHRhbGxvY19idWxrKGMsIGMtXFx1MDAzZWJhdGNoLCBOVU1BX05PX05PREUsIHRydWUpO1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy00MzgtXFx0ZWxzZSBpZiAoY250IFxcdTAwM2UgYy1cXHUwMDNlaGlnaF93YXRlcm1hcmspXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9NDg3PXN0YXRpYyB2b2lkIHByZWZpbGxfbWVtX2NhY2hlKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTQ5Ny1cXHRcXHRjbnQgPSA0O1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo0OTg6XFx0YWxsb2NfYnVsayhjLCBjbnQsIGNwdV90b19ub2RlKGNwdSksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtNDk5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MDUuMDk2NjQ1NzQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NDc1MTQyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgRnJlZWluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIGhvdyB0aGUgYGFsbG9jX2J1bGtgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxhbmRzY2FwZS4gSSBrbm93IHRoYXQgYGFsbG9jX2J1bGtgIGlzIHVzZWQgZHVyaW5nIGBwcmVmaWxsX21lbV9jYWNoZWAsIHdoaWNoIGl0c2VsZiBpcyBwYXJ0IG9mIHRoZSBgYnBmX21lbV9hbGxvY19pbml0YCBzZXF1ZW5jZS4gVGhpcyBpcyB0aGUgc2V0dXAgcGhhc2UuIFRoZW4sIGl0J3MgYWxzbyBpbnZva2VkIHdpdGhpbiBgYnBmX21lbV9yZWZpbGxgLCB3aGljaCBpcyBzY2hlZHVsZWQgYXMgYGlycV93b3JrYCBkdXJpbmcgY2FsbHMgdG8gYHVuaXRfYWxsb2NgIG9yIGBicGZfbWVtX2FsbG9jYCwgb3IgdGhlIGBicGZfbWVtX2NhY2hlX2FsbG9jYCBmdW5jdGlvbnMuIFNvLCB0aGVzZSBhcmUgdGhlIGFsbG9jYXRpb24gcGF0aHMuXG5cbk5vdywgb24gdGhlIGZyZWVpbmcgc2lkZSwgYF9fZnJlZV9yY3VgIHBvcHMgdXAuIEkga25vdyB0aGF0IGl0J3MgYW4gUkNVIGNhbGxiYWNrLCBzY2hlZHVsZWQgYnkgYGRvX2NhbGxfcmN1X3R0cmFjZWAuIFRoaXMgd2hvbGUgcGF0aCBraWNrcyBvZmYgd2hlbiBvYmplY3RzIGFyZSBiZWluZyBmcmVlZCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYHVuaXRfZnJlZV9yY3VgIHdoaWNoIHRoZW4gZmxvd3MgaW50byBgYnBmX21lbV9mcmVlX3JjdWAsIGFuZCB0aGVuIGBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1YCBhbmQgYGJwZl9tZW1fY2FjaGVfcmF3X2ZyZWVgIG9yIHRoZSBtb3JlIGdlbmVyYWwgYGJwZl9tZW1fZnJlZWAgZnVuY3Rpb25zLiBUaGF0J3MgdGhlIGRlYWxsb2NhdGlvbiBwYXJ0IG9mIHRoZSBwdXp6bGUuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGV4dGVybmFsbHkuIEkgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgd2l0aGluIGB2bWxpbnV4YC4gU28sIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9tZW1fYWxsb2NgLCBgYnBmX21lbV9mcmVlYCwgYGJwZl9tZW1fZnJlZV9yY3VgLCBgYnBmX21lbV9jYWNoZV9hbGxvY2AsIGBicGZfbWVtX2NhY2hlX2ZyZWVgLCBgYnBmX21lbV9jYWNoZV9mcmVlX3JjdWAsIGFuZCBgYnBmX21lbV9hbGxvY19pbml0YCBhcmUgYWxsIGFjdHVhbGx5IGF2YWlsYWJsZSBhcyBlbnRyeSBwb2ludHMuXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGdhaW4gYW4gb3ZlcnZpZXcgb2YgdGhlIGxhbmRzY2FwZSwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZGVjbGFyZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgd2lsbCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MDguNjQ0MTYyNDI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDIyIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbiAgIDM6XFx0I2lmbmRlZiBfQlBGX01FTV9BTExPQ19IXFxuICAgNDpcXHQjZGVmaW5lIF9CUEZfTUVNX0FMTE9DX0hcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlcl90eXBlcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZTtcXG4gICA5OlxcdHN0cnVjdCBicGZfbWVtX2NhY2hlcztcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RydWN0IGJwZl9tZW1fYWxsb2Mge1xcbiAgMTI6XFx0XFx0c3RydWN0IGJwZl9tZW1fY2FjaGVzIF9fcGVyY3B1ICpjYWNoZXM7XFxuICAxMzpcXHRcXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSBfX3BlcmNwdSAqY2FjaGU7XFxuICAxNDpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuICAxNTpcXHRcXHRib29sIHBlcmNwdTtcXG4gIDE2OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiAgMTc6XFx0XFx0dm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCk7XFxuICAxODpcXHRcXHR2b2lkICpkdG9yX2N0eDtcXG4gIDE5OlxcdH07XFxuICAyMDpcXHRcXG4gIDIxOlxcdC8qICdzaXplICE9IDAnIGlzIGZvciBicGZfbWVtX2FsbG9jIHdoaWNoIG1hbmFnZXMgZml4ZWQtc2l6ZSBvYmplY3RzLlxcbiAgMjI6XFx0ICogQWxsb2MgYW5kIGZyZWUgYXJlIGRvbmUgd2l0aCBicGZfbWVtX2NhY2hlX3thbGxvYyxmcmVlfSgpLlxcbiAgMjM6XFx0ICpcXG4gIDI0OlxcdCAqICdzaXplID0gMCcgaXMgZm9yIGJwZl9tZW1fYWxsb2Mgd2hpY2ggbWFuYWdlcyBtYW55IGZpeGVkLXNpemUgb2JqZWN0cy5cXG4gIDI1OlxcdCAqIEFsbG9jIGFuZCBmcmVlIGFyZSBkb25lIHdpdGggYnBmX21lbV97YWxsb2MsZnJlZX0oKSBhbmQgdGhlIHNpemUgb2ZcXG4gIDI2OlxcdCAqIHRoZSByZXR1cm5lZCBvYmplY3QgaXMgZ2l2ZW4gYnkgdGhlIHNpemUgYXJndW1lbnQgb2YgYnBmX21lbV9hbGxvYygpLlxcbiAgMjc6XFx0ICogSWYgcGVyY3B1IGVxdWFscyB0cnVlLCBlcnJvciB3aWxsIGJlIHJldHVybmVkIGluIG9yZGVyIHRvIGF2b2lkXFxuICAyODpcXHQgKiBsYXJnZSBtZW1vcnkgY29uc3VtcHRpb24gYW5kIHRoZSBiZWxvdyBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoKVxcbiAgMjk6XFx0ICogc2hvdWxkIGJlIHVzZWQgdG8gZG8gb24tZGVtYW5kIHBlci1jcHUgYWxsb2NhdGlvbiBmb3IgZWFjaCBzaXplLlxcbiAgMzA6XFx0ICovXFxuICAzMTpcXHRpbnQgYnBmX21lbV9hbGxvY19pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgaW50IHNpemUsIGJvb2wgcGVyY3B1KTtcXG4gIDMyOlxcdC8qIEluaXRpYWxpemUgYSBub24tZml4LXNpemUgcGVyY3B1IG1lbW9yeSBhbGxvY2F0b3IgKi9cXG4gIDMzOlxcdGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV9pbml0KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcXG4gIDM0OlxcdC8qIFRoZSBwZXJjcHUgYWxsb2NhdGlvbiB3aXRoIGEgc3BlY2lmaWMgdW5pdCBzaXplLiAqL1xcbiAgMzU6XFx0aW50IGJwZl9tZW1fYWxsb2NfcGVyY3B1X3VuaXRfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplKTtcXG4gIDM2OlxcdHZvaWQgYnBmX21lbV9hbGxvY19kZXN0cm95KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSk7XFxuICAzNzpcXHR2b2lkIGJwZl9tZW1fYWxsb2Nfc2V0X2R0b3Ioc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKCpkdG9yKSh2b2lkICpvYmosIHZvaWQgKmN0eCksXFxuICAzOTpcXHRcXHRcXHRcXHQgICAgdm9pZCAoKmR0b3JfY3R4X2ZyZWUpKHZvaWQgKmN0eCksXFxuICA0MDpcXHRcXHRcXHRcXHQgICAgdm9pZCAqY3R4KTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0LyogQ2hlY2sgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Iga21hbGxvYyBlcXVpdmFsZW50IGFsbG9jYXRvciAqL1xcbiAgNDM6XFx0aW50IGJwZl9tZW1fYWxsb2NfY2hlY2tfc2l6ZShib29sIHBlcmNwdSwgc2l6ZV90IHNpemUpO1xcbiAgNDQ6XFx0XFxuICA0NTpcXHQvKiBrbWFsbG9jL2tmcmVlIGVxdWl2YWxlbnQ6ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjIwOjA4LjY0NDIyODY1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY3NTIyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfbWVtX2FsbG9jLmhgKipcblxuQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gbGV2ZWwgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IGludG8gYGluY2x1ZGUvbGludXgvYnBmX21lbV9hbGxvYy5oYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBtYW5hZ2luZyBCUEYgcHJvZ3JhbSBtZW1vcnkgcmVzaWRlLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiBmb3IgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIExldCdzIHNlZSB3aGF0IGdlbXMgdGhpcyBoZWFkZXIgZmlsZSBob2xkcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxMC41MTE3NTM1NjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9icGZfbWVtX2FsbG9jLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDY6XFx0dm9pZCAqYnBmX21lbV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHNpemVfdCBzaXplKTtcXG4gIDQ3OlxcdHZvaWQgYnBmX21lbV9mcmVlKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcXG4gIDQ4OlxcdHZvaWQgYnBmX21lbV9mcmVlX3JjdShzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIHZvaWQgKnB0cik7XFxuICA0OTpcXHRcXG4gIDUwOlxcdC8qIGttZW1fY2FjaGVfYWxsb2MvZnJlZSBlcXVpdmFsZW50OiAqL1xcbiAgNTE6XFx0dm9pZCAqYnBmX21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEpO1xcbiAgNTI6XFx0dm9pZCBicGZfbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCB2b2lkICpwdHIpO1xcbiAgNTM6XFx0dm9pZCBicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgdm9pZCAqcHRyKTtcXG4gIDU0OlxcdHZvaWQgYnBmX21lbV9jYWNoZV9yYXdfZnJlZSh2b2lkICpwdHIpO1xcbiAgNTU6XFx0dm9pZCAqYnBmX21lbV9jYWNoZV9hbGxvY19mbGFncyhzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGdmcF90IGZsYWdzKTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0I2VuZGlmIC8qIF9CUEZfTUVNX0FMTE9DX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MTAuNTExODE1NDQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDAzMzAzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgQlBGIE1lbW9yeSBBbGxvY2F0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29kZS4gRnJvbSB3aGF0IEkgcmVjYWxsLCBga2VybmVsL2JwZi9tZW1hbGxvYy5jYCBnZXRzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIOKAkyBhcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlnIGRlcGVuZGVuY2llcywgb3IgcGVyaGFwcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyAoYGlmZGVmc2ApIHdpdGhpbiBgbWVtYWxsb2MuY2AgaXRzZWxmIHRoYXQgY291bGQgaW1wYWN0IGl0cyBjb21waWxhdGlvbiBvciBiZWhhdmlvcj8gQmVzdCB0byB0YWtlIGEgbG9vayB3aXRoaW4gYG1lbWFsbG9jLmNgIGl0c2VsZiBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxMi44MTIxNDg1MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTg1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL21lbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tZW1hbGxvYy5jPTE2MT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1jZyhjb25zdCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTYyLXtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MTYzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMTY0LVxcdGlmIChjLVxcdTAwM2VvYmpjZylcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYz01MDg9aW50IGJwZl9tZW1fYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsIGludCBzaXplLCBib29sIHBlcmNwdSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01MzEtXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjUzMjojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTUzMy1cXHRcXHRpZiAobWVtY2dfYnBmX2VuYWJsZWQoKSlcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy01NTQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjU1NTojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTU1Ni1cXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fY3VycmVudCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxMi44NjU3NDMyOThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU5NDI2NzkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1lbW9yeSBBbGxvY2F0b3IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSdyZSBmb2N1c2luZyBvbiBoZXJlLiBJdCdzIHRoZSBrZXkgdG8gZW5hYmxpbmcgdGhlIGBCUEZgIGZ1bmN0aW9uYWxpdHksIGFzIGBCUEZgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZC4gUmlnaHQsIGBCUEZfU1lTQ0FMTGAgaXMgaW5kZWVkIGEgYm9vbGVhbiBzZXR0aW5nIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UndmUgZ290IGFsbCB0aGUgcmVxdWlyZW1lbnRzIGxpbmVkIHVwLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29uZmlybXMgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGFjdGl2ZSwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LlxuXG5JJ20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBicGZfbWVtX2FsbG9jYCwgYGJwZl9tZW1fZnJlZWAsIGBicGZfbWVtX2ZyZWVfcmN1YCwgYGJwZl9tZW1fY2FjaGVfYWxsb2NgLCBgYnBmX21lbV9jYWNoZV9mcmVlYCwgYGJwZl9tZW1fY2FjaGVfZnJlZV9yY3VgLCBgYnBmX21lbV9hbGxvY19pbml0YCwgYW5kIGBicGZfbWVtX2FsbG9jX2Rlc3Ryb3lgLiBUaGVzZSBhcmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcm91dGluZXMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLiBUaGF0J3MgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaC5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBgcmF3X3NwaW5sb2NrYCBzeW5jaHJvbml6YXRpb24gdG8gcHJvdGVjdCB0aGUgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIGxsaXN0IG9wZXJhdGlvbnMsIGFuZCB0aGF0IG1hdHRlcnMgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIGluIGFsbG9jX2J1bGssIF9fZnJlZV9yY3UsIGFuZCBkb19jYWxsX3JjdV90dHJhY2UuIEJhc2ljYWxseSwgdGhleSdyZSBhZGRyZXNzaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBwYXRocy4gVGhpcyBpcyBhIHN0YW5kYXJkIGFuZCBzZW5zaWJsZSBhcHByb2FjaCB0byBlbnN1cmluZyB0aHJlYWQgc2FmZXR5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc5OSwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MTcuNDYwMDEzODI2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MjA5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21lbV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2FsbG9jXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVcIixcbiAgICBcImJwZl9tZW1fY2FjaGVfZnJlZV9yY3VcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfaW5pdFwiLFxuICAgIFwiYnBmX21lbV9hbGxvY19kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhd19zcGlubG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBmcmVlX2J5X3JjdV90dHJhY2UgYW5kIHdhaXRpbmdfZm9yX2dwX3R0cmFjZSBsb2NrbGVzcyBsaXN0cyBpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IgKGtlcm5lbC9icGYvbWVtYWxsb2MuYyksIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBjb25jdXJyZW50IGJ1bGsgYWxsb2NhdGlvbiwgUkNVIHByb2Nlc3NpbmcsIGFuZCBkcmFpbmluZy4gRnV6emluZyBCUEYgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlY2xhbWF0aW9uIGVudHJ5IHBvaW50cyBpcyB2YWx1YWJsZSB0byB2ZXJpZnkgdGhyZWFkLXNhZmV0eSBhbmQgYXZvaWQgZGVhZGxvY2tzIG9yIGRhdGEgY29ycnVwdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tZW1fYWxsb2NcIixcbiAgICBcImJwZl9tZW1fZnJlZVwiLFxuICAgIFwiYnBmX21lbV9mcmVlX3JjdVwiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9hbGxvY1wiLFxuICAgIFwiYnBmX21lbV9jYWNoZV9mcmVlXCIsXG4gICAgXCJicGZfbWVtX2NhY2hlX2ZyZWVfcmN1XCIsXG4gICAgXCJicGZfbWVtX2FsbG9jX2luaXRcIixcbiAgICBcImJwZl9tZW1fYWxsb2NfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXdfc3BpbmxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZnJlZV9ieV9yY3VfdHRyYWNlIGFuZCB3YWl0aW5nX2Zvcl9ncF90dHJhY2UgbG9ja2xlc3MgbGlzdHMgaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yIChrZXJuZWwvYnBmL21lbWFsbG9jLmMpLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgY29uY3VycmVudCBidWxrIGFsbG9jYXRpb24sIFJDVSBwcm9jZXNzaW5nLCBhbmQgZHJhaW5pbmcuIEZ1enppbmcgQlBGIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYW1hdGlvbiBlbnRyeSBwb2ludHMgaXMgdmFsdWFibGUgdG8gdmVyaWZ5IHRocmVhZC1zYWZldHkgYW5kIGF2b2lkIGRlYWRsb2NrcyBvciBkYXRhIGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjIwOjE3LjUzMTY0MDg3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE1Nzk5MDM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA1OjIwOjE3LjUzMjA5Mjk3M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkxNTc1MzM3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByYXcgc3BpbmxvY2sgKGByYXdfc3BpbmxvY2tfdCBsb2NrYCkgaW4gYHN0cnVjdCBicGZfbWVtX2NhY2hlYCB0byBzeW5jaHJvbml6ZSBjb25jdXJyZW50IGxpc3Qgb3BlcmF0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgYW5kIGBsbGlzdF9kZWxfYWxsYCkgb24gYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgIHdpdGhpbiB0aGUgQlBGIG1lbW9yeSBhbGxvY2F0b3IuIFxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyAocHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIGxpc3QgY29ycnVwdGlvbikuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIG9yIGZpeGVkIGhlcmUgKHN1Y2ggYXMgbG9ja2luZyB2aW9sYXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIC8gYmFkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHJlc3VsdGluZyBmcm9tIGxpc3QgY29ycnVwdGlvbikgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBcXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29weWluZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNmNhYzM2YTFkNjNmMGY5NDdiYmEzN2FkMzdiYmM2Y2RmZmYzYmZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNToxOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWVtYWxsb2MuYyBiL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuaW5kZXggZTk2NjJkYjcxOThmZS4uNTkyNzk0M2M3NjVhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvbWVtYWxsb2MuY1xuKysrIGIva2VybmVsL2JwZi9tZW1hbGxvYy5jXG5AQCAtMTE5LDYgKzExOSw3IEBAIHN0cnVjdCBicGZfbWVtX2NhY2hlIHtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkIHdhaXRpbmdfZm9yX2dwX3R0cmFjZTtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3VfdHRyYWNlO1xuIFx0YXRvbWljX3QgY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzO1xuK1x0cmF3X3NwaW5sb2NrX3QgbG9jaztcbiB9O1xuIFxuIHN0cnVjdCBicGZfbWVtX2NhY2hlcyB7XG5AQCAtMjE0LDI1ICsyMTUsMjUgQEAgc3RhdGljIHZvaWQgYWxsb2NfYnVsayhzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgaW50IGNudCwgaW50IG5vZGUsIGJvb2wgYXRvbWljKVxuIFx0Z2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfQUNDT1VOVDtcbiBcdGdmcCB8PSBhdG9taWMgPyBHRlBfTk9XQUlUIDogR0ZQX0tFUk5FTDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEZvciBldmVyeSAnYycgbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXNcbi1cdFx0ICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHRcbi1cdFx0ICogbGxpc3RfYWRkKCkgYW5kIGxsaXN0X2RlbF9hbGwoKSBpbiBwYXJhbGxlbC5cbi1cdFx0ICovXG4tXHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4tXHRcdGlmICghb2JqKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuLVx0fVxuLVx0aWYgKGkgXHUwMDNlPSBjbnQpXG4tXHRcdHJldHVybjtcbitcdHNjb3BlZF9ndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2Yy1cdTAwM2Vsb2NrKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBGb3IgZXZlcnkgJ2MnIGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7IGlzXG4rXHRcdFx0ICogZG9uZSBvbmx5IGJ5IG9uZSBDUFUgPT0gY3VycmVudCBDUFUuIE90aGVyIENQVXMgbWlnaHRcbitcdFx0XHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XG4rXHRcdFx0aWYgKCFvYmopXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuK1x0XHR9XG4gXG4tXHRmb3IgKDsgaSBcdTAwM2MgY250OyBpKyspIHtcbi1cdFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFx1MDAyNmMtXHUwMDNld2FpdGluZ19mb3JfZ3BfdHRyYWNlKTtcbi1cdFx0aWYgKCFvYmopXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRcdG9iaiA9IGxsaXN0X2RlbF9maXJzdChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSk7XG4rXHRcdFx0aWYgKCFvYmopXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xuK1x0XHR9XG4gXHR9XG4gXHRpZiAoaSBcdTAwM2U9IGNudClcbiBcdFx0cmV0dXJuO1xuQEAgLTI3OSw4ICsyODAsMTIgQEAgc3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJcbiBzdGF0aWMgdm9pZCBfX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX21lbV9jYWNoZSwgcmN1X3R0cmFjZSk7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxub2RlO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlLCBcdTAwMjZjLVx1MDAzZWxvY2spXG4rXHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xuIFxuLVx0ZnJlZV9hbGwoYywgbGxpc3RfZGVsX2FsbChcdTAwMjZjLVx1MDAzZXdhaXRpbmdfZm9yX2dwX3R0cmFjZSksICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4rXHRmcmVlX2FsbChjLCBsbG5vZGUsICEhYy1cdTAwM2VwZXJjcHVfc2l6ZSk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNmMtXHUwMDNlY2FsbF9yY3VfdHRyYWNlX2luX3Byb2dyZXNzLCAwKTtcbiB9XG4gXG5AQCAtMzAwLDcgKzMwNSw4IEBAIHN0YXRpYyB2b2lkIGRvX2NhbGxfcmN1X3R0cmFjZShzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYylcbiBcbiBcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZjLVx1MDAzZWNhbGxfcmN1X3R0cmFjZV9pbl9wcm9ncmVzcywgMSkpIHtcbiBcdFx0aWYgKHVubGlrZWx5KFJFQURfT05DRShjLVx1MDAzZWRyYWluaW5nKSkpIHtcbi1cdFx0XHRsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmMtXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTtcbitcdFx0XHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFx1MDAyNmMtXHUwMDNlbG9jaylcbitcdFx0XHRcdGxsbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Yy1cdTAwM2VmcmVlX2J5X3JjdV90dHJhY2UpO1xuIFx0XHRcdGZyZWVfYWxsKGMsIGxsbm9kZSwgISFjLVx1MDAzZXBlcmNwdV9zaXplKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm47XG5AQCAtNTM1LDYgKzU0MSw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXG4gXHRcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0XHRjLVx1MDAzZXRndCA9IGM7XG4rXHRcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aW5pdF9yZWZpbGxfd29yayhjKTtcbiBcdFx0XHRwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpO1xuIFx0XHR9XG5AQCAtNTU3LDcgKzU2NCw3IEBAIGludCBicGZfbWVtX2FsbG9jX2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSwgYm9vbCBwZXJjcHUpXG4gXHRcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRcdGMtXHUwMDNlcGVyY3B1X3NpemUgPSBwZXJjcHVfc2l6ZTtcbiBcdFx0XHRjLVx1MDAzZXRndCA9IGM7XG4tXG4rXHRcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdFx0aW5pdF9yZWZpbGxfd29yayhjKTtcbiBcdFx0XHRwcmVmaWxsX21lbV9jYWNoZShjLCBjcHUpO1xuIFx0XHR9XG5AQCAtNjA5LDcgKzYxNiw3IEBAIGludCBicGZfbWVtX2FsbG9jX3BlcmNwdV91bml0X2luaXQoc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBpbnQgc2l6ZSlcbiBcdFx0Yy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuIFx0XHRjLVx1MDAzZXBlcmNwdV9zaXplID0gcGVyY3B1X3NpemU7XG4gXHRcdGMtXHUwMDNldGd0ID0gYztcbi1cbitcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXHRcdGluaXRfcmVmaWxsX3dvcmsoYyk7XG4gXHRcdHByZWZpbGxfbWVtX2NhY2hlKGMsIGNwdSk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoxNy41MzIwOTM5NzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ5NjI4NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgaXRzIG93biBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBhYm91dCBhZGRpbmcgYSBzcGlubG9jayB0byB0aGUgYGJwZl9tZW1fY2FjaGVgIHN0cnVjdHVyZSBhbmQgdGhlbiB1c2luZyBpdCB0byBwcm90ZWN0IGEgZmV3IGxpbmtlZCBsaXN0IG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDogYGFsbG9jX2J1bGtgLCBgX19mcmVlX3JjdWAsIGBkb19jYWxsX3JjdV90dHJhY2VgLCBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGNlbnRlcmVkIGFyb3VuZCBwcm90ZWN0aW5nIGFjY2VzcyB0byBsaW5rZWQgbGlzdHMgdGhhdCBzZWVtIHRvIGJlIGludm9sdmVkIGluIFJDVSBmcmVlaW5nIG9yIHRyYWNlcG9pbnQgZGF0YS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCBsaW5rZWQgbGlzdHMuIEFyZSB0aGVzZSBwb3RlbnRpYWwgc291cmNlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBpZiBub3QgcHJvcGVybHkgc3luY2hyb25pemVkPyBJIHdpbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGF0IGBrZXJuZWwvYnBmL21lbWFsbG9jLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEJhc2VkIG9uIGEgcXVpY2sgc2tpbSwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGl0IGNvdWxkIGFkZHJlc3Mgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIEJQRiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdHJhY2Vwb2ludCBjb250ZXh0LCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaWYgdGhlIGxvY2tpbmcgaXMgaW5jb3JyZWN0IG9yIGluY29tcGxldGUuIFRoaXMgY291bGQgYmUgYSBjYW5kaWRhdGUgZm9yIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiB0byBlbnN1cmUgdGhlc2UgY2hhbmdlcyBhcmUgZWZmZWN0aXZlIGFuZCBkb24ndCBpbnRyb2R1Y2UgbmV3IGlzc3Vlcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNToyMDoyMS4wMjgzODIzMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvbWVtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZztcXG4gMjExOlxcdFxcdGdmcF90IGdmcDtcXG4gMjEyOlxcdFxcdHZvaWQgKm9iajtcXG4gMjEzOlxcdFxcdGludCBpO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRnZnAgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UO1xcbiAyMTY6XFx0XFx0Z2ZwIHw9IGF0b21pYyA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZjLVxcdTAwM2Vsb2NrKSB7XFxuIDIxOTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4gMjIwOlxcdFxcdFxcdFxcdC8qXFxuIDIyMTpcXHRcXHRcXHRcXHQgKiBGb3IgZXZlcnkgJ2MnIGxsaXN0X2RlbF9maXJzdChcXHUwMDI2Yy1cXHUwMDNlZnJlZV9ieV9yY3VfdHRyYWNlKTsgaXNcXG4gMjIyOlxcdFxcdFxcdFxcdCAqIGRvbmUgb25seSBieSBvbmUgQ1BVID09IGN1cnJlbnQgQ1BVLiBPdGhlciBDUFVzIG1pZ2h0XFxuIDIyMzpcXHRcXHRcXHRcXHQgKiBsbGlzdF9hZGQoKSBhbmQgbGxpc3RfZGVsX2FsbCgpIGluIHBhcmFsbGVsLlxcbiAyMjQ6XFx0XFx0XFx0XFx0ICovXFxuIDIyNTpcXHRcXHRcXHRcXHRvYmogPSBsbGlzdF9kZWxfZmlyc3QoXFx1MDAyNmMtXFx1MDAzZWZyZWVfYnlfcmN1X3R0cmFjZSk7XFxuIDIyNjpcXHRcXHRcXHRcXHRpZiAoIW9iailcXG4gMjI3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMjg6XFx0XFx0XFx0XFx0YWRkX29ial90b19mcmVlX2xpc3QoYywgb2JqKTtcXG4gMjI5OlxcdFxcdFxcdH1cXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbiAyMzI6XFx0XFx0XFx0XFx0b2JqID0gbGxpc3RfZGVsX2ZpcnN0KFxcdTAwMjZjLVxcdTAwM2V3YWl0aW5nX2Zvcl9ncF90dHJhY2UpO1xcbiAyMzM6XFx0XFx0XFx0XFx0aWYgKCFvYmopXFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMjM1OlxcdFxcdFxcdFxcdGFkZF9vYmpfdG9fZnJlZV9saXN0KGMsIG9iaik7XFxuIDIzNjpcXHRcXHRcXHR9XFxuIDIzNzpcXHRcXHR9XFxuIDIzODpcXHRcXHRpZiAoaSBcXHUwMDNlPSBjbnQpXFxuIDIzOTpcXHRcXHRcXHRyZXR1cm47XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdG1lbWNnID0gZ2V0X21lbWNnKGMpO1xcbiAyNDI6XFx0XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuIDI0MzpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuIDI0NDpcXHRcXHRcXHQvKiBBbGxvY2F0ZSwgYnV0IGRvbid0IGRlcGxldGUgYXRvbWljIHJlc2VydmVzIHRoYXQgdHlwaWNhbFxcbiAyNDU6XFx0XFx0XFx0ICogR0ZQX0FUT01JQyB3b3VsZCBkby4gaXJxX3dvcmsgcnVucyBvbiB0aGlzIGNwdSBhbmQga21hbGxvY1xcbiAyNDY6XFx0XFx0XFx0ICogd2lsbCBhbGxvY2F0ZSBmcm9tIHRoZSBjdXJyZW50IG51bWEgbm9kZSB3aGljaCBpcyB3aGF0IHdlXFxuIDI0NzpcXHRcXHRcXHQgKiB3YW50IGhlcmUuXFxuIDI0ODpcXHRcXHRcXHQgKi9cXG4gMjQ5OlxcdFxcdFxcdG9iaiA9IF9fYWxsb2MoYywgbm9kZSwgZ2ZwKTtcXG4gMjUwOlxcdFxcdFxcdGlmICghb2JqKVxcbiAyNTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI1MjpcXHRcXHRcXHRhZGRfb2JqX3RvX2ZyZWVfbGlzdChjLCBvYmopO1xcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcbiAyNTU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiAyNTY6XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRzdGF0aWMgdm9pZCBmcmVlX29uZSh2b2lkICpvYmosIGJvb2wgcGVyY3B1KVxcbiAyNTk6XFx0e1xcbiAyNjA6XFx0XFx0aWYgKHBlcmNwdSlcXG4gMjYxOlxcdFxcdFxcdGZyZWVfcGVyY3B1KCgodm9pZCBfX3BlcmNwdSAqKilvYmopWzFdKTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0a2ZyZWUob2JqKTtcXG4gMjY0OlxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0c3RhdGljIGludCBmcmVlX2FsbChzdHJ1Y3QgYnBmX21lbV9jYWNoZSAqYywgc3RydWN0IGxsaXN0X25vZGUgKmxsbm9kZSwgYm9vbCBwZXJjcHUpXFxuIDI2NzpcXHR7XFxuIDI2ODpcXHRcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqdDtcXG4gMjY5OlxcdFxcdGludCBjbnQgPSAwO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdCwgbGxub2RlKSB7XFxuIDI3MjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlZHRvcilcXG4gMjczOlxcdFxcdFxcdFxcdGMtXFx1MDAzZWR0b3IoKHZvaWQgKilwb3MgKyBMTElTVF9OT0RFX1NaLCBjLVxcdTAwM2VkdG9yX2N0eCk7XFxuIDI3NDpcXHRcXHRcXHRmcmVlX29uZShwb3MsIHBlcmNwdSk7XFxuIDI3NTpcXHRcXHRcXHRjbnQrKztcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcdHJldHVybiBjbnQ7XFxuIDI3ODpcXHR9XFxuIDI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MjEuMDI4NDk5OTg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NjExMDYwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTWVtb3J5IEFsbG9jYXRvciBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNpbmcgb24gY29uY3VycmVuY3kgd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHRoZSBga2VybmVsL2JwZi9tZW1hbGxvYy5jYCBmaWxlLiBJdCdzIGludHJvZHVjaW5nIGEgYHJhd19zcGlubG9ja190IGxvY2tgIHRvIGd1YXJkIGFjY2VzcyB0byB0aGUgbG9ja2xlc3MgbGlzdHMgYGZyZWVfYnlfcmN1X3R0cmFjZWAgYW5kIGB3YWl0aW5nX2Zvcl9ncF90dHJhY2VgLiBUaGUgY29yZSBpc3N1ZSBpdCdzIGFkZHJlc3NpbmcgaXMgcmFjZSBjb25kaXRpb25zIGFyaXNpbmcgZnJvbSBjb25jdXJyZW50IGRlbGV0aW9ucyAoYGxsaXN0X2RlbF9maXJzdGAgaW4gYGFsbG9jX2J1bGtgIGFuZCBgbGxpc3RfZGVsX2FsbGAgaW4gYF9fZnJlZV9yY3VgIGFuZCBgZG9fY2FsbF9yY3VfdHRyYWNlYCkuIEVzc2VudGlhbGx5LCB3ZSdyZSBzZXJpYWxpemluZyB0aG9zZSBsaXN0IHJlbW92YWwgb3BlcmF0aW9ucyB3aXRoIGEgc3BpbmxvY2sgdG8gZW5zdXJlIG11dHVhbCBleGNsdXNpb24uXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgdXMgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zPyBMZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIEZpcnN0LCBubyBuZXcgbWVtb3J5IGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCB2ZWN0b3IuIFdlJ3JlIG5vdCByZWFkaW5nIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm9yIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIENyaXRpY2FsbHksIHRoZSBwYXRjaCBkb2Vzbid0IG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzLCBidWZmZXIgbGVuZ3Rocywgb3IgYm91bmRzIGNoZWNrcy4gVGhlIGJ1Z3MgaXQncyBmaXhpbmcgYXJlIGZpcm1seSBpbiB0aGUgY29uY3VycmVuY3kvbG9ja2luZy9yYWNlIGNvbmRpdGlvbiBkb21haW47IHRoZSBleGlzdGluZyBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBkYXRhLXJhY2UvbG9jayBkZWJ1Z2dpbmcgdG9vbHMpIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMuIFRoZXknbGwgcGljayB1cCBvbiBwb3RlbnRpYWwgbGlzdCBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBzdGVtbWluZyBmcm9tIHRoZSByYWNlcy5cblxuTGV0J3MgdmVyaWZ5IHRoZXNlIGNyaXRlcmlhOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOZWdhdGl2ZS5cbjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIHdpdGggdW5pbml0IGZpZWxkcyByZWFkIGxhdGVyPyBOby5cbjQuICBCb3VuZHMgY2hlY2tzL2xlbmd0aHMgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdCBieXRlcz8gQWJzb2x1dGVseSBub3QuXG5cblNvLCAqTmVlZHNLTVNBTiA9IGZhbHNlKi5cblxuQWxyaWdodCwgbGV0J3Mgc29saWRpZnkgdGhpcyByZWFzb25pbmcuIFdlJ3JlIGZvY3VzaW5nIG9uIEtNU0FOIHZzIEtBU0FOLiBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgb3VyIGFsbGllcyBoZXJlIOKAkyBLQVNBTiBmbGFncyBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAobGlrZSB1c2UtYWZ0ZXItZnJlZSksIGFuZCBMT0NLREVQIHZlcmlmaWVzIGxvY2tpbmcgY29ycmVjdG5lc3MuIEtNU0FOLCBob3dldmVyLCBpcyBhbGwgYWJvdXQgdHJhY2tpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGRldGVjdGluZyBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZHMgaW4gYnJhbmNoaW5nL3BvaW50ZXIgYXJpdGhtZXRpYy4gVGhlIHBhdGNoICpwdXJlbHkqIGFkZHMgc3luY2hyb25pemF0aW9uIOKAkyBhIHNwaW5sb2NrIOKAkyB0byBzZXJpYWxpemUgbGlzdCBtYW5pcHVsYXRpb25zIG9uIFJDVSB0cmFjZSBsaXN0cyBpbiBgYnBmX21lbV9jYWNoZWAuIFRoZXJlJ3Mgbm90aGluZyBpbiBoZXJlIHRoYXQgdG91Y2hlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpdHNlbGYgb3IgY291bGQgZXhwb3NlIGl0LiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgY2hhbmdlLiBMZXQncyBmbGFnIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMTEsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDU6MjA6MjYuNjg5NjA5NjM5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmF3IHNwaW5sb2NrIChgcmF3X3NwaW5sb2NrX3QgbG9ja2ApIGluIGBzdHJ1Y3QgYnBmX21lbV9jYWNoZWAgdG8gc3luY2hyb25pemUgY29uY3VycmVudCBsaXN0IG9wZXJhdGlvbnMgKGBsbGlzdF9kZWxfZmlyc3RgIGFuZCBgbGxpc3RfZGVsX2FsbGApIG9uIGBmcmVlX2J5X3JjdV90dHJhY2VgIGFuZCBgd2FpdGluZ19mb3JfZ3BfdHRyYWNlYCB3aXRoaW4gdGhlIEJQRiBtZW1vcnkgYWxsb2NhdG9yLiBcXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgKHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBsaXN0IGNvcnJ1cHRpb24pLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBvciBmaXhlZCBoZXJlIChzdWNoIGFzIGxvY2tpbmcgdmlvbGF0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSAvIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlcyByZXN1bHRpbmcgZnJvbSBsaXN0IGNvcnJ1cHRpb24pIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcHlpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJhdyBzcGlubG9jayAoYHJhd19zcGlubG9ja190IGxvY2tgKSBpbiBgc3RydWN0IGJwZl9tZW1fY2FjaGVgIHRvIHN5bmNocm9uaXplIGNvbmN1cnJlbnQgbGlzdCBvcGVyYXRpb25zIChgbGxpc3RfZGVsX2ZpcnN0YCBhbmQgYGxsaXN0X2RlbF9hbGxgKSBvbiBgZnJlZV9ieV9yY3VfdHRyYWNlYCBhbmQgYHdhaXRpbmdfZm9yX2dwX3R0cmFjZWAgd2l0aGluIHRoZSBCUEYgbWVtb3J5IGFsbG9jYXRvci4gXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIChwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgbGlzdCBjb3JydXB0aW9uKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZSAoc3VjaCBhcyBsb2NraW5nIHZpb2xhdGlvbnMsIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgLyBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgcmVzdWx0aW5nIGZyb20gbGlzdCBjb3JydXB0aW9uKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowg7k24[1] Phase: Succeeded StartedAt: 2026-09-02 05:20:38 +0000 UTC FinishedAt: 2026-09-02 05:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 05:20:38 +0000 UTC FinishedAt: 2026-09-02 05:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2] Phase: Succeeded StartedAt: 2026-09-02 05:20:38 +0000 UTC FinishedAt: 2026-09-02 09:01:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 05:20:38 +0000 UTC FinishedAt: 2026-09-02 09:01:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 05:20:38 +0000 UTC FinishedAt: 2026-09-02 05:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 05:20:38 +0000 UTC FinishedAt: 2026-09-02 05:20:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowg7k24/series-workflowg7k24-convert-artifact-3928694312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 05:20:48 +0000 UTC FinishedAt: 2026-09-02 05:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 05:20:49 +0000 UTC FinishedAt: 2026-09-02 05:36:52 +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:*8f42fc07-2887-47f7-be95-793697e4742d,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-workflowg7k24/series-workflowg7k24-convert-artifact-3928694312/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": "9268de5e-1eb7-4e31-97e7-3c760f60ecfb", "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-workflowg7k24/series-workflowg7k24-build-action-1460376734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 05:20:49 +0000 UTC FinishedAt: 2026-09-02 05:36:41 +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:*8f42fc07-2887-47f7-be95-793697e4742d,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-workflowg7k24/series-workflowg7k24-convert-artifact-3928694312/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": "9268de5e-1eb7-4e31-97e7-3c760f60ecfb", "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-workflowg7k24/series-workflowg7k24-build-action-1460376734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 05:36:52 +0000 UTC FinishedAt: 2026-09-02 05:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 05:36:52 +0000 UTC FinishedAt: 2026-09-02 05:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 05:36:52 +0000 UTC FinishedAt: 2026-09-02 05:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 05:36:52 +0000 UTC FinishedAt: 2026-09-02 05:36:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowg7k24/series-workflowg7k24-convert-artifact-286112271/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 05:37:02 +0000 UTC FinishedAt: 2026-09-02 05:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 05:37:02 +0000 UTC FinishedAt: 2026-09-02 05:38:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9268de5e-1eb7-4e31-97e7-3c760f60ecfb,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-workflowg7k24/series-workflowg7k24-build-action-1460376734/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-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 05:39:04 +0000 UTC FinishedAt: 2026-09-02 05:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 05:39:04 +0000 UTC FinishedAt: 2026-09-02 05:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 05:39:04 +0000 UTC FinishedAt: 2026-09-02 05:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 05:39:04 +0000 UTC FinishedAt: 2026-09-02 05:56:23 +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:*8f42fc07-2887-47f7-be95-793697e4742d,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-workflowg7k24/series-workflowg7k24-convert-artifact-286112271/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": "be829682-41ff-40b2-8fca-b0ec04b703b9", "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-workflowg7k24/series-workflowg7k24-build-action-2768673571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 05:39:04 +0000 UTC FinishedAt: 2026-09-02 05:56:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8f42fc07-2887-47f7-be95-793697e4742d,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-workflowg7k24/series-workflowg7k24-convert-artifact-286112271/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": "be829682-41ff-40b2-8fca-b0ec04b703b9", "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-workflowg7k24/series-workflowg7k24-build-action-2768673571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 05:56:23 +0000 UTC FinishedAt: 2026-09-02 05:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 05:56:23 +0000 UTC FinishedAt: 2026-09-02 05:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 05:56:23 +0000 UTC FinishedAt: 2026-09-02 05:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 05:56:23 +0000 UTC FinishedAt: 2026-09-02 05:58:22 +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:*be829682-41ff-40b2-8fca-b0ec04b703b9,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-workflowg7k24/series-workflowg7k24-build-action-2768673571/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-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 05:58:32 +0000 UTC FinishedAt: 2026-09-02 09:01:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 05:58:32 +0000 UTC FinishedAt: 2026-09-02 09:01:00 +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"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"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:*9268de5e-1eb7-4e31-97e7-3c760f60ecfb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be829682-41ff-40b2-8fca-b0ec04b703b9,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-workflowg7k24/series-workflowg7k24-build-action-1460376734/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-workflowg7k24/series-workflowg7k24-build-action-2768673571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 05:58:32 +0000 UTC FinishedAt: 2026-09-02 05:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 05:58:32 +0000 UTC FinishedAt: 2026-09-02 05:58:37 +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"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"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-workflowg7k24/series-workflowg7k24-convert-artifact-117989832/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 05:58:32 +0000 UTC FinishedAt: 2026-09-02 05:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 05:58:32 +0000 UTC FinishedAt: 2026-09-02 05:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 05:58:32 +0000 UTC FinishedAt: 2026-09-02 05:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 05:58:42 +0000 UTC FinishedAt: 2026-09-02 09:01:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7k24[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mem_alloc","bpf_mem_free","bpf_mem_free_rcu","bpf_mem_cache_alloc","bpf_mem_cache_free","bpf_mem_cache_free_rcu","bpf_mem_alloc_init","bpf_mem_alloc_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"28d75dd3eb60812b3a87cbdf0d52c42f51b28a78","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"95df7d29-9c90-4935-80bb-4a818e798b44","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 05:58:42 +0000 UTC FinishedAt: 2026-09-02 09:00:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9268de5e-1eb7-4e31-97e7-3c760f60ecfb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be829682-41ff-40b2-8fca-b0ec04b703b9,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-workflowg7k24/series-workflowg7k24-build-action-1460376734/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-workflowg7k24/series-workflowg7k24-build-action-2768673571/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-workflowg7k24/series-workflowg7k24-convert-artifact-117989832/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,}