Name: series-workflow8htg4 Phase: Succeeded StartedAt: 2026-08-11 10:00:20 +0000 UTC FinishedAt: 2026-08-11 14:08:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[0] Phase: Succeeded StartedAt: 2026-08-11 10:00:20 +0000 UTC FinishedAt: 2026-08-11 10:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 10:00:20 +0000 UTC FinishedAt: 2026-08-11 10:22:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "055a5c2b-7ebc-4f23-bf12-c480983e5dff" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rhtab_map_update_elem", "rhtab_map_delete_elem", "rhtab_map_lookup_and_delete_elem", "rhtab_mem_dtor" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBzcGVjaWFsIEJQRiBtYXAgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB1cHRycywgbGlzdHMsIGFuZCByYnRyZWVzKSB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIGluIGFuIE5NSSBjb250ZXh0LiBQcmV2aW91c2x5LCBgYnBmX29ial9mcmVlX2ZpZWxkcygpYCB3YXMgY2FsbGVkLCB3aGljaCBlYWdlcmx5IGRlc3Ryb3llZCBhbGwgZmllbGRzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuc2FmZSBvcGVyYXRpb25zIChsaWtlIGRlYWRsb2NrcyBvciBjcmFzaGVzKSBmcm9tIGFuIE5NSSBjb250ZXh0LiBUaGUgZml4IHJlcGxhY2VzIHRoaXMgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMgKHRpbWVycywgd29ya3F1ZXVlcywgdGFza193b3JrKSBhbmQgZGVmZXJzIHRoZSBkZXN0cnVjdGlvbiBvZiBvdGhlciBmaWVsZHMgdG8gYHJodGFiX21lbV9kdG9yKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgcmhhc2ggbWFwIHdoZXJlIHVwZGF0aW5nIGFuIGVsZW1lbnQgZnJvbSBhbiBOTUkgY29udGV4dCBlYWdlcmx5IGRlc3Ryb3llZCByZWZlcmVuY2VkIGtwdHJzLCB3aGljaCBpcyBub3Qgc2FmZS4gSXQgY2hhbmdlcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgdG8gb25seSBjYW5jZWwgTk1JLXNhZmUgZmllbGRzIGFuZCBkZWZlcnMgZnVsbCBkZXN0cnVjdGlvbiB0byBgcmh0YWJfbWVtX2R0b3JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIEJQRiBtYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzZmE2YWQ3MzdjNDcxN2M1ODQ4YjAxNTM4MGE2MzY2MDA1Y2NjYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxOTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCA5ZjM5NGUxYWEyZTg1Li43MGZhMWUxYjRiMDA4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMjg2NSwxNCAmIzQzOzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi1cdFx0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4mIzQzO3N0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0aWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRicGZfb2JqX2ZyZWVfZmllbGRzKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQsXG4tXHRcdFx0ICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykgaGVyZS5cbiYjNDM7XHQgKiBrcHRyL3VwdHIvbGlzdC9yYnRyZWUgZGVzdHJ1Y3Rpb24gbXVzdCBub3QgcnVuIGZyb20gYXJiaXRyYXJ5IEJQRlxuJiM0MztcdCAqIGV4ZWN1dGlvbiBjb250ZXh0cyAoZS5nLiBOTUkpLCBzbyBsZWF2ZSB0aG9zZSBmaWVsZHMgYXR0YWNoZWQgdG9cbiYjNDM7XHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXG4mIzQzO1x0ICogZWxlbWVudCBpcyBldmVudHVhbGx5IGZyZWVkLiBUaGlzIG1hdGNoZXMgdGhlIGhhc2ggbWFwIHNlbWFudGljc1xuJiM0MztcdCAqIGludHJvZHVjZWQgYnkgYTNhODFkMjQ3NjUxIChcJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWVcbiYjNDM7XHQgKiByZWN5Y2xlXCYjMzQ7KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsXG4mIzQzO1x0XHRcdFx0ICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG5AQCAtMjk2NCw4ICYjNDM7Mjk3Myw4IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XG4gXHRcdHJodGFiX3JlYWRfZWxlbV92YWx1ZShcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIGNvcHksIGVsZW0sIGZsYWdzKTtcbiBcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSk7XG4gXHR9XG4tXHQvKiBSZWxlYXNlIGludGVybmFsIHN0cnVjdHM6IGtwdHIsIGJwZl90aW1lciwgdGFza193b3JrLCB3cSAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbiYjNDM7XHQvKiBDYW5jZWwgTk1JLXNhZmUgZmllbGRzOyBmdWxsIGRlc3RydWN0aW9uIGhhcHBlbnMgaW4gcmh0YWJfbWVtX2R0b3IgKi9cbiYjNDM7XHRyaHRhYl9jYW5jZWxfZmllbGRzKHJodGFiLCBlbGVtKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXHUwMDI2cmh0YWItXHUwMDNlbWEsIGVsZW0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMjQsMTAgJiM0MzszMDMzLDExIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsXG4gXHQgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuXG4gXHQgKlxuIFx0ICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvXG4tXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHlcbi1cdCAqIHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3MuXG4mIzQzO1x0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGUgTk1JLXNhZmUgb25lcyBhZnRlclxuJiM0MztcdCAqIHRoZSBjb3B5IHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3M7IHJlZmVyZW5jZWQga3B0cnNcbiYjNDM7XHQgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuXG4gXHQgKi9cbi1cdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4mIzQzO1x0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzliZGNkYTk1NTU1N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICYjNDM7MSw4NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JodGFiX2twdHIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgX191NjQgcmVhZF9jb3VudGVyKHN0cnVjdCByaHRhYl9rcHRyICpza2VsLCB1MzIgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0X191NjQgdmFsc1tsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKV07XG4mIzQzO1x0X191NjQgc3VtID0gMDtcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5jb3VudGVycyksIFx1MDAyNmlkeCwgdmFscyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtsb29rdXBfY291bnRlclwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRzdW0gJiM0Mzs9IHZhbHNbaV07XG4mIzQzO1x0cmV0dXJuIHN1bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuJiM0MztcdFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbiYjNDM7XHRcdC5mcmVxID0gMSxcbiYjNDM7XHRcdC5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSxcbiYjNDM7XHRcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLFxuJiM0MztcdH07XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcdF9fdTY0IHplcm8gPSAwO1xuJiM0MztcdGludCBwbXVfZmQ7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdGhlIGVsZW1lbnQgYW5kIHN0YXNoIGEgcmVmZXJlbmNlZCB0YXNrIGtwdHIgaW4gaXQuICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX21hcF91cGRhdGVfZWxlbShicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMucmh0YWIpLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2a2V5LCBcdTAwMjZ6ZXJvLCBCUEZfQU5ZKSwgXCYjMzQ7Y3JlYXRlX2VsZW1cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5pbml0X2VsZW0pLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcJiMzNDt0ZXN0X3J1bl9pbml0XCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7aW5pdF9yZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHBtdV9mZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sIFx1MDAyNmF0dHIsIC0xLCAwLCAtMSwgMCk7XG4mIzQzO1x0aWYgKHBtdV9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfcGVyZl9ldmVudChza2VsLVx1MDAzZXByb2dzLm5taV91cGRhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRwbXVfZmQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUsIFwmIzM0O2F0dGFjaF9wZXJmX2V2ZW50XCYjMzQ7KSkge1xuJiM0MztcdFx0Y2xvc2UocG11X2ZkKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTGV0IHRoZSBOTUkgaGFuZGxlciBvdmVyd3JpdGUgdGhlIGVsZW1lbnQuICovXG4mIzQzO1x0dXNsZWVwKDEwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSk7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gTlVMTDtcbiYjNDM7XHRjbG9zZShwbXVfZmQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZVxuJiM0MztcdCAqIHBhdGggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcywgbWlycm9yaW5nIGhhc2ggbWFwIHNlbWFudGljcy5cbiYjNDM7XHQgKiBCZWZvcmUgdGhlIGZpeCB0aGUga3B0ciB3YXMgcmVsZWFzZWQgZnJvbSB0aGUgTk1JIGNvbnRleHQgYW5kIHRoZVxuJiM0MztcdCAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLlxuJiM0MztcdCAqL1xuJiM0MztcdHRvcHRzLnJldHZhbCA9IDA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9iZV9lbGVtKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFx1MDAyNnRvcHRzKSwgXCYjMzQ7dGVzdF9ydW5fcHJvYmVcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcJiMzNDtwcm9iZV9yZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsIFwmIzM0O3hjaGdfbm9uX251bGxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsIFwmIzM0O3hjaGdfbnVsbFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRyaHRhYl9rcHRyX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICYjNDM7MSwxMDEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGEgcmh0YWIgdmFsdWUgdXBkYXRlIGlzc3VlZCBmcm9tIGEgcGVyZl9ldmVudCAoTk1JKSBwcm9ncmFtXG4mIzQzOyAqIGRvZXMgbm90IGVhZ2VybHkgZGVzdHJveSByZWZlcmVuY2VkIGtwdHJzLiByaHRhYiBtdXN0IG1hdGNoIHRoZSBoYXNoIG1hcFxuJiM0MzsgKiBzZW1hbnRpY3MgaW50cm9kdWNlZCBieSBjb21taXQgYTNhODFkMjQ3NjUxIChcJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkc1xuJiM0MzsgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZVwmIzM0Oyk6IG9ubHkgTk1JLXNhZmUgZmllbGRzICh0aW1lciwgd29ya3F1ZXVlLCB0YXNrX3dvcmspXG4mIzQzOyAqIGFyZSBjYW5jZWxsZWQgb24gdXBkYXRlL2RlbGV0ZSwgd2hpbGUga3B0cnMgc3RheSBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWRcbiYjNDM7ICogZWxlbWVudCB1bnRpbCBpdCBpcyBldmVudHVhbGx5IGZyZWVkLlxuJiM0MzsgKlxuJiM0MzsgKiBXaXRob3V0IHRoZSBmaXgsIHRoZSBOTUkgdXBkYXRlIHJlbGVhc2VzIHRoZSBvbGQga3B0ciBhbmQgcHJvYmVfZWxlbSgpXG4mIzQzOyAqIG9ic2VydmVzIE5VTEwgaW4gdGhlIHNsb3Q7IHdpdGggdGhlIGZpeCB0aGUgb2xkIGtwdHIgaXMgaW5oZXJpdGVkIGFuZFxuJiM0MzsgKiBwcm9iZV9lbGVtKCkgb2JzZXJ2ZXMgYSBub24tTlVMTCBwb2ludGVyLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmFsX3Qge1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCBfX2twdHIgKnRzaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxNik7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7XG4mIzQzO30gcmh0YWIgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgNCk7XG4mIzQzO1x0X190eXBlKGtleSwgX191MzIpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IGNvdW50ZXJzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKiAwOiBpbml0IG9rLCAxOiBubWkgdXBkYXRlIG9rLCAyOiBwcm9iZSB4Y2hnIG5vbi1OVUxMLCAzOiBwcm9iZSB4Y2hnIE5VTEwgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJ1bXAodTMyIGlkeClcbiYjNDM7e1xuJiM0MztcdHU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2Y291bnRlcnMsIFx1MDAyNmlkeCk7XG4mIzQzO1xuJiM0MztcdGlmICh2KVxuJiM0MztcdFx0KCp2KSYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cGVyZl9ldmVudFwmIzM0OylcbiYjNDM7aW50IG5taV91cGRhdGUoc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGEgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2YWxfdCB2YWwgPSB7fTtcbiYjNDM7XHR1MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCBCUEZfQU5ZKSA9PSAwKVxuJiM0MztcdFx0YnVtcCgxKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBpbml0X2VsZW0odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZhbF90ICp2YWw7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkO1xuJiM0MztcdHUzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJodGFiLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0dGFzayA9IGJwZl90YXNrX2FjcXVpcmUoYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCkpO1xuJiM0MztcdGlmICghdGFzaylcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2dmFsLVx1MDAzZXRzaywgdGFzayk7XG4mIzQzO1x0aWYgKG9sZClcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRidW1wKDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHByb2JlX2VsZW0odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZhbF90ICp2YWw7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpvbGQ7XG4mIzQzO1x0dTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnZhbC1cdTAwM2V0c2ssIE5VTEwpO1xuJiM0MztcdGlmIChvbGQpIHtcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRcdGJ1bXAoMik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJ1bXAoMyk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2ZhNmFkNzM3YzQ3MTdjNTg0OGIwMTUzODBhNjM2NjAwNWNjY2MyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTk6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCmluZGV4IDlmMzk0ZTFhYTJlODUuLjcwZmExZTFiNGIwMDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0yODY1LDE0ICYjNDM7Mjg2NSwyMyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAlyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7CiB9CiAKLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwKLQkJCQkJc3RydWN0IHJodGFiX2VsZW0gKmVsZW0pCiYjNDM7c3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwKJiM0MzsJCQkJc3RydWN0IHJodGFiX2VsZW0gKmVsZW0pCiB7CiAJaWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLSZndDttYXAucmVjb3JkKSkKIAkJcmV0dXJuOwogCi0JYnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi0mZ3Q7bWFwLnJlY29yZCwKLQkJCSAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKJiM0MzsJLyoKJiM0MzsJICogT25seSBjYW5jZWwgTk1JLXNhZmUgZmllbGRzICh0aW1lciwgd29ya3F1ZXVlLCB0YXNrX3dvcmspIGhlcmUuCiYjNDM7CSAqIGtwdHIvdXB0ci9saXN0L3JidHJlZSBkZXN0cnVjdGlvbiBtdXN0IG5vdCBydW4gZnJvbSBhcmJpdHJhcnkgQlBGCiYjNDM7CSAqIGV4ZWN1dGlvbiBjb250ZXh0cyAoZS5nLiBOTUkpLCBzbyBsZWF2ZSB0aG9zZSBmaWVsZHMgYXR0YWNoZWQgdG8KJiM0MzsJICogdGhlIHJlY3ljbGVkIGVsZW1lbnQgYW5kIGxldCByaHRhYl9tZW1fZHRvcigpIGRlc3Ryb3kgdGhlbSBvbmNlIHRoZQomIzQzOwkgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzCiYjNDM7CSAqIGludHJvZHVjZWQgYnkgYTNhODFkMjQ3NjUxICgmIzM0O2JwZjogQ2FuY2VsIHNwZWNpYWwgZmllbGRzIG9uIG1hcCB2YWx1ZQomIzQzOwkgKiByZWN5Y2xlJiMzNDspLgomIzQzOwkgKi8KJiM0MzsJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtyaHRhYi0mZ3Q7bWFwLAomIzQzOwkJCQkgICAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKIH0KIAogc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpCkBAIC0yOTY0LDggJiM0MzsyOTczLDggQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHYKIAkJcmh0YWJfcmVhZF9lbGVtX3ZhbHVlKCZhbXA7cmh0YWItJmd0O21hcCwgY29weSwgZWxlbSwgZmxhZ3MpOwogCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBjb3B5KTsKIAl9Ci0JLyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi8KLQlyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pOwomIzQzOwkvKiBDYW5jZWwgTk1JLXNhZmUgZmllbGRzOyBmdWxsIGRlc3RydWN0aW9uIGhhcHBlbnMgaW4gcmh0YWJfbWVtX2R0b3IgKi8KJiM0MzsJcmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiAJYnBmX21lbV9jYWNoZV9mcmVlX3JjdSgmYW1wO3JodGFiLSZndDttYSwgZWxlbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMDI0LDEwICYjNDM7MzAzMywxMSBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbAogCSAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy4KIAkgKgogCSAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzLwotCSAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlbSBhZnRlciB0aGUgY29weQotCSAqIHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3MuCiYjNDM7CSAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlIE5NSS1zYWZlIG9uZXMgYWZ0ZXIKJiM0MzsJICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAmIzM5O3MgdXBkYXRlIHNlbWFudGljczsgcmVmZXJlbmNlZCBrcHRycwomIzQzOwkgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuCiAJICovCi0Jcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTsKJiM0MzsJcmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43OWJkY2RhOTU1NTU3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jCkBAIC0wLDAgJiM0MzsxLDg3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtyaHRhYl9rcHRyLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIF9fdTY0IHJlYWRfY291bnRlcihzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbCwgdTMyIGlkeCkKJiM0Mzt7CiYjNDM7CV9fdTY0IHZhbHNbbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCldOwomIzQzOwlfX3U2NCBzdW0gPSAwOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwllcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuY291bnRlcnMpLCAmYW1wO2lkeCwgdmFscyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb29rdXBfY291bnRlciYjMzQ7KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCk7IGkmIzQzOyYjNDM7KQomIzQzOwkJc3VtICYjNDM7PSB2YWxzW2ldOwomIzQzOwlyZXR1cm4gc3VtOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfcmh0YWJfa3B0cih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyID0gewomIzQzOwkJLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CQkuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkJLmZyZXEgPSAxLAomIzQzOwkJLnNhbXBsZV9mcmVxID0gcmVhZF9wZXJmX21heF9zYW1wbGVfZnJlcSgpLAomIzQzOwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CX07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CiYjNDM7CXN0cnVjdCByaHRhYl9rcHRyICpza2VsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwlfX3U2NCB6ZXJvID0gMDsKJiM0MzsJaW50IHBtdV9mZDsKJiM0MzsKJiM0MzsJc2tlbCA9IHJodGFiX2twdHJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBlbGVtZW50IGFuZCBzdGFzaCBhIHJlZmVyZW5jZWQgdGFzayBrcHRyIGluIGl0LiAqLwomIzQzOwlpZiAoIUFTU0VSVF9PSyhicGZfbWFwX3VwZGF0ZV9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMucmh0YWIpLAomIzQzOwkJCQkJICAgJmFtcDtrZXksICZhbXA7emVybywgQlBGX0FOWSksICYjMzQ7Y3JlYXRlX2VsZW0mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuaW5pdF9lbGVtKSwKJiM0MzsJCQkJCSAgICAgICZhbXA7dG9wdHMpLCAmIzM0O3Rlc3RfcnVuX2luaXQmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O2luaXRfcmV0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXBtdV9mZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sICZhbXA7YXR0ciwgLTEsIDAsIC0xLCAwKTsKJiM0MzsJaWYgKHBtdV9mZCAmbHQ7IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CXNrZWwtJmd0O2xpbmtzLm5taV91cGRhdGUgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3BlcmZfZXZlbnQoc2tlbC0mZ3Q7cHJvZ3Mubm1pX3VwZGF0ZSwKJiM0MzsJCQkJCQkJCXBtdV9mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5ubWlfdXBkYXRlLCAmIzM0O2F0dGFjaF9wZXJmX2V2ZW50JiMzNDspKSB7CiYjNDM7CQljbG9zZShwbXVfZmQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTGV0IHRoZSBOTUkgaGFuZGxlciBvdmVyd3JpdGUgdGhlIGVsZW1lbnQuICovCiYjNDM7CXVzbGVlcCgxMDAwMDApOwomIzQzOwomIzQzOwlicGZfbGlua19fZGVzdHJveShza2VsLSZndDtsaW5rcy5ubWlfdXBkYXRlKTsKJiM0MzsJc2tlbC0mZ3Q7bGlua3Mubm1pX3VwZGF0ZSA9IE5VTEw7CiYjNDM7CWNsb3NlKHBtdV9mZCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZQomIzQzOwkgKiBwYXRoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMsIG1pcnJvcmluZyBoYXNoIG1hcCBzZW1hbnRpY3MuCiYjNDM7CSAqIEJlZm9yZSB0aGUgZml4IHRoZSBrcHRyIHdhcyByZWxlYXNlZCBmcm9tIHRoZSBOTUkgY29udGV4dCBhbmQgdGhlCiYjNDM7CSAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLgomIzQzOwkgKi8KJiM0MzsJdG9wdHMucmV0dmFsID0gMDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MucHJvYmVfZWxlbSksCiYjNDM7CQkJCQkgICAgICAmYW1wO3RvcHRzKSwgJiMzNDt0ZXN0X3J1bl9wcm9iZSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIDAsICYjMzQ7cHJvYmVfcmV0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsICYjMzQ7eGNoZ19ub25fbnVsbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHJlYWRfY291bnRlcihza2VsLCAzKSwgMCwgJiMzNDt4Y2hnX251bGwmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlyaHRhYl9rcHRyX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI1ODAwYTJlMjRlNjMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jCkBAIC0wLDAgJiM0MzsxLDEwMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGF0IGEgcmh0YWIgdmFsdWUgdXBkYXRlIGlzc3VlZCBmcm9tIGEgcGVyZl9ldmVudCAoTk1JKSBwcm9ncmFtCiYjNDM7ICogZG9lcyBub3QgZWFnZXJseSBkZXN0cm95IHJlZmVyZW5jZWQga3B0cnMuIHJodGFiIG11c3QgbWF0Y2ggdGhlIGhhc2ggbWFwCiYjNDM7ICogc2VtYW50aWNzIGludHJvZHVjZWQgYnkgY29tbWl0IGEzYTgxZDI0NzY1MSAoJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcwomIzQzOyAqIG9uIG1hcCB2YWx1ZSByZWN5Y2xlJiMzNDspOiBvbmx5IE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKQomIzQzOyAqIGFyZSBjYW5jZWxsZWQgb24gdXBkYXRlL2RlbGV0ZSwgd2hpbGUga3B0cnMgc3RheSBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWQKJiM0MzsgKiBlbGVtZW50IHVudGlsIGl0IGlzIGV2ZW50dWFsbHkgZnJlZWQuCiYjNDM7ICoKJiM0MzsgKiBXaXRob3V0IHRoZSBmaXgsIHRoZSBOTUkgdXBkYXRlIHJlbGVhc2VzIHRoZSBvbGQga3B0ciBhbmQgcHJvYmVfZWxlbSgpCiYjNDM7ICogb2JzZXJ2ZXMgTlVMTCBpbiB0aGUgc2xvdDsgd2l0aCB0aGUgZml4IHRoZSBvbGQga3B0ciBpcyBpbmhlcml0ZWQgYW5kCiYjNDM7ICogcHJvYmVfZWxlbSgpIG9ic2VydmVzIGEgbm9uLU5VTEwgcG9pbnRlci4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdHJ1Y3QgdmFsX3QgewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0c2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxNik7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgX191MzIpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7CiYjNDM7fSByaHRhYiBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgNCk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSBjb3VudGVycyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKiAwOiBpbml0IG9rLCAxOiBubWkgdXBkYXRlIG9rLCAyOiBwcm9iZSB4Y2hnIG5vbi1OVUxMLCAzOiBwcm9iZSB4Y2hnIE5VTEwgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnVtcCh1MzIgaWR4KQomIzQzO3sKJiM0MzsJdTY0ICp2ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2NvdW50ZXJzLCAmYW1wO2lkeCk7CiYjNDM7CiYjNDM7CWlmICh2KQomIzQzOwkJKCp2KSYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MzsKJiM0MztTRUMoJiMzNDtwZXJmX2V2ZW50JiMzNDspCiYjNDM7aW50IG5taV91cGRhdGUoc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGEgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2YWxfdCB2YWwgPSB7fTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CWlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cmh0YWIsICZhbXA7a2V5LCAmYW1wO3ZhbCwgQlBGX0FOWSkgPT0gMCkKJiM0MzsJCWJ1bXAoMSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGluaXRfZWxlbSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmFsX3QgKnZhbDsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkOwomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3JodGFiLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CXRhc2sgPSBicGZfdGFza19hY3F1aXJlKGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpKTsKJiM0MzsJaWYgKCF0YXNrKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2YWwtJmd0O3RzaywgdGFzayk7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKG9sZCk7CiYjNDM7CWJ1bXAoMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHByb2JlX2VsZW0odm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHZhbF90ICp2YWw7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkOwomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3JodGFiLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2YWwtJmd0O3RzaywgTlVMTCk7CiYjNDM7CWlmIChvbGQpIHsKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2Uob2xkKTsKJiM0MzsJCWJ1bXAoMik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlidW1wKDMpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJIQVNIIE1hcHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UsIGp1c3QgYSByZW5hbWU6IGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHRvIGByaHRhYl9jYW5jZWxfZmllbGRzYC4gQnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gTm93LCBpbnN0ZWFkIG9mIHVzaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCwgd2UmIzM5O3JlIGNhbGxpbmcgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpbiB0aGUgcmVuYW1lZCBmdW5jdGlvbi4KClRoZSBjb21tZW50IGNsYXJpZmllcyB0aGUgKndoeSo6IHdlJiMzOTtyZSBvbmx5IGNhbmNlbGxpbmcgJiMzNDtOTUktc2FmZSYjMzQ7IGZpZWxkcyBsaWtlIHRpbWVycywgd29ya3F1ZXVlcywgYW5kIHRhc2tfd29yayBpbiB0aGlzIGNvbnRleHQuIFRoZSBrcHRyL3VwdHIvbGlzdC9yYnRyZWUgZGVzdHJ1Y3Rpb24gaXMgdG9vIHJpc2t5IHRvIHJ1biBpbiBhcmJpdHJhcnkgQlBGIGNvbnRleHRzIChOTUksIGZvciBleGFtcGxlKS4gVGhvc2UgZmllbGRzIGFyZSBiZWluZyBsZWZ0IGF0dGFjaGVkIGFuZCBoYW5kbGVkIGluIGByaHRhYl9tZW1fZHRvcigpYCBsYXRlci4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwhIFNvLCBmdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGZvciBgQlBGX01BUF9UWVBFX1JIQVNIYCwgd2hpY2ggdGhpcyBjb2RlIGlzIGNsZWFybHkgdGllZCB0by4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIGBCUEZfTUFQX1RZUEVfUkhBU0hgIGlzIHdoYXQgSSYjMzk7bSBmb2N1c2VkIG9uIGhlcmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYSByZWNlbnQgYWRkaXRpb24gb3IgaWYgaXQmIzM5O3MgYmVlbiBhcm91bmQgZm9yIGEgd2hpbGUuIExldCBtZSBkbyBhIHF1aWNrIGdyZXAgZm9yIGBCUEZfTUFQX1RZUEVfUkhBU0hgIHRvIGdldCBhIHNlbnNlIG9mIGl0cyBoaXN0b3J5IHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX01BUF9UWVBFX1JIQVNIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA0OS1cdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XHRCUEZfTUFQX1RZUEVfUkhBU0gsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cdF9fTUFYX0JQRl9NQVBfVFlQRVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1Ny1cdFx0ICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxNTU4Olx0XHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTktXHRcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTAwPXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX21hcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyNi1cdFx0IG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTI3Olx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSClcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjgtXHRcdGdvdG8gcHV0X21hcDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjQzPXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjg3LVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyODg6XHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODktXHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzAyLVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMDM6XHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDQtXHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE0LVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMTU6XHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTYtXHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzcwPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQwOC1cdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MDk6XHQgICAgYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDEwLVx0ICAgIGF0dHItXHUwMDNlbWFwX2V4dHJhICE9IDApIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDgwLVx0Y2FzZSBCUEZfTUFQX1RZUEVfSEFTSDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0ODE6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0ODItXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSDpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMjA1PXN0YXRpYyBpbnQgbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2NC1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIyNjU6XHRcdCAgIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0ggfHxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIyNjYtXHRcdCAgIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3NDU9c3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzkzLVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Nzk0Olx0XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5NS1cdFx0Y2FzZSBCUEZfTUFQX1RZUEVfTFJVX0hBU0g6XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTYzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWFwX3R5cGVfbmFtZVtdID0ge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVx0W0JQRl9NQVBfVFlQRV9JTlNOX0FSUkFZXVx0XHQ9IFwmIzM0O2luc25fYXJyYXlcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcdFtCUEZfTUFQX1RZUEVfUkhBU0hdXHRcdFx0PSBcJiMzNDtyaGFzaFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjAwLX07XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zMTEtXHRcdGJyZWFrO1xudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MzEyOlx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zMTMtXHRcdG9wdHMubWFwX2ZsYWdzXHQ9IEJQRl9GX05PX1BSRUFMTE9DO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01MC1cdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsIG1hcF90eXBlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo1MTpcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtNTItXHRcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04MS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM6ODI6XHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODMtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY3LVx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjE2ODpcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cdFx0bWFwX2ZsYWdzIHw9IEJQRl9GX05PX1BSRUFMTE9DO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MjExPXN0YXRpYyB2b2lkIHJoYXNoX3NldHVwKHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxMi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcdGhhc2htYXBfbG9va3VwX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxNC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTE1NT1zdGF0aWMgdm9pZCBodGFiX21lbV9zZXR1cF9pbXBsKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXHRicGZfbWFwX19zZXRfbWF4X2VudHJpZXMobWFwLCBNQVgoODE5MiwgNjQgKiBlbnYubnJfY3B1cykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjE4NTpcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXHUwMDI2XHUwMDI2IGFyZ3MucHJlYWxsb2NhdGVkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhtYXAsIGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0yMjk9c3RhdGljIHZvaWQgcmh0YWJfbWVtX3NldHVwKHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYzoyMzE6XHRodGFiX21lbV9zZXR1cF9pbXBsKEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jPTQ2PXN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jOjUyOlx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXCYjMzQ7cmhhc2hfZXh0cmFcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUzLVx0XHRcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcdTAwMjZvcHRzKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM6OTpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yMj1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM6MjM6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTI0LVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmM9MjU9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmM6MjY6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMtMjctXHRfX3VpbnQobWF4X2VudHJpZXMsIDE2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjY2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBNYXAgTW9kaWZpY2F0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgdGhpcyBgQlBGX01BUF9UWVBFX1JIQVNIYCB0eXBlLCBhbmQgYSBwYXRjaCB0aGF0JiMzOTtzIHBsYXlpbmcgd2l0aCBpdC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgdG8gdXNlIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2AgaW5zdGVhZCBvZiBgYnBmX29ial9mcmVlX2ZpZWxkc2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0IHRoaXMgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIOKAkyB0aGlzIHNjcmVhbXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCBtZSBzZWXigKYgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGZsb3cuIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBpdCBpcyB1c2VkLiBSaWdodCwgYHJodGFiX2NhbmNlbF9maWVsZHNgIGlzIGNhbGxlZCBieSBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIEhvbGQgb27igKYgaXNuJiMzOTt0IGByaHRhYl9jYW5jZWxfZmllbGRzYCBhICpzdGF0aWMqIGZ1bmN0aW9uPyBNZWFuaW5nIGl0IGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHk/IE9rYXksIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGF0IG1lYW4gaXQgaXMgb25seSB1c2VkIGludGVybmFsbHkuIFNvIHRoZSBjYWxsZXJzICphcmUqIHRoZSB0d28gdGhhdCBhcmUgbm90IHN0YXRpYy4gT2theSwgbGV0JiMzOTtzIHZlcmlmeSDigJMgYXJlICp0aGV5KiBzdGF0aWM/IElmIHRoZXkgYXJlbiYjMzk7dCwgdGhlbiB3ZSBoYXZlIGEgcGF0aCB0byBmdXp6LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX2RlbGV0ZV9lbGVtfHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOD1zdGF0aWMgdm9pZCByaHRhYl9yZWFkX2VsZW1fdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqZHN0LCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0OTpzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTAtXHRcdFx0ICAgICB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4Mz1zdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk0Olx0cmV0dXJuIHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBlbGVtLCBOVUxMLCAwKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTUtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5OTc9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxMi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMTM6XHRyZXR1cm4gcmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGVsZW0sIHZhbHVlLCBmbGFncyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDE0LX1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMTUtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDE2OnN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKnZhbHVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxNy1cdFx0XHRcdCAgICAgIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA0ND1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDU3LVx0aWYgKGVsZW0pXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDU4Olx0XHRyZXR1cm4gcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhtYXAsIGVsZW0sIHZhbHVlLCBtYXBfZmxhZ3MpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA1OS1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDk3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA5ODpcdFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCB0bXAsIHZhbHVlLCBtYXBfZmxhZ3MpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA5OS1cdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjU1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzU4LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0b3RhbDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzU5Olx0XHRcdHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBkZWxfZWxlbXNbaV0sIE5VTEwsIDApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM2MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgUmVkLUJsYWNrIFRyZWUgTWFwIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXkgbWFwIG9wZXJhdGlvbnMgZXhwb3NlZCBieSB0aGUgUmVkLUJsYWNrIFRyZWUgbWFwLiBJdCBzZWVtcyBsaWtlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgYXJlIHRoZSBwcmltYXJ5LCBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nIHRoZSBtYXAuIFRoYXQgbGFzdCBvbmUgd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmUgaXMgYSBiaXQgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsbHkgaW50ZXJuYWwgb3IgYmF0Y2gtb3JpZW50ZWQgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGVzZSBzZWVtIHRvIGJlIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdW5kZXJzdGFuZC4KClRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGByaHRhYl9tYXBfb3BzYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaG9va2VkIHVwLCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgUmVkLUJsYWNrIFRyZWUgaW1wbGVtZW50YXRpb24sIGFuZCB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIG1hcCBvcGVyYXRpb25zIGNvbnRleHQuIEtub3dpbmcgdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3QgZGVmaW5pdGlvbiB3aWxsIHRlbGwgbWUgaG93IGV2ZXJ5dGhpbmcgaXMgYm91bmQgdG9nZXRoZXIuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgdG8gYmVnaW4gdG8gZnVsbHkgZ3Jhc3AgaG93IHRoZXNlIGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRhYl9tYXBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjQ9QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjU6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI2LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTg5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYHJodGFiX21hcF9vcHNgIE1hcCBPcGVyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIG1hcCBvcGVyYXRpb25zIGZvciBgcmh0YWJfbWFwX29wc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtYXBzIGFyZSBhY3R1YWxseSBmdW5jdGlvbmluZyB1bmRlciB0aGUgaG9vZC4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zPyBBcmUgd2UgdGFsa2luZyBhYm91dCByZWFkcywgd3JpdGVzLCBpbnNlcnRzLCBkZWxldGVzLCB1cGRhdGVzLCBsb29rdXBzIOKAkyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGludGVyYWN0aW9uPyBJ4oCZbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBlZmZpY2llbmN5OyBob3cgYXJlIHRoZXNlIGltcGxlbWVudGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoaXMgY2FsbHMgZm9yIGEgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgdGhlIGNvZGUgd2hlcmUgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHNlZSB0aGUgcHJlY2lzZSBpbXBsZW1lbnRhdGlvbnMsIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGFsZ29yaXRobXMgaW52b2x2ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCDigJMgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGVzZSBvcGVyYXRpb25zIGRlZmluZXMgdGhlIHByYWN0aWNhbCBjYXBhYmlsaXRpZXMgb2YgdGhlIGVudGlyZSBgcmh0YWJgIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBlYWNoIG9wZXJhdGlvbi4gQXJlIHRoZXkgdGhyZWFkLXNhZmU/IERvIHRoZXkgdXRpbGl6ZSBhbnkgbG9ja2luZyBtZWNoYW5pc21zPyBXaGF0IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zPyBTcGVjaWZpY2FsbHksIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gYSBzeXN0ZW0gd2l0aCBjb25jdXJyZW5jeT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyB0cmFkZS1vZmZzIGhlcmUsIGdpdmVuIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGxpYnJhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjQ9QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjU6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI2LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQlBGIGhhc2ggdGFibGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gdGhlIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAzNTI1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGhhc2ggdGFibGUmIzM5O3Mgd29ya2luZ3MuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBzb21ldGhpbmcgc3BlY2lmaWMgYXQgdGhhdCBsb2NhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTIwOlx0XHQuZmluaV9zZXFfcHJpdmF0ZSA9IGJwZl9pdGVyX2Zpbmlfcmhhc2hfbWFwLFxuMzUyMTpcdFx0LnNlcV9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3NlcV9yaGFzaF9tYXBfaW5mbyksXG4zNTIyOlx0fTtcbjM1MjM6XHRcbjM1MjQ6XHRCVEZfSURfTElTVF9TSU5HTEUocmh0YWJfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3JodGFiKVxuMzUyNTpcdGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuMzUyNjpcdFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxuMzUyNzpcdFx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcbjM1Mjg6XHRcdC5tYXBfYWxsb2MgPSByaHRhYl9tYXBfYWxsb2MsXG4zNTI5Olx0XHQubWFwX2ZyZWUgPSByaHRhYl9tYXBfZnJlZSxcbjM1MzA6XHRcdC5tYXBfZ2V0X25leHRfa2V5ID0gcmh0YWJfbWFwX2dldF9uZXh0X2tleSxcbjM1MzE6XHRcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcbjM1MzI6XHRcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcbjM1MzM6XHRcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXG4zNTM0Olx0XHQubWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSxcbjM1MzU6XHRcdC5tYXBfdXBkYXRlX2VsZW0gPSByaHRhYl9tYXBfdXBkYXRlX2VsZW0sXG4zNTM2Olx0XHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxuMzUzNzpcdFx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXG4zNTM4Olx0XHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbjM1Mzk6XHRcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG4zNTQwOlx0XHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcbjM1NDE6XHRcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcbjM1NDI6XHRcdEJBVENIX09QUyhyaHRhYiksXG4zNTQzOlx0XHQubWFwX2J0Zl9pZCA9IFx1MDAyNnJodGFiX21hcF9idGZfaWRzWzBdLFxuMzU0NDpcdFx0Lml0ZXJfc2VxX2luZm8gPSBcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxuMzU0NTpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDM3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiB0aGUgSGFzaHRhYmxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb3JlIG9wZXJhdGlvbnMgaXQgdG91Y2hlcy4gSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kaWZpZXMgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGFueSBiYXRjaCBvcGVyYXRpb25zLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHJldmVhbHMgc29tZXRoaW5nIEkgaW5pdGlhbGx5IG1pc3NlZDogaXQgYWxzbyBtb2RpZmllcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AsIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gTm93LCBjb25zaWRlcmluZyB0aGUgY2FsbCBjaGFpbiwgYHJodGFiX2NhbmNlbF9maWVsZHNgIGlzIHVzZWQgYnkgdGhlIGluaXRpYWwgZm9jdXMgZnVuY3Rpb25zIEkgbWVudGlvbmVkLCBzcGVjaWZpY2FsbHkgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYWxzbyBieSBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLiBPa2F5LCBzbyBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiBmb3Igbm93LgoKVGhlbiwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMsIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBnb3RjaGFzLiBSaWdodCwgdGhlIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBlbnN1cmUgQlBGIG1hcHMgYXJlIGVuYWJsZWQsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19CUEZfU1lTQ0FMTGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBpcyBvbiBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHN5c3RlbSBjYWxsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgsIHNvIGl0JiMzOTtzIHRoZSBhbmNob3IgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIHN1c3BlY3Qgd2XigJlyZSBkZWFsaW5nIHdpdGggbW9yZSB0aGFuIGp1c3QgYSBzaW5nbGUgZnVuY3Rpb24sIHRoZXJlZm9yZSwgSSBzaG91bGQgYW5hbHl6ZSB0aGUgY29uZmlndXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeXN0ZW0gY2FsbC4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluc3RpbmN0IGlzIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIGZvciBgQlBGX01BUF9UWVBFX1JIQVNIYC4gSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBudWFuY2VzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcgaW4gdGhlIHJoYXNoIG1hcCB0eXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTUFQX1RZUEVfUkhBU0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XHRcdCBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cdFx0Z290byBwdXRfbWFwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNDM9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODctXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI4ODpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI4OS1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDItXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMzpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwNC1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzNzA9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDA4LVx0ICAgIGF0dHItXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSRU5BIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQwOTpcdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MTAtXHQgICAgYXR0ci1cdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0ODAtXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ4MTpcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ4Mi1cdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMDU9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMjY0LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI2NTpcdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2Ni1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzc0NT1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3OTMtXHRcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3OTQ6XHRcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Nzk1LVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlx0QlBGX01BUF9UWVBFX1JIQVNILFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXHRfX01BWF9CUEZfTUFQX1RZUEVcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXHRcdCAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcdFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVx0XHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xOTgtXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXHRcdD0gXCYjMzQ7aW5zbl9hcnJheVwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTk5Olx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cdFx0XHQ9IFwmIzM0O3JoYXNoXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cdFx0YnJlYWs7XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cdFx0b3B0cy5tYXBfZmxhZ3NcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTM3PXN0YXRpYyB2b2lkIGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVx0YnBmX21hcF9fc2V0X3R5cGUoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhjdHguc2tlbC1cdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz04MD1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcdGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0xNTE9c3RhdGljIHZvaWQgaGFzaG1hcF9sb29rdXBfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXHRtYXBfZmxhZ3MgPSBhcmdzLm1hcF9mbGFncztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY5LVx0XHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MjEzOlx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4NC1cdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1Olx0aWYgKG1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg2LVx0XHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IH5CUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzItfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XHRyZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1JIQVNILCBcJiMzNDtyaGFzaF9leHRyYVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTMtXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jLTEwLVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTIyPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzoyMzpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMjQtXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYz0yNT1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYzoyNjpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYy0yNy1cdF9fdWludChtYXhfZW50cmllcywgMTYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyB0aGUgQlBGIE1hcCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBCUEZfTUFQX1RZUEVfUkhBU0hgIGlzIGFjdHVhbGx5IGEgc3RhbmRhcmQgQlBGIG1hcCB0eXBlLiBJdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgQlBGIG1hcHMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24g4oCTIGlmIHRoYXQmIzM5O3MgZW5hYmxlZCwgdGhlbiB0aGUgcmVsZXZhbnQgY29kZSBmb3IgdGhlc2UgaGFzaCBtYXBzIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSBoZXJlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aGF0IGNvbnRyb2xzIHRoaXMgbW9kdWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hlcmUgZWxzZSB0byBsb29rIGlmIEkgbmVlZCB0byBhZGp1c3QgaG93IHRoaXMgY29tcG9uZW50IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXNodGFiLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuLS1cbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU9MTc9c2VsaW51eC15IDo9IGF2Yy5vIGhvb2tzLm8gc2VsaW51eGZzLm8gbmV0bGluay5vIG5sbXNndGFiLm8gbmV0aWYubyBcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xOC1cdCAgICAgbmV0bm9kZS5vIG5ldHBvcnQubyBzdGF0dXMubyBpbml0Y2FsbHMubyBcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZToxOTpcdCAgICAgc3MvZWJpdG1hcC5vIHNzL2hhc2h0YWIubyBzcy9zeW10YWIubyBzcy9zaWR0YWIubyBzcy9hdnRhYi5vIFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlLTIwLVx0ICAgICBzcy9wb2xpY3lkYi5vIHNzL3NlcnZpY2VzLm8gc3MvY29uZGl0aW9uYWwubyBzcy9tbHMubyBzcy9jb250ZXh0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0OTcKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIENvbnNpZGVyYXRpb25zIGZvciB0aGUgUmVkLUJsYWNrIFRyZWUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgb25seSBjb25maWcgb3B0aW9uIEkgbmVlZCB0byB3b3JyeSBhYm91dCBoZXJlLiBOb3csIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBmdW5jdGlvbnMuIExldCBtZSBxdWlja2x5IGxpc3QgdGhlIG5vbi1zdGF0aWMgcHVibGljIGZ1bmN0aW9ucy4gQWhhLCBoZXJlIHRoZXkgYXJlOiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgPyBJdCAqaXMqIGEgc3RhdGljIG9uZSwgc28gSSBzaG91bGRuJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIHNwZWNpZmljIGRldGFpbHMgdGhlcmUuLi4gdGhvdWdoIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcHVibGljIGludGVyZmFjZSBvZiBiYXRjaCBvcGVyYXRpb25zLiBMZXQmIzM5O3MgbWFrZSBhIGNvbXBsZXRlIGxpc3QgaGVyZS4gVGhlIGJhdGNoIG9wZXJhdGlvbnMgYXJlOiBgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaGAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgcmh0YWJfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgcmh0YWJfbWFwX2RlbGV0ZV9iYXRjaGAuIE9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIGVhY2ggb2YgdGhlc2UgdG8gYXZvaWQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9iYXRjaHxyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2h8cmh0YWJfbWFwX3VwZGF0ZV9iYXRjaHxyaHRhYl9tYXBfZGVsZXRlX2JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDU9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNTU6c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1Ni1cdFx0XHRcdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTAtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzkxOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTItXHRcdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzkzLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzOTQ6XHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5NS19XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NzpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTgtXHRcdFx0XHRcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTkte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQwMDpcdHJldHVybiBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU0NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlLCB3aXRoIGEgKipib2xkZWQgaGVhZGVyKio6CgoqKkRpZ2dpbmcgaW50byB0aGUgYHJodGFiYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgcmh0YWJgIGNvZGUsIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkgc3RpY2tpbmcgb3V0LiBJdCBzZWVtcyBsaWtlIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBzZWVpbmcgZGVmaW5lZCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVuY2Fwc3VsYXRpb24gdGVjaG5pcXVlLCBhbmQgaXQgdHlwaWNhbGx5IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBIbW0sIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBvbmx5IGV4Y2VwdGlvbnMgd291bGQgYmUgdGhlIGZ1bmN0aW9ucyBleHBvc2VkIHRocm91Z2ggYHJodGFiX21hcF9vcHNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBCdXQgaGFuZyBvbi4uLiB0aGVyZSYjMzk7cyBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYC4gSXNuJiMzOTt0IHRoYXQgYWxzbyBkZWNsYXJlZCBzdGF0aWM/IE5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBhbmQgdmVyaWZ5IGlmIG15IG9ic2VydmF0aW9uIGFib3V0IGl0IGJlaW5nIHN0YXRpYyBpcyBpbmRlZWQgY29ycmVjdC4gSWYgaXQgaXMgc3RhdGljLCB0aGF0IHJhaXNlcyBzb21lIHF1ZXN0aW9ucyBhYm91dCBob3cgdXBkYXRlcyBhcmUgaGFuZGxlZCBvdXRzaWRlIHRoZSBtYWluIG1hcCBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDE2PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDQ0OnN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA0NS17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyNT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTM0LVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTM1Olx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzYtXHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIE1hcCBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWFwIG9wZXJhdGlvbnMsIGFuZCB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IHRoZXkmIzM5O3JlIGFsbCAqc3RhdGljKiwgd2hpY2gsIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBpcyBub3QgaWRlYWwgZm9yIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIG1hcCBvcGVyYXRpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgbm90IGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciB3b24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBjb21wbGljYXRlcyB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCgpOb3csIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCAqaXMqIG5vbi1zdGF0aWMgKGl0JiMzOTtzIGEgc3lzY2FsbCBlbnRyeSBwb2ludCEpLCBidXQgdGhhdCYjMzk7cyB0b28gZ2VuZXJpYyBmb3Igd2hhdCBJIG5lZWQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBtYXAgdHlwZSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBpZiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBpbmxpbmVkLiBBaCwgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGByaHRhYl9tYXBfb3BzYC4gQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCEgRXhjZWxsZW50ISBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IEkgbmVlZC4KClRoZXJlZm9yZSwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcy4gVGhleSBhcmUgbm90IGlubGluZWQsIGFuZCB0aGV5IHByb3ZpZGUgdGhlIHNwZWNpZmljIG1hcCBvcGVyYXRpb25zIEkgcmVxdWlyZS4gVGhlc2UgYXJlIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdOKAmXMgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGluIGEgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBteSB3b3JrLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4gSSBkb24mIzM5O3Qgd2FudCB0byBvdmVybG9vayBhbnkgb3RoZXIgcG9zc2libGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyND1CVEZfSURfTElTVF9TSU5HTEUocmh0YWJfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3JodGFiKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyNTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjYtXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDcxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcy4KCioqTmF2aWdhdGluZyB0aGUgYHJodGFiX21hcGAgU3RydWN0dXJlKioKClJpZ2h0LCBzbyB0aGUgYHJodGFiX21hcF9vcHNgIHN0cnVjdHVyZSBpdHNlbGYgaXNuJiMzOTt0IHN0YXRpYywgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBmdW5jdGlvbnMgd2l0aGluIGl0LCB0aGluZ3MgbGlrZSBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCB0aG9zZSAqYXJlKiBzdGF0aWMuIFRoZSBmYWN0IHRoYXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyB0YWtlbiBjbGFyaWZpZXMgdGhhdC4gSSB3aWxsIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIHVzZSB0aG9zZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucy4KCkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZyBlbHNlIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLi4uIGByaHRhYl9tZW1fZHRvcmAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbiYjMzk7dCBoYXZlIGl0IG9uIHRoZSB0b3Agb2YgbXkgbWluZCByaWdodCBub3cuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBzaWduaWZpY2FudGx5IGFsdGVyIGhvdyBJIGFwcHJvYWNoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21lbV9kdG9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTI4Njg9c3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODc3LVx0ICogZXhlY3V0aW9uIGNvbnRleHRzIChlLmcuIE5NSSksIHNvIGxlYXZlIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0b1xua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg3ODpcdCAqIHRoZSByZWN5Y2xlZCBlbGVtZW50IGFuZCBsZXQgcmh0YWJfbWVtX2R0b3IoKSBkZXN0cm95IHRoZW0gb25jZSB0aGVcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NzktXHQgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg4Ni1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODc6c3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODg4LXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTQ5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NzUtXHR9XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTc2Olx0LyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc3LVx0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAxNj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDM3LVx0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAmIzM5O3MgdXBkYXRlIHNlbWFudGljczsgcmVmZXJlbmNlZCBrcHRyc1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzAzODpcdCAqIHN0YXkgYXR0YWNoZWQgYW5kIGFyZSBkZXN0cm95ZWQgYnkgcmh0YWJfbWVtX2R0b3IoKS5cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMzktXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTE5PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEyNC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMjU6XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2cmh0YWItXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAxMAoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBSaGFzaCBNYXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGByaHRhYl9tZW1fZHRvcmAgaXMgc3RhdGljLCB5ZXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIG5vdGU7IGl0IG1pZ2h0IGluZGljYXRlIGEgc3BlY2lmaWMgaW50ZXJhY3Rpb24gcG9pbnQuCgpMZXQgbWUgcXVpY2tseSBzY2FuIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjZW50cmFsIG9uZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHBlcnRhaW4gc3BlY2lmaWNhbGx5IHRvIGtwdHJzIGFuZCB0aGVzZSBmdW5jdGlvbiBjaGFuZ2VzLiBUaGUgdGVzdHMgdXNlIGBicGZfa3B0cl94Y2hnYCBhbmQgYGJwZl90YXNrX2FjcXVpcmVgLiBUaG9zZSB1c3VhbGx5IHB1bGwgaW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgdGhlIGBoYXNodGFiLmNgIHN0dWZmLCBpcyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIHN5bnRoZXNpemUgd2hhdCBJIGtub3cuIFRoaXMgaXMgd2hhdCBJJiMzOTttIGNvbmNsdWRpbmcgZnJvbSBteSByZXZpZXcgb2YgdGhlIGNoYW5nZXM6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseSwgeWVzLiBUaGVyZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgY3JpdGljYWwgYXJlYS4KKiAgICoqRm9jdXNTeW1ib2xzKio6IERlZmluaXRlbHkgZm9jdXMgb24gdGhlc2UgQlBGIG1hcCBvcGVyYXRpb25zOiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGFuZCwgY3J1Y2lhbGx5LCBgcmh0YWJfbWVtX2R0b3JgLiBUaGVzZSBhcmUgdGhlIHRvdWNocG9pbnRzIGZvciB0aGUgZml4LgoqICAgKipFbmFibGVDb25maWdzKio6IGBCUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW5hYmxlciBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgoqICAgKipSZWFzb25pbmcqKjogVGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgYSBidWcgaW4gdGhlIEJQRiByaGFzaCBtYXAgd2hlcmUgdXBkYXRpbmcgYW4gZWxlbWVudCBmcm9tIGFuIE5NSSBjb250ZXh0IGNhdXNlZCBwcmVtYXR1cmUsIHVuc2FmZSBkZXN0cnVjdGlvbiBvZiByZWZlcmVuY2VkIGtwdHJzLiBUaGUgcGF0Y2ggY2xldmVybHkgcmV3b3JrcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgdG8gb25seSBoYW5kbGUgTk1JLXNhZmUgZmllbGRzIGFuZCBkZWZlcnMgdGhlIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBtZWFucyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgcmVhY2hhYmxlIEJQRiBtYXAgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHNwZWNpYWwgQlBGIG1hcCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHVwdHJzLCBsaXN0cywgYW5kIHJidHJlZXMpIHdoZW4gYSBtYXAgZWxlbWVudCBpcyB1cGRhdGVkIG9yIGRlbGV0ZWQgaW4gYW4gTk1JIGNvbnRleHQuIFByZXZpb3VzbHksIGBicGZfb2JqX2ZyZWVfZmllbGRzKClgIHdhcyBjYWxsZWQsIHdoaWNoIGVhZ2VybHkgZGVzdHJveWVkIGFsbCBmaWVsZHMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5zYWZlIG9wZXJhdGlvbnMgKGxpa2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMpIGZyb20gYW4gTk1JIGNvbnRleHQuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cygpYCwgd2hpY2ggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcyAodGltZXJzLCB3b3JrcXVldWVzLCB0YXNrX3dvcmspIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIG9mIG90aGVyIGZpZWxkcyB0byBgcmh0YWJfbWVtX2R0b3IoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYW5kIGxpZmVjeWNsZSBidWcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIEtBU0FOIGlmIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGZyZWUpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTNmYTZhZDczN2M0NzE3YzU4NDhiMDE1MzgwYTYzNjYwMDVjY2NjMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDEwOjE5OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA5ZjM5NGUxYWEyZTg1Li43MGZhMWUxYjRiMDA4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMjg2NSwxNCAmIzQzOzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJcmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpOwogfQogCi1zdGF0aWMgdm9pZCByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsCi0JCQkJCXN0cnVjdCByaHRhYl9lbGVtICplbGVtKQomIzQzO3N0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsCiYjNDM7CQkJCXN0cnVjdCByaHRhYl9lbGVtICplbGVtKQogewogCWlmIChJU19FUlJfT1JfTlVMTChyaHRhYi0mZ3Q7bWFwLnJlY29yZCkpCiAJCXJldHVybjsKIAotCWJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItJmd0O21hcC5yZWNvcmQsCi0JCQkgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKSBoZXJlLgomIzQzOwkgKiBrcHRyL3VwdHIvbGlzdC9yYnRyZWUgZGVzdHJ1Y3Rpb24gbXVzdCBub3QgcnVuIGZyb20gYXJiaXRyYXJ5IEJQRgomIzQzOwkgKiBleGVjdXRpb24gY29udGV4dHMgKGUuZy4gTk1JKSwgc28gbGVhdmUgdGhvc2UgZmllbGRzIGF0dGFjaGVkIHRvCiYjNDM7CSAqIHRoZSByZWN5Y2xlZCBlbGVtZW50IGFuZCBsZXQgcmh0YWJfbWVtX2R0b3IoKSBkZXN0cm95IHRoZW0gb25jZSB0aGUKJiM0MzsJICogZWxlbWVudCBpcyBldmVudHVhbGx5IGZyZWVkLiBUaGlzIG1hdGNoZXMgdGhlIGhhc2ggbWFwIHNlbWFudGljcwomIzQzOwkgKiBpbnRyb2R1Y2VkIGJ5IGEzYTgxZDI0NzY1MSAoJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWUKJiM0MzsJICogcmVjeWNsZSYjMzQ7KS4KJiM0MzsJICovCiYjNDM7CWJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKCZhbXA7cmh0YWItJmd0O21hcCwKJiM0MzsJCQkJICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KQpAQCAtMjk2NCw4ICYjNDM7Mjk3Myw4IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2CiAJCXJodGFiX3JlYWRfZWxlbV92YWx1ZSgmYW1wO3JodGFiLSZndDttYXAsIGNvcHksIGVsZW0sIGZsYWdzKTsKIAkJY2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKCZhbXA7cmh0YWItJmd0O21hcCwgY29weSk7CiAJfQotCS8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovCi0Jcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTsKJiM0MzsJLyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovCiYjNDM7CXJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pOwogCWJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoJmFtcDtyaHRhYi0mZ3Q7bWEsIGVsZW0pOwogCXJldHVybiAwOwogfQpAQCAtMzAyNCwxMCAmIzQzOzMwMzMsMTEgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWwKIAkgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuCiAJICoKIAkgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy8KLQkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHkKLQkgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLgomIzQzOwkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZSBOTUktc2FmZSBvbmVzIGFmdGVyCiYjNDM7CSAqIHRoZSBjb3B5IHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3M7IHJlZmVyZW5jZWQga3B0cnMKJiM0MzsJICogc3RheSBhdHRhY2hlZCBhbmQgYXJlIGRlc3Ryb3llZCBieSByaHRhYl9tZW1fZHRvcigpLgogCSAqLwotCXJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiYjNDM7CXJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzliZGNkYTk1NTU1NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuYwpAQCAtMCwwICYjNDM7MSw4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7cmh0YWJfa3B0ci5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCByZWFkX2NvdW50ZXIoc3RydWN0IHJodGFiX2twdHIgKnNrZWwsIHUzMiBpZHgpCiYjNDM7ewomIzQzOwlfX3U2NCB2YWxzW2xpYmJwZl9udW1fcG9zc2libGVfY3B1cygpXTsKJiM0MzsJX191NjQgc3VtID0gMDsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShicGZfbWFwX19mZChza2VsLSZndDttYXBzLmNvdW50ZXJzKSwgJmFtcDtpZHgsIHZhbHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7bG9va3VwX2NvdW50ZXImIzM0OykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpOyBpJiM0MzsmIzQzOykKJiM0MzsJCXN1bSAmIzQzOz0gdmFsc1tpXTsKJiM0MzsJcmV0dXJuIHN1bTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLAomIzQzOwkJLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUywKJiM0MzsJCS5mcmVxID0gMSwKJiM0MzsJCS5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSwKJiM0MzsJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLAomIzQzOwl9OwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwlzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsJX191NjQgemVybyA9IDA7CiYjNDM7CWludCBwbXVfZmQ7CiYjNDM7CiYjNDM7CXNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSB0aGUgZWxlbWVudCBhbmQgc3Rhc2ggYSByZWZlcmVuY2VkIHRhc2sga3B0ciBpbiBpdC4gKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0soYnBmX21hcF91cGRhdGVfZWxlbShicGZfbWFwX19mZChza2VsLSZndDttYXBzLnJodGFiKSwKJiM0MzsJCQkJCSAgICZhbXA7a2V5LCAmYW1wO3plcm8sIEJQRl9BTlkpLCAmIzM0O2NyZWF0ZV9lbGVtJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmluaXRfZWxlbSksCiYjNDM7CQkJCQkgICAgICAmYW1wO3RvcHRzKSwgJiMzNDt0ZXN0X3J1bl9pbml0JiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgJiMzNDtpbml0X3JldCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlwbXVfZmQgPSBzeXNjYWxsKF9fTlJfcGVyZl9ldmVudF9vcGVuLCAmYW1wO2F0dHIsIC0xLCAwLCAtMSwgMCk7CiYjNDM7CWlmIChwbXVfZmQgJmx0OyAwKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlza2VsLSZndDtsaW5rcy5ubWlfdXBkYXRlID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9wZXJmX2V2ZW50KHNrZWwtJmd0O3Byb2dzLm5taV91cGRhdGUsCiYjNDM7CQkJCQkJCQlwbXVfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7bGlua3Mubm1pX3VwZGF0ZSwgJiMzNDthdHRhY2hfcGVyZl9ldmVudCYjMzQ7KSkgewomIzQzOwkJY2xvc2UocG11X2ZkKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIExldCB0aGUgTk1JIGhhbmRsZXIgb3ZlcndyaXRlIHRoZSBlbGVtZW50LiAqLwomIzQzOwl1c2xlZXAoMTAwMDAwKTsKJiM0MzsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3koc2tlbC0mZ3Q7bGlua3Mubm1pX3VwZGF0ZSk7CiYjNDM7CXNrZWwtJmd0O2xpbmtzLm5taV91cGRhdGUgPSBOVUxMOwomIzQzOwljbG9zZShwbXVfZmQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgb2xkIGtwdHIgbXVzdCBzdGlsbCBiZSBhdHRhY2hlZCB0byB0aGUgZWxlbWVudDogdGhlIE5NSSB1cGRhdGUKJiM0MzsJICogcGF0aCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzLCBtaXJyb3JpbmcgaGFzaCBtYXAgc2VtYW50aWNzLgomIzQzOwkgKiBCZWZvcmUgdGhlIGZpeCB0aGUga3B0ciB3YXMgcmVsZWFzZWQgZnJvbSB0aGUgTk1JIGNvbnRleHQgYW5kIHRoZQomIzQzOwkgKiBwcm9iZSBiZWxvdyB3b3VsZCBzZWUgTlVMTC4KJiM0MzsJICovCiYjNDM7CXRvcHRzLnJldHZhbCA9IDA7CiYjNDM7CWlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnByb2JlX2VsZW0pLAomIzQzOwkJCQkJICAgICAgJmFtcDt0b3B0cyksICYjMzQ7dGVzdF9ydW5fcHJvYmUmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O3Byb2JlX3JldCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEocmVhZF9jb3VudGVyKHNrZWwsIDIpLCAxLCAmIzM0O3hjaGdfbm9uX251bGwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsICYjMzQ7eGNoZ19udWxsJiMzNDspOwomIzQzO291dDoKJiM0MzsJcmh0YWJfa3B0cl9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYwpAQCAtMCwwICYjNDM7MSwxMDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBLeWxpblNvZnQgQ28uLCBMdGQuICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhhdCBhIHJodGFiIHZhbHVlIHVwZGF0ZSBpc3N1ZWQgZnJvbSBhIHBlcmZfZXZlbnQgKE5NSSkgcHJvZ3JhbQomIzQzOyAqIGRvZXMgbm90IGVhZ2VybHkgZGVzdHJveSByZWZlcmVuY2VkIGtwdHJzLiByaHRhYiBtdXN0IG1hdGNoIHRoZSBoYXNoIG1hcAomIzQzOyAqIHNlbWFudGljcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhM2E4MWQyNDc2NTEgKCYjMzQ7YnBmOiBDYW5jZWwgc3BlY2lhbCBmaWVsZHMKJiM0MzsgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZSYjMzQ7KTogb25seSBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykKJiM0MzsgKiBhcmUgY2FuY2VsbGVkIG9uIHVwZGF0ZS9kZWxldGUsIHdoaWxlIGtwdHJzIHN0YXkgYXR0YWNoZWQgdG8gdGhlIHJlY3ljbGVkCiYjNDM7ICogZWxlbWVudCB1bnRpbCBpdCBpcyBldmVudHVhbGx5IGZyZWVkLgomIzQzOyAqCiYjNDM7ICogV2l0aG91dCB0aGUgZml4LCB0aGUgTk1JIHVwZGF0ZSByZWxlYXNlcyB0aGUgb2xkIGtwdHIgYW5kIHByb2JlX2VsZW0oKQomIzQzOyAqIG9ic2VydmVzIE5VTEwgaW4gdGhlIHNsb3Q7IHdpdGggdGhlIGZpeCB0aGUgb2xkIGtwdHIgaXMgaW5oZXJpdGVkIGFuZAomIzQzOyAqIHByb2JlX2VsZW0oKSBvYnNlcnZlcyBhIG5vbi1OVUxMIHBvaW50ZXIuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHZhbF90IHsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdHNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMTYpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgdmFsX3QpOwomIzQzO30gcmh0YWIgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDQpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gY291bnRlcnMgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7LyogMDogaW5pdCBvaywgMTogbm1pIHVwZGF0ZSBvaywgMjogcHJvYmUgeGNoZyBub24tTlVMTCwgMzogcHJvYmUgeGNoZyBOVUxMICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJ1bXAodTMyIGlkeCkKJiM0Mzt7CiYjNDM7CXU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtjb3VudGVycywgJmFtcDtpZHgpOwomIzQzOwomIzQzOwlpZiAodikKJiM0MzsJCSgqdikmIzQzOyYjNDM7OwomIzQzO30KJiM0MzsKJiM0MztleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cGVyZl9ldmVudCYjMzQ7KQomIzQzO2ludCBubWlfdXBkYXRlKHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmFsX3QgdmFsID0ge307CiYjNDM7CXUzMiBrZXkgPSAwOwomIzQzOwomIzQzOwlpZiAoYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO3JodGFiLCAmYW1wO2tleSwgJmFtcDt2YWwsIEJQRl9BTlkpID09IDApCiYjNDM7CQlidW1wKDEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBpbml0X2VsZW0odm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHZhbF90ICp2YWw7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKm9sZDsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtyaHRhYiwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwl0YXNrID0gYnBmX3Rhc2tfYWNxdWlyZShicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSk7CiYjNDM7CWlmICghdGFzaykKJiM0MzsJCXJldHVybiAyOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7dmFsLSZndDt0c2ssIHRhc2spOwomIzQzOwlpZiAob2xkKQomIzQzOwkJYnBmX3Rhc2tfcmVsZWFzZShvbGQpOwomIzQzOwlidW1wKDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBwcm9iZV9lbGVtKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2YWxfdCAqdmFsOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZDsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtyaHRhYiwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7dmFsLSZndDt0c2ssIE5VTEwpOwomIzQzOwlpZiAob2xkKSB7CiYjNDM7CQlicGZfdGFza19yZWxlYXNlKG9sZCk7CiYjNDM7CQlidW1wKDIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYnVtcCgzKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTg5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgQlBGIEhhc2h0YWJsZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBga2VybmVsL2JwZi9oYXNodGFiLmNgIOKAkyB0aGF0JiMzOTtzIHRoZSByZWFsLXRpbWUgaGFzaCB0YWJsZSBjb2RlLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIEkgc2VlIHRoZXkmIzM5O3JlIHJlbmFtaW5nIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHRvIGByaHRhYl9jYW5jZWxfZmllbGRzYCwgd2hpY2ggc291bmRzIGxpa2UgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgaW4gdGVybWlub2xvZ3ksIGxpa2VseSByZWZsZWN0aW5nIHRoZSBpbnRlbnQgb2YgdGhlIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzd2FwcGluZyBvdXQgYSBjYWxsIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYCBmb3IgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYC4KClRoZSBjb21tZW50IGlzIGtleSBoZXJlOiBpdCYjMzk7cyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHZhcmlvdXMgQlBGIG1hcCBmaWVsZHMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHNhZmV0eSBvZiBkb2luZyBzbyBpbiBOTUkgY29udGV4dHMuIEl0JiMzOTtzIGV4cGxpY2l0bHkgZmxhZ2dpbmcgdGhhdCBmaWVsZHMgbGlrZSB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgYXJlIG9rYXkgdG8gYmUgY2FuY2VsZWQvY2xlYW5lZCB1cCBpbiBhbiBOTUktc2FmZSBtYW5uZXIgaGVyZS4gSG93ZXZlciwgY3J1Y2lhbGx5LCBpdCBpZGVudGlmaWVzIHRoYXQgYGtwdHJgLCBgdXB0cmAsIGBsaXN0YCwgYW5kIGByYnRyZWVgIGRlc3RydWN0aW9uIG11c3QgKm5vdCogaGFwcGVuIGluIGFuIGFyYml0cmFyeSBCUEYgZXhlY3V0aW9uIGNvbnRleHQsIGVzcGVjaWFsbHkgTk1Jcy4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxvY2t1cHMgb3Igb3RoZXIgbmFzdHkgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgZXhwbGljaXRseSBsZWF2aW5nIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWQgZWxlbWVudCwga25vd2luZyBgcmh0YWJfbWVtX2R0b3IoKWAgd2lsbCB0YWtlIGNhcmUgb2YgdGhlbSBsYXRlciB3aGVuIGl0JiMzOTtzIHNhZmUuCgpTbywgdGhpcyBpcyBhIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGlzc3VlLCBzcGVjaWZpY2FsbHkgZm9yIEJQRiBtYXAgZmllbGRzLCBub3RhYmx5IGtlcm5lbCBwb2ludGVycyAoa3B0cnMpIHdpdGhpbiB0aGUgcmVhbC10aW1lIGhhc2ggdGFibGUgY29udGV4dCBhbmQgTk1Jcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGFuZCBjb21wYXJlIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gV2FpdCwgSSBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiEgVGhlIGNoYW5nZSBpcyB2ZXJ5IHRhcmdldGVkLiBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIHNwZWNpZmljYWxseSAqY2FuY2VscyogdGhvc2UgTk1JLXNhZmUgZmllbGRzIGJ1dCBkb2VzbuKAmXQgaW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgb3RoZXJzLiBUaGF0IGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiBUaGF0IG90aGVyIHN0dWZmIGlzIHRha2VuIGNhcmUgb2YgbGF0ZXIuIEFuZCB0aGV5IGFyZSBzYXlpbmcgdGhhdCBgcmh0YWJfa3B0ci5jYCBoYXMgYSB0ZXN0IHRvIHZlcmlmeSBrcHRycyBhcmUgbm90IGRlc3Ryb3llZCB0b28gc29vbi4gR29vZC4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpdHNlbGYuIEnigJlsbCBsb29rIGZvciBpdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuIEp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvZ2ljIG1ha2VzIHNlbnNlIGFuZCB0aGF0IG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUsIGNvbnRyb2xsZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNzA2LVxuaW5jbHVkZS9saW51eC9icGYuaDo3MDc6dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopO1xuaW5jbHVkZS9saW51eC9icGYuaC03MDgtXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTQ2MD1zdGF0aWMgdm9pZCBhcnJheV9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ2OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllczsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDcwOlx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhtYXAsIGFycmF5X21hcF9lbGVtX3B0cihhcnJheSwgaSkpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ3MS19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjIxPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzMi1cdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzM6XHRcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNmh0YWItXHUwMDNlbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM0LVx0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNTkyPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNjAzLVx0XHRcdC8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTYwNDpcdFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE2MDUtXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjg2OD1zdGF0aWMgdm9pZCByaHRhYl9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4ODItXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODM6XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODg0LVx0XHRcdFx0ICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODk5PXN0YXRpYyB2b2lkIHJodGFiX2ZyZWVfZWxlbSh2b2lkICpwdHIsIHZvaWQgKmFyZylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwNDpcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDUtXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFx1MDAyNnJodGFiLVx1MDAzZW1hLCBlbGVtKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTI4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1NTpcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMobWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1Ni1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDI1PXZvaWQgKl9fYnBmX2R5bnB0cl9kYXRhX3J3KGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IGxlbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMjp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzMte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxMD12b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MTEte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6ODEyOlx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMobWFwLCBvYmopO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtODEzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBNYXAgQ2xlYW51cCBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHRvIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2Agd2l0aGluIHRoZSBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgZnVuY3Rpb24uIEkgc2VlIHRoZSByZWFzb25pbmcuIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2AgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1hcCDigJMgdGltZXJzLCB3b3JrcXVldWVzLCBgdGFza193b3JrYCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBJdCYjMzk7cyBkZWxpYmVyYXRlbHkgKm5vdCogZnJlZWluZyB0aGUga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgb24gdGhlIHJlY3ljbGVkIGVsZW1lbnQuIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuCgpUaGUgY29uY2VybiBoZXJlLCBhbmQgaXQmIzM5O3MgYSB2YWxpZCBvbmUsIGlzIGF2b2lkaW5nIHVuc2FmZSBmcmVlaW5nIG9wZXJhdGlvbnMgZnJvbSBhbiBOTUkgY29udGV4dC4gV2UgYWxsIGtub3cgaG93IGRpY2V5IHRoYXQgY2FuIGJlIOKAkyBwb3RlbnRpYWwgZGVhZGxvY2tzLCBjcmFzaGVzLCB0aGUgd2hvbGUgc2hlYmFuZy4gU28sIGJ5IGxlYXZpbmcgdGhvc2UgYXR0YWNoZWQsIHRoZSByaXNrIG9mIHRyaWdnZXJpbmcgb25lIG9mIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcyBpcyBtaXRpZ2F0ZWQuIFRoZXkmIzM5O2xsIGJlIGNsZWFuZWQgdXAgbGF0ZXIgYnkgYHJodGFiX21lbV9kdG9yKClgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCBoZXJlLgoKVGhlIGltcG9ydGFudCB0YWtlYXdheSBpcyB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIG5vciBkb2VzIGl0IGFmZmVjdCBjb250cm9sIGZsb3cuIFRoZSBmaWVsZHMgYXJlIHN0aWxsIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50IGFuZCwgaW4gZWZmZWN0LCBhcmUgc2FmZS4gVGhlIHN1YnNlcXVlbnQgY2xlYW51cCBwcm9jZXNzIGhhbmRsZWQgYnkgYHJodGFiX21lbV9kdG9yYCB3aWxsIHJlc29sdmUgdGhlbSBhdCBhIGxhdGVyIHRpbWUuCgpHaXZlbiB0aGlzIGltcGxlbWVudGF0aW9uLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGVyZSBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgc3RpbGwgYmUgYWJsZSB0byBjYXB0dXJlIGFueSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBpbmFwcHJvcHJpYXRlIGZyZWVpbmcgZnJvbSBOTUkgY29udGV4dC4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpcyBwZXJmb3JtaW5nIGFzIGV4cGVjdGVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9NzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX2hhc19pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC03MDYtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcwNzp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKm9iaik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcwOC1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDI1PXZvaWQgKl9fYnBmX2R5bnB0cl9kYXRhX3J3KGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IGxlbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMjp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgbWFwIGZyZWVpbmcgbWVjaGFuaXNtIGFjdHVhbGx5IHdvcmtzIHVuZGVyIHRoZSBob29kLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIEJQRiBtYXAgYXJjaGl0ZWN0dXJlLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqaW50ZXJuYWwqIGRldGFpbHMgb2YgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIHJlbGVhc2VkIHdoZW4gYSBtYXAgaXMgY2xvc2VkIG9yIGRlc3Ryb3llZC4gSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBjb21wbGV4aXRpZXMsIHJlc291cmNlIGxlYWtzIChob3dldmVyIHVubGlrZWx5KSwgb3IgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIG1hcCB0eXBlcyBhbmQgdGhlaXIgZnJlZWluZyByb3V0aW5lcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgc3BlY2lmaWMgcGVyLW1hcC10eXBlIHN0cnVjdHVyZXMsIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFwIGJleW9uZCB0aGUgYmFzaWMga2V5LXZhbHVlIGRhdGEuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgZXNwZWNpYWxseSBpZiB0aGUgbWFwcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgcHJvZ3JhbXMgb3IgY29udGV4dHM/IExldCYjMzk7cyBnZXQgY3JhY2tpbmcgYW5kIGRpc3NlY3QgdGhpcyBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDMwOlx0fVxuNTAzMTpcdFxuNTAzMjpcdHZvaWQgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsKVxuNTAzMzpcdHtcbjUwMzQ6XHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfVElNRVIpKVxuNTAzNTpcdFx0XHRicGZfb2JqX2ZyZWVfdGltZXIobWFwLVx1MDAzZXJlY29yZCwgdmFsKTtcbjUwMzY6XHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfV09SS1FVRVVFKSlcbjUwMzc6XHRcdFx0YnBmX29ial9mcmVlX3dvcmtxdWV1ZShtYXAtXHUwMDNlcmVjb3JkLCB2YWwpO1xuNTAzODpcdFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cdTAwM2VyZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxuNTAzOTpcdFx0XHRicGZfb2JqX2ZyZWVfdGFza193b3JrKG1hcC1cdTAwM2VyZWNvcmQsIHZhbCk7XG41MDQwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgyCgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1hcCBGaWVsZCBMaWZlY3ljbGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIGlzIHNwZWNpZmljYWxseSBhYm91dCByZWZpbmluZyBob3cgd2UgaGFuZGxlIGNlcnRhaW4gQlBGIG1hcCBmaWVsZHMg4oCTIHNwZWNpZmljYWxseSB0aGUgc3BlY2lhbCBvbmVzIGxpa2Uga2VybmVsIHBvaW50ZXJzIChrcHRycyksIHVzZXIgcG9pbnRlcnMgKHVwdHJzKSwgbGlzdHMsIGFuZCByZWQtYmxhY2sgdHJlZXMgKHJidHJlZXMpIOKAkyB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIHdpdGhpbiBhbiBOTUkgY29udGV4dC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgb2xkIGNvZGUgd2FzIHRvbyBlYWdlci4gSXQgd2FzIGNhbGxpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgLCB3aGljaCBhZ2dyZXNzaXZlbHkgZGVzdHJveWVkICpldmVyeXRoaW5nKiByaWdodCBhd2F5LiBUaGlzIGNyZWF0ZWQgYSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcywgcGFydGljdWxhcmx5IGRlYWRsb2NrcyBvciBldmVuIGNyYXNoZXMsIGJlY2F1c2UgTk1JIGNvbnRleHRzIGFyZSBzZW5zaXRpdmUuCgpUaGlzIGZpeCBpcyBzbWFydDsgaXQmIzM5O3MgYSBsaWZlY3ljbGUgbWFuYWdlbWVudCBpbXByb3ZlbWVudC4gSW5zdGVhZCBvZiB0aGUgbnVjbGVhciBvcHRpb24gKGBicGZfb2JqX2ZyZWVfZmllbGRzYCksIGl0IGludHJvZHVjZXMgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoLiBUaGUgY29yZSBpcyByZXBsYWNpbmcgaXQgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIHNtYXJ0bHkgb25seSBjYW5jZWxzIGFuZCBmcmVlcyB0aGUgTk1JLXNhZmUgZmllbGRzIGxpa2UgdGltZXJzLCB3b3JrcXVldWVzLCBhbmQgdGFza193b3JrIHdpdGhpbiB0aGUgTk1JIGNvbnRleHQuIFRoZSByZXN0IG9mIHRoZSBkZXN0cnVjdGlvbiwgdGhlIG1vcmUgY29tcGxleCBmaWVsZHMgbGlrZSB0aGUgcG9pbnRlcnMsIGxpc3RzLCBhbmQgdHJlZXMsIGFyZSBub3cgZGVmZXJyZWQuIFRoZXkgd2lsbCBnZXQgdGhlaXIgcHJvcGVyIGxpZmVjeWNsZSB0cmVhdG1lbnQgZnJvbSBgcmh0YWJfbWVtX2R0b3IoKWAuIFRoaXMgYXZvaWRzIGEgcmFjZSBhbmQgbGV0cyB0aGVtIGJlIGRlc3Ryb3llZCBzYWZlbHkuCgpUaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWxsb2NhdGlvbiBidWcuIEl04oCZcyBhYm91dCBlbnN1cmluZyBjb3JyZWN0IGxvY2tpbmcgYW5kIHByb3BlciBkZXN0cnVjdGlvbiBvcmRlci4gSWYgdGhpcyBwYXRjaCAqZGlkKiBpbnRyb2R1Y2UgYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSwgTE9DS0RFUCBvciBLQVNBTiB3b3VsZCBoYXZlIGNhdWdodCBpdC4gSXQmIzM5O3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGFkZHJlc3MuIFRoZSBjaGFuZ2UgaXMgYWJvdXQgKndoZW4qIHRoaW5ncyBhcmUgZnJlZWQsIG5vdCAqaG93KiB0aGV5IGFyZSBpbml0aWFsaXplZCBvciBpZiB0aGVyZeKAmXMgYSBtZW1vcnkgbGVhay4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhlIGltcGFjdCBpcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZzsgdGhpcyBpcyBhIGNsZWFyIGZpeCBmb3IgYSBsaWZlY3ljbGUgaXNzdWUuCgpPa2F5LCBJJiMzOTttIHNhdGlzZmllZC4gSSYjMzk7bGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHNwZWNpYWwgQlBGIG1hcCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHVwdHJzLCBsaXN0cywgYW5kIHJidHJlZXMpIHdoZW4gYSBtYXAgZWxlbWVudCBpcyB1cGRhdGVkIG9yIGRlbGV0ZWQgaW4gYW4gTk1JIGNvbnRleHQuIFByZXZpb3VzbHksIGBicGZfb2JqX2ZyZWVfZmllbGRzKClgIHdhcyBjYWxsZWQsIHdoaWNoIGVhZ2VybHkgZGVzdHJveWVkIGFsbCBmaWVsZHMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5zYWZlIG9wZXJhdGlvbnMgKGxpa2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMpIGZyb20gYW4gTk1JIGNvbnRleHQuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cygpYCwgd2hpY2ggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcyAodGltZXJzLCB3b3JrcXVldWVzLCB0YXNrX3dvcmspIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIG9mIG90aGVyIGZpZWxkcyB0byBgcmh0YWJfbWVtX2R0b3IoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYW5kIGxpZmVjeWNsZSBidWcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIEtBU0FOIGlmIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGZyZWUpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBzcGVjaWFsIEJQRiBtYXAgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB1cHRycywgbGlzdHMsIGFuZCByYnRyZWVzKSB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIGluIGFuIE5NSSBjb250ZXh0LiBQcmV2aW91c2x5LCBgYnBmX29ial9mcmVlX2ZpZWxkcygpYCB3YXMgY2FsbGVkLCB3aGljaCBlYWdlcmx5IGRlc3Ryb3llZCBhbGwgZmllbGRzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuc2FmZSBvcGVyYXRpb25zIChsaWtlIGRlYWRsb2NrcyBvciBjcmFzaGVzKSBmcm9tIGFuIE5NSSBjb250ZXh0LiBUaGUgZml4IHJlcGxhY2VzIHRoaXMgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMgKHRpbWVycywgd29ya3F1ZXVlcywgdGFza193b3JrKSBhbmQgZGVmZXJzIHRoZSBkZXN0cnVjdGlvbiBvZiBvdGhlciBmaWVsZHMgdG8gYHJodGFiX21lbV9kdG9yKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE5OjU4LjM3ODk5NTkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTUyNjI5NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWVtX2R0b3JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBzcGVjaWFsIEJQRiBtYXAgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB1cHRycywgbGlzdHMsIGFuZCByYnRyZWVzKSB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIGluIGFuIE5NSSBjb250ZXh0LiBQcmV2aW91c2x5LCBgYnBmX29ial9mcmVlX2ZpZWxkcygpYCB3YXMgY2FsbGVkLCB3aGljaCBlYWdlcmx5IGRlc3Ryb3llZCBhbGwgZmllbGRzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuc2FmZSBvcGVyYXRpb25zIChsaWtlIGRlYWRsb2NrcyBvciBjcmFzaGVzKSBmcm9tIGFuIE5NSSBjb250ZXh0LiBUaGUgZml4IHJlcGxhY2VzIHRoaXMgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMgKHRpbWVycywgd29ya3F1ZXVlcywgdGFza193b3JrKSBhbmQgZGVmZXJzIHRoZSBkZXN0cnVjdGlvbiBvZiBvdGhlciBmaWVsZHMgdG8gYHJodGFiX21lbV9kdG9yKClgLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYW5kIGxpZmVjeWNsZSBidWcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIEtBU0FOIGlmIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGZyZWUpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE5OjU4LjM3OTAwMjEyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4NTk1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNmYTZhZDczN2M0NzE3YzU4NDhiMDE1MzgwYTYzNjYwMDVjY2NjMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxOTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggOWYzOTRlMWFhMmU4NS4uNzBmYTFlMWI0YjAwOCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuQEAgLTI4NjUsMTQgKzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdHJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcXG4rc3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXFxuIHtcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLVxcdTAwM2VtYXAucmVjb3JkKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0YnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi1cXHUwMDNlbWFwLnJlY29yZCxcXG4tXFx0XFx0XFx0ICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbitcXHQvKlxcbitcXHQgKiBPbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykgaGVyZS5cXG4rXFx0ICoga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGRlc3RydWN0aW9uIG11c3Qgbm90IHJ1biBmcm9tIGFyYml0cmFyeSBCUEZcXG4rXFx0ICogZXhlY3V0aW9uIGNvbnRleHRzIChlLmcuIE5NSSksIHNvIGxlYXZlIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0b1xcbitcXHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXFxuK1xcdCAqIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC4gVGhpcyBtYXRjaGVzIHRoZSBoYXNoIG1hcCBzZW1hbnRpY3NcXG4rXFx0ICogaW50cm9kdWNlZCBieSBhM2E4MWQyNDc2NTEgKFxcXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWVcXG4rXFx0ICogcmVjeWNsZVxcXCIpLlxcbitcXHQgKi9cXG4rXFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eClcXG5AQCAtMjk2NCw4ICsyOTczLDggQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcXG4gXFx0XFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFxcdTAwMjZyaHRhYi1cXHUwMDNlbWFwLCBjb3B5LCBlbGVtLCBmbGFncyk7XFxuIFxcdFxcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgY29weSk7XFxuIFxcdH1cXG4tXFx0LyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi9cXG4tXFx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcXG4rXFx0LyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovXFxuK1xcdHJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pO1xcbiBcXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIGVsZW0pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zMDI0LDEwICszMDMzLDExIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsXFxuIFxcdCAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy5cXG4gXFx0ICpcXG4gXFx0ICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvXFxuLVxcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlbSBhZnRlciB0aGUgY29weVxcbi1cXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXFxuK1xcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlIE5NSS1zYWZlIG9uZXMgYWZ0ZXJcXG4rXFx0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzOyByZWZlcmVuY2VkIGtwdHJzXFxuK1xcdCAqIHN0YXkgYXR0YWNoZWQgYW5kIGFyZSBkZXN0cm95ZWQgYnkgcmh0YWJfbWVtX2R0b3IoKS5cXG4gXFx0ICovXFxuLVxcdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XFxuK1xcdHJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OWJkY2RhOTU1NTU3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuY1xcbkBAIC0wLDAgKzEsODcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJyaHRhYl9rcHRyLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBfX3U2NCByZWFkX2NvdW50ZXIoc3RydWN0IHJodGFiX2twdHIgKnNrZWwsIHUzMiBpZHgpXFxuK3tcXG4rXFx0X191NjQgdmFsc1tsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKV07XFxuK1xcdF9fdTY0IHN1bSA9IDA7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuY291bnRlcnMpLCBcXHUwMDI2aWR4LCB2YWxzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwibG9va3VwX2NvdW50ZXJcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSsrKVxcbitcXHRcXHRzdW0gKz0gdmFsc1tpXTtcXG4rXFx0cmV0dXJuIHN1bTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHIgPSB7XFxuK1xcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbitcXHRcXHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbitcXHRcXHQuZnJlcSA9IDEsXFxuK1xcdFxcdC5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSxcXG4rXFx0XFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXFxuK1xcdH07XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XFxuK1xcdHN0cnVjdCByaHRhYl9rcHRyICpza2VsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXHRfX3U2NCB6ZXJvID0gMDtcXG4rXFx0aW50IHBtdV9mZDtcXG4rXFxuK1xcdHNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBDcmVhdGUgdGhlIGVsZW1lbnQgYW5kIHN0YXNoIGEgcmVmZXJlbmNlZCB0YXNrIGtwdHIgaW4gaXQuICovXFxuK1xcdGlmICghQVNTRVJUX09LKGJwZl9tYXBfdXBkYXRlX2VsZW0oYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5yaHRhYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZrZXksIFxcdTAwMjZ6ZXJvLCBCUEZfQU5ZKSwgXFxcImNyZWF0ZV9lbGVtXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5pbml0X2VsZW0pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dG9wdHMpLCBcXFwidGVzdF9ydW5faW5pdFxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcImluaXRfcmV0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cG11X2ZkID0gc3lzY2FsbChfX05SX3BlcmZfZXZlbnRfb3BlbiwgXFx1MDAyNmF0dHIsIC0xLCAwLCAtMSwgMCk7XFxuK1xcdGlmIChwbXVfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0c2tlbC1cXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfcGVyZl9ldmVudChza2VsLVxcdTAwM2Vwcm9ncy5ubWlfdXBkYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwbXVfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSwgXFxcImF0dGFjaF9wZXJmX2V2ZW50XFxcIikpIHtcXG4rXFx0XFx0Y2xvc2UocG11X2ZkKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIExldCB0aGUgTk1JIGhhbmRsZXIgb3ZlcndyaXRlIHRoZSBlbGVtZW50LiAqL1xcbitcXHR1c2xlZXAoMTAwMDAwKTtcXG4rXFxuK1xcdGJwZl9saW5rX19kZXN0cm95KHNrZWwtXFx1MDAzZWxpbmtzLm5taV91cGRhdGUpO1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gTlVMTDtcXG4rXFx0Y2xvc2UocG11X2ZkKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZVxcbitcXHQgKiBwYXRoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMsIG1pcnJvcmluZyBoYXNoIG1hcCBzZW1hbnRpY3MuXFxuK1xcdCAqIEJlZm9yZSB0aGUgZml4IHRoZSBrcHRyIHdhcyByZWxlYXNlZCBmcm9tIHRoZSBOTUkgY29udGV4dCBhbmQgdGhlXFxuK1xcdCAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLlxcbitcXHQgKi9cXG4rXFx0dG9wdHMucmV0dmFsID0gMDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MucHJvYmVfZWxlbSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0b3B0cyksIFxcXCJ0ZXN0X3J1bl9wcm9iZVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcInByb2JlX3JldFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsIFxcXCJ4Y2hnX25vbl9udWxsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsIFxcXCJ4Y2hnX251bGxcXFwiKTtcXG4rb3V0OlxcbitcXHRyaHRhYl9rcHRyX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmNcXG5AQCAtMCwwICsxLDEwMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqL1xcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoYXQgYSByaHRhYiB2YWx1ZSB1cGRhdGUgaXNzdWVkIGZyb20gYSBwZXJmX2V2ZW50IChOTUkpIHByb2dyYW1cXG4rICogZG9lcyBub3QgZWFnZXJseSBkZXN0cm95IHJlZmVyZW5jZWQga3B0cnMuIHJodGFiIG11c3QgbWF0Y2ggdGhlIGhhc2ggbWFwXFxuKyAqIHNlbWFudGljcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhM2E4MWQyNDc2NTEgKFxcXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkc1xcbisgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZVxcXCIpOiBvbmx5IE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKVxcbisgKiBhcmUgY2FuY2VsbGVkIG9uIHVwZGF0ZS9kZWxldGUsIHdoaWxlIGtwdHJzIHN0YXkgYXR0YWNoZWQgdG8gdGhlIHJlY3ljbGVkXFxuKyAqIGVsZW1lbnQgdW50aWwgaXQgaXMgZXZlbnR1YWxseSBmcmVlZC5cXG4rICpcXG4rICogV2l0aG91dCB0aGUgZml4LCB0aGUgTk1JIHVwZGF0ZSByZWxlYXNlcyB0aGUgb2xkIGtwdHIgYW5kIHByb2JlX2VsZW0oKVxcbisgKiBvYnNlcnZlcyBOVUxMIGluIHRoZSBzbG90OyB3aXRoIHRoZSBmaXggdGhlIG9sZCBrcHRyIGlzIGluaGVyaXRlZCBhbmRcXG4rICogcHJvYmVfZWxlbSgpIG9ic2VydmVzIGEgbm9uLU5VTEwgcG9pbnRlci5cXG4rICovXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2NoYXIgTElDRU5TRVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3QgdmFsX3Qge1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0c2s7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxNik7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7XFxuK30gcmh0YWIgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDQpO1xcbitcXHRfX3R5cGUoa2V5LCBfX3UzMik7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbit9IGNvdW50ZXJzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qIDA6IGluaXQgb2ssIDE6IG5taSB1cGRhdGUgb2ssIDI6IHByb2JlIHhjaGcgbm9uLU5VTEwsIDM6IHByb2JlIHhjaGcgTlVMTCAqL1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnVtcCh1MzIgaWR4KVxcbit7XFxuK1xcdHU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmNvdW50ZXJzLCBcXHUwMDI2aWR4KTtcXG4rXFxuK1xcdGlmICh2KVxcbitcXHRcXHQoKnYpKys7XFxuK31cXG4rXFxuK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XFxuK2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XFxuK1xcbitTRUMoXFxcInBlcmZfZXZlbnRcXFwiKVxcbitpbnQgbm1pX3VwZGF0ZShzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YSAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB2YWxfdCB2YWwgPSB7fTtcXG4rXFx0dTMyIGtleSA9IDA7XFxuK1xcbitcXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2cmh0YWIsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWwsIEJQRl9BTlkpID09IDApXFxuK1xcdFxcdGJ1bXAoMSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitpbnQgaW5pdF9lbGVtKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdmFsX3QgKnZhbDtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkO1xcbitcXHR1MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnJodGFiLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR0YXNrID0gYnBmX3Rhc2tfYWNxdWlyZShicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSk7XFxuK1xcdGlmICghdGFzaylcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXFx1MDAyNnZhbC1cXHUwMDNldHNrLCB0YXNrKTtcXG4rXFx0aWYgKG9sZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShvbGQpO1xcbitcXHRidW1wKDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IHByb2JlX2VsZW0odm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB2YWxfdCAqdmFsO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZDtcXG4rXFx0dTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZyaHRhYiwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2dmFsLVxcdTAwM2V0c2ssIE5VTEwpO1xcbitcXHRpZiAob2xkKSB7XFxuK1xcdFxcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0YnVtcCgyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YnVtcCgzKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxOTo1OC45MTgyMTQ5NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTczMDAxMzEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWVtX2R0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzZmE2YWQ3MzdjNDcxN2M1ODQ4YjAxNTM4MGE2MzY2MDA1Y2NjYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxOTo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLjcwZmExZTFiNGIwMDggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0yODY1LDE0ICsyODY1LDIzIEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXG4tXHRcdFx0XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtKVxuK3N0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXG4rXHRcdFx0XHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRpZiAoSVNfRVJSX09SX05VTEwocmh0YWItXHUwMDNlbWFwLnJlY29yZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHQgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbitcdC8qXG4rXHQgKiBPbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykgaGVyZS5cbitcdCAqIGtwdHIvdXB0ci9saXN0L3JidHJlZSBkZXN0cnVjdGlvbiBtdXN0IG5vdCBydW4gZnJvbSBhcmJpdHJhcnkgQlBGXG4rXHQgKiBleGVjdXRpb24gY29udGV4dHMgKGUuZy4gTk1JKSwgc28gbGVhdmUgdGhvc2UgZmllbGRzIGF0dGFjaGVkIHRvXG4rXHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXG4rXHQgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzXG4rXHQgKiBpbnRyb2R1Y2VkIGJ5IGEzYTgxZDI0NzY1MSAoXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWVcbitcdCAqIHJlY3ljbGVcIikuXG4rXHQgKi9cbitcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNnJodGFiLVx1MDAzZW1hcCxcbitcdFx0XHRcdCAgICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuQEAgLTI5NjQsOCArMjk3Myw4IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XG4gXHRcdHJodGFiX3JlYWRfZWxlbV92YWx1ZShcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIGNvcHksIGVsZW0sIGZsYWdzKTtcbiBcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSk7XG4gXHR9XG4tXHQvKiBSZWxlYXNlIGludGVybmFsIHN0cnVjdHM6IGtwdHIsIGJwZl90aW1lciwgdGFza193b3JrLCB3cSAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbitcdC8qIENhbmNlbCBOTUktc2FmZSBmaWVsZHM7IGZ1bGwgZGVzdHJ1Y3Rpb24gaGFwcGVucyBpbiByaHRhYl9tZW1fZHRvciAqL1xuK1x0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4gXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFx1MDAyNnJodGFiLVx1MDAzZW1hLCBlbGVtKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDI0LDEwICszMDMzLDExIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsXG4gXHQgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuXG4gXHQgKlxuIFx0ICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvXG4tXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHlcbi1cdCAqIHRvIG1hdGNoIGFycmF5bWFwJ3MgdXBkYXRlIHNlbWFudGljcy5cbitcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlIE5NSS1zYWZlIG9uZXMgYWZ0ZXJcbitcdCAqIHRoZSBjb3B5IHRvIG1hdGNoIGFycmF5bWFwJ3MgdXBkYXRlIHNlbWFudGljczsgcmVmZXJlbmNlZCBrcHRyc1xuK1x0ICogc3RheSBhdHRhY2hlZCBhbmQgYXJlIGRlc3Ryb3llZCBieSByaHRhYl9tZW1fZHRvcigpLlxuIFx0ICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzliZGNkYTk1NTU1N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICsxLDg3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwicmh0YWJfa3B0ci5za2VsLmhcIlxuK1xuK3N0YXRpYyBfX3U2NCByZWFkX2NvdW50ZXIoc3RydWN0IHJodGFiX2twdHIgKnNrZWwsIHUzMiBpZHgpXG4re1xuK1x0X191NjQgdmFsc1tsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKV07XG4rXHRfX3U2NCBzdW0gPSAwO1xuK1x0aW50IGksIGVycjtcbitcbitcdGVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLmNvdW50ZXJzKSwgXHUwMDI2aWR4LCB2YWxzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb29rdXBfY291bnRlclwiKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSsrKVxuK1x0XHRzdW0gKz0gdmFsc1tpXTtcbitcdHJldHVybiBzdW07XG4rfVxuK1xuK3ZvaWQgdGVzdF9yaHRhYl9rcHRyKHZvaWQpXG4re1xuK1x0c3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyID0ge1xuK1x0XHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbitcdFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbitcdFx0LmZyZXEgPSAxLFxuK1x0XHQuc2FtcGxlX2ZyZXEgPSByZWFkX3BlcmZfbWF4X3NhbXBsZV9mcmVxKCksXG4rXHRcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLFxuK1x0fTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XG4rXHRzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXHRfX3U2NCB6ZXJvID0gMDtcbitcdGludCBwbXVfZmQ7XG4rXG4rXHRza2VsID0gcmh0YWJfa3B0cl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogQ3JlYXRlIHRoZSBlbGVtZW50IGFuZCBzdGFzaCBhIHJlZmVyZW5jZWQgdGFzayBrcHRyIGluIGl0LiAqL1xuK1x0aWYgKCFBU1NFUlRfT0soYnBmX21hcF91cGRhdGVfZWxlbShicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMucmh0YWIpLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZrZXksIFx1MDAyNnplcm8sIEJQRl9BTlkpLCBcImNyZWF0ZV9lbGVtXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuaW5pdF9lbGVtKSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcInRlc3RfcnVuX2luaXRcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCJpbml0X3JldFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwbXVfZmQgPSBzeXNjYWxsKF9fTlJfcGVyZl9ldmVudF9vcGVuLCBcdTAwMjZhdHRyLCAtMSwgMCwgLTEsIDApO1xuK1x0aWYgKHBtdV9mZCBcdTAwM2MgMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0c2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9wZXJmX2V2ZW50KHNrZWwtXHUwMDNlcHJvZ3Mubm1pX3VwZGF0ZSxcbitcdFx0XHRcdFx0XHRcdFx0cG11X2ZkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUsIFwiYXR0YWNoX3BlcmZfZXZlbnRcIikpIHtcbitcdFx0Y2xvc2UocG11X2ZkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBMZXQgdGhlIE5NSSBoYW5kbGVyIG92ZXJ3cml0ZSB0aGUgZWxlbWVudC4gKi9cbitcdHVzbGVlcCgxMDAwMDApO1xuK1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3koc2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlKTtcbitcdHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSA9IE5VTEw7XG4rXHRjbG9zZShwbXVfZmQpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZVxuK1x0ICogcGF0aCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzLCBtaXJyb3JpbmcgaGFzaCBtYXAgc2VtYW50aWNzLlxuK1x0ICogQmVmb3JlIHRoZSBmaXggdGhlIGtwdHIgd2FzIHJlbGVhc2VkIGZyb20gdGhlIE5NSSBjb250ZXh0IGFuZCB0aGVcbitcdCAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLlxuK1x0ICovXG4rXHR0b3B0cy5yZXR2YWwgPSAwO1xuK1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9iZV9lbGVtKSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcInRlc3RfcnVuX3Byb2JlXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIDAsIFwicHJvYmVfcmV0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsIFwieGNoZ19ub25fbnVsbFwiKTtcbitcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsIFwieGNoZ19udWxsXCIpO1xuK291dDpcbitcdHJodGFiX2twdHJfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjU4MDBhMmUyNGU2M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuY1xuQEAgLTAsMCArMSwxMDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBLeWxpblNvZnQgQ28uLCBMdGQuICovXG4rXG4rLypcbisgKiBWZXJpZnkgdGhhdCBhIHJodGFiIHZhbHVlIHVwZGF0ZSBpc3N1ZWQgZnJvbSBhIHBlcmZfZXZlbnQgKE5NSSkgcHJvZ3JhbVxuKyAqIGRvZXMgbm90IGVhZ2VybHkgZGVzdHJveSByZWZlcmVuY2VkIGtwdHJzLiByaHRhYiBtdXN0IG1hdGNoIHRoZSBoYXNoIG1hcFxuKyAqIHNlbWFudGljcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhM2E4MWQyNDc2NTEgKFwiYnBmOiBDYW5jZWwgc3BlY2lhbCBmaWVsZHNcbisgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZVwiKTogb25seSBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaylcbisgKiBhcmUgY2FuY2VsbGVkIG9uIHVwZGF0ZS9kZWxldGUsIHdoaWxlIGtwdHJzIHN0YXkgYXR0YWNoZWQgdG8gdGhlIHJlY3ljbGVkXG4rICogZWxlbWVudCB1bnRpbCBpdCBpcyBldmVudHVhbGx5IGZyZWVkLlxuKyAqXG4rICogV2l0aG91dCB0aGUgZml4LCB0aGUgTk1JIHVwZGF0ZSByZWxlYXNlcyB0aGUgb2xkIGtwdHIgYW5kIHByb2JlX2VsZW0oKVxuKyAqIG9ic2VydmVzIE5VTEwgaW4gdGhlIHNsb3Q7IHdpdGggdGhlIGZpeCB0aGUgb2xkIGtwdHIgaXMgaW5oZXJpdGVkIGFuZFxuKyAqIHByb2JlX2VsZW0oKSBvYnNlcnZlcyBhIG5vbi1OVUxMIHBvaW50ZXIuXG4rICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitjaGFyIExJQ0VOU0VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdHJ1Y3QgdmFsX3Qge1xuK1x0c3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdHNrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxNik7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4rXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7XG4rfSByaHRhYiBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA0KTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30gY291bnRlcnMgU0VDKFwiLm1hcHNcIik7XG4rXG4rLyogMDogaW5pdCBvaywgMTogbm1pIHVwZGF0ZSBvaywgMjogcHJvYmUgeGNoZyBub24tTlVMTCwgMzogcHJvYmUgeGNoZyBOVUxMICovXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJ1bXAodTMyIGlkeClcbit7XG4rXHR1NjQgKnYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmNvdW50ZXJzLCBcdTAwMjZpZHgpO1xuK1xuK1x0aWYgKHYpXG4rXHRcdCgqdikrKztcbit9XG4rXG4rZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbitleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK1xuK1NFQyhcInBlcmZfZXZlbnRcIilcbitpbnQgbm1pX3VwZGF0ZShzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YSAqY3R4KVxuK3tcbitcdHN0cnVjdCB2YWxfdCB2YWwgPSB7fTtcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0aWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCBCUEZfQU5ZKSA9PSAwKVxuK1x0XHRidW1wKDEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgaW5pdF9lbGVtKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdmFsX3QgKnZhbDtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKm9sZDtcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZyaHRhYiwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcdHRhc2sgPSBicGZfdGFza19hY3F1aXJlKGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpKTtcbitcdGlmICghdGFzaylcbitcdFx0cmV0dXJuIDI7XG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnZhbC1cdTAwM2V0c2ssIHRhc2spO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShvbGQpO1xuK1x0YnVtcCgwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IHByb2JlX2VsZW0odm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB2YWxfdCAqdmFsO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpvbGQ7XG4rXHR1MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnZhbC1cdTAwM2V0c2ssIE5VTEwpO1xuK1x0aWYgKG9sZCkge1xuK1x0XHRicGZfdGFza19yZWxlYXNlKG9sZCk7XG4rXHRcdGJ1bXAoMik7XG4rXHR9IGVsc2Uge1xuK1x0XHRidW1wKDMpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTk6NTguOTE4MjE2Mzg5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NzAwNTM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJIQVNIIE1hcHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLCBqdXN0IGEgcmVuYW1lOiBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCB0byBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AuIEJ1dCB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIE5vdywgaW5zdGVhZCBvZiB1c2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2AsIHdlJ3JlIGNhbGxpbmcgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpbiB0aGUgcmVuYW1lZCBmdW5jdGlvbi5cblxuVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoZSAqd2h5Kjogd2UncmUgb25seSBjYW5jZWxsaW5nIFwiTk1JLXNhZmVcIiBmaWVsZHMgbGlrZSB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgaW4gdGhpcyBjb250ZXh0LiBUaGUga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGRlc3RydWN0aW9uIGlzIHRvbyByaXNreSB0byBydW4gaW4gYXJiaXRyYXJ5IEJQRiBjb250ZXh0cyAoTk1JLCBmb3IgZXhhbXBsZSkuIFRob3NlIGZpZWxkcyBhcmUgYmVpbmcgbGVmdCBhdHRhY2hlZCBhbmQgaGFuZGxlZCBpbiBgcmh0YWJfbWVtX2R0b3IoKWAgbGF0ZXIuIFRoYXQncyBhIGtleSBkZXRhaWwhIFNvLCBmdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGZvciBgQlBGX01BUF9UWVBFX1JIQVNIYCwgd2hpY2ggdGhpcyBjb2RlIGlzIGNsZWFybHkgdGllZCB0by5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gYEJQRl9NQVBfVFlQRV9SSEFTSGAgaXMgd2hhdCBJJ20gZm9jdXNlZCBvbiBoZXJlLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYSByZWNlbnQgYWRkaXRpb24gb3IgaWYgaXQncyBiZWVuIGFyb3VuZCBmb3IgYSB3aGlsZS4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIGhpc3Rvcnkgd2l0aGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjA0LjE5NTIyNTcyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE4ODcxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9SSEFTSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXFx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XFx0QlBGX01BUF9UWVBFX1JIQVNILFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVxcdF9fTUFYX0JQRl9NQVBfVFlQRVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXFx0XFx0ICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcXHRcXHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVxcdFxcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjYtXFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjEyNzpcXHRcXHQgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cXHRcXHRnb3RvIHB1dF9tYXA7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjQzPXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODctXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjg4OlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODktXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzAyLVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMzpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzA0LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNC1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMTU6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzNzA9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MDgtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MDk6XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MTAtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDgwLVxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ4MTpcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDgyLVxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjIwNT1zdGF0aWMgaW50IG1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2NC1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMjY1OlxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2Ni1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzQ1PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzkzLVxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Nzk0OlxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5NS1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVxcdFtCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWV1cXHRcXHQ9IFxcXCJpbnNuX2FycmF5XFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcXHRbQlBGX01BUF9UWVBFX1JIQVNIXVxcdFxcdFxcdD0gXFxcInJoYXNoXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMC19O1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cXHRcXHRicmVhaztcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzEzLVxcdFxcdG9wdHMubWFwX2ZsYWdzXFx0PSBCUEZfRl9OT19QUkVBTExPQztcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVxcdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLCBtYXBfdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUyLVxcdFxcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXFx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcXHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXFx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoxNjg6XFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cXHRcXHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTIxMT1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcXHRoYXNobWFwX2xvb2t1cF9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0xNTU9c3RhdGljIHZvaWQgaHRhYl9tZW1fc2V0dXBfaW1wbChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXFx0YnBmX21hcF9fc2V0X21heF9lbnRyaWVzKG1hcCwgTUFYKDgxOTIsIDY0ICogZW52Lm5yX2NwdXMpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1OlxcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MjMxOlxcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XFx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXFxcInJoYXNoX2V4dHJhXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUzLVxcdFxcdFxcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcXHUwMDI2b3B0cyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jOjk6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yMj1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjIzOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTI0LVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmM9MjU9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jOjI2OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMtMjctXFx0X191aW50KG1heF9lbnRyaWVzLCAxNik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjA2LjYxNDEwMjM4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDM4NjgxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIE1hcCBNb2RpZmljYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgdGhpcyBgQlBGX01BUF9UWVBFX1JIQVNIYCB0eXBlLCBhbmQgYSBwYXRjaCB0aGF0J3MgcGxheWluZyB3aXRoIGl0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGNoYW5naW5nIGByaHRhYl9jYW5jZWxfZmllbGRzYCB0byB1c2UgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpbnN0ZWFkIG9mIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCBpdCdzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuIERlZmluaXRlbHkgd29ydGggbG9va2luZyBhdCB0aGlzIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSDigJMgdGhpcyBzY3JlYW1zIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCBtZSBzZWXigKYgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGZsb3cuIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdG8gc2VlIHdoZXJlIGl0IGlzIHVzZWQuIFJpZ2h0LCBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgaXMgY2FsbGVkIGJ5IGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gSG9sZCBvbuKApiBpc24ndCBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgYSAqc3RhdGljKiBmdW5jdGlvbj8gTWVhbmluZyBpdCBpc24ndCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHk/IE9rYXksIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIFRoYXQgbWVhbiBpdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseS4gU28gdGhlIGNhbGxlcnMgKmFyZSogdGhlIHR3byB0aGF0IGFyZSBub3Qgc3RhdGljLiBPa2F5LCBsZXQncyB2ZXJpZnkg4oCTIGFyZSAqdGhleSogc3RhdGljPyBJZiB0aGV5IGFyZW4ndCwgdGhlbiB3ZSBoYXZlIGEgcGF0aCB0byBmdXp6LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjExLjYxNzk3MjMzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU5NzMzMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodGFiX2RlbGV0ZV9lbGVtfHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOD1zdGF0aWMgdm9pZCByaHRhYl9yZWFkX2VsZW1fdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqZHN0LCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NDgtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0OTpzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUwLVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4Mz1zdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk5My1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk0OlxcdHJldHVybiByaHRhYl9kZWxldGVfZWxlbShyaHRhYiwgZWxlbSwgTlVMTCwgMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk5NS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTk3PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxMi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDEzOlxcdHJldHVybiByaHRhYl9kZWxldGVfZWxlbShyaHRhYiwgZWxlbSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDE0LX1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDE1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMTY6c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxNy1cXHRcXHRcXHRcXHQgICAgICB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA0ND1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNTctXFx0aWYgKGVsZW0pXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA1ODpcXHRcXHRyZXR1cm4gcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhtYXAsIGVsZW0sIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNTktXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDk3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwOTg6XFx0XFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCB0bXAsIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwOTktXFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI1NT1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzU4LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0b3RhbDsgaSsrKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNTk6XFx0XFx0XFx0cmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGRlbF9lbGVtc1tpXSwgTlVMTCwgMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM2MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjE0LjU3NzcxNTE5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTMwMjQ4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIGFyZSBteSBpbW1lZGlhdGUgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgUmVkLUJsYWNrIFRyZWUgTWFwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUga2V5IG1hcCBvcGVyYXRpb25zIGV4cG9zZWQgYnkgdGhlIFJlZC1CbGFjayBUcmVlIG1hcC4gSXQgc2VlbXMgbGlrZSBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGFyZSB0aGUgcHJpbWFyeSwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIG1hbmlwdWxhdGluZyB0aGUgbWFwLiBUaGF0IGxhc3Qgb25lIHdpdGggdGhlIGRvdWJsZSB1bmRlcnNjb3JlIGlzIGEgYml0IGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IGludGVybmFsIG9yIGJhdGNoLW9yaWVudGVkIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhlc2Ugc2VlbSB0byBiZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cblRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGByaHRhYl9tYXBfb3BzYC4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgdXAsIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBSZWQtQmxhY2sgVHJlZSBpbXBsZW1lbnRhdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWFwIG9wZXJhdGlvbnMgY29udGV4dC4gS25vd2luZyB0aGUgYHJodGFiX21hcF9vcHNgIHN0cnVjdCBkZWZpbml0aW9uIHdpbGwgdGVsbCBtZSBob3cgZXZlcnl0aGluZyBpcyBib3VuZCB0b2dldGhlci4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCB0byBiZWdpbiB0byBmdWxseSBncmFzcCBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjIzLjgzMDc0MjIwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgzNjc0OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodGFiX21hcF9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjQ9QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI1OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjYtXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDoyNi4wMTQ0MjI4MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk4NDIyNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGByaHRhYl9tYXBfb3BzYCBNYXAgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgbWFwIG9wZXJhdGlvbnMgZm9yIGByaHRhYl9tYXBfb3BzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1hcHMgYXJlIGFjdHVhbGx5IGZ1bmN0aW9uaW5nIHVuZGVyIHRoZSBob29kLiBXaGF0IGFyZSB0aGUga2V5IG9wZXJhdGlvbnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlYWRzLCB3cml0ZXMsIGluc2VydHMsIGRlbGV0ZXMsIHVwZGF0ZXMsIGxvb2t1cHMg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgaW50ZXJhY3Rpb24/IEnigJltIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGVmZmljaWVuY3k7IGhvdyBhcmUgdGhlc2UgaW1wbGVtZW50ZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyBjYWxscyBmb3IgYSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSB3aGVyZSB0aGVzZSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gc2VlIHRoZSBwcmVjaXNlIGltcGxlbWVudGF0aW9ucywgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCB0aGUgYWxnb3JpdGhtcyBpbnZvbHZlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIOKAkyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIHRoZXNlIG9wZXJhdGlvbnMgZGVmaW5lcyB0aGUgcHJhY3RpY2FsIGNhcGFiaWxpdGllcyBvZiB0aGUgZW50aXJlIGByaHRhYmAgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGVhY2ggb3BlcmF0aW9uLiBBcmUgdGhleSB0aHJlYWQtc2FmZT8gRG8gdGhleSB1dGlsaXplIGFueSBsb2NraW5nIG1lY2hhbmlzbXM/IFdoYXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnM/IFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBhIHN5c3RlbSB3aXRoIGNvbmN1cnJlbmN5PyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgdHJhZGUtb2ZmcyBoZXJlLCBnaXZlbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgdGhpcyBsaWJyYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjI5LjUxMjg0ODQ1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNjIxNjMyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTI0PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyNTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI2LVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjA6MzEuNjI5MDgyMTM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTUyOTE5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBCUEYgaGFzaCB0YWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIHRoZSBga2VybmVsL2JwZi9oYXNodGFiLmNgIGZpbGUuIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAzNTI1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGhhc2ggdGFibGUncyB3b3JraW5ncy4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygc29tZXRoaW5nIHNwZWNpZmljIGF0IHRoYXQgbG9jYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDozNS4yNDQzNzY4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MjA6XFx0XFx0LmZpbmlfc2VxX3ByaXZhdGUgPSBicGZfaXRlcl9maW5pX3JoYXNoX21hcCxcXG4zNTIxOlxcdFxcdC5zZXFfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8pLFxcbjM1MjI6XFx0fTtcXG4zNTIzOlxcdFxcbjM1MjQ6XFx0QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcXG4zNTI1OlxcdGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbjM1MjY6XFx0XFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbjM1Mjc6XFx0XFx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcXG4zNTI4OlxcdFxcdC5tYXBfYWxsb2MgPSByaHRhYl9tYXBfYWxsb2MsXFxuMzUyOTpcXHRcXHQubWFwX2ZyZWUgPSByaHRhYl9tYXBfZnJlZSxcXG4zNTMwOlxcdFxcdC5tYXBfZ2V0X25leHRfa2V5ID0gcmh0YWJfbWFwX2dldF9uZXh0X2tleSxcXG4zNTMxOlxcdFxcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcXG4zNTMyOlxcdFxcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcXG4zNTMzOlxcdFxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxuMzUzNDpcXHRcXHQubWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSxcXG4zNTM1OlxcdFxcdC5tYXBfdXBkYXRlX2VsZW0gPSByaHRhYl9tYXBfdXBkYXRlX2VsZW0sXFxuMzUzNjpcXHRcXHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxcbjM1Mzc6XFx0XFx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXFxuMzUzODpcXHRcXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG4zNTM5OlxcdFxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxuMzU0MDpcXHRcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG4zNTQxOlxcdFxcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcXG4zNTQyOlxcdFxcdEJBVENIX09QUyhyaHRhYiksXFxuMzU0MzpcXHRcXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcXG4zNTQ0OlxcdFxcdC5pdGVyX3NlcV9pbmZvID0gXFx1MDAyNnJoYXNoX2l0ZXJfc2VxX2luZm8sXFxuMzU0NTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDozNS4yNDQ1MjQ2MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyMjg4NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2ggb24gdGhlIEhhc2h0YWJsZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zIGl0IHRvdWNoZXMuIEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kaWZpZXMgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGFueSBiYXRjaCBvcGVyYXRpb25zLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHJldmVhbHMgc29tZXRoaW5nIEkgaW5pdGlhbGx5IG1pc3NlZDogaXQgYWxzbyBtb2RpZmllcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AsIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLiBOb3csIGNvbnNpZGVyaW5nIHRoZSBjYWxsIGNoYWluLCBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgaXMgdXNlZCBieSB0aGUgaW5pdGlhbCBmb2N1cyBmdW5jdGlvbnMgSSBtZW50aW9uZWQsIHNwZWNpZmljYWxseSBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGFuZCBhbHNvIGJ5IGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIE9rYXksIHNvIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYW5kIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIGZvciBub3cuXG5cblRoZW4sIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGdvdGNoYXMuIFJpZ2h0LCB0aGUgcGF0Y2ggaXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIGVuc3VyZSBCUEYgbWFwcyBhcmUgZW5hYmxlZCwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDo0MS4xNjc0MTMxOTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY0MzUxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjA6NDMuNTIzODUyMDg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTA4NjU2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBoZXJlIGlzIG9uIGBCUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgcHJpbWFyeSBzeXN0ZW0gY2FsbCB3ZSdyZSBkZWFsaW5nIHdpdGgsIHNvIGl0J3MgdGhlIGFuY2hvciBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgc3VzcGVjdCB3ZeKAmXJlIGRlYWxpbmcgd2l0aCBtb3JlIHRoYW4ganVzdCBhIHNpbmdsZSBmdW5jdGlvbiwgdGhlcmVmb3JlLCBJIHNob3VsZCBhbmFseXplIHRoZSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHN5c3RlbSBjYWxsLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlci4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyBmb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAuIEknbSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBudWFuY2VzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcgaW4gdGhlIHJoYXNoIG1hcCB0eXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjQ2LjgzNDcyMDgyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjczOTEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfTUFQX1RZUEVfUkhBU0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTAwPXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX21hcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVxcdFxcdCBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjgtXFx0XFx0Z290byBwdXRfbWFwO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTI0Mz1zdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjg3LVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI4ODpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjg5LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMi1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMDM6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwNC1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfTFJVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMzE1OlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTYtXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzcwPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDA4LVxcdCAgICBhdHRyLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJFTkEgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDA5OlxcdCAgICBhdHRyLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDEwLVxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ4MC1cXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0ODE6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ4Mi1cXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSDpcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMDU9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIyNjQtXFx0XFx0ICAgbWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI2NTpcXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIyNjYtXFx0XFx0ICAgbWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzc0NT1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5My1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzc5NDpcXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3OTUtXFx0XFx0Y2FzZSBCUEZfTUFQX1RZUEVfTFJVX0hBU0g6XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA0OS1cXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcXHRCUEZfTUFQX1RZUEVfUkhBU0gsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXFx0X19NQVhfQlBGX01BUF9UWVBFXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1Ny1cXHRcXHQgKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxNTU4OlxcdFxcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTktXFx0XFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE5OC1cXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXFx0XFx0PSBcXFwiaW5zbl9hcnJheVxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxOTk6XFx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cXHRcXHRcXHQ9IFxcXCJyaGFzaFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zMTEtXFx0XFx0YnJlYWs7XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MzEyOlxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cXHRcXHRvcHRzLm1hcF9mbGFnc1xcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9Mzc9c3RhdGljIHZvaWQgaGFzaG1hcF9mdWxsX3VwZGF0ZV9zZXR1cChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01MC1cXHRicGZfbWFwX19zZXRfdHlwZShjdHguc2tlbC1cXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo1MTpcXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTgwPXN0YXRpYyB2b2lkIHJoYXNoX3NldHVwKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM6ODI6XFx0aGFzaG1hcF9mdWxsX3VwZGF0ZV9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTE1MT1zdGF0aWMgdm9pZCBoYXNobWFwX2xvb2t1cF9zZXR1cChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY3LVxcdG1hcF9mbGFncyA9IGFyZ3MubWFwX2ZsYWdzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4OlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjktXFx0XFx0bWFwX2ZsYWdzIHw9IEJQRl9GX05PX1BSRUFMTE9DO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxMi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoyMTM6XFx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxNC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg0LVxcdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjE4NTpcXHRpZiAobWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2IGFyZ3MucHJlYWxsb2NhdGVkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODYtXFx0XFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhtYXAsIGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFxcdTAwMjYgfkJQRl9GX05PX1BSRUFMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0yMjk9c3RhdGljIHZvaWQgcmh0YWJfbWVtX3NldHVwKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTIzMC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcXHRodGFiX21lbV9zZXR1cF9pbXBsKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTIzMi19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jPTQ2PXN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jOjUyOlxcdHJldHVybiBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfUkhBU0gsIFxcXCJyaGFzaF9leHRyYVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01My1cXHRcXHRcXHQgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgXFx1MDAyNm9wdHMpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYz04PXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmMtMTAtXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM9MjI9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzoyMzpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYy0yNC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jPTI1PXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYzoyNjpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jLTI3LVxcdF9fdWludChtYXhfZW50cmllcywgMTYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDo0OS4xNDE0NjUxMjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNDQxNTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIHRoZSBCUEYgTWFwIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBpcyBhY3R1YWxseSBhIHN0YW5kYXJkIEJQRiBtYXAgdHlwZS4gSXQncyBkZWZpbmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgQlBGIG1hcHMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24g4oCTIGlmIHRoYXQncyBlbmFibGVkLCB0aGVuIHRoZSByZWxldmFudCBjb2RlIGZvciB0aGVzZSBoYXNoIG1hcHMgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuXG5cbkknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbWUgaW50byBwbGF5IGhlcmUuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCBjb250cm9scyB0aGlzIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hlcmUgZWxzZSB0byBsb29rIGlmIEkgbmVlZCB0byBhZGp1c3QgaG93IHRoaXMgY29tcG9uZW50IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgzNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjUyLjU1NTg4MzQ2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NTA2MjI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNodGFiLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlPTE3PXNlbGludXgteSA6PSBhdmMubyBob29rcy5vIHNlbGludXhmcy5vIG5ldGxpbmsubyBubG1zZ3RhYi5vIG5ldGlmLm8gXFxcXFxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTgtXFx0ICAgICBuZXRub2RlLm8gbmV0cG9ydC5vIHN0YXR1cy5vIGluaXRjYWxscy5vIFxcXFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlOjE5OlxcdCAgICAgc3MvZWJpdG1hcC5vIHNzL2hhc2h0YWIubyBzcy9zeW10YWIubyBzcy9zaWR0YWIubyBzcy9hdnRhYi5vIFxcXFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlLTIwLVxcdCAgICAgc3MvcG9saWN5ZGIubyBzcy9zZXJ2aWNlcy5vIHNzL2NvbmRpdGlvbmFsLm8gc3MvbWxzLm8gc3MvY29udGV4dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjU1LjA0MDk1NDg1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQ5NzY2MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBDb25zaWRlcmF0aW9ucyBmb3IgdGhlIFJlZC1CbGFjayBUcmVlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHByZXR0eSBjZXJ0YWluIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBvbmx5IGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGhlcmUuIE5vdywgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYHJodGFiX2NhbmNlbF9maWVsZHNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGNhbGxlZCBzcGVjaWZpY2FsbHkgYnkgYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZnVuY3Rpb25zLiBMZXQgbWUgcXVpY2tseSBsaXN0IHRoZSBub24tc3RhdGljIHB1YmxpYyBmdW5jdGlvbnMuIEFoYSwgaGVyZSB0aGV5IGFyZTogYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC5cblxuV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgPyBJdCAqaXMqIGEgc3RhdGljIG9uZSwgc28gSSBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgc3BlY2lmaWMgZGV0YWlscyB0aGVyZS4uLiB0aG91Z2ggdGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIGJhdGNoIG9wZXJhdGlvbnMuIExldCdzIG1ha2UgYSBjb21wbGV0ZSBsaXN0IGhlcmUuIFRoZSBiYXRjaCBvcGVyYXRpb25zIGFyZTogYHJodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYHJodGFiX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYHJodGFiX21hcF9kZWxldGVfYmF0Y2hgLiBPa2F5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIGVhY2ggb2YgdGhlc2UgdG8gYXZvaWQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0OTcsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjA6NTkuOTkwNzI0NTIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA2NDM5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodGFiX21hcF9sb29rdXBfYmF0Y2h8cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNofHJodGFiX21hcF91cGRhdGVfYmF0Y2h8cmh0YWJfbWFwX2RlbGV0ZV9iYXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjU1OnN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjU2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5MTpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5Mi1cXHRcXHRcXHRcXHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5My17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NDpcXHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTUtfVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTYtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NzpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk4LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk5LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDAwOlxcdHJldHVybiBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDAxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MDIuNzk3MTcwODY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjA1MDQ0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZSwgd2l0aCBhICoqYm9sZGVkIGhlYWRlcioqOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHJodGFiYCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgYHJodGFiYCBjb2RlLCBhbmQgc29tZXRoaW5nJ3MgaW1tZWRpYXRlbHkgc3RpY2tpbmcgb3V0LiBJdCBzZWVtcyBsaWtlIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgSSdtIHNlZWluZyBkZWZpbmVkIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgY2xhc3NpYyBlbmNhcHN1bGF0aW9uIHRlY2huaXF1ZSwgYW5kIGl0IHR5cGljYWxseSBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSG1tLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCB0aGUgb25seSBleGNlcHRpb25zIHdvdWxkIGJlIHRoZSBmdW5jdGlvbnMgZXhwb3NlZCB0aHJvdWdoIGByaHRhYl9tYXBfb3BzYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGV4dGVybmFsIGludGVyZmFjZS4gQnV0IGhhbmcgb24uLi4gdGhlcmUncyBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYC4gSXNuJ3QgdGhhdCBhbHNvIGRlY2xhcmVkIHN0YXRpYz8gTmVlZCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGFuZCB2ZXJpZnkgaWYgbXkgb2JzZXJ2YXRpb24gYWJvdXQgaXQgYmVpbmcgc3RhdGljIGlzIGluZGVlZCBjb3JyZWN0LiBJZiBpdCBpcyBzdGF0aWMsIHRoYXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB1cGRhdGVzIGFyZSBoYW5kbGVkIG91dHNpZGUgdGhlIG1haW4gbWFwIG9wZXJhdGlvbnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjA2LjUxNzY3NzUwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzQwNTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MzAxNj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA0NDpzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDQ1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTM0LVxcdC5tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSA9IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MzU6XFx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTM2LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjA4LjkzMTA4ODg2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODUzMTk3Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTWFwIEVudHJ5cG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWFwIG9wZXJhdGlvbnMsIGFuZCB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IHRoZXkncmUgYWxsICpzdGF0aWMqLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIGlzIG5vdCBpZGVhbCBmb3IgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbWFwIG9wZXJhdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgaXMgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIHdvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgd2hpY2ggY29tcGxpY2F0ZXMgdHJhY2luZyBhbmQgZGVidWdnaW5nLlxuXG5Ob3csIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCAqaXMqIG5vbi1zdGF0aWMgKGl0J3MgYSBzeXNjYWxsIGVudHJ5IHBvaW50ISksIGJ1dCB0aGF0J3MgdG9vIGdlbmVyaWMgZm9yIHdoYXQgSSBuZWVkLiBJIG5lZWQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIgbWFwIHR5cGUgSSdtIHdvcmtpbmcgd2l0aC4gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBpZiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBpbmxpbmVkLiBBaCwgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHJodGFiX21hcF9vcHNgLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICpjYW5ub3QqIGJlIGlubGluZWQhIEV4Y2VsbGVudCEgVGhhdCdzIHByZWNpc2VseSB3aGF0IEkgbmVlZC5cblxuVGhlcmVmb3JlLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBUaGV5IGFyZSBub3QgaW5saW5lZCwgYW5kIHRoZXkgcHJvdmlkZSB0aGUgc3BlY2lmaWMgbWFwIG9wZXJhdGlvbnMgSSByZXF1aXJlLiBUaGVzZSBhcmUgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF04oCZcyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgaW4gYSBzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBteSB3b3JrLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBJIGRvbid0IHdhbnQgdG8gb3Zlcmxvb2sgYW55IG90aGVyIHBvc3NpYmxlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMToxNC43ODQyODkxOTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODIzMjAyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmh0YWJfbWFwX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyND1CVEZfSURfTElTVF9TSU5HTEUocmh0YWJfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3JodGFiKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjU6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyNi1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjE3LjI2NjYxNDY0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyMzc3NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcy5cblxuKipOYXZpZ2F0aW5nIHRoZSBgcmh0YWJfbWFwYCBTdHJ1Y3R1cmUqKlxuXG5SaWdodCwgc28gdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzbid0IHN0YXRpYywgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBmdW5jdGlvbnMgd2l0aGluIGl0LCB0aGluZ3MgbGlrZSBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCB0aG9zZSAqYXJlKiBzdGF0aWMuIFRoZSBmYWN0IHRoYXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyB0YWtlbiBjbGFyaWZpZXMgdGhhdC4gSSB3aWxsIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIHVzZSB0aG9zZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucy5cblxuSG9sZCBvbiwgSSBzZWUgc29tZXRoaW5nIGVsc2UgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuLi4gYHJodGFiX21lbV9kdG9yYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0J3Mgc3RhdGljLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbid0IGhhdmUgaXQgb24gdGhlIHRvcCBvZiBteSBtaW5kIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGF0IGNvdWxkIHNpZ25pZmljYW50bHkgYWx0ZXIgaG93IEkgYXBwcm9hY2ggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMToyMC44Mjg5OTQ5NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzQ3MDUzNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmh0YWJfbWVtX2R0b3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9Mjg2OD1zdGF0aWMgdm9pZCByaHRhYl9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg3Ny1cXHQgKiBleGVjdXRpb24gY29udGV4dHMgKGUuZy4gTk1JKSwgc28gbGVhdmUgdGhvc2UgZmllbGRzIGF0dGFjaGVkIHRvXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg3ODpcXHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg3OS1cXHQgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODg2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODc6c3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg4OC17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTQ5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3NS1cXHR9XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk3NjpcXHQvKiBDYW5jZWwgTk1JLXNhZmUgZmllbGRzOyBmdWxsIGRlc3RydWN0aW9uIGhhcHBlbnMgaW4gcmh0YWJfbWVtX2R0b3IgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc3LVxcdHJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAxNj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMzctXFx0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzOyByZWZlcmVuY2VkIGtwdHJzXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzAzODpcXHQgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAzOS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxMTk9c3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjQtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEyNTpcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMToyMy4wNjM3MDkwMzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2NzM4OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFJoYXNoIE1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGByaHRhYl9tZW1fZHRvcmAgaXMgc3RhdGljLCB5ZXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gbm90ZTsgaXQgbWlnaHQgaW5kaWNhdGUgYSBzcGVjaWZpYyBpbnRlcmFjdGlvbiBwb2ludC5cblxuTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gT2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY2VudHJhbCBvbmUgd2UncmUgZGVhbGluZyB3aXRoLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHBlcnRhaW4gc3BlY2lmaWNhbGx5IHRvIGtwdHJzIGFuZCB0aGVzZSBmdW5jdGlvbiBjaGFuZ2VzLiBUaGUgdGVzdHMgdXNlIGBicGZfa3B0cl94Y2hnYCBhbmQgYGJwZl90YXNrX2FjcXVpcmVgLiBUaG9zZSB1c3VhbGx5IHB1bGwgaW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgdGhlIGBoYXNodGFiLmNgIHN0dWZmLCBpcyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhcyBleHBlY3RlZC5cblxuTm93LCBsZXQgbWUgc3ludGhlc2l6ZSB3aGF0IEkga25vdy4gVGhpcyBpcyB3aGF0IEknbSBjb25jbHVkaW5nIGZyb20gbXkgcmV2aWV3IG9mIHRoZSBjaGFuZ2VzOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseSwgeWVzLiBUaGVyZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgY3JpdGljYWwgYXJlYS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBEZWZpbml0ZWx5IGZvY3VzIG9uIHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9uczogYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQsIGNydWNpYWxseSwgYHJodGFiX21lbV9kdG9yYC4gVGhlc2UgYXJlIHRoZSB0b3VjaHBvaW50cyBmb3IgdGhlIGZpeC5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEJQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGUgdW5kZXJseWluZyBpc3N1ZSBpcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgY2F1c2VkIHByZW1hdHVyZSwgdW5zYWZlIGRlc3RydWN0aW9uIG9mIHJlZmVyZW5jZWQga3B0cnMuIFRoZSBwYXRjaCBjbGV2ZXJseSByZXdvcmtzIGByaHRhYl9jYW5jZWxfZmllbGRzYCB0byBvbmx5IGhhbmRsZSBOTUktc2FmZSBmaWVsZHMgYW5kIGRlZmVycyB0aGUgZnVsbCBkZXN0cnVjdGlvbiB0byBgcmh0YWJfbWVtX2R0b3JgLiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBpcyB0b3VjaGluZyByZWFjaGFibGUgQlBGIG1hcCBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAxMCwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MzAuNTMxMTAxNDYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTIzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWVtX2R0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcInJodGFiX21lbV9kdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiByaGFzaCBtYXAgd2hlcmUgdXBkYXRpbmcgYW4gZWxlbWVudCBmcm9tIGFuIE5NSSBjb250ZXh0IGVhZ2VybHkgZGVzdHJveWVkIHJlZmVyZW5jZWQga3B0cnMsIHdoaWNoIGlzIG5vdCBzYWZlLiBJdCBjaGFuZ2VzIGByaHRhYl9jYW5jZWxfZmllbGRzYCB0byBvbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgYW5kIGRlZmVycyBmdWxsIGRlc3RydWN0aW9uIHRvIGByaHRhYl9tZW1fZHRvcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgQlBGIG1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMTozMC42NDgyMzM5MDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjU3MDQyNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MzAuNjQ5MDUyMzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MjU2MjE4NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2Ygc3BlY2lhbCBCUEYgbWFwIGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdXB0cnMsIGxpc3RzLCBhbmQgcmJ0cmVlcykgd2hlbiBhIG1hcCBlbGVtZW50IGlzIHVwZGF0ZWQgb3IgZGVsZXRlZCBpbiBhbiBOTUkgY29udGV4dC4gUHJldmlvdXNseSwgYGJwZl9vYmpfZnJlZV9maWVsZHMoKWAgd2FzIGNhbGxlZCwgd2hpY2ggZWFnZXJseSBkZXN0cm95ZWQgYWxsIGZpZWxkcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bnNhZmUgb3BlcmF0aW9ucyAobGlrZSBkZWFkbG9ja3Mgb3IgY3Jhc2hlcykgZnJvbSBhbiBOTUkgY29udGV4dC4gVGhlIGZpeCByZXBsYWNlcyB0aGlzIHdpdGggYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKClgLCB3aGljaCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzICh0aW1lcnMsIHdvcmtxdWV1ZXMsIHRhc2tfd29yaykgYW5kIGRlZmVycyB0aGUgZGVzdHJ1Y3Rpb24gb2Ygb3RoZXIgZmllbGRzIHRvIGByaHRhYl9tZW1fZHRvcigpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTNmYTZhZDczN2M0NzE3YzU4NDhiMDE1MzgwYTYzNjYwMDVjY2NjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEwOjE5OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggOWYzOTRlMWFhMmU4NS4uNzBmYTFlMWI0YjAwOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjUsMTQgKzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi1cdFx0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4rc3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbitcdFx0XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtKVxuIHtcbiBcdGlmIChJU19FUlJfT1JfTlVMTChyaHRhYi1cdTAwM2VtYXAucmVjb3JkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi1cdTAwM2VtYXAucmVjb3JkLFxuLVx0XHRcdCAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuK1x0LypcbitcdCAqIE9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKSBoZXJlLlxuK1x0ICoga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGRlc3RydWN0aW9uIG11c3Qgbm90IHJ1biBmcm9tIGFyYml0cmFyeSBCUEZcbitcdCAqIGV4ZWN1dGlvbiBjb250ZXh0cyAoZS5nLiBOTUkpLCBzbyBsZWF2ZSB0aG9zZSBmaWVsZHMgYXR0YWNoZWQgdG9cbitcdCAqIHRoZSByZWN5Y2xlZCBlbGVtZW50IGFuZCBsZXQgcmh0YWJfbWVtX2R0b3IoKSBkZXN0cm95IHRoZW0gb25jZSB0aGVcbitcdCAqIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC4gVGhpcyBtYXRjaGVzIHRoZSBoYXNoIG1hcCBzZW1hbnRpY3NcbitcdCAqIGludHJvZHVjZWQgYnkgYTNhODFkMjQ3NjUxIChcImJwZjogQ2FuY2VsIHNwZWNpYWwgZmllbGRzIG9uIG1hcCB2YWx1ZVxuK1x0ICogcmVjeWNsZVwiKS5cbitcdCAqL1xuK1x0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLFxuK1x0XHRcdFx0ICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG5AQCAtMjk2NCw4ICsyOTczLDggQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xuIFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5KTtcbiBcdH1cbi1cdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0LyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovXG4rXHRyaHRhYl9jYW5jZWxfZmllbGRzKHJodGFiLCBlbGVtKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXHUwMDI2cmh0YWItXHUwMDNlbWEsIGVsZW0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMjQsMTAgKzMwMzMsMTEgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxcbiBcdCAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy5cbiBcdCAqXG4gXHQgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy9cbi1cdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlbSBhZnRlciB0aGUgY29weVxuLVx0ICogdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzLlxuK1x0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGUgTk1JLXNhZmUgb25lcyBhZnRlclxuK1x0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzOyByZWZlcmVuY2VkIGtwdHJzXG4rXHQgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuXG4gXHQgKi9cbi1cdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4rXHRyaHRhYl9jYW5jZWxfZmllbGRzKHJodGFiLCBlbGVtKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OWJkY2RhOTU1NTU3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmNcbkBAIC0wLDAgKzEsODcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBLeWxpblNvZnQgQ28uLCBMdGQuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJyaHRhYl9rcHRyLnNrZWwuaFwiXG4rXG4rc3RhdGljIF9fdTY0IHJlYWRfY291bnRlcihzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbCwgdTMyIGlkeClcbit7XG4rXHRfX3U2NCB2YWxzW2xpYmJwZl9udW1fcG9zc2libGVfY3B1cygpXTtcbitcdF9fdTY0IHN1bSA9IDA7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuY291bnRlcnMpLCBcdTAwMjZpZHgsIHZhbHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImxvb2t1cF9jb3VudGVyXCIpKVxuK1x0XHRyZXR1cm4gMDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpOyBpKyspXG4rXHRcdHN1bSArPSB2YWxzW2ldO1xuK1x0cmV0dXJuIHN1bTtcbit9XG4rXG4rdm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZClcbit7XG4rXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHIgPSB7XG4rXHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuK1x0XHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuK1x0XHQuZnJlcSA9IDEsXG4rXHRcdC5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSxcbitcdFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4rXHR9O1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdHN0cnVjdCByaHRhYl9rcHRyICpza2VsO1xuK1x0X191MzIga2V5ID0gMDtcbitcdF9fdTY0IHplcm8gPSAwO1xuK1x0aW50IHBtdV9mZDtcbitcbitcdHNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBDcmVhdGUgdGhlIGVsZW1lbnQgYW5kIHN0YXNoIGEgcmVmZXJlbmNlZCB0YXNrIGtwdHIgaW4gaXQuICovXG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfbWFwX3VwZGF0ZV9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5yaHRhYiksXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmtleSwgXHUwMDI2emVybywgQlBGX0FOWSksIFwiY3JlYXRlX2VsZW1cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5pbml0X2VsZW0pLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0b3B0cyksIFwidGVzdF9ydW5faW5pdFwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcImluaXRfcmV0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHBtdV9mZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sIFx1MDAyNmF0dHIsIC0xLCAwLCAtMSwgMCk7XG4rXHRpZiAocG11X2ZkIFx1MDAzYyAwKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3BlcmZfZXZlbnQoc2tlbC1cdTAwM2Vwcm9ncy5ubWlfdXBkYXRlLFxuK1x0XHRcdFx0XHRcdFx0XHRwbXVfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSwgXCJhdHRhY2hfcGVyZl9ldmVudFwiKSkge1xuK1x0XHRjbG9zZShwbXVfZmQpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIExldCB0aGUgTk1JIGhhbmRsZXIgb3ZlcndyaXRlIHRoZSBlbGVtZW50LiAqL1xuK1x0dXNsZWVwKDEwMDAwMCk7XG4rXG4rXHRicGZfbGlua19fZGVzdHJveShza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUpO1xuK1x0c2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gTlVMTDtcbitcdGNsb3NlKHBtdV9mZCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIG9sZCBrcHRyIG11c3Qgc3RpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQ6IHRoZSBOTUkgdXBkYXRlXG4rXHQgKiBwYXRoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMsIG1pcnJvcmluZyBoYXNoIG1hcCBzZW1hbnRpY3MuXG4rXHQgKiBCZWZvcmUgdGhlIGZpeCB0aGUga3B0ciB3YXMgcmVsZWFzZWQgZnJvbSB0aGUgTk1JIGNvbnRleHQgYW5kIHRoZVxuK1x0ICogcHJvYmUgYmVsb3cgd291bGQgc2VlIE5VTEwuXG4rXHQgKi9cbitcdHRvcHRzLnJldHZhbCA9IDA7XG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnByb2JlX2VsZW0pLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0b3B0cyksIFwidGVzdF9ydW5fcHJvYmVcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCJwcm9iZV9yZXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKHJlYWRfY291bnRlcihza2VsLCAyKSwgMSwgXCJ4Y2hnX25vbl9udWxsXCIpO1xuK1x0QVNTRVJUX0VRKHJlYWRfY291bnRlcihza2VsLCAzKSwgMCwgXCJ4Y2hnX251bGxcIik7XG4rb3V0OlxuK1x0cmh0YWJfa3B0cl9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICsxLDEwMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi9cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGEgcmh0YWIgdmFsdWUgdXBkYXRlIGlzc3VlZCBmcm9tIGEgcGVyZl9ldmVudCAoTk1JKSBwcm9ncmFtXG4rICogZG9lcyBub3QgZWFnZXJseSBkZXN0cm95IHJlZmVyZW5jZWQga3B0cnMuIHJodGFiIG11c3QgbWF0Y2ggdGhlIGhhc2ggbWFwXG4rICogc2VtYW50aWNzIGludHJvZHVjZWQgYnkgY29tbWl0IGEzYTgxZDI0NzY1MSAoXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkc1xuKyAqIG9uIG1hcCB2YWx1ZSByZWN5Y2xlXCIpOiBvbmx5IE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKVxuKyAqIGFyZSBjYW5jZWxsZWQgb24gdXBkYXRlL2RlbGV0ZSwgd2hpbGUga3B0cnMgc3RheSBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWRcbisgKiBlbGVtZW50IHVudGlsIGl0IGlzIGV2ZW50dWFsbHkgZnJlZWQuXG4rICpcbisgKiBXaXRob3V0IHRoZSBmaXgsIHRoZSBOTUkgdXBkYXRlIHJlbGVhc2VzIHRoZSBvbGQga3B0ciBhbmQgcHJvYmVfZWxlbSgpXG4rICogb2JzZXJ2ZXMgTlVMTCBpbiB0aGUgc2xvdDsgd2l0aCB0aGUgZml4IHRoZSBvbGQga3B0ciBpcyBpbmhlcml0ZWQgYW5kXG4rICogcHJvYmVfZWxlbSgpIG9ic2VydmVzIGEgbm9uLU5VTEwgcG9pbnRlci5cbisgKi9cbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB2YWxfdCB7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0c2s7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDE2KTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IHZhbF90KTtcbit9IHJodGFiIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDQpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSBjb3VudGVycyBTRUMoXCIubWFwc1wiKTtcbitcbisvKiAwOiBpbml0IG9rLCAxOiBubWkgdXBkYXRlIG9rLCAyOiBwcm9iZSB4Y2hnIG5vbi1OVUxMLCAzOiBwcm9iZSB4Y2hnIE5VTEwgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnVtcCh1MzIgaWR4KVxuK3tcbitcdHU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2Y291bnRlcnMsIFx1MDAyNmlkeCk7XG4rXG4rXHRpZiAodilcbitcdFx0KCp2KSsrO1xuK31cbitcbitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rXG4rU0VDKFwicGVyZl9ldmVudFwiKVxuK2ludCBubWlfdXBkYXRlKHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhICpjdHgpXG4re1xuK1x0c3RydWN0IHZhbF90IHZhbCA9IHt9O1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZyaHRhYiwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIEJQRl9BTlkpID09IDApXG4rXHRcdGJ1bXAoMSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBpbml0X2VsZW0odm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB2YWxfdCAqdmFsO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkO1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJodGFiLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1x0dGFzayA9IGJwZl90YXNrX2FjcXVpcmUoYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCkpO1xuK1x0aWYgKCF0YXNrKVxuK1x0XHRyZXR1cm4gMjtcbitcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2dmFsLVx1MDAzZXRzaywgdGFzayk7XG4rXHRpZiAob2xkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKG9sZCk7XG4rXHRidW1wKDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgcHJvYmVfZWxlbSh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHZhbF90ICp2YWw7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZDtcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZyaHRhYiwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2dmFsLVx1MDAzZXRzaywgTlVMTCk7XG4rXHRpZiAob2xkKSB7XG4rXHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbitcdFx0YnVtcCgyKTtcbitcdH0gZWxzZSB7XG4rXHRcdGJ1bXAoMyk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMTozMC42NDkwNTQwMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ0Njc2NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgQlBGIEhhc2h0YWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2Ag4oCTIHRoYXQncyB0aGUgcmVhbC10aW1lIGhhc2ggdGFibGUgY29kZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBJIHNlZSB0aGV5J3JlIHJlbmFtaW5nIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHRvIGByaHRhYl9jYW5jZWxfZmllbGRzYCwgd2hpY2ggc291bmRzIGxpa2UgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgaW4gdGVybWlub2xvZ3ksIGxpa2VseSByZWZsZWN0aW5nIHRoZSBpbnRlbnQgb2YgdGhlIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzd2FwcGluZyBvdXQgYSBjYWxsIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYCBmb3IgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYC5cblxuVGhlIGNvbW1lbnQgaXMga2V5IGhlcmU6IGl0J3MgYWxsIGFib3V0IGhhbmRsaW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB2YXJpb3VzIEJQRiBtYXAgZmllbGRzLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBzYWZldHkgb2YgZG9pbmcgc28gaW4gTk1JIGNvbnRleHRzLiBJdCdzIGV4cGxpY2l0bHkgZmxhZ2dpbmcgdGhhdCBmaWVsZHMgbGlrZSB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgYXJlIG9rYXkgdG8gYmUgY2FuY2VsZWQvY2xlYW5lZCB1cCBpbiBhbiBOTUktc2FmZSBtYW5uZXIgaGVyZS4gSG93ZXZlciwgY3J1Y2lhbGx5LCBpdCBpZGVudGlmaWVzIHRoYXQgYGtwdHJgLCBgdXB0cmAsIGBsaXN0YCwgYW5kIGByYnRyZWVgIGRlc3RydWN0aW9uIG11c3QgKm5vdCogaGFwcGVuIGluIGFuIGFyYml0cmFyeSBCUEYgZXhlY3V0aW9uIGNvbnRleHQsIGVzcGVjaWFsbHkgTk1Jcy4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxvY2t1cHMgb3Igb3RoZXIgbmFzdHkgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgZXhwbGljaXRseSBsZWF2aW5nIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWQgZWxlbWVudCwga25vd2luZyBgcmh0YWJfbWVtX2R0b3IoKWAgd2lsbCB0YWtlIGNhcmUgb2YgdGhlbSBsYXRlciB3aGVuIGl0J3Mgc2FmZS5cblxuU28sIHRoaXMgaXMgYSBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZSwgc3BlY2lmaWNhbGx5IGZvciBCUEYgbWFwIGZpZWxkcywgbm90YWJseSBrZXJuZWwgcG9pbnRlcnMgKGtwdHJzKSB3aXRoaW4gdGhlIHJlYWwtdGltZSBoYXNoIHRhYmxlIGNvbnRleHQgYW5kIE5NSXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGFuZCBjb21wYXJlIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gV2FpdCwgSSBzZWUgd2hhdCdzIGdvaW5nIG9uISBUaGUgY2hhbmdlIGlzIHZlcnkgdGFyZ2V0ZWQuIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2Agc3BlY2lmaWNhbGx5ICpjYW5jZWxzKiB0aG9zZSBOTUktc2FmZSBmaWVsZHMgYnV0IGRvZXNu4oCZdCBpbW1lZGlhdGVseSBkZXN0cm95IHRoZSBvdGhlcnMuIFRoYXQgaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3IuIFRoYXQgb3RoZXIgc3R1ZmYgaXMgdGFrZW4gY2FyZSBvZiBsYXRlci4gQW5kIHRoZXkgYXJlIHNheWluZyB0aGF0IGByaHRhYl9rcHRyLmNgIGhhcyBhIHRlc3QgdG8gdmVyaWZ5IGtwdHJzIGFyZSBub3QgZGVzdHJveWVkIHRvbyBzb29uLiBHb29kLlxuXG5JJ20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpdHNlbGYuIEnigJlsbCBsb29rIGZvciBpdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuIEp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvZ2ljIG1ha2VzIHNlbnNlIGFuZCB0aGF0IG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUsIGNvbnRyb2xsZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MzcuNzkzNzM0NzQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjczMzg5MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9NzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX2hhc19pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcwNi1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcwNzp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKm9iaik7XFxuaW5jbHVkZS9saW51eC9icGYuaC03MDgtXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NDYwPXN0YXRpYyB2b2lkIGFycmF5X21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NjktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDcwOlxcdFxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKG1hcCwgYXJyYXlfbWFwX2VsZW1fcHRyKGFycmF5LCBpKSk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ3MS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMjE9c3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzItXFx0XFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjMzOlxcdFxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM0LVxcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE1OTI9c3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTYwMy1cXHRcXHRcXHQvKiBXZSBvbmx5IGZyZWUgaW50ZXJuYWwgc3RydWN0cyBvbiB1cmVmIGRyb3BwaW5nIHRvIHplcm8gKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNjA0OlxcdFxcdFxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTYwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODY4PXN0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODgyLVxcdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODM6XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg4NC1cXHRcXHRcXHRcXHQgICAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTk9c3RhdGljIHZvaWQgcmh0YWJfZnJlZV9lbGVtKHZvaWQgKnB0ciwgdm9pZCAqYXJnKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTA0OlxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFxcdTAwMjZyaHRhYi1cXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTA1LVxcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgZWxlbSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTI4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTQtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1NTpcXHRcXHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhtYXAsIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTYtXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDI1PXZvaWQgKl9fYnBmX2R5bnB0cl9kYXRhX3J3KGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzEtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMjp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMzLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxMD12b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODExLXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MTI6XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMobWFwLCBvYmopO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgxMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjQwLjA2NzEyOTU3MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg0OTcwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIE1hcCBDbGVhbnVwIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCB0byBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIHdpdGhpbiB0aGUgYHJodGFiX2NhbmNlbF9maWVsZHNgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcmVhc29uaW5nLiBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXAg4oCTIHRpbWVycywgd29ya3F1ZXVlcywgYHRhc2tfd29ya2AsIHRoYXQgc29ydCBvZiB0aGluZy4gSXQncyBkZWxpYmVyYXRlbHkgKm5vdCogZnJlZWluZyB0aGUga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgb24gdGhlIHJlY3ljbGVkIGVsZW1lbnQuIFRoYXQncyBhIGtleSBwb2ludC5cblxuVGhlIGNvbmNlcm4gaGVyZSwgYW5kIGl0J3MgYSB2YWxpZCBvbmUsIGlzIGF2b2lkaW5nIHVuc2FmZSBmcmVlaW5nIG9wZXJhdGlvbnMgZnJvbSBhbiBOTUkgY29udGV4dC4gV2UgYWxsIGtub3cgaG93IGRpY2V5IHRoYXQgY2FuIGJlIOKAkyBwb3RlbnRpYWwgZGVhZGxvY2tzLCBjcmFzaGVzLCB0aGUgd2hvbGUgc2hlYmFuZy4gU28sIGJ5IGxlYXZpbmcgdGhvc2UgYXR0YWNoZWQsIHRoZSByaXNrIG9mIHRyaWdnZXJpbmcgb25lIG9mIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcyBpcyBtaXRpZ2F0ZWQuIFRoZXknbGwgYmUgY2xlYW5lZCB1cCBsYXRlciBieSBgcmh0YWJfbWVtX2R0b3IoKWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGhlcmUuXG5cblRoZSBpbXBvcnRhbnQgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIG5vciBkb2VzIGl0IGFmZmVjdCBjb250cm9sIGZsb3cuIFRoZSBmaWVsZHMgYXJlIHN0aWxsIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50IGFuZCwgaW4gZWZmZWN0LCBhcmUgc2FmZS4gVGhlIHN1YnNlcXVlbnQgY2xlYW51cCBwcm9jZXNzIGhhbmRsZWQgYnkgYHJodGFiX21lbV9kdG9yYCB3aWxsIHJlc29sdmUgdGhlbSBhdCBhIGxhdGVyIHRpbWUuXG5cbkdpdmVuIHRoaXMgaW1wbGVtZW50YXRpb24sIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZXJlIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBLQVNBTiBhbmQgTE9DS0RFUCB3aWxsIHN0aWxsIGJlIGFibGUgdG8gY2FwdHVyZSBhbnkgaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgaW5hcHByb3ByaWF0ZSBmcmVlaW5nIGZyb20gTk1JIGNvbnRleHQuIEknbSBzYXRpc2ZpZWQuIExldCdzIG1ha2Ugc3VyZSBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGlzIHBlcmZvcm1pbmcgYXMgZXhwZWN0ZWQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMTo0Ni4zNTIxMTE0ODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzE0OTg5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC03MDYtXFxuaW5jbHVkZS9saW51eC9icGYuaDo3MDc6dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNzA4LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAyNT12b2lkICpfX2JwZl9keW5wdHJfZGF0YV9ydyhjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpwdHIsIHU2NCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMzI6dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWwpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAzMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjQ4LjU4MzYxNzE0NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyMDQwMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgbWFwIGZyZWVpbmcgbWVjaGFuaXNtIGFjdHVhbGx5IHdvcmtzIHVuZGVyIHRoZSBob29kLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBkaWcgaW50byBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBCUEYgbWFwIGFyY2hpdGVjdHVyZSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSAqaW50ZXJuYWwqIGRldGFpbHMgb2YgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIHJlbGVhc2VkIHdoZW4gYSBtYXAgaXMgY2xvc2VkIG9yIGRlc3Ryb3llZC4gSSdtIGhvcGluZyB0byBnYWluIGluc2lnaHRzIGludG8gcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBsZXhpdGllcywgcmVzb3VyY2UgbGVha3MgKGhvd2V2ZXIgdW5saWtlbHkpLCBvciBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgbWFwIHR5cGVzIGFuZCB0aGVpciBmcmVlaW5nIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBzcGVjaWZpYyBwZXItbWFwLXR5cGUgc3RydWN0dXJlcywgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXAgYmV5b25kIHRoZSBiYXNpYyBrZXktdmFsdWUgZGF0YS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBlc3BlY2lhbGx5IGlmIHRoZSBtYXBzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBwcm9ncmFtcyBvciBjb250ZXh0cz8gTGV0J3MgZ2V0IGNyYWNraW5nIGFuZCBkaXNzZWN0IHRoaXMgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODI0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjUyLjE5NTY2MDUwMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTAzMDpcXHR9XFxuNTAzMTpcXHRcXG41MDMyOlxcdHZvaWQgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsKVxcbjUwMzM6XFx0e1xcbjUwMzQ6XFx0XFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfVElNRVIpKVxcbjUwMzU6XFx0XFx0XFx0YnBmX29ial9mcmVlX3RpbWVyKG1hcC1cXHUwMDNlcmVjb3JkLCB2YWwpO1xcbjUwMzY6XFx0XFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfV09SS1FVRVVFKSlcXG41MDM3OlxcdFxcdFxcdGJwZl9vYmpfZnJlZV93b3JrcXVldWUobWFwLVxcdTAwM2VyZWNvcmQsIHZhbCk7XFxuNTAzODpcXHRcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2VyZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxcbjUwMzk6XFx0XFx0XFx0YnBmX29ial9mcmVlX3Rhc2tfd29yayhtYXAtXFx1MDAzZXJlY29yZCwgdmFsKTtcXG41MDQwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6NTIuMTk2MDcxMzMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDkxNTEzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBNYXAgRmllbGQgTGlmZWN5Y2xlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgY2hhbmdlIGlzIHNwZWNpZmljYWxseSBhYm91dCByZWZpbmluZyBob3cgd2UgaGFuZGxlIGNlcnRhaW4gQlBGIG1hcCBmaWVsZHMg4oCTIHNwZWNpZmljYWxseSB0aGUgc3BlY2lhbCBvbmVzIGxpa2Uga2VybmVsIHBvaW50ZXJzIChrcHRycyksIHVzZXIgcG9pbnRlcnMgKHVwdHJzKSwgbGlzdHMsIGFuZCByZWQtYmxhY2sgdHJlZXMgKHJidHJlZXMpIOKAkyB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIHdpdGhpbiBhbiBOTUkgY29udGV4dC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgb2xkIGNvZGUgd2FzIHRvbyBlYWdlci4gSXQgd2FzIGNhbGxpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgLCB3aGljaCBhZ2dyZXNzaXZlbHkgZGVzdHJveWVkICpldmVyeXRoaW5nKiByaWdodCBhd2F5LiBUaGlzIGNyZWF0ZWQgYSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcywgcGFydGljdWxhcmx5IGRlYWRsb2NrcyBvciBldmVuIGNyYXNoZXMsIGJlY2F1c2UgTk1JIGNvbnRleHRzIGFyZSBzZW5zaXRpdmUuXG5cblRoaXMgZml4IGlzIHNtYXJ0OyBpdCdzIGEgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQuIEluc3RlYWQgb2YgdGhlIG51Y2xlYXIgb3B0aW9uIChgYnBmX29ial9mcmVlX2ZpZWxkc2ApLCBpdCBpbnRyb2R1Y2VzIGEgbW9yZSBncmFudWxhciBhcHByb2FjaC4gVGhlIGNvcmUgaXMgcmVwbGFjaW5nIGl0IHdpdGggYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKClgLCB3aGljaCBzbWFydGx5IG9ubHkgY2FuY2VscyBhbmQgZnJlZXMgdGhlIE5NSS1zYWZlIGZpZWxkcyBsaWtlIHRpbWVycywgd29ya3F1ZXVlcywgYW5kIHRhc2tfd29yayB3aXRoaW4gdGhlIE5NSSBjb250ZXh0LiBUaGUgcmVzdCBvZiB0aGUgZGVzdHJ1Y3Rpb24sIHRoZSBtb3JlIGNvbXBsZXggZmllbGRzIGxpa2UgdGhlIHBvaW50ZXJzLCBsaXN0cywgYW5kIHRyZWVzLCBhcmUgbm93IGRlZmVycmVkLiBUaGV5IHdpbGwgZ2V0IHRoZWlyIHByb3BlciBsaWZlY3ljbGUgdHJlYXRtZW50IGZyb20gYHJodGFiX21lbV9kdG9yKClgLiBUaGlzIGF2b2lkcyBhIHJhY2UgYW5kIGxldHMgdGhlbSBiZSBkZXN0cm95ZWQgc2FmZWx5LlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWxsb2NhdGlvbiBidWcuIEl04oCZcyBhYm91dCBlbnN1cmluZyBjb3JyZWN0IGxvY2tpbmcgYW5kIHByb3BlciBkZXN0cnVjdGlvbiBvcmRlci4gSWYgdGhpcyBwYXRjaCAqZGlkKiBpbnRyb2R1Y2UgYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSwgTE9DS0RFUCBvciBLQVNBTiB3b3VsZCBoYXZlIGNhdWdodCBpdC4gSXQncyBub3QgdGhlIGtpbmQgb2YgdGhpbmcgS01TQU4gaXMgZGVzaWduZWQgdG8gYWRkcmVzcy4gVGhlIGNoYW5nZSBpcyBhYm91dCAqd2hlbiogdGhpbmdzIGFyZSBmcmVlZCwgbm90ICpob3cqIHRoZXkgYXJlIGluaXRpYWxpemVkIG9yIGlmIHRoZXJl4oCZcyBhIG1lbW9yeSBsZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXNuJ3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBpbXBhY3QgaXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmc7IHRoaXMgaXMgYSBjbGVhciBmaXggZm9yIGEgbGlmZWN5Y2xlIGlzc3VlLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBJJ2xsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODIsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6NTkuOTA1MjI2MDEzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2Ygc3BlY2lhbCBCUEYgbWFwIGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdXB0cnMsIGxpc3RzLCBhbmQgcmJ0cmVlcykgd2hlbiBhIG1hcCBlbGVtZW50IGlzIHVwZGF0ZWQgb3IgZGVsZXRlZCBpbiBhbiBOTUkgY29udGV4dC4gUHJldmlvdXNseSwgYGJwZl9vYmpfZnJlZV9maWVsZHMoKWAgd2FzIGNhbGxlZCwgd2hpY2ggZWFnZXJseSBkZXN0cm95ZWQgYWxsIGZpZWxkcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bnNhZmUgb3BlcmF0aW9ucyAobGlrZSBkZWFkbG9ja3Mgb3IgY3Jhc2hlcykgZnJvbSBhbiBOTUkgY29udGV4dC4gVGhlIGZpeCByZXBsYWNlcyB0aGlzIHdpdGggYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKClgLCB3aGljaCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzICh0aW1lcnMsIHdvcmtxdWV1ZXMsIHRhc2tfd29yaykgYW5kIGRlZmVycyB0aGUgZGVzdHJ1Y3Rpb24gb2Ygb3RoZXIgZmllbGRzIHRvIGByaHRhYl9tZW1fZHRvcigpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHNwZWNpYWwgQlBGIG1hcCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHVwdHJzLCBsaXN0cywgYW5kIHJidHJlZXMpIHdoZW4gYSBtYXAgZWxlbWVudCBpcyB1cGRhdGVkIG9yIGRlbGV0ZWQgaW4gYW4gTk1JIGNvbnRleHQuIFByZXZpb3VzbHksIGBicGZfb2JqX2ZyZWVfZmllbGRzKClgIHdhcyBjYWxsZWQsIHdoaWNoIGVhZ2VybHkgZGVzdHJveWVkIGFsbCBmaWVsZHMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5zYWZlIG9wZXJhdGlvbnMgKGxpa2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMpIGZyb20gYW4gTk1JIGNvbnRleHQuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cygpYCwgd2hpY2ggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcyAodGltZXJzLCB3b3JrcXVldWVzLCB0YXNrX3dvcmspIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIG9mIG90aGVyIGZpZWxkcyB0byBgcmh0YWJfbWVtX2R0b3IoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBhbmQgbGlmZWN5Y2xlIGJ1ZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgb3IgS0FTQU4gaWYgaXQgY2F1c2VkIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgZnJlZSkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8htg4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 10:00:20 +0000 UTC FinishedAt: 2026-08-11 10:22:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "055a5c2b-7ebc-4f23-bf12-c480983e5dff" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rhtab_map_update_elem", "rhtab_map_delete_elem", "rhtab_map_lookup_and_delete_elem", "rhtab_mem_dtor" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBzcGVjaWFsIEJQRiBtYXAgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB1cHRycywgbGlzdHMsIGFuZCByYnRyZWVzKSB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIGluIGFuIE5NSSBjb250ZXh0LiBQcmV2aW91c2x5LCBgYnBmX29ial9mcmVlX2ZpZWxkcygpYCB3YXMgY2FsbGVkLCB3aGljaCBlYWdlcmx5IGRlc3Ryb3llZCBhbGwgZmllbGRzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuc2FmZSBvcGVyYXRpb25zIChsaWtlIGRlYWRsb2NrcyBvciBjcmFzaGVzKSBmcm9tIGFuIE5NSSBjb250ZXh0LiBUaGUgZml4IHJlcGxhY2VzIHRoaXMgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMgKHRpbWVycywgd29ya3F1ZXVlcywgdGFza193b3JrKSBhbmQgZGVmZXJzIHRoZSBkZXN0cnVjdGlvbiBvZiBvdGhlciBmaWVsZHMgdG8gYHJodGFiX21lbV9kdG9yKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgcmhhc2ggbWFwIHdoZXJlIHVwZGF0aW5nIGFuIGVsZW1lbnQgZnJvbSBhbiBOTUkgY29udGV4dCBlYWdlcmx5IGRlc3Ryb3llZCByZWZlcmVuY2VkIGtwdHJzLCB3aGljaCBpcyBub3Qgc2FmZS4gSXQgY2hhbmdlcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgdG8gb25seSBjYW5jZWwgTk1JLXNhZmUgZmllbGRzIGFuZCBkZWZlcnMgZnVsbCBkZXN0cnVjdGlvbiB0byBgcmh0YWJfbWVtX2R0b3JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIEJQRiBtYXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzZmE2YWQ3MzdjNDcxN2M1ODQ4YjAxNTM4MGE2MzY2MDA1Y2NjYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxOTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCA5ZjM5NGUxYWEyZTg1Li43MGZhMWUxYjRiMDA4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMjg2NSwxNCAmIzQzOzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi1cdFx0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4mIzQzO3N0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0aWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRicGZfb2JqX2ZyZWVfZmllbGRzKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQsXG4tXHRcdFx0ICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykgaGVyZS5cbiYjNDM7XHQgKiBrcHRyL3VwdHIvbGlzdC9yYnRyZWUgZGVzdHJ1Y3Rpb24gbXVzdCBub3QgcnVuIGZyb20gYXJiaXRyYXJ5IEJQRlxuJiM0MztcdCAqIGV4ZWN1dGlvbiBjb250ZXh0cyAoZS5nLiBOTUkpLCBzbyBsZWF2ZSB0aG9zZSBmaWVsZHMgYXR0YWNoZWQgdG9cbiYjNDM7XHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXG4mIzQzO1x0ICogZWxlbWVudCBpcyBldmVudHVhbGx5IGZyZWVkLiBUaGlzIG1hdGNoZXMgdGhlIGhhc2ggbWFwIHNlbWFudGljc1xuJiM0MztcdCAqIGludHJvZHVjZWQgYnkgYTNhODFkMjQ3NjUxIChcJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWVcbiYjNDM7XHQgKiByZWN5Y2xlXCYjMzQ7KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsXG4mIzQzO1x0XHRcdFx0ICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG5AQCAtMjk2NCw4ICYjNDM7Mjk3Myw4IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XG4gXHRcdHJodGFiX3JlYWRfZWxlbV92YWx1ZShcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIGNvcHksIGVsZW0sIGZsYWdzKTtcbiBcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSk7XG4gXHR9XG4tXHQvKiBSZWxlYXNlIGludGVybmFsIHN0cnVjdHM6IGtwdHIsIGJwZl90aW1lciwgdGFza193b3JrLCB3cSAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbiYjNDM7XHQvKiBDYW5jZWwgTk1JLXNhZmUgZmllbGRzOyBmdWxsIGRlc3RydWN0aW9uIGhhcHBlbnMgaW4gcmh0YWJfbWVtX2R0b3IgKi9cbiYjNDM7XHRyaHRhYl9jYW5jZWxfZmllbGRzKHJodGFiLCBlbGVtKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXHUwMDI2cmh0YWItXHUwMDNlbWEsIGVsZW0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMjQsMTAgJiM0MzszMDMzLDExIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsXG4gXHQgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuXG4gXHQgKlxuIFx0ICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvXG4tXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHlcbi1cdCAqIHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3MuXG4mIzQzO1x0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGUgTk1JLXNhZmUgb25lcyBhZnRlclxuJiM0MztcdCAqIHRoZSBjb3B5IHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3M7IHJlZmVyZW5jZWQga3B0cnNcbiYjNDM7XHQgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuXG4gXHQgKi9cbi1cdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4mIzQzO1x0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzliZGNkYTk1NTU1N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICYjNDM7MSw4NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JodGFiX2twdHIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgX191NjQgcmVhZF9jb3VudGVyKHN0cnVjdCByaHRhYl9rcHRyICpza2VsLCB1MzIgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0X191NjQgdmFsc1tsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKV07XG4mIzQzO1x0X191NjQgc3VtID0gMDtcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5jb3VudGVycyksIFx1MDAyNmlkeCwgdmFscyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtsb29rdXBfY291bnRlclwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRzdW0gJiM0Mzs9IHZhbHNbaV07XG4mIzQzO1x0cmV0dXJuIHN1bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuJiM0MztcdFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbiYjNDM7XHRcdC5mcmVxID0gMSxcbiYjNDM7XHRcdC5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSxcbiYjNDM7XHRcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLFxuJiM0MztcdH07XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcdF9fdTY0IHplcm8gPSAwO1xuJiM0MztcdGludCBwbXVfZmQ7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdGhlIGVsZW1lbnQgYW5kIHN0YXNoIGEgcmVmZXJlbmNlZCB0YXNrIGtwdHIgaW4gaXQuICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX21hcF91cGRhdGVfZWxlbShicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMucmh0YWIpLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2a2V5LCBcdTAwMjZ6ZXJvLCBCUEZfQU5ZKSwgXCYjMzQ7Y3JlYXRlX2VsZW1cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5pbml0X2VsZW0pLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcJiMzNDt0ZXN0X3J1bl9pbml0XCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCYjMzQ7aW5pdF9yZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHBtdV9mZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sIFx1MDAyNmF0dHIsIC0xLCAwLCAtMSwgMCk7XG4mIzQzO1x0aWYgKHBtdV9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfcGVyZl9ldmVudChza2VsLVx1MDAzZXByb2dzLm5taV91cGRhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRwbXVfZmQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUsIFwmIzM0O2F0dGFjaF9wZXJmX2V2ZW50XCYjMzQ7KSkge1xuJiM0MztcdFx0Y2xvc2UocG11X2ZkKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTGV0IHRoZSBOTUkgaGFuZGxlciBvdmVyd3JpdGUgdGhlIGVsZW1lbnQuICovXG4mIzQzO1x0dXNsZWVwKDEwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSk7XG4mIzQzO1x0c2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gTlVMTDtcbiYjNDM7XHRjbG9zZShwbXVfZmQpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZVxuJiM0MztcdCAqIHBhdGggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcywgbWlycm9yaW5nIGhhc2ggbWFwIHNlbWFudGljcy5cbiYjNDM7XHQgKiBCZWZvcmUgdGhlIGZpeCB0aGUga3B0ciB3YXMgcmVsZWFzZWQgZnJvbSB0aGUgTk1JIGNvbnRleHQgYW5kIHRoZVxuJiM0MztcdCAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLlxuJiM0MztcdCAqL1xuJiM0MztcdHRvcHRzLnJldHZhbCA9IDA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9iZV9lbGVtKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFx1MDAyNnRvcHRzKSwgXCYjMzQ7dGVzdF9ydW5fcHJvYmVcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcJiMzNDtwcm9iZV9yZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsIFwmIzM0O3hjaGdfbm9uX251bGxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsIFwmIzM0O3hjaGdfbnVsbFwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRyaHRhYl9rcHRyX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICYjNDM7MSwxMDEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGEgcmh0YWIgdmFsdWUgdXBkYXRlIGlzc3VlZCBmcm9tIGEgcGVyZl9ldmVudCAoTk1JKSBwcm9ncmFtXG4mIzQzOyAqIGRvZXMgbm90IGVhZ2VybHkgZGVzdHJveSByZWZlcmVuY2VkIGtwdHJzLiByaHRhYiBtdXN0IG1hdGNoIHRoZSBoYXNoIG1hcFxuJiM0MzsgKiBzZW1hbnRpY3MgaW50cm9kdWNlZCBieSBjb21taXQgYTNhODFkMjQ3NjUxIChcJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkc1xuJiM0MzsgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZVwmIzM0Oyk6IG9ubHkgTk1JLXNhZmUgZmllbGRzICh0aW1lciwgd29ya3F1ZXVlLCB0YXNrX3dvcmspXG4mIzQzOyAqIGFyZSBjYW5jZWxsZWQgb24gdXBkYXRlL2RlbGV0ZSwgd2hpbGUga3B0cnMgc3RheSBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWRcbiYjNDM7ICogZWxlbWVudCB1bnRpbCBpdCBpcyBldmVudHVhbGx5IGZyZWVkLlxuJiM0MzsgKlxuJiM0MzsgKiBXaXRob3V0IHRoZSBmaXgsIHRoZSBOTUkgdXBkYXRlIHJlbGVhc2VzIHRoZSBvbGQga3B0ciBhbmQgcHJvYmVfZWxlbSgpXG4mIzQzOyAqIG9ic2VydmVzIE5VTEwgaW4gdGhlIHNsb3Q7IHdpdGggdGhlIGZpeCB0aGUgb2xkIGtwdHIgaXMgaW5oZXJpdGVkIGFuZFxuJiM0MzsgKiBwcm9iZV9lbGVtKCkgb2JzZXJ2ZXMgYSBub24tTlVMTCBwb2ludGVyLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmFsX3Qge1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCBfX2twdHIgKnRzaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxNik7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTMyKTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7XG4mIzQzO30gcmh0YWIgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgNCk7XG4mIzQzO1x0X190eXBlKGtleSwgX191MzIpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0Mzt9IGNvdW50ZXJzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKiAwOiBpbml0IG9rLCAxOiBubWkgdXBkYXRlIG9rLCAyOiBwcm9iZSB4Y2hnIG5vbi1OVUxMLCAzOiBwcm9iZSB4Y2hnIE5VTEwgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJ1bXAodTMyIGlkeClcbiYjNDM7e1xuJiM0MztcdHU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2Y291bnRlcnMsIFx1MDAyNmlkeCk7XG4mIzQzO1xuJiM0MztcdGlmICh2KVxuJiM0MztcdFx0KCp2KSYjNDM7JiM0Mzs7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4mIzQzO2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cGVyZl9ldmVudFwmIzM0OylcbiYjNDM7aW50IG5taV91cGRhdGUoc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGEgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2YWxfdCB2YWwgPSB7fTtcbiYjNDM7XHR1MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCBCUEZfQU5ZKSA9PSAwKVxuJiM0MztcdFx0YnVtcCgxKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBpbml0X2VsZW0odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZhbF90ICp2YWw7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkO1xuJiM0MztcdHUzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJodGFiLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0dGFzayA9IGJwZl90YXNrX2FjcXVpcmUoYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCkpO1xuJiM0MztcdGlmICghdGFzaylcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2dmFsLVx1MDAzZXRzaywgdGFzayk7XG4mIzQzO1x0aWYgKG9sZClcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRidW1wKDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IHByb2JlX2VsZW0odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZhbF90ICp2YWw7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpvbGQ7XG4mIzQzO1x0dTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnZhbC1cdTAwM2V0c2ssIE5VTEwpO1xuJiM0MztcdGlmIChvbGQpIHtcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRcdGJ1bXAoMik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJ1bXAoMyk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2ZhNmFkNzM3YzQ3MTdjNTg0OGIwMTUzODBhNjM2NjAwNWNjY2MyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTA6MTk6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCmluZGV4IDlmMzk0ZTFhYTJlODUuLjcwZmExZTFiNGIwMDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0yODY1LDE0ICYjNDM7Mjg2NSwyMyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAlyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7CiB9CiAKLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwKLQkJCQkJc3RydWN0IHJodGFiX2VsZW0gKmVsZW0pCiYjNDM7c3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwKJiM0MzsJCQkJc3RydWN0IHJodGFiX2VsZW0gKmVsZW0pCiB7CiAJaWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLSZndDttYXAucmVjb3JkKSkKIAkJcmV0dXJuOwogCi0JYnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi0mZ3Q7bWFwLnJlY29yZCwKLQkJCSAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKJiM0MzsJLyoKJiM0MzsJICogT25seSBjYW5jZWwgTk1JLXNhZmUgZmllbGRzICh0aW1lciwgd29ya3F1ZXVlLCB0YXNrX3dvcmspIGhlcmUuCiYjNDM7CSAqIGtwdHIvdXB0ci9saXN0L3JidHJlZSBkZXN0cnVjdGlvbiBtdXN0IG5vdCBydW4gZnJvbSBhcmJpdHJhcnkgQlBGCiYjNDM7CSAqIGV4ZWN1dGlvbiBjb250ZXh0cyAoZS5nLiBOTUkpLCBzbyBsZWF2ZSB0aG9zZSBmaWVsZHMgYXR0YWNoZWQgdG8KJiM0MzsJICogdGhlIHJlY3ljbGVkIGVsZW1lbnQgYW5kIGxldCByaHRhYl9tZW1fZHRvcigpIGRlc3Ryb3kgdGhlbSBvbmNlIHRoZQomIzQzOwkgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzCiYjNDM7CSAqIGludHJvZHVjZWQgYnkgYTNhODFkMjQ3NjUxICgmIzM0O2JwZjogQ2FuY2VsIHNwZWNpYWwgZmllbGRzIG9uIG1hcCB2YWx1ZQomIzQzOwkgKiByZWN5Y2xlJiMzNDspLgomIzQzOwkgKi8KJiM0MzsJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtyaHRhYi0mZ3Q7bWFwLAomIzQzOwkJCQkgICAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKIH0KIAogc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpCkBAIC0yOTY0LDggJiM0MzsyOTczLDggQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHYKIAkJcmh0YWJfcmVhZF9lbGVtX3ZhbHVlKCZhbXA7cmh0YWItJmd0O21hcCwgY29weSwgZWxlbSwgZmxhZ3MpOwogCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBjb3B5KTsKIAl9Ci0JLyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi8KLQlyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pOwomIzQzOwkvKiBDYW5jZWwgTk1JLXNhZmUgZmllbGRzOyBmdWxsIGRlc3RydWN0aW9uIGhhcHBlbnMgaW4gcmh0YWJfbWVtX2R0b3IgKi8KJiM0MzsJcmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiAJYnBmX21lbV9jYWNoZV9mcmVlX3JjdSgmYW1wO3JodGFiLSZndDttYSwgZWxlbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMDI0LDEwICYjNDM7MzAzMywxMSBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbAogCSAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy4KIAkgKgogCSAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzLwotCSAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlbSBhZnRlciB0aGUgY29weQotCSAqIHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3MuCiYjNDM7CSAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlIE5NSS1zYWZlIG9uZXMgYWZ0ZXIKJiM0MzsJICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAmIzM5O3MgdXBkYXRlIHNlbWFudGljczsgcmVmZXJlbmNlZCBrcHRycwomIzQzOwkgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuCiAJICovCi0Jcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTsKJiM0MzsJcmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43OWJkY2RhOTU1NTU3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jCkBAIC0wLDAgJiM0MzsxLDg3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtyaHRhYl9rcHRyLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIF9fdTY0IHJlYWRfY291bnRlcihzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbCwgdTMyIGlkeCkKJiM0Mzt7CiYjNDM7CV9fdTY0IHZhbHNbbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCldOwomIzQzOwlfX3U2NCBzdW0gPSAwOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwllcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuY291bnRlcnMpLCAmYW1wO2lkeCwgdmFscyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb29rdXBfY291bnRlciYjMzQ7KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGliYnBmX251bV9wb3NzaWJsZV9jcHVzKCk7IGkmIzQzOyYjNDM7KQomIzQzOwkJc3VtICYjNDM7PSB2YWxzW2ldOwomIzQzOwlyZXR1cm4gc3VtOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfcmh0YWJfa3B0cih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyID0gewomIzQzOwkJLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CQkuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkJLmZyZXEgPSAxLAomIzQzOwkJLnNhbXBsZV9mcmVxID0gcmVhZF9wZXJmX21heF9zYW1wbGVfZnJlcSgpLAomIzQzOwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CX07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7CiYjNDM7CXN0cnVjdCByaHRhYl9rcHRyICpza2VsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwlfX3U2NCB6ZXJvID0gMDsKJiM0MzsJaW50IHBtdV9mZDsKJiM0MzsKJiM0MzsJc2tlbCA9IHJodGFiX2twdHJfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBlbGVtZW50IGFuZCBzdGFzaCBhIHJlZmVyZW5jZWQgdGFzayBrcHRyIGluIGl0LiAqLwomIzQzOwlpZiAoIUFTU0VSVF9PSyhicGZfbWFwX3VwZGF0ZV9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMucmh0YWIpLAomIzQzOwkJCQkJICAgJmFtcDtrZXksICZhbXA7emVybywgQlBGX0FOWSksICYjMzQ7Y3JlYXRlX2VsZW0mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuaW5pdF9lbGVtKSwKJiM0MzsJCQkJCSAgICAgICZhbXA7dG9wdHMpLCAmIzM0O3Rlc3RfcnVuX2luaXQmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O2luaXRfcmV0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXBtdV9mZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sICZhbXA7YXR0ciwgLTEsIDAsIC0xLCAwKTsKJiM0MzsJaWYgKHBtdV9mZCAmbHQ7IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CXNrZWwtJmd0O2xpbmtzLm5taV91cGRhdGUgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3BlcmZfZXZlbnQoc2tlbC0mZ3Q7cHJvZ3Mubm1pX3VwZGF0ZSwKJiM0MzsJCQkJCQkJCXBtdV9mZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5ubWlfdXBkYXRlLCAmIzM0O2F0dGFjaF9wZXJmX2V2ZW50JiMzNDspKSB7CiYjNDM7CQljbG9zZShwbXVfZmQpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTGV0IHRoZSBOTUkgaGFuZGxlciBvdmVyd3JpdGUgdGhlIGVsZW1lbnQuICovCiYjNDM7CXVzbGVlcCgxMDAwMDApOwomIzQzOwomIzQzOwlicGZfbGlua19fZGVzdHJveShza2VsLSZndDtsaW5rcy5ubWlfdXBkYXRlKTsKJiM0MzsJc2tlbC0mZ3Q7bGlua3Mubm1pX3VwZGF0ZSA9IE5VTEw7CiYjNDM7CWNsb3NlKHBtdV9mZCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZQomIzQzOwkgKiBwYXRoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMsIG1pcnJvcmluZyBoYXNoIG1hcCBzZW1hbnRpY3MuCiYjNDM7CSAqIEJlZm9yZSB0aGUgZml4IHRoZSBrcHRyIHdhcyByZWxlYXNlZCBmcm9tIHRoZSBOTUkgY29udGV4dCBhbmQgdGhlCiYjNDM7CSAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLgomIzQzOwkgKi8KJiM0MzsJdG9wdHMucmV0dmFsID0gMDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MucHJvYmVfZWxlbSksCiYjNDM7CQkJCQkgICAgICAmYW1wO3RvcHRzKSwgJiMzNDt0ZXN0X3J1bl9wcm9iZSYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIDAsICYjMzQ7cHJvYmVfcmV0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsICYjMzQ7eGNoZ19ub25fbnVsbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHJlYWRfY291bnRlcihza2VsLCAzKSwgMCwgJiMzNDt4Y2hnX251bGwmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlyaHRhYl9rcHRyX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI1ODAwYTJlMjRlNjMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jCkBAIC0wLDAgJiM0MzsxLDEwMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZlcmlmeSB0aGF0IGEgcmh0YWIgdmFsdWUgdXBkYXRlIGlzc3VlZCBmcm9tIGEgcGVyZl9ldmVudCAoTk1JKSBwcm9ncmFtCiYjNDM7ICogZG9lcyBub3QgZWFnZXJseSBkZXN0cm95IHJlZmVyZW5jZWQga3B0cnMuIHJodGFiIG11c3QgbWF0Y2ggdGhlIGhhc2ggbWFwCiYjNDM7ICogc2VtYW50aWNzIGludHJvZHVjZWQgYnkgY29tbWl0IGEzYTgxZDI0NzY1MSAoJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcwomIzQzOyAqIG9uIG1hcCB2YWx1ZSByZWN5Y2xlJiMzNDspOiBvbmx5IE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKQomIzQzOyAqIGFyZSBjYW5jZWxsZWQgb24gdXBkYXRlL2RlbGV0ZSwgd2hpbGUga3B0cnMgc3RheSBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWQKJiM0MzsgKiBlbGVtZW50IHVudGlsIGl0IGlzIGV2ZW50dWFsbHkgZnJlZWQuCiYjNDM7ICoKJiM0MzsgKiBXaXRob3V0IHRoZSBmaXgsIHRoZSBOTUkgdXBkYXRlIHJlbGVhc2VzIHRoZSBvbGQga3B0ciBhbmQgcHJvYmVfZWxlbSgpCiYjNDM7ICogb2JzZXJ2ZXMgTlVMTCBpbiB0aGUgc2xvdDsgd2l0aCB0aGUgZml4IHRoZSBvbGQga3B0ciBpcyBpbmhlcml0ZWQgYW5kCiYjNDM7ICogcHJvYmVfZWxlbSgpIG9ic2VydmVzIGEgbm9uLU5VTEwgcG9pbnRlci4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztzdHJ1Y3QgdmFsX3QgewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0c2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxNik7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTsKJiM0MzsJX190eXBlKGtleSwgX191MzIpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7CiYjNDM7fSByaHRhYiBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgNCk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBfX3U2NCk7CiYjNDM7fSBjb3VudGVycyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKiAwOiBpbml0IG9rLCAxOiBubWkgdXBkYXRlIG9rLCAyOiBwcm9iZSB4Y2hnIG5vbi1OVUxMLCAzOiBwcm9iZSB4Y2hnIE5VTEwgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnVtcCh1MzIgaWR4KQomIzQzO3sKJiM0MzsJdTY0ICp2ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2NvdW50ZXJzLCAmYW1wO2lkeCk7CiYjNDM7CiYjNDM7CWlmICh2KQomIzQzOwkJKCp2KSYjNDM7JiM0Mzs7CiYjNDM7fQomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MzsKJiM0MztTRUMoJiMzNDtwZXJmX2V2ZW50JiMzNDspCiYjNDM7aW50IG5taV91cGRhdGUoc3RydWN0IGJwZl9wZXJmX2V2ZW50X2RhdGEgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2YWxfdCB2YWwgPSB7fTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CWlmIChicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cmh0YWIsICZhbXA7a2V5LCAmYW1wO3ZhbCwgQlBGX0FOWSkgPT0gMCkKJiM0MzsJCWJ1bXAoMSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGluaXRfZWxlbSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmFsX3QgKnZhbDsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkOwomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3JodGFiLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CXRhc2sgPSBicGZfdGFza19hY3F1aXJlKGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpKTsKJiM0MzsJaWYgKCF0YXNrKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2YWwtJmd0O3RzaywgdGFzayk7CiYjNDM7CWlmIChvbGQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKG9sZCk7CiYjNDM7CWJ1bXAoMCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IHByb2JlX2VsZW0odm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHZhbF90ICp2YWw7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkOwomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3JodGFiLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2YWwtJmd0O3RzaywgTlVMTCk7CiYjNDM7CWlmIChvbGQpIHsKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2Uob2xkKTsKJiM0MzsJCWJ1bXAoMik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlidW1wKDMpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJIQVNIIE1hcHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UsIGp1c3QgYSByZW5hbWU6IGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHRvIGByaHRhYl9jYW5jZWxfZmllbGRzYC4gQnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gTm93LCBpbnN0ZWFkIG9mIHVzaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCwgd2UmIzM5O3JlIGNhbGxpbmcgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpbiB0aGUgcmVuYW1lZCBmdW5jdGlvbi4KClRoZSBjb21tZW50IGNsYXJpZmllcyB0aGUgKndoeSo6IHdlJiMzOTtyZSBvbmx5IGNhbmNlbGxpbmcgJiMzNDtOTUktc2FmZSYjMzQ7IGZpZWxkcyBsaWtlIHRpbWVycywgd29ya3F1ZXVlcywgYW5kIHRhc2tfd29yayBpbiB0aGlzIGNvbnRleHQuIFRoZSBrcHRyL3VwdHIvbGlzdC9yYnRyZWUgZGVzdHJ1Y3Rpb24gaXMgdG9vIHJpc2t5IHRvIHJ1biBpbiBhcmJpdHJhcnkgQlBGIGNvbnRleHRzIChOTUksIGZvciBleGFtcGxlKS4gVGhvc2UgZmllbGRzIGFyZSBiZWluZyBsZWZ0IGF0dGFjaGVkIGFuZCBoYW5kbGVkIGluIGByaHRhYl9tZW1fZHRvcigpYCBsYXRlci4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwhIFNvLCBmdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGZvciBgQlBGX01BUF9UWVBFX1JIQVNIYCwgd2hpY2ggdGhpcyBjb2RlIGlzIGNsZWFybHkgdGllZCB0by4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIGBCUEZfTUFQX1RZUEVfUkhBU0hgIGlzIHdoYXQgSSYjMzk7bSBmb2N1c2VkIG9uIGhlcmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYSByZWNlbnQgYWRkaXRpb24gb3IgaWYgaXQmIzM5O3MgYmVlbiBhcm91bmQgZm9yIGEgd2hpbGUuIExldCBtZSBkbyBhIHF1aWNrIGdyZXAgZm9yIGBCUEZfTUFQX1RZUEVfUkhBU0hgIHRvIGdldCBhIHNlbnNlIG9mIGl0cyBoaXN0b3J5IHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX01BUF9UWVBFX1JIQVNIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA0OS1cdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XHRCUEZfTUFQX1RZUEVfUkhBU0gsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cdF9fTUFYX0JQRl9NQVBfVFlQRVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1Ny1cdFx0ICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxNTU4Olx0XHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTktXHRcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTAwPXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX21hcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyNi1cdFx0IG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJSQVkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL21hcF9pdGVyLmM6MTI3Olx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSClcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjgtXHRcdGdvdG8gcHV0X21hcDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjQzPXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjg3LVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyODg6XHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODktXHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzAyLVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMDM6XHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDQtXHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE0LVx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMTU6XHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTYtXHRcdFx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzcwPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQwOC1cdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MDk6XHQgICAgYXR0ci1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDEwLVx0ICAgIGF0dHItXHUwMDNlbWFwX2V4dHJhICE9IDApIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDgwLVx0Y2FzZSBCUEZfTUFQX1RZUEVfSEFTSDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0ODE6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0ODItXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSDpcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMjA1PXN0YXRpYyBpbnQgbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2NC1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIyNjU6XHRcdCAgIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0ggfHxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIyNjYtXHRcdCAgIG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc3NDU9c3RhdGljIGludCBjaGVja19tYXBfcHJvZ19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzkzLVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Nzk0Olx0XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5NS1cdFx0Y2FzZSBCUEZfTUFQX1RZUEVfTFJVX0hBU0g6XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9MTYzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWFwX3R5cGVfbmFtZVtdID0ge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVx0W0JQRl9NQVBfVFlQRV9JTlNOX0FSUkFZXVx0XHQ9IFwmIzM0O2luc25fYXJyYXlcJiMzNDssXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcdFtCUEZfTUFQX1RZUEVfUkhBU0hdXHRcdFx0PSBcJiMzNDtyaGFzaFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMjAwLX07XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zMTEtXHRcdGJyZWFrO1xudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MzEyOlx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zMTMtXHRcdG9wdHMubWFwX2ZsYWdzXHQ9IEJQRl9GX05PX1BSRUFMTE9DO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01MC1cdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsIG1hcF90eXBlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo1MTpcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtNTItXHRcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04MS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM6ODI6XHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODMtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY3LVx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjE2ODpcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cdFx0bWFwX2ZsYWdzIHw9IEJQRl9GX05PX1BSRUFMTE9DO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MjExPXN0YXRpYyB2b2lkIHJoYXNoX3NldHVwKHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxMi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcdGhhc2htYXBfbG9va3VwX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxNC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTE1NT1zdGF0aWMgdm9pZCBodGFiX21lbV9zZXR1cF9pbXBsKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXHRicGZfbWFwX19zZXRfbWF4X2VudHJpZXMobWFwLCBNQVgoODE5MiwgNjQgKiBlbnYubnJfY3B1cykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjE4NTpcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXHUwMDI2XHUwMDI2IGFyZ3MucHJlYWxsb2NhdGVkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhtYXAsIGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0yMjk9c3RhdGljIHZvaWQgcmh0YWJfbWVtX3NldHVwKHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYzoyMzE6XHRodGFiX21lbV9zZXR1cF9pbXBsKEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jPTQ2PXN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jOjUyOlx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXCYjMzQ7cmhhc2hfZXh0cmFcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUzLVx0XHRcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcdTAwMjZvcHRzKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM6OTpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yMj1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM6MjM6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTI0LVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmM9MjU9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmM6MjY6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMtMjctXHRfX3VpbnQobWF4X2VudHJpZXMsIDE2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjY2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBNYXAgTW9kaWZpY2F0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgdGhpcyBgQlBGX01BUF9UWVBFX1JIQVNIYCB0eXBlLCBhbmQgYSBwYXRjaCB0aGF0JiMzOTtzIHBsYXlpbmcgd2l0aCBpdC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgdG8gdXNlIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2AgaW5zdGVhZCBvZiBgYnBmX29ial9mcmVlX2ZpZWxkc2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0IHRoaXMgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIOKAkyB0aGlzIHNjcmVhbXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCBtZSBzZWXigKYgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGZsb3cuIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBpdCBpcyB1c2VkLiBSaWdodCwgYHJodGFiX2NhbmNlbF9maWVsZHNgIGlzIGNhbGxlZCBieSBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIEhvbGQgb27igKYgaXNuJiMzOTt0IGByaHRhYl9jYW5jZWxfZmllbGRzYCBhICpzdGF0aWMqIGZ1bmN0aW9uPyBNZWFuaW5nIGl0IGlzbiYjMzk7dCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHk/IE9rYXksIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBUaGF0IG1lYW4gaXQgaXMgb25seSB1c2VkIGludGVybmFsbHkuIFNvIHRoZSBjYWxsZXJzICphcmUqIHRoZSB0d28gdGhhdCBhcmUgbm90IHN0YXRpYy4gT2theSwgbGV0JiMzOTtzIHZlcmlmeSDigJMgYXJlICp0aGV5KiBzdGF0aWM/IElmIHRoZXkgYXJlbiYjMzk7dCwgdGhlbiB3ZSBoYXZlIGEgcGF0aCB0byBmdXp6LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX2RlbGV0ZV9lbGVtfHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOD1zdGF0aWMgdm9pZCByaHRhYl9yZWFkX2VsZW1fdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqZHN0LCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0OTpzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTAtXHRcdFx0ICAgICB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4Mz1zdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk0Olx0cmV0dXJuIHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBlbGVtLCBOVUxMLCAwKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTUtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5OTc9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxMi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMTM6XHRyZXR1cm4gcmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGVsZW0sIHZhbHVlLCBmbGFncyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDE0LX1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMTUtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDE2OnN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKnZhbHVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxNy1cdFx0XHRcdCAgICAgIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA0ND1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDU3LVx0aWYgKGVsZW0pXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDU4Olx0XHRyZXR1cm4gcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhtYXAsIGVsZW0sIHZhbHVlLCBtYXBfZmxhZ3MpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA1OS1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDk3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA5ODpcdFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCB0bXAsIHZhbHVlLCBtYXBfZmxhZ3MpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzA5OS1cdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjU1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzU4LVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0b3RhbDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzU5Olx0XHRcdHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBkZWxfZWxlbXNbaV0sIE5VTEwsIDApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM2MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgUmVkLUJsYWNrIFRyZWUgTWFwIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXkgbWFwIG9wZXJhdGlvbnMgZXhwb3NlZCBieSB0aGUgUmVkLUJsYWNrIFRyZWUgbWFwLiBJdCBzZWVtcyBsaWtlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgYXJlIHRoZSBwcmltYXJ5LCBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgbWFuaXB1bGF0aW5nIHRoZSBtYXAuIFRoYXQgbGFzdCBvbmUgd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmUgaXMgYSBiaXQgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsbHkgaW50ZXJuYWwgb3IgYmF0Y2gtb3JpZW50ZWQgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCB0aGVzZSBzZWVtIHRvIGJlIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdW5kZXJzdGFuZC4KClRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGByaHRhYl9tYXBfb3BzYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaG9va2VkIHVwLCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgUmVkLUJsYWNrIFRyZWUgaW1wbGVtZW50YXRpb24sIGFuZCB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIG1hcCBvcGVyYXRpb25zIGNvbnRleHQuIEtub3dpbmcgdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3QgZGVmaW5pdGlvbiB3aWxsIHRlbGwgbWUgaG93IGV2ZXJ5dGhpbmcgaXMgYm91bmQgdG9nZXRoZXIuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgdG8gYmVnaW4gdG8gZnVsbHkgZ3Jhc3AgaG93IHRoZXNlIGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRhYl9tYXBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjQ9QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjU6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI2LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTg5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYHJodGFiX21hcF9vcHNgIE1hcCBPcGVyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIG1hcCBvcGVyYXRpb25zIGZvciBgcmh0YWJfbWFwX29wc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtYXBzIGFyZSBhY3R1YWxseSBmdW5jdGlvbmluZyB1bmRlciB0aGUgaG9vZC4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zPyBBcmUgd2UgdGFsa2luZyBhYm91dCByZWFkcywgd3JpdGVzLCBpbnNlcnRzLCBkZWxldGVzLCB1cGRhdGVzLCBsb29rdXBzIOKAkyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGludGVyYWN0aW9uPyBJ4oCZbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBlZmZpY2llbmN5OyBob3cgYXJlIHRoZXNlIGltcGxlbWVudGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoaXMgY2FsbHMgZm9yIGEgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgdGhlIGNvZGUgd2hlcmUgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHNlZSB0aGUgcHJlY2lzZSBpbXBsZW1lbnRhdGlvbnMsIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCBhbmQgdGhlIGFsZ29yaXRobXMgaW52b2x2ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCDigJMgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGVzZSBvcGVyYXRpb25zIGRlZmluZXMgdGhlIHByYWN0aWNhbCBjYXBhYmlsaXRpZXMgb2YgdGhlIGVudGlyZSBgcmh0YWJgIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBlYWNoIG9wZXJhdGlvbi4gQXJlIHRoZXkgdGhyZWFkLXNhZmU/IERvIHRoZXkgdXRpbGl6ZSBhbnkgbG9ja2luZyBtZWNoYW5pc21zPyBXaGF0IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zPyBTcGVjaWZpY2FsbHksIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gYSBzeXN0ZW0gd2l0aCBjb25jdXJyZW5jeT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyB0cmFkZS1vZmZzIGhlcmUsIGdpdmVuIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGxpYnJhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjQ9QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjU6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI2LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYxMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQlBGIGhhc2ggdGFibGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gdGhlIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAzNTI1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGhhc2ggdGFibGUmIzM5O3Mgd29ya2luZ3MuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBzb21ldGhpbmcgc3BlY2lmaWMgYXQgdGhhdCBsb2NhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNTIwOlx0XHQuZmluaV9zZXFfcHJpdmF0ZSA9IGJwZl9pdGVyX2Zpbmlfcmhhc2hfbWFwLFxuMzUyMTpcdFx0LnNlcV9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3NlcV9yaGFzaF9tYXBfaW5mbyksXG4zNTIyOlx0fTtcbjM1MjM6XHRcbjM1MjQ6XHRCVEZfSURfTElTVF9TSU5HTEUocmh0YWJfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3JodGFiKVxuMzUyNTpcdGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuMzUyNjpcdFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxuMzUyNzpcdFx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcbjM1Mjg6XHRcdC5tYXBfYWxsb2MgPSByaHRhYl9tYXBfYWxsb2MsXG4zNTI5Olx0XHQubWFwX2ZyZWUgPSByaHRhYl9tYXBfZnJlZSxcbjM1MzA6XHRcdC5tYXBfZ2V0X25leHRfa2V5ID0gcmh0YWJfbWFwX2dldF9uZXh0X2tleSxcbjM1MzE6XHRcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcbjM1MzI6XHRcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcbjM1MzM6XHRcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXG4zNTM0Olx0XHQubWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSxcbjM1MzU6XHRcdC5tYXBfdXBkYXRlX2VsZW0gPSByaHRhYl9tYXBfdXBkYXRlX2VsZW0sXG4zNTM2Olx0XHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxuMzUzNzpcdFx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXG4zNTM4Olx0XHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcbjM1Mzk6XHRcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG4zNTQwOlx0XHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcbjM1NDE6XHRcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcbjM1NDI6XHRcdEJBVENIX09QUyhyaHRhYiksXG4zNTQzOlx0XHQubWFwX2J0Zl9pZCA9IFx1MDAyNnJodGFiX21hcF9idGZfaWRzWzBdLFxuMzU0NDpcdFx0Lml0ZXJfc2VxX2luZm8gPSBcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxuMzU0NTpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDM3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiB0aGUgSGFzaHRhYmxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb3JlIG9wZXJhdGlvbnMgaXQgdG91Y2hlcy4gSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kaWZpZXMgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGFueSBiYXRjaCBvcGVyYXRpb25zLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHJldmVhbHMgc29tZXRoaW5nIEkgaW5pdGlhbGx5IG1pc3NlZDogaXQgYWxzbyBtb2RpZmllcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AsIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gTm93LCBjb25zaWRlcmluZyB0aGUgY2FsbCBjaGFpbiwgYHJodGFiX2NhbmNlbF9maWVsZHNgIGlzIHVzZWQgYnkgdGhlIGluaXRpYWwgZm9jdXMgZnVuY3Rpb25zIEkgbWVudGlvbmVkLCBzcGVjaWZpY2FsbHkgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYWxzbyBieSBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLiBPa2F5LCBzbyBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiBmb3Igbm93LgoKVGhlbiwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMsIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBnb3RjaGFzLiBSaWdodCwgdGhlIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBlbnN1cmUgQlBGIG1hcHMgYXJlIGVuYWJsZWQsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19CUEZfU1lTQ0FMTGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBpcyBvbiBgQlBGX1NZU0NBTExgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHN5c3RlbSBjYWxsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgsIHNvIGl0JiMzOTtzIHRoZSBhbmNob3IgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIHN1c3BlY3Qgd2XigJlyZSBkZWFsaW5nIHdpdGggbW9yZSB0aGFuIGp1c3QgYSBzaW5nbGUgZnVuY3Rpb24sIHRoZXJlZm9yZSwgSSBzaG91bGQgYW5hbHl6ZSB0aGUgY29uZmlndXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeXN0ZW0gY2FsbC4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluc3RpbmN0IGlzIHRvIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIGZvciBgQlBGX01BUF9UWVBFX1JIQVNIYC4gSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBudWFuY2VzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcgaW4gdGhlIHJoYXNoIG1hcCB0eXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTUFQX1RZUEVfUkhBU0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XHRcdCBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cdFx0Z290byBwdXRfbWFwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNDM9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODctXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI4ODpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI4OS1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDItXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMzpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwNC1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzNzA9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDA4LVx0ICAgIGF0dHItXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSRU5BIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQwOTpcdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MTAtXHQgICAgYXR0ci1cdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0ODAtXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ4MTpcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ4Mi1cdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMDU9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMjY0LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI2NTpcdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2Ni1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzc0NT1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3OTMtXHRcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3OTQ6XHRcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Nzk1LVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlx0QlBGX01BUF9UWVBFX1JIQVNILFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXHRfX01BWF9CUEZfTUFQX1RZUEVcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXHRcdCAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcdFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVx0XHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xOTgtXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXHRcdD0gXCYjMzQ7aW5zbl9hcnJheVwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTk5Olx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cdFx0XHQ9IFwmIzM0O3JoYXNoXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cdFx0YnJlYWs7XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cdFx0b3B0cy5tYXBfZmxhZ3NcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTM3PXN0YXRpYyB2b2lkIGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVx0YnBmX21hcF9fc2V0X3R5cGUoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhjdHguc2tlbC1cdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz04MD1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcdGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0xNTE9c3RhdGljIHZvaWQgaGFzaG1hcF9sb29rdXBfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXHRtYXBfZmxhZ3MgPSBhcmdzLm1hcF9mbGFncztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY5LVx0XHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MjEzOlx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4NC1cdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1Olx0aWYgKG1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg2LVx0XHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IH5CUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzItfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XHRyZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1JIQVNILCBcJiMzNDtyaGFzaF9leHRyYVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTMtXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jLTEwLVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTIyPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzoyMzpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMjQtXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYz0yNT1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYzoyNjpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYy0yNy1cdF9fdWludChtYXhfZW50cmllcywgMTYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyB0aGUgQlBGIE1hcCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBCUEZfTUFQX1RZUEVfUkhBU0hgIGlzIGFjdHVhbGx5IGEgc3RhbmRhcmQgQlBGIG1hcCB0eXBlLiBJdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgQlBGIG1hcHMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24g4oCTIGlmIHRoYXQmIzM5O3MgZW5hYmxlZCwgdGhlbiB0aGUgcmVsZXZhbnQgY29kZSBmb3IgdGhlc2UgaGFzaCBtYXBzIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb21lIGludG8gcGxheSBoZXJlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aGF0IGNvbnRyb2xzIHRoaXMgbW9kdWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hlcmUgZWxzZSB0byBsb29rIGlmIEkgbmVlZCB0byBhZGp1c3QgaG93IHRoaXMgY29tcG9uZW50IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXNodGFiLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuLS1cbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU9MTc9c2VsaW51eC15IDo9IGF2Yy5vIGhvb2tzLm8gc2VsaW51eGZzLm8gbmV0bGluay5vIG5sbXNndGFiLm8gbmV0aWYubyBcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xOC1cdCAgICAgbmV0bm9kZS5vIG5ldHBvcnQubyBzdGF0dXMubyBpbml0Y2FsbHMubyBcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZToxOTpcdCAgICAgc3MvZWJpdG1hcC5vIHNzL2hhc2h0YWIubyBzcy9zeW10YWIubyBzcy9zaWR0YWIubyBzcy9hdnRhYi5vIFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlLTIwLVx0ICAgICBzcy9wb2xpY3lkYi5vIHNzL3NlcnZpY2VzLm8gc3MvY29uZGl0aW9uYWwubyBzcy9tbHMubyBzcy9jb250ZXh0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0OTcKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIENvbnNpZGVyYXRpb25zIGZvciB0aGUgUmVkLUJsYWNrIFRyZWUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgb25seSBjb25maWcgb3B0aW9uIEkgbmVlZCB0byB3b3JyeSBhYm91dCBoZXJlLiBOb3csIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBmdW5jdGlvbnMuIExldCBtZSBxdWlja2x5IGxpc3QgdGhlIG5vbi1zdGF0aWMgcHVibGljIGZ1bmN0aW9ucy4gQWhhLCBoZXJlIHRoZXkgYXJlOiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgPyBJdCAqaXMqIGEgc3RhdGljIG9uZSwgc28gSSBzaG91bGRuJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIHNwZWNpZmljIGRldGFpbHMgdGhlcmUuLi4gdGhvdWdoIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcHVibGljIGludGVyZmFjZSBvZiBiYXRjaCBvcGVyYXRpb25zLiBMZXQmIzM5O3MgbWFrZSBhIGNvbXBsZXRlIGxpc3QgaGVyZS4gVGhlIGJhdGNoIG9wZXJhdGlvbnMgYXJlOiBgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaGAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgcmh0YWJfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgcmh0YWJfbWFwX2RlbGV0ZV9iYXRjaGAuIE9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIGVhY2ggb2YgdGhlc2UgdG8gYXZvaWQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9iYXRjaHxyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2h8cmh0YWJfbWFwX3VwZGF0ZV9iYXRjaHxyaHRhYl9tYXBfZGVsZXRlX2JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDU9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNTU6c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1Ni1cdFx0XHRcdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTAtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzkxOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTItXHRcdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzkzLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzOTQ6XHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5NS19XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NzpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTgtXHRcdFx0XHRcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTkte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQwMDpcdHJldHVybiBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU0NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlLCB3aXRoIGEgKipib2xkZWQgaGVhZGVyKio6CgoqKkRpZ2dpbmcgaW50byB0aGUgYHJodGFiYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgcmh0YWJgIGNvZGUsIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkgc3RpY2tpbmcgb3V0LiBJdCBzZWVtcyBsaWtlIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBzZWVpbmcgZGVmaW5lZCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVuY2Fwc3VsYXRpb24gdGVjaG5pcXVlLCBhbmQgaXQgdHlwaWNhbGx5IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBIbW0sIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBvbmx5IGV4Y2VwdGlvbnMgd291bGQgYmUgdGhlIGZ1bmN0aW9ucyBleHBvc2VkIHRocm91Z2ggYHJodGFiX21hcF9vcHNgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBCdXQgaGFuZyBvbi4uLiB0aGVyZSYjMzk7cyBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYC4gSXNuJiMzOTt0IHRoYXQgYWxzbyBkZWNsYXJlZCBzdGF0aWM/IE5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBhbmQgdmVyaWZ5IGlmIG15IG9ic2VydmF0aW9uIGFib3V0IGl0IGJlaW5nIHN0YXRpYyBpcyBpbmRlZWQgY29ycmVjdC4gSWYgaXQgaXMgc3RhdGljLCB0aGF0IHJhaXNlcyBzb21lIHF1ZXN0aW9ucyBhYm91dCBob3cgdXBkYXRlcyBhcmUgaGFuZGxlZCBvdXRzaWRlIHRoZSBtYWluIG1hcCBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDE2PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDQ0OnN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA0NS17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyNT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTM0LVx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTM1Olx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MzYtXHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIE1hcCBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWFwIG9wZXJhdGlvbnMsIGFuZCB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IHRoZXkmIzM5O3JlIGFsbCAqc3RhdGljKiwgd2hpY2gsIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBpcyBub3QgaWRlYWwgZm9yIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIG1hcCBvcGVyYXRpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgbm90IGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGlzIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciB3b24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBjb21wbGljYXRlcyB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCgpOb3csIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCAqaXMqIG5vbi1zdGF0aWMgKGl0JiMzOTtzIGEgc3lzY2FsbCBlbnRyeSBwb2ludCEpLCBidXQgdGhhdCYjMzk7cyB0b28gZ2VuZXJpYyBmb3Igd2hhdCBJIG5lZWQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBtYXAgdHlwZSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBpZiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBpbmxpbmVkLiBBaCwgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGByaHRhYl9tYXBfb3BzYC4gQmVjYXVzZSBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCEgRXhjZWxsZW50ISBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IEkgbmVlZC4KClRoZXJlZm9yZSwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcy4gVGhleSBhcmUgbm90IGlubGluZWQsIGFuZCB0aGV5IHByb3ZpZGUgdGhlIHNwZWNpZmljIG1hcCBvcGVyYXRpb25zIEkgcmVxdWlyZS4gVGhlc2UgYXJlIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdOKAmXMgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGluIGEgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBteSB3b3JrLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4gSSBkb24mIzM5O3Qgd2FudCB0byBvdmVybG9vayBhbnkgb3RoZXIgcG9zc2libGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyND1CVEZfSURfTElTVF9TSU5HTEUocmh0YWJfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3JodGFiKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyNTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjYtXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDcxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcy4KCioqTmF2aWdhdGluZyB0aGUgYHJodGFiX21hcGAgU3RydWN0dXJlKioKClJpZ2h0LCBzbyB0aGUgYHJodGFiX21hcF9vcHNgIHN0cnVjdHVyZSBpdHNlbGYgaXNuJiMzOTt0IHN0YXRpYywgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBmdW5jdGlvbnMgd2l0aGluIGl0LCB0aGluZ3MgbGlrZSBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCB0aG9zZSAqYXJlKiBzdGF0aWMuIFRoZSBmYWN0IHRoYXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyB0YWtlbiBjbGFyaWZpZXMgdGhhdC4gSSB3aWxsIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIHVzZSB0aG9zZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucy4KCkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZyBlbHNlIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLi4uIGByaHRhYl9tZW1fZHRvcmAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbiYjMzk7dCBoYXZlIGl0IG9uIHRoZSB0b3Agb2YgbXkgbWluZCByaWdodCBub3cuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gVGhhdCBjb3VsZCBzaWduaWZpY2FudGx5IGFsdGVyIGhvdyBJIGFwcHJvYWNoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21lbV9kdG9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTI4Njg9c3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODc3LVx0ICogZXhlY3V0aW9uIGNvbnRleHRzIChlLmcuIE5NSSksIHNvIGxlYXZlIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0b1xua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg3ODpcdCAqIHRoZSByZWN5Y2xlZCBlbGVtZW50IGFuZCBsZXQgcmh0YWJfbWVtX2R0b3IoKSBkZXN0cm95IHRoZW0gb25jZSB0aGVcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4NzktXHQgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg4Ni1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODc6c3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODg4LXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTQ5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NzUtXHR9XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTc2Olx0LyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc3LVx0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAxNj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDM3LVx0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAmIzM5O3MgdXBkYXRlIHNlbWFudGljczsgcmVmZXJlbmNlZCBrcHRyc1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzAzODpcdCAqIHN0YXkgYXR0YWNoZWQgYW5kIGFyZSBkZXN0cm95ZWQgYnkgcmh0YWJfbWVtX2R0b3IoKS5cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMzktXHQgKi9cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTE5PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEyNC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMjU6XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2cmh0YWItXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAxMAoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBSaGFzaCBNYXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGByaHRhYl9tZW1fZHRvcmAgaXMgc3RhdGljLCB5ZXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIG5vdGU7IGl0IG1pZ2h0IGluZGljYXRlIGEgc3BlY2lmaWMgaW50ZXJhY3Rpb24gcG9pbnQuCgpMZXQgbWUgcXVpY2tseSBzY2FuIGZvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBjZW50cmFsIG9uZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHBlcnRhaW4gc3BlY2lmaWNhbGx5IHRvIGtwdHJzIGFuZCB0aGVzZSBmdW5jdGlvbiBjaGFuZ2VzLiBUaGUgdGVzdHMgdXNlIGBicGZfa3B0cl94Y2hnYCBhbmQgYGJwZl90YXNrX2FjcXVpcmVgLiBUaG9zZSB1c3VhbGx5IHB1bGwgaW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgdGhlIGBoYXNodGFiLmNgIHN0dWZmLCBpcyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIHN5bnRoZXNpemUgd2hhdCBJIGtub3cuIFRoaXMgaXMgd2hhdCBJJiMzOTttIGNvbmNsdWRpbmcgZnJvbSBteSByZXZpZXcgb2YgdGhlIGNoYW5nZXM6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseSwgeWVzLiBUaGVyZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgY3JpdGljYWwgYXJlYS4KKiAgICoqRm9jdXNTeW1ib2xzKio6IERlZmluaXRlbHkgZm9jdXMgb24gdGhlc2UgQlBGIG1hcCBvcGVyYXRpb25zOiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGFuZCwgY3J1Y2lhbGx5LCBgcmh0YWJfbWVtX2R0b3JgLiBUaGVzZSBhcmUgdGhlIHRvdWNocG9pbnRzIGZvciB0aGUgZml4LgoqICAgKipFbmFibGVDb25maWdzKio6IGBCUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW5hYmxlciBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgoqICAgKipSZWFzb25pbmcqKjogVGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgYSBidWcgaW4gdGhlIEJQRiByaGFzaCBtYXAgd2hlcmUgdXBkYXRpbmcgYW4gZWxlbWVudCBmcm9tIGFuIE5NSSBjb250ZXh0IGNhdXNlZCBwcmVtYXR1cmUsIHVuc2FmZSBkZXN0cnVjdGlvbiBvZiByZWZlcmVuY2VkIGtwdHJzLiBUaGUgcGF0Y2ggY2xldmVybHkgcmV3b3JrcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgdG8gb25seSBoYW5kbGUgTk1JLXNhZmUgZmllbGRzIGFuZCBkZWZlcnMgdGhlIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBtZWFucyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgcmVhY2hhYmxlIEJQRiBtYXAgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tZW1fZHRvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEwOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHNwZWNpYWwgQlBGIG1hcCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHVwdHJzLCBsaXN0cywgYW5kIHJidHJlZXMpIHdoZW4gYSBtYXAgZWxlbWVudCBpcyB1cGRhdGVkIG9yIGRlbGV0ZWQgaW4gYW4gTk1JIGNvbnRleHQuIFByZXZpb3VzbHksIGBicGZfb2JqX2ZyZWVfZmllbGRzKClgIHdhcyBjYWxsZWQsIHdoaWNoIGVhZ2VybHkgZGVzdHJveWVkIGFsbCBmaWVsZHMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5zYWZlIG9wZXJhdGlvbnMgKGxpa2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMpIGZyb20gYW4gTk1JIGNvbnRleHQuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cygpYCwgd2hpY2ggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcyAodGltZXJzLCB3b3JrcXVldWVzLCB0YXNrX3dvcmspIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIG9mIG90aGVyIGZpZWxkcyB0byBgcmh0YWJfbWVtX2R0b3IoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYW5kIGxpZmVjeWNsZSBidWcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIEtBU0FOIGlmIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGZyZWUpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTNmYTZhZDczN2M0NzE3YzU4NDhiMDE1MzgwYTYzNjYwMDVjY2NjMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDEwOjE5OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCA5ZjM5NGUxYWEyZTg1Li43MGZhMWUxYjRiMDA4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMjg2NSwxNCAmIzQzOzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJcmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpOwogfQogCi1zdGF0aWMgdm9pZCByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsCi0JCQkJCXN0cnVjdCByaHRhYl9lbGVtICplbGVtKQomIzQzO3N0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsCiYjNDM7CQkJCXN0cnVjdCByaHRhYl9lbGVtICplbGVtKQogewogCWlmIChJU19FUlJfT1JfTlVMTChyaHRhYi0mZ3Q7bWFwLnJlY29yZCkpCiAJCXJldHVybjsKIAotCWJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItJmd0O21hcC5yZWNvcmQsCi0JCQkgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKSBoZXJlLgomIzQzOwkgKiBrcHRyL3VwdHIvbGlzdC9yYnRyZWUgZGVzdHJ1Y3Rpb24gbXVzdCBub3QgcnVuIGZyb20gYXJiaXRyYXJ5IEJQRgomIzQzOwkgKiBleGVjdXRpb24gY29udGV4dHMgKGUuZy4gTk1JKSwgc28gbGVhdmUgdGhvc2UgZmllbGRzIGF0dGFjaGVkIHRvCiYjNDM7CSAqIHRoZSByZWN5Y2xlZCBlbGVtZW50IGFuZCBsZXQgcmh0YWJfbWVtX2R0b3IoKSBkZXN0cm95IHRoZW0gb25jZSB0aGUKJiM0MzsJICogZWxlbWVudCBpcyBldmVudHVhbGx5IGZyZWVkLiBUaGlzIG1hdGNoZXMgdGhlIGhhc2ggbWFwIHNlbWFudGljcwomIzQzOwkgKiBpbnRyb2R1Y2VkIGJ5IGEzYTgxZDI0NzY1MSAoJiMzNDticGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWUKJiM0MzsJICogcmVjeWNsZSYjMzQ7KS4KJiM0MzsJICovCiYjNDM7CWJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKCZhbXA7cmh0YWItJmd0O21hcCwKJiM0MzsJCQkJICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KQpAQCAtMjk2NCw4ICYjNDM7Mjk3Myw4IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2CiAJCXJodGFiX3JlYWRfZWxlbV92YWx1ZSgmYW1wO3JodGFiLSZndDttYXAsIGNvcHksIGVsZW0sIGZsYWdzKTsKIAkJY2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKCZhbXA7cmh0YWItJmd0O21hcCwgY29weSk7CiAJfQotCS8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovCi0Jcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTsKJiM0MzsJLyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovCiYjNDM7CXJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pOwogCWJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoJmFtcDtyaHRhYi0mZ3Q7bWEsIGVsZW0pOwogCXJldHVybiAwOwogfQpAQCAtMzAyNCwxMCAmIzQzOzMwMzMsMTEgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWwKIAkgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuCiAJICoKIAkgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy8KLQkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHkKLQkgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLgomIzQzOwkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZSBOTUktc2FmZSBvbmVzIGFmdGVyCiYjNDM7CSAqIHRoZSBjb3B5IHRvIG1hdGNoIGFycmF5bWFwJiMzOTtzIHVwZGF0ZSBzZW1hbnRpY3M7IHJlZmVyZW5jZWQga3B0cnMKJiM0MzsJICogc3RheSBhdHRhY2hlZCBhbmQgYXJlIGRlc3Ryb3llZCBieSByaHRhYl9tZW1fZHRvcigpLgogCSAqLwotCXJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiYjNDM7CXJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzliZGNkYTk1NTU1NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuYwpAQCAtMCwwICYjNDM7MSw4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7cmh0YWJfa3B0ci5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCByZWFkX2NvdW50ZXIoc3RydWN0IHJodGFiX2twdHIgKnNrZWwsIHUzMiBpZHgpCiYjNDM7ewomIzQzOwlfX3U2NCB2YWxzW2xpYmJwZl9udW1fcG9zc2libGVfY3B1cygpXTsKJiM0MzsJX191NjQgc3VtID0gMDsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShicGZfbWFwX19mZChza2VsLSZndDttYXBzLmNvdW50ZXJzKSwgJmFtcDtpZHgsIHZhbHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7bG9va3VwX2NvdW50ZXImIzM0OykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpOyBpJiM0MzsmIzQzOykKJiM0MzsJCXN1bSAmIzQzOz0gdmFsc1tpXTsKJiM0MzsJcmV0dXJuIHN1bTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLAomIzQzOwkJLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUywKJiM0MzsJCS5mcmVxID0gMSwKJiM0MzsJCS5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSwKJiM0MzsJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLAomIzQzOwl9OwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpOwomIzQzOwlzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsJX191NjQgemVybyA9IDA7CiYjNDM7CWludCBwbXVfZmQ7CiYjNDM7CiYjNDM7CXNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSB0aGUgZWxlbWVudCBhbmQgc3Rhc2ggYSByZWZlcmVuY2VkIHRhc2sga3B0ciBpbiBpdC4gKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0soYnBmX21hcF91cGRhdGVfZWxlbShicGZfbWFwX19mZChza2VsLSZndDttYXBzLnJodGFiKSwKJiM0MzsJCQkJCSAgICZhbXA7a2V5LCAmYW1wO3plcm8sIEJQRl9BTlkpLCAmIzM0O2NyZWF0ZV9lbGVtJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLmluaXRfZWxlbSksCiYjNDM7CQkJCQkgICAgICAmYW1wO3RvcHRzKSwgJiMzNDt0ZXN0X3J1bl9pbml0JiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgJiMzNDtpbml0X3JldCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlwbXVfZmQgPSBzeXNjYWxsKF9fTlJfcGVyZl9ldmVudF9vcGVuLCAmYW1wO2F0dHIsIC0xLCAwLCAtMSwgMCk7CiYjNDM7CWlmIChwbXVfZmQgJmx0OyAwKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlza2VsLSZndDtsaW5rcy5ubWlfdXBkYXRlID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9wZXJmX2V2ZW50KHNrZWwtJmd0O3Byb2dzLm5taV91cGRhdGUsCiYjNDM7CQkJCQkJCQlwbXVfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7bGlua3Mubm1pX3VwZGF0ZSwgJiMzNDthdHRhY2hfcGVyZl9ldmVudCYjMzQ7KSkgewomIzQzOwkJY2xvc2UocG11X2ZkKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIExldCB0aGUgTk1JIGhhbmRsZXIgb3ZlcndyaXRlIHRoZSBlbGVtZW50LiAqLwomIzQzOwl1c2xlZXAoMTAwMDAwKTsKJiM0MzsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3koc2tlbC0mZ3Q7bGlua3Mubm1pX3VwZGF0ZSk7CiYjNDM7CXNrZWwtJmd0O2xpbmtzLm5taV91cGRhdGUgPSBOVUxMOwomIzQzOwljbG9zZShwbXVfZmQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgb2xkIGtwdHIgbXVzdCBzdGlsbCBiZSBhdHRhY2hlZCB0byB0aGUgZWxlbWVudDogdGhlIE5NSSB1cGRhdGUKJiM0MzsJICogcGF0aCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzLCBtaXJyb3JpbmcgaGFzaCBtYXAgc2VtYW50aWNzLgomIzQzOwkgKiBCZWZvcmUgdGhlIGZpeCB0aGUga3B0ciB3YXMgcmVsZWFzZWQgZnJvbSB0aGUgTk1JIGNvbnRleHQgYW5kIHRoZQomIzQzOwkgKiBwcm9iZSBiZWxvdyB3b3VsZCBzZWUgTlVMTC4KJiM0MzsJICovCiYjNDM7CXRvcHRzLnJldHZhbCA9IDA7CiYjNDM7CWlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnByb2JlX2VsZW0pLAomIzQzOwkJCQkJICAgICAgJmFtcDt0b3B0cyksICYjMzQ7dGVzdF9ydW5fcHJvYmUmIzM0OykgfHwKJiM0MzsJICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCAmIzM0O3Byb2JlX3JldCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEocmVhZF9jb3VudGVyKHNrZWwsIDIpLCAxLCAmIzM0O3hjaGdfbm9uX251bGwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsICYjMzQ7eGNoZ19udWxsJiMzNDspOwomIzQzO291dDoKJiM0MzsJcmh0YWJfa3B0cl9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYwpAQCAtMCwwICYjNDM7MSwxMDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBLeWxpblNvZnQgQ28uLCBMdGQuICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhhdCBhIHJodGFiIHZhbHVlIHVwZGF0ZSBpc3N1ZWQgZnJvbSBhIHBlcmZfZXZlbnQgKE5NSSkgcHJvZ3JhbQomIzQzOyAqIGRvZXMgbm90IGVhZ2VybHkgZGVzdHJveSByZWZlcmVuY2VkIGtwdHJzLiByaHRhYiBtdXN0IG1hdGNoIHRoZSBoYXNoIG1hcAomIzQzOyAqIHNlbWFudGljcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhM2E4MWQyNDc2NTEgKCYjMzQ7YnBmOiBDYW5jZWwgc3BlY2lhbCBmaWVsZHMKJiM0MzsgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZSYjMzQ7KTogb25seSBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykKJiM0MzsgKiBhcmUgY2FuY2VsbGVkIG9uIHVwZGF0ZS9kZWxldGUsIHdoaWxlIGtwdHJzIHN0YXkgYXR0YWNoZWQgdG8gdGhlIHJlY3ljbGVkCiYjNDM7ICogZWxlbWVudCB1bnRpbCBpdCBpcyBldmVudHVhbGx5IGZyZWVkLgomIzQzOyAqCiYjNDM7ICogV2l0aG91dCB0aGUgZml4LCB0aGUgTk1JIHVwZGF0ZSByZWxlYXNlcyB0aGUgb2xkIGtwdHIgYW5kIHByb2JlX2VsZW0oKQomIzQzOyAqIG9ic2VydmVzIE5VTEwgaW4gdGhlIHNsb3Q7IHdpdGggdGhlIGZpeCB0aGUgb2xkIGtwdHIgaXMgaW5oZXJpdGVkIGFuZAomIzQzOyAqIHByb2JlX2VsZW0oKSBvYnNlcnZlcyBhIG5vbi1OVUxMIHBvaW50ZXIuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHZhbF90IHsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdHNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMTYpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIF9fdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgdmFsX3QpOwomIzQzO30gcmh0YWIgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDQpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gY291bnRlcnMgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7LyogMDogaW5pdCBvaywgMTogbm1pIHVwZGF0ZSBvaywgMjogcHJvYmUgeGNoZyBub24tTlVMTCwgMzogcHJvYmUgeGNoZyBOVUxMICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJ1bXAodTMyIGlkeCkKJiM0Mzt7CiYjNDM7CXU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtjb3VudGVycywgJmFtcDtpZHgpOwomIzQzOwomIzQzOwlpZiAodikKJiM0MzsJCSgqdikmIzQzOyYjNDM7OwomIzQzO30KJiM0MzsKJiM0MztleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzO2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cGVyZl9ldmVudCYjMzQ7KQomIzQzO2ludCBubWlfdXBkYXRlKHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmFsX3QgdmFsID0ge307CiYjNDM7CXUzMiBrZXkgPSAwOwomIzQzOwomIzQzOwlpZiAoYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO3JodGFiLCAmYW1wO2tleSwgJmFtcDt2YWwsIEJQRl9BTlkpID09IDApCiYjNDM7CQlidW1wKDEpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBpbml0X2VsZW0odm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IHZhbF90ICp2YWw7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKm9sZDsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtyaHRhYiwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwl0YXNrID0gYnBmX3Rhc2tfYWNxdWlyZShicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSk7CiYjNDM7CWlmICghdGFzaykKJiM0MzsJCXJldHVybiAyOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7dmFsLSZndDt0c2ssIHRhc2spOwomIzQzOwlpZiAob2xkKQomIzQzOwkJYnBmX3Rhc2tfcmVsZWFzZShvbGQpOwomIzQzOwlidW1wKDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBwcm9iZV9lbGVtKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2YWxfdCAqdmFsOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZDsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtyaHRhYiwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlvbGQgPSBicGZfa3B0cl94Y2hnKCZhbXA7dmFsLSZndDt0c2ssIE5VTEwpOwomIzQzOwlpZiAob2xkKSB7CiYjNDM7CQlicGZfdGFza19yZWxlYXNlKG9sZCk7CiYjNDM7CQlidW1wKDIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYnVtcCgzKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTg5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgQlBGIEhhc2h0YWJsZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBga2VybmVsL2JwZi9oYXNodGFiLmNgIOKAkyB0aGF0JiMzOTtzIHRoZSByZWFsLXRpbWUgaGFzaCB0YWJsZSBjb2RlLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIEkgc2VlIHRoZXkmIzM5O3JlIHJlbmFtaW5nIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHRvIGByaHRhYl9jYW5jZWxfZmllbGRzYCwgd2hpY2ggc291bmRzIGxpa2UgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgaW4gdGVybWlub2xvZ3ksIGxpa2VseSByZWZsZWN0aW5nIHRoZSBpbnRlbnQgb2YgdGhlIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzd2FwcGluZyBvdXQgYSBjYWxsIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYCBmb3IgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYC4KClRoZSBjb21tZW50IGlzIGtleSBoZXJlOiBpdCYjMzk7cyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHZhcmlvdXMgQlBGIG1hcCBmaWVsZHMsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHNhZmV0eSBvZiBkb2luZyBzbyBpbiBOTUkgY29udGV4dHMuIEl0JiMzOTtzIGV4cGxpY2l0bHkgZmxhZ2dpbmcgdGhhdCBmaWVsZHMgbGlrZSB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgYXJlIG9rYXkgdG8gYmUgY2FuY2VsZWQvY2xlYW5lZCB1cCBpbiBhbiBOTUktc2FmZSBtYW5uZXIgaGVyZS4gSG93ZXZlciwgY3J1Y2lhbGx5LCBpdCBpZGVudGlmaWVzIHRoYXQgYGtwdHJgLCBgdXB0cmAsIGBsaXN0YCwgYW5kIGByYnRyZWVgIGRlc3RydWN0aW9uIG11c3QgKm5vdCogaGFwcGVuIGluIGFuIGFyYml0cmFyeSBCUEYgZXhlY3V0aW9uIGNvbnRleHQsIGVzcGVjaWFsbHkgTk1Jcy4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxvY2t1cHMgb3Igb3RoZXIgbmFzdHkgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgZXhwbGljaXRseSBsZWF2aW5nIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWQgZWxlbWVudCwga25vd2luZyBgcmh0YWJfbWVtX2R0b3IoKWAgd2lsbCB0YWtlIGNhcmUgb2YgdGhlbSBsYXRlciB3aGVuIGl0JiMzOTtzIHNhZmUuCgpTbywgdGhpcyBpcyBhIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGlzc3VlLCBzcGVjaWZpY2FsbHkgZm9yIEJQRiBtYXAgZmllbGRzLCBub3RhYmx5IGtlcm5lbCBwb2ludGVycyAoa3B0cnMpIHdpdGhpbiB0aGUgcmVhbC10aW1lIGhhc2ggdGFibGUgY29udGV4dCBhbmQgTk1Jcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGFuZCBjb21wYXJlIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gV2FpdCwgSSBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiEgVGhlIGNoYW5nZSBpcyB2ZXJ5IHRhcmdldGVkLiBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIHNwZWNpZmljYWxseSAqY2FuY2VscyogdGhvc2UgTk1JLXNhZmUgZmllbGRzIGJ1dCBkb2VzbuKAmXQgaW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgb3RoZXJzLiBUaGF0IGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yLiBUaGF0IG90aGVyIHN0dWZmIGlzIHRha2VuIGNhcmUgb2YgbGF0ZXIuIEFuZCB0aGV5IGFyZSBzYXlpbmcgdGhhdCBgcmh0YWJfa3B0ci5jYCBoYXMgYSB0ZXN0IHRvIHZlcmlmeSBrcHRycyBhcmUgbm90IGRlc3Ryb3llZCB0b28gc29vbi4gR29vZC4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpdHNlbGYuIEnigJlsbCBsb29rIGZvciBpdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuIEp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvZ2ljIG1ha2VzIHNlbnNlIGFuZCB0aGF0IG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUsIGNvbnRyb2xsZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNzA2LVxuaW5jbHVkZS9saW51eC9icGYuaDo3MDc6dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopO1xuaW5jbHVkZS9saW51eC9icGYuaC03MDgtXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTQ2MD1zdGF0aWMgdm9pZCBhcnJheV9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ2OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllczsgaSYjNDM7JiM0MzspXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDcwOlx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhtYXAsIGFycmF5X21hcF9lbGVtX3B0cihhcnJheSwgaSkpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ3MS19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjIxPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIzMi1cdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMzM6XHRcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNmh0YWItXHUwMDNlbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM0LVx0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNTkyPXN0YXRpYyB2b2lkIGh0YWJfZnJlZV9tYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNjAzLVx0XHRcdC8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTYwNDpcdFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE2MDUtXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjg2OD1zdGF0aWMgdm9pZCByaHRhYl9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4ODItXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODM6XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODg0LVx0XHRcdFx0ICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODk5PXN0YXRpYyB2b2lkIHJodGFiX2ZyZWVfZWxlbSh2b2lkICpwdHIsIHZvaWQgKmFyZylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAzLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwNDpcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDUtXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFx1MDAyNnJodGFiLVx1MDAzZW1hLCBlbGVtKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTI4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTU0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1NTpcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMobWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1Ni1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDI1PXZvaWQgKl9fYnBmX2R5bnB0cl9kYXRhX3J3KGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IGxlbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMjp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzMte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxMD12b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MTEte1xua2VybmVsL2JwZi9zeXNjYWxsLmM6ODEyOlx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMobWFwLCBvYmopO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtODEzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBNYXAgQ2xlYW51cCBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHRvIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2Agd2l0aGluIHRoZSBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgZnVuY3Rpb24uIEkgc2VlIHRoZSByZWFzb25pbmcuIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2AgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1hcCDigJMgdGltZXJzLCB3b3JrcXVldWVzLCBgdGFza193b3JrYCwgdGhhdCBzb3J0IG9mIHRoaW5nLiBJdCYjMzk7cyBkZWxpYmVyYXRlbHkgKm5vdCogZnJlZWluZyB0aGUga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgb24gdGhlIHJlY3ljbGVkIGVsZW1lbnQuIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuCgpUaGUgY29uY2VybiBoZXJlLCBhbmQgaXQmIzM5O3MgYSB2YWxpZCBvbmUsIGlzIGF2b2lkaW5nIHVuc2FmZSBmcmVlaW5nIG9wZXJhdGlvbnMgZnJvbSBhbiBOTUkgY29udGV4dC4gV2UgYWxsIGtub3cgaG93IGRpY2V5IHRoYXQgY2FuIGJlIOKAkyBwb3RlbnRpYWwgZGVhZGxvY2tzLCBjcmFzaGVzLCB0aGUgd2hvbGUgc2hlYmFuZy4gU28sIGJ5IGxlYXZpbmcgdGhvc2UgYXR0YWNoZWQsIHRoZSByaXNrIG9mIHRyaWdnZXJpbmcgb25lIG9mIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcyBpcyBtaXRpZ2F0ZWQuIFRoZXkmIzM5O2xsIGJlIGNsZWFuZWQgdXAgbGF0ZXIgYnkgYHJodGFiX21lbV9kdG9yKClgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCBoZXJlLgoKVGhlIGltcG9ydGFudCB0YWtlYXdheSBpcyB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIG5vciBkb2VzIGl0IGFmZmVjdCBjb250cm9sIGZsb3cuIFRoZSBmaWVsZHMgYXJlIHN0aWxsIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50IGFuZCwgaW4gZWZmZWN0LCBhcmUgc2FmZS4gVGhlIHN1YnNlcXVlbnQgY2xlYW51cCBwcm9jZXNzIGhhbmRsZWQgYnkgYHJodGFiX21lbV9kdG9yYCB3aWxsIHJlc29sdmUgdGhlbSBhdCBhIGxhdGVyIHRpbWUuCgpHaXZlbiB0aGlzIGltcGxlbWVudGF0aW9uLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGVyZSBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgc3RpbGwgYmUgYWJsZSB0byBjYXB0dXJlIGFueSBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBpbmFwcHJvcHJpYXRlIGZyZWVpbmcgZnJvbSBOTUkgY29udGV4dC4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpcyBwZXJmb3JtaW5nIGFzIGV4cGVjdGVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9NzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX2hhc19pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC03MDYtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcwNzp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKm9iaik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcwOC1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDI1PXZvaWQgKl9fYnBmX2R5bnB0cl9kYXRhX3J3KGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IGxlbilcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMjp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgbWFwIGZyZWVpbmcgbWVjaGFuaXNtIGFjdHVhbGx5IHdvcmtzIHVuZGVyIHRoZSBob29kLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIEJQRiBtYXAgYXJjaGl0ZWN0dXJlLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqaW50ZXJuYWwqIGRldGFpbHMgb2YgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIHJlbGVhc2VkIHdoZW4gYSBtYXAgaXMgY2xvc2VkIG9yIGRlc3Ryb3llZC4gSSYjMzk7bSBob3BpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBjb21wbGV4aXRpZXMsIHJlc291cmNlIGxlYWtzIChob3dldmVyIHVubGlrZWx5KSwgb3IgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIG1hcCB0eXBlcyBhbmQgdGhlaXIgZnJlZWluZyByb3V0aW5lcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIHBlcmhhcHMgc3BlY2lmaWMgcGVyLW1hcC10eXBlIHN0cnVjdHVyZXMsIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFwIGJleW9uZCB0aGUgYmFzaWMga2V5LXZhbHVlIGRhdGEuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgZXNwZWNpYWxseSBpZiB0aGUgbWFwcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgcHJvZ3JhbXMgb3IgY29udGV4dHM/IExldCYjMzk7cyBnZXQgY3JhY2tpbmcgYW5kIGRpc3NlY3QgdGhpcyBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDMwOlx0fVxuNTAzMTpcdFxuNTAzMjpcdHZvaWQgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsKVxuNTAzMzpcdHtcbjUwMzQ6XHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfVElNRVIpKVxuNTAzNTpcdFx0XHRicGZfb2JqX2ZyZWVfdGltZXIobWFwLVx1MDAzZXJlY29yZCwgdmFsKTtcbjUwMzY6XHRcdGlmIChidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfV09SS1FVRVVFKSlcbjUwMzc6XHRcdFx0YnBmX29ial9mcmVlX3dvcmtxdWV1ZShtYXAtXHUwMDNlcmVjb3JkLCB2YWwpO1xuNTAzODpcdFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cdTAwM2VyZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxuNTAzOTpcdFx0XHRicGZfb2JqX2ZyZWVfdGFza193b3JrKG1hcC1cdTAwM2VyZWNvcmQsIHZhbCk7XG41MDQwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgyCgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1hcCBGaWVsZCBMaWZlY3ljbGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIGlzIHNwZWNpZmljYWxseSBhYm91dCByZWZpbmluZyBob3cgd2UgaGFuZGxlIGNlcnRhaW4gQlBGIG1hcCBmaWVsZHMg4oCTIHNwZWNpZmljYWxseSB0aGUgc3BlY2lhbCBvbmVzIGxpa2Uga2VybmVsIHBvaW50ZXJzIChrcHRycyksIHVzZXIgcG9pbnRlcnMgKHVwdHJzKSwgbGlzdHMsIGFuZCByZWQtYmxhY2sgdHJlZXMgKHJidHJlZXMpIOKAkyB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIHdpdGhpbiBhbiBOTUkgY29udGV4dC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgb2xkIGNvZGUgd2FzIHRvbyBlYWdlci4gSXQgd2FzIGNhbGxpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgLCB3aGljaCBhZ2dyZXNzaXZlbHkgZGVzdHJveWVkICpldmVyeXRoaW5nKiByaWdodCBhd2F5LiBUaGlzIGNyZWF0ZWQgYSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcywgcGFydGljdWxhcmx5IGRlYWRsb2NrcyBvciBldmVuIGNyYXNoZXMsIGJlY2F1c2UgTk1JIGNvbnRleHRzIGFyZSBzZW5zaXRpdmUuCgpUaGlzIGZpeCBpcyBzbWFydDsgaXQmIzM5O3MgYSBsaWZlY3ljbGUgbWFuYWdlbWVudCBpbXByb3ZlbWVudC4gSW5zdGVhZCBvZiB0aGUgbnVjbGVhciBvcHRpb24gKGBicGZfb2JqX2ZyZWVfZmllbGRzYCksIGl0IGludHJvZHVjZXMgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoLiBUaGUgY29yZSBpcyByZXBsYWNpbmcgaXQgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIHNtYXJ0bHkgb25seSBjYW5jZWxzIGFuZCBmcmVlcyB0aGUgTk1JLXNhZmUgZmllbGRzIGxpa2UgdGltZXJzLCB3b3JrcXVldWVzLCBhbmQgdGFza193b3JrIHdpdGhpbiB0aGUgTk1JIGNvbnRleHQuIFRoZSByZXN0IG9mIHRoZSBkZXN0cnVjdGlvbiwgdGhlIG1vcmUgY29tcGxleCBmaWVsZHMgbGlrZSB0aGUgcG9pbnRlcnMsIGxpc3RzLCBhbmQgdHJlZXMsIGFyZSBub3cgZGVmZXJyZWQuIFRoZXkgd2lsbCBnZXQgdGhlaXIgcHJvcGVyIGxpZmVjeWNsZSB0cmVhdG1lbnQgZnJvbSBgcmh0YWJfbWVtX2R0b3IoKWAuIFRoaXMgYXZvaWRzIGEgcmFjZSBhbmQgbGV0cyB0aGVtIGJlIGRlc3Ryb3llZCBzYWZlbHkuCgpUaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWxsb2NhdGlvbiBidWcuIEl04oCZcyBhYm91dCBlbnN1cmluZyBjb3JyZWN0IGxvY2tpbmcgYW5kIHByb3BlciBkZXN0cnVjdGlvbiBvcmRlci4gSWYgdGhpcyBwYXRjaCAqZGlkKiBpbnRyb2R1Y2UgYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSwgTE9DS0RFUCBvciBLQVNBTiB3b3VsZCBoYXZlIGNhdWdodCBpdC4gSXQmIzM5O3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGFkZHJlc3MuIFRoZSBjaGFuZ2UgaXMgYWJvdXQgKndoZW4qIHRoaW5ncyBhcmUgZnJlZWQsIG5vdCAqaG93KiB0aGV5IGFyZSBpbml0aWFsaXplZCBvciBpZiB0aGVyZeKAmXMgYSBtZW1vcnkgbGVhay4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhlIGltcGFjdCBpcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZzsgdGhpcyBpcyBhIGNsZWFyIGZpeCBmb3IgYSBsaWZlY3ljbGUgaXNzdWUuCgpPa2F5LCBJJiMzOTttIHNhdGlzZmllZC4gSSYjMzk7bGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHNwZWNpYWwgQlBGIG1hcCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHVwdHJzLCBsaXN0cywgYW5kIHJidHJlZXMpIHdoZW4gYSBtYXAgZWxlbWVudCBpcyB1cGRhdGVkIG9yIGRlbGV0ZWQgaW4gYW4gTk1JIGNvbnRleHQuIFByZXZpb3VzbHksIGBicGZfb2JqX2ZyZWVfZmllbGRzKClgIHdhcyBjYWxsZWQsIHdoaWNoIGVhZ2VybHkgZGVzdHJveWVkIGFsbCBmaWVsZHMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5zYWZlIG9wZXJhdGlvbnMgKGxpa2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMpIGZyb20gYW4gTk1JIGNvbnRleHQuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cygpYCwgd2hpY2ggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcyAodGltZXJzLCB3b3JrcXVldWVzLCB0YXNrX3dvcmspIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIG9mIG90aGVyIGZpZWxkcyB0byBgcmh0YWJfbWVtX2R0b3IoKWAuXG5cblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYW5kIGxpZmVjeWNsZSBidWcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIEtBU0FOIGlmIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGZyZWUpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBzcGVjaWFsIEJQRiBtYXAgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB1cHRycywgbGlzdHMsIGFuZCByYnRyZWVzKSB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIGluIGFuIE5NSSBjb250ZXh0LiBQcmV2aW91c2x5LCBgYnBmX29ial9mcmVlX2ZpZWxkcygpYCB3YXMgY2FsbGVkLCB3aGljaCBlYWdlcmx5IGRlc3Ryb3llZCBhbGwgZmllbGRzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuc2FmZSBvcGVyYXRpb25zIChsaWtlIGRlYWRsb2NrcyBvciBjcmFzaGVzKSBmcm9tIGFuIE5NSSBjb250ZXh0LiBUaGUgZml4IHJlcGxhY2VzIHRoaXMgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMgKHRpbWVycywgd29ya3F1ZXVlcywgdGFza193b3JrKSBhbmQgZGVmZXJzIHRoZSBkZXN0cnVjdGlvbiBvZiBvdGhlciBmaWVsZHMgdG8gYHJodGFiX21lbV9kdG9yKClgLlxuXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE5OjU4LjM3ODk5NTkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTUyNjI5NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWVtX2R0b3JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiBzcGVjaWFsIEJQRiBtYXAgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB1cHRycywgbGlzdHMsIGFuZCByYnRyZWVzKSB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIGluIGFuIE5NSSBjb250ZXh0LiBQcmV2aW91c2x5LCBgYnBmX29ial9mcmVlX2ZpZWxkcygpYCB3YXMgY2FsbGVkLCB3aGljaCBlYWdlcmx5IGRlc3Ryb3llZCBhbGwgZmllbGRzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuc2FmZSBvcGVyYXRpb25zIChsaWtlIGRlYWRsb2NrcyBvciBjcmFzaGVzKSBmcm9tIGFuIE5NSSBjb250ZXh0LiBUaGUgZml4IHJlcGxhY2VzIHRoaXMgd2l0aCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoKWAsIHdoaWNoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMgKHRpbWVycywgd29ya3F1ZXVlcywgdGFza193b3JrKSBhbmQgZGVmZXJzIHRoZSBkZXN0cnVjdGlvbiBvZiBvdGhlciBmaWVsZHMgdG8gYHJodGFiX21lbV9kdG9yKClgLlxcblxcblRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYW5kIGxpZmVjeWNsZSBidWcgKHdoaWNoIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIG9yIEtBU0FOIGlmIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIGZyZWUpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjE5OjU4LjM3OTAwMjEyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4NTk1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNmYTZhZDczN2M0NzE3YzU4NDhiMDE1MzgwYTYzNjYwMDVjY2NjMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxOTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggOWYzOTRlMWFhMmU4NS4uNzBmYTFlMWI0YjAwOCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuQEAgLTI4NjUsMTQgKzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdHJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcXG4rc3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXFxuIHtcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLVxcdTAwM2VtYXAucmVjb3JkKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0YnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi1cXHUwMDNlbWFwLnJlY29yZCxcXG4tXFx0XFx0XFx0ICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbitcXHQvKlxcbitcXHQgKiBPbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykgaGVyZS5cXG4rXFx0ICoga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGRlc3RydWN0aW9uIG11c3Qgbm90IHJ1biBmcm9tIGFyYml0cmFyeSBCUEZcXG4rXFx0ICogZXhlY3V0aW9uIGNvbnRleHRzIChlLmcuIE5NSSksIHNvIGxlYXZlIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0b1xcbitcXHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXFxuK1xcdCAqIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC4gVGhpcyBtYXRjaGVzIHRoZSBoYXNoIG1hcCBzZW1hbnRpY3NcXG4rXFx0ICogaW50cm9kdWNlZCBieSBhM2E4MWQyNDc2NTEgKFxcXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWVcXG4rXFx0ICogcmVjeWNsZVxcXCIpLlxcbitcXHQgKi9cXG4rXFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eClcXG5AQCAtMjk2NCw4ICsyOTczLDggQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcXG4gXFx0XFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFxcdTAwMjZyaHRhYi1cXHUwMDNlbWFwLCBjb3B5LCBlbGVtLCBmbGFncyk7XFxuIFxcdFxcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgY29weSk7XFxuIFxcdH1cXG4tXFx0LyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi9cXG4tXFx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcXG4rXFx0LyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovXFxuK1xcdHJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pO1xcbiBcXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIGVsZW0pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zMDI0LDEwICszMDMzLDExIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsXFxuIFxcdCAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy5cXG4gXFx0ICpcXG4gXFx0ICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvXFxuLVxcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlbSBhZnRlciB0aGUgY29weVxcbi1cXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXFxuK1xcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlIE5NSS1zYWZlIG9uZXMgYWZ0ZXJcXG4rXFx0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzOyByZWZlcmVuY2VkIGtwdHJzXFxuK1xcdCAqIHN0YXkgYXR0YWNoZWQgYW5kIGFyZSBkZXN0cm95ZWQgYnkgcmh0YWJfbWVtX2R0b3IoKS5cXG4gXFx0ICovXFxuLVxcdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XFxuK1xcdHJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OWJkY2RhOTU1NTU3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JodGFiX2twdHIuY1xcbkBAIC0wLDAgKzEsODcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJyaHRhYl9rcHRyLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBfX3U2NCByZWFkX2NvdW50ZXIoc3RydWN0IHJodGFiX2twdHIgKnNrZWwsIHUzMiBpZHgpXFxuK3tcXG4rXFx0X191NjQgdmFsc1tsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKV07XFxuK1xcdF9fdTY0IHN1bSA9IDA7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuY291bnRlcnMpLCBcXHUwMDI2aWR4LCB2YWxzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwibG9va3VwX2NvdW50ZXJcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSsrKVxcbitcXHRcXHRzdW0gKz0gdmFsc1tpXTtcXG4rXFx0cmV0dXJuIHN1bTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHIgPSB7XFxuK1xcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbitcXHRcXHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbitcXHRcXHQuZnJlcSA9IDEsXFxuK1xcdFxcdC5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSxcXG4rXFx0XFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXFxuK1xcdH07XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XFxuK1xcdHN0cnVjdCByaHRhYl9rcHRyICpza2VsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXHRfX3U2NCB6ZXJvID0gMDtcXG4rXFx0aW50IHBtdV9mZDtcXG4rXFxuK1xcdHNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBDcmVhdGUgdGhlIGVsZW1lbnQgYW5kIHN0YXNoIGEgcmVmZXJlbmNlZCB0YXNrIGtwdHIgaW4gaXQuICovXFxuK1xcdGlmICghQVNTRVJUX09LKGJwZl9tYXBfdXBkYXRlX2VsZW0oYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5yaHRhYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZrZXksIFxcdTAwMjZ6ZXJvLCBCUEZfQU5ZKSwgXFxcImNyZWF0ZV9lbGVtXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5pbml0X2VsZW0pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dG9wdHMpLCBcXFwidGVzdF9ydW5faW5pdFxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcImluaXRfcmV0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cG11X2ZkID0gc3lzY2FsbChfX05SX3BlcmZfZXZlbnRfb3BlbiwgXFx1MDAyNmF0dHIsIC0xLCAwLCAtMSwgMCk7XFxuK1xcdGlmIChwbXVfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0c2tlbC1cXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSA9IGJwZl9wcm9ncmFtX19hdHRhY2hfcGVyZl9ldmVudChza2VsLVxcdTAwM2Vwcm9ncy5ubWlfdXBkYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwbXVfZmQpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSwgXFxcImF0dGFjaF9wZXJmX2V2ZW50XFxcIikpIHtcXG4rXFx0XFx0Y2xvc2UocG11X2ZkKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIExldCB0aGUgTk1JIGhhbmRsZXIgb3ZlcndyaXRlIHRoZSBlbGVtZW50LiAqL1xcbitcXHR1c2xlZXAoMTAwMDAwKTtcXG4rXFxuK1xcdGJwZl9saW5rX19kZXN0cm95KHNrZWwtXFx1MDAzZWxpbmtzLm5taV91cGRhdGUpO1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gTlVMTDtcXG4rXFx0Y2xvc2UocG11X2ZkKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZVxcbitcXHQgKiBwYXRoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMsIG1pcnJvcmluZyBoYXNoIG1hcCBzZW1hbnRpY3MuXFxuK1xcdCAqIEJlZm9yZSB0aGUgZml4IHRoZSBrcHRyIHdhcyByZWxlYXNlZCBmcm9tIHRoZSBOTUkgY29udGV4dCBhbmQgdGhlXFxuK1xcdCAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLlxcbitcXHQgKi9cXG4rXFx0dG9wdHMucmV0dmFsID0gMDtcXG4rXFx0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MucHJvYmVfZWxlbSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0b3B0cyksIFxcXCJ0ZXN0X3J1bl9wcm9iZVxcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXFxcInByb2JlX3JldFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsIFxcXCJ4Y2hnX25vbl9udWxsXFxcIik7XFxuK1xcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsIFxcXCJ4Y2hnX251bGxcXFwiKTtcXG4rb3V0OlxcbitcXHRyaHRhYl9rcHRyX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmNcXG5AQCAtMCwwICsxLDEwMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqL1xcbitcXG4rLypcXG4rICogVmVyaWZ5IHRoYXQgYSByaHRhYiB2YWx1ZSB1cGRhdGUgaXNzdWVkIGZyb20gYSBwZXJmX2V2ZW50IChOTUkpIHByb2dyYW1cXG4rICogZG9lcyBub3QgZWFnZXJseSBkZXN0cm95IHJlZmVyZW5jZWQga3B0cnMuIHJodGFiIG11c3QgbWF0Y2ggdGhlIGhhc2ggbWFwXFxuKyAqIHNlbWFudGljcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhM2E4MWQyNDc2NTEgKFxcXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkc1xcbisgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZVxcXCIpOiBvbmx5IE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKVxcbisgKiBhcmUgY2FuY2VsbGVkIG9uIHVwZGF0ZS9kZWxldGUsIHdoaWxlIGtwdHJzIHN0YXkgYXR0YWNoZWQgdG8gdGhlIHJlY3ljbGVkXFxuKyAqIGVsZW1lbnQgdW50aWwgaXQgaXMgZXZlbnR1YWxseSBmcmVlZC5cXG4rICpcXG4rICogV2l0aG91dCB0aGUgZml4LCB0aGUgTk1JIHVwZGF0ZSByZWxlYXNlcyB0aGUgb2xkIGtwdHIgYW5kIHByb2JlX2VsZW0oKVxcbisgKiBvYnNlcnZlcyBOVUxMIGluIHRoZSBzbG90OyB3aXRoIHRoZSBmaXggdGhlIG9sZCBrcHRyIGlzIGluaGVyaXRlZCBhbmRcXG4rICogcHJvYmVfZWxlbSgpIG9ic2VydmVzIGEgbm9uLU5VTEwgcG9pbnRlci5cXG4rICovXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2NoYXIgTElDRU5TRVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3QgdmFsX3Qge1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0c2s7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxNik7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7XFxuK30gcmh0YWIgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDQpO1xcbitcXHRfX3R5cGUoa2V5LCBfX3UzMik7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xcbit9IGNvdW50ZXJzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qIDA6IGluaXQgb2ssIDE6IG5taSB1cGRhdGUgb2ssIDI6IHByb2JlIHhjaGcgbm9uLU5VTEwsIDM6IHByb2JlIHhjaGcgTlVMTCAqL1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnVtcCh1MzIgaWR4KVxcbit7XFxuK1xcdHU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNmNvdW50ZXJzLCBcXHUwMDI2aWR4KTtcXG4rXFxuK1xcdGlmICh2KVxcbitcXHRcXHQoKnYpKys7XFxuK31cXG4rXFxuK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XFxuK2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XFxuK1xcbitTRUMoXFxcInBlcmZfZXZlbnRcXFwiKVxcbitpbnQgbm1pX3VwZGF0ZShzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YSAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB2YWxfdCB2YWwgPSB7fTtcXG4rXFx0dTMyIGtleSA9IDA7XFxuK1xcbitcXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2cmh0YWIsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWwsIEJQRl9BTlkpID09IDApXFxuK1xcdFxcdGJ1bXAoMSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitpbnQgaW5pdF9lbGVtKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgdmFsX3QgKnZhbDtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkO1xcbitcXHR1MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnJodGFiLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR0YXNrID0gYnBmX3Rhc2tfYWNxdWlyZShicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKSk7XFxuK1xcdGlmICghdGFzaylcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXFx1MDAyNnZhbC1cXHUwMDNldHNrLCB0YXNrKTtcXG4rXFx0aWYgKG9sZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShvbGQpO1xcbitcXHRidW1wKDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IHByb2JlX2VsZW0odm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCB2YWxfdCAqdmFsO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZDtcXG4rXFx0dTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZyaHRhYiwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0b2xkID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2dmFsLVxcdTAwM2V0c2ssIE5VTEwpO1xcbitcXHRpZiAob2xkKSB7XFxuK1xcdFxcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0YnVtcCgyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YnVtcCgzKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoxOTo1OC45MTgyMTQ5NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTczMDAxMzEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWVtX2R0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzZmE2YWQ3MzdjNDcxN2M1ODQ4YjAxNTM4MGE2MzY2MDA1Y2NjYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMDoxOTo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLjcwZmExZTFiNGIwMDggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0yODY1LDE0ICsyODY1LDIzIEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXG4tXHRcdFx0XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtKVxuK3N0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXG4rXHRcdFx0XHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcbiB7XG4gXHRpZiAoSVNfRVJSX09SX05VTEwocmh0YWItXHUwMDNlbWFwLnJlY29yZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHQgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbitcdC8qXG4rXHQgKiBPbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaykgaGVyZS5cbitcdCAqIGtwdHIvdXB0ci9saXN0L3JidHJlZSBkZXN0cnVjdGlvbiBtdXN0IG5vdCBydW4gZnJvbSBhcmJpdHJhcnkgQlBGXG4rXHQgKiBleGVjdXRpb24gY29udGV4dHMgKGUuZy4gTk1JKSwgc28gbGVhdmUgdGhvc2UgZmllbGRzIGF0dGFjaGVkIHRvXG4rXHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXG4rXHQgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzXG4rXHQgKiBpbnRyb2R1Y2VkIGJ5IGEzYTgxZDI0NzY1MSAoXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkcyBvbiBtYXAgdmFsdWVcbitcdCAqIHJlY3ljbGVcIikuXG4rXHQgKi9cbitcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNnJodGFiLVx1MDAzZW1hcCxcbitcdFx0XHRcdCAgICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuQEAgLTI5NjQsOCArMjk3Myw4IEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XG4gXHRcdHJodGFiX3JlYWRfZWxlbV92YWx1ZShcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIGNvcHksIGVsZW0sIGZsYWdzKTtcbiBcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSk7XG4gXHR9XG4tXHQvKiBSZWxlYXNlIGludGVybmFsIHN0cnVjdHM6IGtwdHIsIGJwZl90aW1lciwgdGFza193b3JrLCB3cSAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbitcdC8qIENhbmNlbCBOTUktc2FmZSBmaWVsZHM7IGZ1bGwgZGVzdHJ1Y3Rpb24gaGFwcGVucyBpbiByaHRhYl9tZW1fZHRvciAqL1xuK1x0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4gXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFx1MDAyNnJodGFiLVx1MDAzZW1hLCBlbGVtKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDI0LDEwICszMDMzLDExIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsXG4gXHQgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuXG4gXHQgKlxuIFx0ICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvXG4tXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHlcbi1cdCAqIHRvIG1hdGNoIGFycmF5bWFwJ3MgdXBkYXRlIHNlbWFudGljcy5cbitcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlIE5NSS1zYWZlIG9uZXMgYWZ0ZXJcbitcdCAqIHRoZSBjb3B5IHRvIG1hdGNoIGFycmF5bWFwJ3MgdXBkYXRlIHNlbWFudGljczsgcmVmZXJlbmNlZCBrcHRyc1xuK1x0ICogc3RheSBhdHRhY2hlZCBhbmQgYXJlIGRlc3Ryb3llZCBieSByaHRhYl9tZW1fZHRvcigpLlxuIFx0ICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0cmh0YWJfY2FuY2VsX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzliZGNkYTk1NTU1N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICsxLDg3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsaW5Tb2Z0IENvLiwgTHRkLiAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwicmh0YWJfa3B0ci5za2VsLmhcIlxuK1xuK3N0YXRpYyBfX3U2NCByZWFkX2NvdW50ZXIoc3RydWN0IHJodGFiX2twdHIgKnNrZWwsIHUzMiBpZHgpXG4re1xuK1x0X191NjQgdmFsc1tsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKV07XG4rXHRfX3U2NCBzdW0gPSAwO1xuK1x0aW50IGksIGVycjtcbitcbitcdGVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0oYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLmNvdW50ZXJzKSwgXHUwMDI2aWR4LCB2YWxzKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb29rdXBfY291bnRlclwiKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaWJicGZfbnVtX3Bvc3NpYmxlX2NwdXMoKTsgaSsrKVxuK1x0XHRzdW0gKz0gdmFsc1tpXTtcbitcdHJldHVybiBzdW07XG4rfVxuK1xuK3ZvaWQgdGVzdF9yaHRhYl9rcHRyKHZvaWQpXG4re1xuK1x0c3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyID0ge1xuK1x0XHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbitcdFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbitcdFx0LmZyZXEgPSAxLFxuK1x0XHQuc2FtcGxlX2ZyZXEgPSByZWFkX3BlcmZfbWF4X3NhbXBsZV9mcmVxKCksXG4rXHRcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLFxuK1x0fTtcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XG4rXHRzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXHRfX3U2NCB6ZXJvID0gMDtcbitcdGludCBwbXVfZmQ7XG4rXG4rXHRza2VsID0gcmh0YWJfa3B0cl9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogQ3JlYXRlIHRoZSBlbGVtZW50IGFuZCBzdGFzaCBhIHJlZmVyZW5jZWQgdGFzayBrcHRyIGluIGl0LiAqL1xuK1x0aWYgKCFBU1NFUlRfT0soYnBmX21hcF91cGRhdGVfZWxlbShicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMucmh0YWIpLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZrZXksIFx1MDAyNnplcm8sIEJQRl9BTlkpLCBcImNyZWF0ZV9lbGVtXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuaW5pdF9lbGVtKSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcInRlc3RfcnVuX2luaXRcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCJpbml0X3JldFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwbXVfZmQgPSBzeXNjYWxsKF9fTlJfcGVyZl9ldmVudF9vcGVuLCBcdTAwMjZhdHRyLCAtMSwgMCwgLTEsIDApO1xuK1x0aWYgKHBtdV9mZCBcdTAwM2MgMCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0c2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9wZXJmX2V2ZW50KHNrZWwtXHUwMDNlcHJvZ3Mubm1pX3VwZGF0ZSxcbitcdFx0XHRcdFx0XHRcdFx0cG11X2ZkKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUsIFwiYXR0YWNoX3BlcmZfZXZlbnRcIikpIHtcbitcdFx0Y2xvc2UocG11X2ZkKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHQvKiBMZXQgdGhlIE5NSSBoYW5kbGVyIG92ZXJ3cml0ZSB0aGUgZWxlbWVudC4gKi9cbitcdHVzbGVlcCgxMDAwMDApO1xuK1xuK1x0YnBmX2xpbmtfX2Rlc3Ryb3koc2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlKTtcbitcdHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSA9IE5VTEw7XG4rXHRjbG9zZShwbXVfZmQpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBvbGQga3B0ciBtdXN0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50OiB0aGUgTk1JIHVwZGF0ZVxuK1x0ICogcGF0aCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzLCBtaXJyb3JpbmcgaGFzaCBtYXAgc2VtYW50aWNzLlxuK1x0ICogQmVmb3JlIHRoZSBmaXggdGhlIGtwdHIgd2FzIHJlbGVhc2VkIGZyb20gdGhlIE5NSSBjb250ZXh0IGFuZCB0aGVcbitcdCAqIHByb2JlIGJlbG93IHdvdWxkIHNlZSBOVUxMLlxuK1x0ICovXG4rXHR0b3B0cy5yZXR2YWwgPSAwO1xuK1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9iZV9lbGVtKSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2dG9wdHMpLCBcInRlc3RfcnVuX3Byb2JlXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIDAsIFwicHJvYmVfcmV0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMiksIDEsIFwieGNoZ19ub25fbnVsbFwiKTtcbitcdEFTU0VSVF9FUShyZWFkX2NvdW50ZXIoc2tlbCwgMyksIDAsIFwieGNoZ19udWxsXCIpO1xuK291dDpcbitcdHJodGFiX2twdHJfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjU4MDBhMmUyNGU2M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuY1xuQEAgLTAsMCArMSwxMDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBLeWxpblNvZnQgQ28uLCBMdGQuICovXG4rXG4rLypcbisgKiBWZXJpZnkgdGhhdCBhIHJodGFiIHZhbHVlIHVwZGF0ZSBpc3N1ZWQgZnJvbSBhIHBlcmZfZXZlbnQgKE5NSSkgcHJvZ3JhbVxuKyAqIGRvZXMgbm90IGVhZ2VybHkgZGVzdHJveSByZWZlcmVuY2VkIGtwdHJzLiByaHRhYiBtdXN0IG1hdGNoIHRoZSBoYXNoIG1hcFxuKyAqIHNlbWFudGljcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhM2E4MWQyNDc2NTEgKFwiYnBmOiBDYW5jZWwgc3BlY2lhbCBmaWVsZHNcbisgKiBvbiBtYXAgdmFsdWUgcmVjeWNsZVwiKTogb25seSBOTUktc2FmZSBmaWVsZHMgKHRpbWVyLCB3b3JrcXVldWUsIHRhc2tfd29yaylcbisgKiBhcmUgY2FuY2VsbGVkIG9uIHVwZGF0ZS9kZWxldGUsIHdoaWxlIGtwdHJzIHN0YXkgYXR0YWNoZWQgdG8gdGhlIHJlY3ljbGVkXG4rICogZWxlbWVudCB1bnRpbCBpdCBpcyBldmVudHVhbGx5IGZyZWVkLlxuKyAqXG4rICogV2l0aG91dCB0aGUgZml4LCB0aGUgTk1JIHVwZGF0ZSByZWxlYXNlcyB0aGUgb2xkIGtwdHIgYW5kIHByb2JlX2VsZW0oKVxuKyAqIG9ic2VydmVzIE5VTEwgaW4gdGhlIHNsb3Q7IHdpdGggdGhlIGZpeCB0aGUgb2xkIGtwdHIgaXMgaW5oZXJpdGVkIGFuZFxuKyAqIHByb2JlX2VsZW0oKSBvYnNlcnZlcyBhIG5vbi1OVUxMIHBvaW50ZXIuXG4rICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitjaGFyIExJQ0VOU0VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdHJ1Y3QgdmFsX3Qge1xuK1x0c3RydWN0IHRhc2tfc3RydWN0IF9fa3B0ciAqdHNrO1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxNik7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4rXHRfX3R5cGUoa2V5LCBfX3UzMik7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCB2YWxfdCk7XG4rfSByaHRhYiBTRUMoXCIubWFwc1wiKTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCA0KTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30gY291bnRlcnMgU0VDKFwiLm1hcHNcIik7XG4rXG4rLyogMDogaW5pdCBvaywgMTogbm1pIHVwZGF0ZSBvaywgMjogcHJvYmUgeGNoZyBub24tTlVMTCwgMzogcHJvYmUgeGNoZyBOVUxMICovXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJ1bXAodTMyIGlkeClcbit7XG4rXHR1NjQgKnYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNmNvdW50ZXJzLCBcdTAwMjZpZHgpO1xuK1xuK1x0aWYgKHYpXG4rXHRcdCgqdikrKztcbit9XG4rXG4rZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbitleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK1xuK1NFQyhcInBlcmZfZXZlbnRcIilcbitpbnQgbm1pX3VwZGF0ZShzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfZGF0YSAqY3R4KVxuK3tcbitcdHN0cnVjdCB2YWxfdCB2YWwgPSB7fTtcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0aWYgKGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCBCUEZfQU5ZKSA9PSAwKVxuK1x0XHRidW1wKDEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgaW5pdF9lbGVtKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgdmFsX3QgKnZhbDtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgKm9sZDtcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZyaHRhYiwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcdHRhc2sgPSBicGZfdGFza19hY3F1aXJlKGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpKTtcbitcdGlmICghdGFzaylcbitcdFx0cmV0dXJuIDI7XG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnZhbC1cdTAwM2V0c2ssIHRhc2spO1xuK1x0aWYgKG9sZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShvbGQpO1xuK1x0YnVtcCgwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IHByb2JlX2VsZW0odm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB2YWxfdCAqdmFsO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpvbGQ7XG4rXHR1MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2cmh0YWIsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDE7XG4rXHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnZhbC1cdTAwM2V0c2ssIE5VTEwpO1xuK1x0aWYgKG9sZCkge1xuK1x0XHRicGZfdGFza19yZWxlYXNlKG9sZCk7XG4rXHRcdGJ1bXAoMik7XG4rXHR9IGVsc2Uge1xuK1x0XHRidW1wKDMpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MTk6NTguOTE4MjE2Mzg5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NzAwNTM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgUGF0Y2ggZm9yIFJIQVNIIE1hcHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLCBqdXN0IGEgcmVuYW1lOiBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCB0byBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AuIEJ1dCB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIE5vdywgaW5zdGVhZCBvZiB1c2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2AsIHdlJ3JlIGNhbGxpbmcgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpbiB0aGUgcmVuYW1lZCBmdW5jdGlvbi5cblxuVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoZSAqd2h5Kjogd2UncmUgb25seSBjYW5jZWxsaW5nIFwiTk1JLXNhZmVcIiBmaWVsZHMgbGlrZSB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgaW4gdGhpcyBjb250ZXh0LiBUaGUga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGRlc3RydWN0aW9uIGlzIHRvbyByaXNreSB0byBydW4gaW4gYXJiaXRyYXJ5IEJQRiBjb250ZXh0cyAoTk1JLCBmb3IgZXhhbXBsZSkuIFRob3NlIGZpZWxkcyBhcmUgYmVpbmcgbGVmdCBhdHRhY2hlZCBhbmQgaGFuZGxlZCBpbiBgcmh0YWJfbWVtX2R0b3IoKWAgbGF0ZXIuIFRoYXQncyBhIGtleSBkZXRhaWwhIFNvLCBmdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGZvciBgQlBGX01BUF9UWVBFX1JIQVNIYCwgd2hpY2ggdGhpcyBjb2RlIGlzIGNsZWFybHkgdGllZCB0by5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gYEJQRl9NQVBfVFlQRV9SSEFTSGAgaXMgd2hhdCBJJ20gZm9jdXNlZCBvbiBoZXJlLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYSByZWNlbnQgYWRkaXRpb24gb3IgaWYgaXQncyBiZWVuIGFyb3VuZCBmb3IgYSB3aGlsZS4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIGhpc3Rvcnkgd2l0aGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjA0LjE5NTIyNTcyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE4ODcxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9SSEFTSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXFx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XFx0QlBGX01BUF9UWVBFX1JIQVNILFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVxcdF9fTUFYX0JQRl9NQVBfVFlQRVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXFx0XFx0ICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcXHRcXHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVxcdFxcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjYtXFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjEyNzpcXHRcXHQgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cXHRcXHRnb3RvIHB1dF9tYXA7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjQzPXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODctXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjg4OlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyODktXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzAyLVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMzpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzA0LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNC1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMTU6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzNzA9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MDgtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MDk6XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MTAtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDgwLVxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ4MTpcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDgyLVxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjIwNT1zdGF0aWMgaW50IG1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2NC1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMjY1OlxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI2Ni1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NzQ1PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzkzLVxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Nzk0OlxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5NS1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVxcdFtCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWV1cXHRcXHQ9IFxcXCJpbnNuX2FycmF5XFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcXHRbQlBGX01BUF9UWVBFX1JIQVNIXVxcdFxcdFxcdD0gXFxcInJoYXNoXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMC19O1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cXHRcXHRicmVhaztcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzEzLVxcdFxcdG9wdHMubWFwX2ZsYWdzXFx0PSBCUEZfRl9OT19QUkVBTExPQztcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVxcdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLCBtYXBfdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUyLVxcdFxcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXFx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcXHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXFx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoxNjg6XFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cXHRcXHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTIxMT1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcXHRoYXNobWFwX2xvb2t1cF9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0xNTU9c3RhdGljIHZvaWQgaHRhYl9tZW1fc2V0dXBfaW1wbChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXFx0YnBmX21hcF9fc2V0X21heF9lbnRyaWVzKG1hcCwgTUFYKDgxOTIsIDY0ICogZW52Lm5yX2NwdXMpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1OlxcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MjMxOlxcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XFx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXFxcInJoYXNoX2V4dHJhXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUzLVxcdFxcdFxcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcXHUwMDI2b3B0cyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jOjk6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yMj1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjIzOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTI0LVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmM9MjU9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jOjI2OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmMtMjctXFx0X191aW50KG1heF9lbnRyaWVzLCAxNik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjA2LjYxNDEwMjM4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDM4NjgxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIE1hcCBNb2RpZmljYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgdGhpcyBgQlBGX01BUF9UWVBFX1JIQVNIYCB0eXBlLCBhbmQgYSBwYXRjaCB0aGF0J3MgcGxheWluZyB3aXRoIGl0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGNoYW5naW5nIGByaHRhYl9jYW5jZWxfZmllbGRzYCB0byB1c2UgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpbnN0ZWFkIG9mIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCBpdCdzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUuIERlZmluaXRlbHkgd29ydGggbG9va2luZyBhdCB0aGlzIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSDigJMgdGhpcyBzY3JlYW1zIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCBtZSBzZWXigKYgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIGZsb3cuIExldCdzIHRyYWNlIGJhY2sgZnJvbSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gdG8gc2VlIHdoZXJlIGl0IGlzIHVzZWQuIFJpZ2h0LCBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgaXMgY2FsbGVkIGJ5IGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gSG9sZCBvbuKApiBpc24ndCBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgYSAqc3RhdGljKiBmdW5jdGlvbj8gTWVhbmluZyBpdCBpc24ndCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHk/IE9rYXksIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIFRoYXQgbWVhbiBpdCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseS4gU28gdGhlIGNhbGxlcnMgKmFyZSogdGhlIHR3byB0aGF0IGFyZSBub3Qgc3RhdGljLiBPa2F5LCBsZXQncyB2ZXJpZnkg4oCTIGFyZSAqdGhleSogc3RhdGljPyBJZiB0aGV5IGFyZW4ndCwgdGhlbiB3ZSBoYXZlIGEgcGF0aCB0byBmdXp6LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjExLjYxNzk3MjMzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU5NzMzMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodGFiX2RlbGV0ZV9lbGVtfHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOD1zdGF0aWMgdm9pZCByaHRhYl9yZWFkX2VsZW1fdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqZHN0LCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NDgtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0OTpzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUwLVxcdFxcdFxcdCAgICAgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4Mz1zdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk5My1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk0OlxcdHJldHVybiByaHRhYl9kZWxldGVfZWxlbShyaHRhYiwgZWxlbSwgTlVMTCwgMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk5NS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTk3PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxMi1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDEzOlxcdHJldHVybiByaHRhYl9kZWxldGVfZWxlbShyaHRhYiwgZWxlbSwgdmFsdWUsIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDE0LX1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDE1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMTY6c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAxNy1cXHRcXHRcXHRcXHQgICAgICB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzA0ND1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNTctXFx0aWYgKGVsZW0pXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA1ODpcXHRcXHRyZXR1cm4gcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhtYXAsIGVsZW0sIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNTktXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDk3LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwOTg6XFx0XFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCB0bXAsIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwOTktXFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI1NT1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzU4LVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0b3RhbDsgaSsrKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNTk6XFx0XFx0XFx0cmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGRlbF9lbGVtc1tpXSwgTlVMTCwgMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM2MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjE0LjU3NzcxNTE5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTMwMjQ4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIGFyZSBteSBpbW1lZGlhdGUgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgUmVkLUJsYWNrIFRyZWUgTWFwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUga2V5IG1hcCBvcGVyYXRpb25zIGV4cG9zZWQgYnkgdGhlIFJlZC1CbGFjayBUcmVlIG1hcC4gSXQgc2VlbXMgbGlrZSBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGFyZSB0aGUgcHJpbWFyeSwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIG1hbmlwdWxhdGluZyB0aGUgbWFwLiBUaGF0IGxhc3Qgb25lIHdpdGggdGhlIGRvdWJsZSB1bmRlcnNjb3JlIGlzIGEgYml0IGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IGludGVybmFsIG9yIGJhdGNoLW9yaWVudGVkIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhlc2Ugc2VlbSB0byBiZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQuXG5cblRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGByaHRhYl9tYXBfb3BzYC4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgdXAsIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBSZWQtQmxhY2sgVHJlZSBpbXBsZW1lbnRhdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgbWFwIG9wZXJhdGlvbnMgY29udGV4dC4gS25vd2luZyB0aGUgYHJodGFiX21hcF9vcHNgIHN0cnVjdCBkZWZpbml0aW9uIHdpbGwgdGVsbCBtZSBob3cgZXZlcnl0aGluZyBpcyBib3VuZCB0b2dldGhlci4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCB0byBiZWdpbiB0byBmdWxseSBncmFzcCBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjIzLjgzMDc0MjIwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgzNjc0OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodGFiX21hcF9vcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjQ9QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI1OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MjYtXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDoyNi4wMTQ0MjI4MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk4NDIyNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGByaHRhYl9tYXBfb3BzYCBNYXAgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgbWFwIG9wZXJhdGlvbnMgZm9yIGByaHRhYl9tYXBfb3BzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1hcHMgYXJlIGFjdHVhbGx5IGZ1bmN0aW9uaW5nIHVuZGVyIHRoZSBob29kLiBXaGF0IGFyZSB0aGUga2V5IG9wZXJhdGlvbnM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlYWRzLCB3cml0ZXMsIGluc2VydHMsIGRlbGV0ZXMsIHVwZGF0ZXMsIGxvb2t1cHMg4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3Mgb2YgaW50ZXJhY3Rpb24/IEnigJltIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGVmZmljaWVuY3k7IGhvdyBhcmUgdGhlc2UgaW1wbGVtZW50ZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyBjYWxscyBmb3IgYSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSB3aGVyZSB0aGVzZSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gc2VlIHRoZSBwcmVjaXNlIGltcGxlbWVudGF0aW9ucywgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIGFuZCB0aGUgYWxnb3JpdGhtcyBpbnZvbHZlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIOKAkyB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIHRoZXNlIG9wZXJhdGlvbnMgZGVmaW5lcyB0aGUgcHJhY3RpY2FsIGNhcGFiaWxpdGllcyBvZiB0aGUgZW50aXJlIGByaHRhYmAgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGVhY2ggb3BlcmF0aW9uLiBBcmUgdGhleSB0aHJlYWQtc2FmZT8gRG8gdGhleSB1dGlsaXplIGFueSBsb2NraW5nIG1lY2hhbmlzbXM/IFdoYXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnM/IFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBhIHN5c3RlbSB3aXRoIGNvbmN1cnJlbmN5PyBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgdHJhZGUtb2ZmcyBoZXJlLCBnaXZlbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgdGhpcyBsaWJyYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjI5LjUxMjg0ODQ1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNjIxNjMyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTI0PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyNTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI2LVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjA6MzEuNjI5MDgyMTM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTUyOTE5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSGFzaCBUYWJsZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBCUEYgaGFzaCB0YWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIHRoZSBga2VybmVsL2JwZi9oYXNodGFiLmNgIGZpbGUuIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAzNTI1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGhhc2ggdGFibGUncyB3b3JraW5ncy4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygc29tZXRoaW5nIHNwZWNpZmljIGF0IHRoYXQgbG9jYXRpb24sIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDozNS4yNDQzNzY4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM1MjA6XFx0XFx0LmZpbmlfc2VxX3ByaXZhdGUgPSBicGZfaXRlcl9maW5pX3JoYXNoX21hcCxcXG4zNTIxOlxcdFxcdC5zZXFfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8pLFxcbjM1MjI6XFx0fTtcXG4zNTIzOlxcdFxcbjM1MjQ6XFx0QlRGX0lEX0xJU1RfU0lOR0xFKHJodGFiX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9yaHRhYilcXG4zNTI1OlxcdGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbjM1MjY6XFx0XFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbjM1Mjc6XFx0XFx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcXG4zNTI4OlxcdFxcdC5tYXBfYWxsb2MgPSByaHRhYl9tYXBfYWxsb2MsXFxuMzUyOTpcXHRcXHQubWFwX2ZyZWUgPSByaHRhYl9tYXBfZnJlZSxcXG4zNTMwOlxcdFxcdC5tYXBfZ2V0X25leHRfa2V5ID0gcmh0YWJfbWFwX2dldF9uZXh0X2tleSxcXG4zNTMxOlxcdFxcdC5tYXBfcmVsZWFzZV91cmVmID0gcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyxcXG4zNTMyOlxcdFxcdC5tYXBfY2hlY2tfYnRmID0gcmh0YWJfbWFwX2NoZWNrX2J0ZixcXG4zNTMzOlxcdFxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxuMzUzNDpcXHRcXHQubWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSxcXG4zNTM1OlxcdFxcdC5tYXBfdXBkYXRlX2VsZW0gPSByaHRhYl9tYXBfdXBkYXRlX2VsZW0sXFxuMzUzNjpcXHRcXHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxcbjM1Mzc6XFx0XFx0Lm1hcF9nZW5fbG9va3VwID0gcmh0YWJfbWFwX2dlbl9sb29rdXAsXFxuMzUzODpcXHRcXHQubWFwX3NlcV9zaG93X2VsZW0gPSByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbSxcXG4zNTM5OlxcdFxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxuMzU0MDpcXHRcXHQubWFwX2Zvcl9lYWNoX2NhbGxiYWNrID0gYnBmX2VhY2hfcmhhc2hfZWxlbSxcXG4zNTQxOlxcdFxcdC5tYXBfbWVtX3VzYWdlID0gcmh0YWJfbWFwX21lbV91c2FnZSxcXG4zNTQyOlxcdFxcdEJBVENIX09QUyhyaHRhYiksXFxuMzU0MzpcXHRcXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcXG4zNTQ0OlxcdFxcdC5pdGVyX3NlcV9pbmZvID0gXFx1MDAyNnJoYXNoX2l0ZXJfc2VxX2luZm8sXFxuMzU0NTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDozNS4yNDQ1MjQ2MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyMjg4NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2ggb24gdGhlIEhhc2h0YWJsZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zIGl0IHRvdWNoZXMuIEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbW9kaWZpZXMgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGFueSBiYXRjaCBvcGVyYXRpb25zLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHJldmVhbHMgc29tZXRoaW5nIEkgaW5pdGlhbGx5IG1pc3NlZDogaXQgYWxzbyBtb2RpZmllcyBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AsIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLiBOb3csIGNvbnNpZGVyaW5nIHRoZSBjYWxsIGNoYWluLCBgcmh0YWJfY2FuY2VsX2ZpZWxkc2AgaXMgdXNlZCBieSB0aGUgaW5pdGlhbCBmb2N1cyBmdW5jdGlvbnMgSSBtZW50aW9uZWQsIHNwZWNpZmljYWxseSBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGFuZCBhbHNvIGJ5IGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIE9rYXksIHNvIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYW5kIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIGZvciBub3cuXG5cblRoZW4sIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGdvdGNoYXMuIFJpZ2h0LCB0aGUgcGF0Y2ggaXMgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIGVuc3VyZSBCUEYgbWFwcyBhcmUgZW5hYmxlZCwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBgQ09ORklHX0JQRl9TWVNDQUxMYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDo0MS4xNjc0MTMxOTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY0MzUxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjA6NDMuNTIzODUyMDg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTA4NjU2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBoZXJlIGlzIG9uIGBCUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgcHJpbWFyeSBzeXN0ZW0gY2FsbCB3ZSdyZSBkZWFsaW5nIHdpdGgsIHNvIGl0J3MgdGhlIGFuY2hvciBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgc3VzcGVjdCB3ZeKAmXJlIGRlYWxpbmcgd2l0aCBtb3JlIHRoYW4ganVzdCBhIHNpbmdsZSBmdW5jdGlvbiwgdGhlcmVmb3JlLCBJIHNob3VsZCBhbmFseXplIHRoZSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHN5c3RlbSBjYWxsLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlci4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyBmb3IgYEJQRl9NQVBfVFlQRV9SSEFTSGAuIEknbSBjdXJpb3VzIGlmIHRoZXJlIGFyZSBudWFuY2VzIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmcgaW4gdGhlIHJoYXNoIG1hcCB0eXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjQ2LjgzNDcyMDgyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjczOTEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfTUFQX1RZUEVfUkhBU0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzc6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9SSEFTSCwgcmh0YWJfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmM9MTAwPXN0YXRpYyBpbnQgYnBmX2l0ZXJfYXR0YWNoX21hcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVxcdFxcdCBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjgtXFx0XFx0Z290byBwdXRfbWFwO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTI0Mz1zdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjg3LVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTI4ODpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjg5LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMi1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMDM6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwNC1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfTFJVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMzE1OlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTYtXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzcwPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDA4LVxcdCAgICBhdHRyLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQVJFTkEgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDA5OlxcdCAgICBhdHRyLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDEwLVxcdCAgICBhdHRyLVxcdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ4MC1cXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0ODE6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ4Mi1cXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSDpcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMDU9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIyNjQtXFx0XFx0ICAgbWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI2NTpcXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIyNjYtXFx0XFx0ICAgbWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU1RBQ0tfVFJBQ0UpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzc0NT1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzc5My1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzc5NDpcXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3OTUtXFx0XFx0Y2FzZSBCUEZfTUFQX1RZUEVfTFJVX0hBU0g6XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA0OS1cXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcXHRCUEZfTUFQX1RZUEVfUkhBU0gsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXFx0X19NQVhfQlBGX01BUF9UWVBFXFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1Ny1cXHRcXHQgKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxNTU4OlxcdFxcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTktXFx0XFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE5OC1cXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXFx0XFx0PSBcXFwiaW5zbl9hcnJheVxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxOTk6XFx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cXHRcXHRcXHQ9IFxcXCJyaGFzaFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zMTEtXFx0XFx0YnJlYWs7XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6MzEyOlxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cXHRcXHRvcHRzLm1hcF9mbGFnc1xcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9Mzc9c3RhdGljIHZvaWQgaGFzaG1hcF9mdWxsX3VwZGF0ZV9zZXR1cChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01MC1cXHRicGZfbWFwX19zZXRfdHlwZShjdHguc2tlbC1cXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo1MTpcXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTgwPXN0YXRpYyB2b2lkIHJoYXNoX3NldHVwKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM6ODI6XFx0aGFzaG1hcF9mdWxsX3VwZGF0ZV9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTE1MT1zdGF0aWMgdm9pZCBoYXNobWFwX2xvb2t1cF9zZXR1cChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY3LVxcdG1hcF9mbGFncyA9IGFyZ3MubWFwX2ZsYWdzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4OlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjktXFx0XFx0bWFwX2ZsYWdzIHw9IEJQRl9GX05PX1BSRUFMTE9DO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxMi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoyMTM6XFx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTIxNC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg0LVxcdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjE4NTpcXHRpZiAobWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2IGFyZ3MucHJlYWxsb2NhdGVkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODYtXFx0XFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhtYXAsIGJwZl9tYXBfX21hcF9mbGFncyhtYXApIFxcdTAwMjYgfkJQRl9GX05PX1BSRUFMTE9DKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0yMjk9c3RhdGljIHZvaWQgcmh0YWJfbWVtX3NldHVwKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTIzMC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcXHRodGFiX21lbV9zZXR1cF9pbXBsKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTIzMi19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jPTQ2PXN0YXRpYyBpbnQgcmhhc2hfbWFwX2NyZWF0ZShfX3UzMiBtYXhfZW50cmllcywgX191NjQgbWFwX2V4dHJhKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jOjUyOlxcdHJldHVybiBicGZfbWFwX2NyZWF0ZShCUEZfTUFQX1RZUEVfUkhBU0gsIFxcXCJyaGFzaF9leHRyYVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01My1cXHRcXHRcXHQgICAgICBzaXplb2YoX191MzIpLCBzaXplb2YoX191NjQpLCBtYXhfZW50cmllcywgXFx1MDAyNm9wdHMpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYz04PXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmMtMTAtXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmM9MjI9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzoyMzpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYy0yNC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jPTI1PXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYzoyNjpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jLTI3LVxcdF9fdWludChtYXhfZW50cmllcywgMTYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMDo0OS4xNDE0NjUxMjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNDQxNTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIHRoZSBCUEYgTWFwIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBpcyBhY3R1YWxseSBhIHN0YW5kYXJkIEJQRiBtYXAgdHlwZS4gSXQncyBkZWZpbmVkIHdpdGhpbiB0aGUgc3RhbmRhcmQgQlBGIG1hcHMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24g4oCTIGlmIHRoYXQncyBlbmFibGVkLCB0aGVuIHRoZSByZWxldmFudCBjb2RlIGZvciB0aGVzZSBoYXNoIG1hcHMgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuXG5cbkknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbWUgaW50byBwbGF5IGhlcmUuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCBjb250cm9scyB0aGlzIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgaXMgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYWN0aXZlLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgd2hlcmUgZWxzZSB0byBsb29rIGlmIEkgbmVlZCB0byBhZGp1c3QgaG93IHRoaXMgY29tcG9uZW50IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgzNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjUyLjU1NTg4MzQ2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NTA2MjI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXNodGFiLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlPTE3PXNlbGludXgteSA6PSBhdmMubyBob29rcy5vIHNlbGludXhmcy5vIG5ldGxpbmsubyBubG1zZ3RhYi5vIG5ldGlmLm8gXFxcXFxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTgtXFx0ICAgICBuZXRub2RlLm8gbmV0cG9ydC5vIHN0YXR1cy5vIGluaXRjYWxscy5vIFxcXFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlOjE5OlxcdCAgICAgc3MvZWJpdG1hcC5vIHNzL2hhc2h0YWIubyBzcy9zeW10YWIubyBzcy9zaWR0YWIubyBzcy9hdnRhYi5vIFxcXFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlLTIwLVxcdCAgICAgc3MvcG9saWN5ZGIubyBzcy9zZXJ2aWNlcy5vIHNzL2NvbmRpdGlvbmFsLm8gc3MvbWxzLm8gc3MvY29udGV4dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIwOjU1LjA0MDk1NDg1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQ5NzY2MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBDb25zaWRlcmF0aW9ucyBmb3IgdGhlIFJlZC1CbGFjayBUcmVlIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHByZXR0eSBjZXJ0YWluIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBvbmx5IGNvbmZpZyBvcHRpb24gSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGhlcmUuIE5vdywgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYHJodGFiX2NhbmNlbF9maWVsZHNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIGNhbGxlZCBzcGVjaWZpY2FsbHkgYnkgYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZnVuY3Rpb25zLiBMZXQgbWUgcXVpY2tseSBsaXN0IHRoZSBub24tc3RhdGljIHB1YmxpYyBmdW5jdGlvbnMuIEFoYSwgaGVyZSB0aGV5IGFyZTogYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC5cblxuV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgPyBJdCAqaXMqIGEgc3RhdGljIG9uZSwgc28gSSBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgc3BlY2lmaWMgZGV0YWlscyB0aGVyZS4uLiB0aG91Z2ggdGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIGJhdGNoIG9wZXJhdGlvbnMuIExldCdzIG1ha2UgYSBjb21wbGV0ZSBsaXN0IGhlcmUuIFRoZSBiYXRjaCBvcGVyYXRpb25zIGFyZTogYHJodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYHJodGFiX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYHJodGFiX21hcF9kZWxldGVfYmF0Y2hgLiBPa2F5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIGVhY2ggb2YgdGhlc2UgdG8gYXZvaWQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0OTcsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjA6NTkuOTkwNzI0NTIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA2NDM5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodGFiX21hcF9sb29rdXBfYmF0Y2h8cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNofHJodGFiX21hcF91cGRhdGVfYmF0Y2h8cmh0YWJfbWFwX2RlbGV0ZV9iYXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI1NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjU1OnN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjU2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5MTpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5Mi1cXHRcXHRcXHRcXHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5My17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NDpcXHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTUtfVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTYtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5NzpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk4LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk5LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDAwOlxcdHJldHVybiBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDAxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MDIuNzk3MTcwODY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjA1MDQ0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZSwgd2l0aCBhICoqYm9sZGVkIGhlYWRlcioqOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHJodGFiYCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgYHJodGFiYCBjb2RlLCBhbmQgc29tZXRoaW5nJ3MgaW1tZWRpYXRlbHkgc3RpY2tpbmcgb3V0LiBJdCBzZWVtcyBsaWtlIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgSSdtIHNlZWluZyBkZWZpbmVkIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgY2xhc3NpYyBlbmNhcHN1bGF0aW9uIHRlY2huaXF1ZSwgYW5kIGl0IHR5cGljYWxseSBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSG1tLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCB0aGUgb25seSBleGNlcHRpb25zIHdvdWxkIGJlIHRoZSBmdW5jdGlvbnMgZXhwb3NlZCB0aHJvdWdoIGByaHRhYl9tYXBfb3BzYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGV4dGVybmFsIGludGVyZmFjZS4gQnV0IGhhbmcgb24uLi4gdGhlcmUncyBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYC4gSXNuJ3QgdGhhdCBhbHNvIGRlY2xhcmVkIHN0YXRpYz8gTmVlZCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGFuZCB2ZXJpZnkgaWYgbXkgb2JzZXJ2YXRpb24gYWJvdXQgaXQgYmVpbmcgc3RhdGljIGlzIGluZGVlZCBjb3JyZWN0LiBJZiBpdCBpcyBzdGF0aWMsIHRoYXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyB1cGRhdGVzIGFyZSBoYW5kbGVkIG91dHNpZGUgdGhlIG1haW4gbWFwIG9wZXJhdGlvbnMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjA2LjUxNzY3NzUwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzQwNTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MzAxNj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA0NDpzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDQ1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MjU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTM0LVxcdC5tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSA9IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MzU6XFx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTM2LVxcdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjA4LjkzMTA4ODg2N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODUzMTk3Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTWFwIEVudHJ5cG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWFwIG9wZXJhdGlvbnMsIGFuZCB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IHRoZXkncmUgYWxsICpzdGF0aWMqLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIGlzIG5vdCBpZGVhbCBmb3IgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbWFwIG9wZXJhdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBub3QgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgaXMgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIHdvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgd2hpY2ggY29tcGxpY2F0ZXMgdHJhY2luZyBhbmQgZGVidWdnaW5nLlxuXG5Ob3csIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCAqaXMqIG5vbi1zdGF0aWMgKGl0J3MgYSBzeXNjYWxsIGVudHJ5IHBvaW50ISksIGJ1dCB0aGF0J3MgdG9vIGdlbmVyaWMgZm9yIHdoYXQgSSBuZWVkLiBJIG5lZWQgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIgbWFwIHR5cGUgSSdtIHdvcmtpbmcgd2l0aC4gTGV0IG1lIHNlZS4uLiBJIHdvbmRlciBpZiBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBpbmxpbmVkLiBBaCwgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHJodGFiX21hcF9vcHNgLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0ICpjYW5ub3QqIGJlIGlubGluZWQhIEV4Y2VsbGVudCEgVGhhdCdzIHByZWNpc2VseSB3aGF0IEkgbmVlZC5cblxuVGhlcmVmb3JlLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBUaGV5IGFyZSBub3QgaW5saW5lZCwgYW5kIHRoZXkgcHJvdmlkZSB0aGUgc3BlY2lmaWMgbWFwIG9wZXJhdGlvbnMgSSByZXF1aXJlLiBUaGVzZSBhcmUgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF04oCZcyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgaW4gYSBzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBteSB3b3JrLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBJIGRvbid0IHdhbnQgdG8gb3Zlcmxvb2sgYW55IG90aGVyIHBvc3NpYmxlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMToxNC43ODQyODkxOTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODIzMjAyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmh0YWJfbWFwX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUyND1CVEZfSURfTElTVF9TSU5HTEUocmh0YWJfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX3JodGFiKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjU6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyNi1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjE3LjI2NjYxNDY0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyMzc3NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcy5cblxuKipOYXZpZ2F0aW5nIHRoZSBgcmh0YWJfbWFwYCBTdHJ1Y3R1cmUqKlxuXG5SaWdodCwgc28gdGhlIGByaHRhYl9tYXBfb3BzYCBzdHJ1Y3R1cmUgaXRzZWxmIGlzbid0IHN0YXRpYywgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBmdW5jdGlvbnMgd2l0aGluIGl0LCB0aGluZ3MgbGlrZSBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCB0aG9zZSAqYXJlKiBzdGF0aWMuIFRoZSBmYWN0IHRoYXQgdGhlaXIgYWRkcmVzc2VzIGFyZSBiZWluZyB0YWtlbiBjbGFyaWZpZXMgdGhhdC4gSSB3aWxsIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRvIHVzZSB0aG9zZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucy5cblxuSG9sZCBvbiwgSSBzZWUgc29tZXRoaW5nIGVsc2UgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuLi4gYHJodGFiX21lbV9kdG9yYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0J3Mgc3RhdGljLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbid0IGhhdmUgaXQgb24gdGhlIHRvcCBvZiBteSBtaW5kIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGF0IGNvdWxkIHNpZ25pZmljYW50bHkgYWx0ZXIgaG93IEkgYXBwcm9hY2ggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMToyMC44Mjg5OTQ5NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzQ3MDUzNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmh0YWJfbWVtX2R0b3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9Mjg2OD1zdGF0aWMgdm9pZCByaHRhYl9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg3Ny1cXHQgKiBleGVjdXRpb24gY29udGV4dHMgKGUuZy4gTk1JKSwgc28gbGVhdmUgdGhvc2UgZmllbGRzIGF0dGFjaGVkIHRvXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjg3ODpcXHQgKiB0aGUgcmVjeWNsZWQgZWxlbWVudCBhbmQgbGV0IHJodGFiX21lbV9kdG9yKCkgZGVzdHJveSB0aGVtIG9uY2UgdGhlXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg3OS1cXHQgKiBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuIFRoaXMgbWF0Y2hlcyB0aGUgaGFzaCBtYXAgc2VtYW50aWNzXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODg2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODc6c3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg4OC17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTQ5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3NS1cXHR9XFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk3NjpcXHQvKiBDYW5jZWwgTk1JLXNhZmUgZmllbGRzOyBmdWxsIGRlc3RydWN0aW9uIGhhcHBlbnMgaW4gcmh0YWJfbWVtX2R0b3IgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc3LVxcdHJodGFiX2NhbmNlbF9maWVsZHMocmh0YWIsIGVsZW0pO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAxNj1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMzctXFx0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzOyByZWZlcmVuY2VkIGtwdHJzXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzAzODpcXHQgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAzOS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxMTk9c3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjQtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEyNTpcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMToyMy4wNjM3MDkwMzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2NzM4OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFJoYXNoIE1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGByaHRhYl9tZW1fZHRvcmAgaXMgc3RhdGljLCB5ZXQgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gbm90ZTsgaXQgbWlnaHQgaW5kaWNhdGUgYSBzcGVjaWZpYyBpbnRlcmFjdGlvbiBwb2ludC5cblxuTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gT2J2aW91c2x5LCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY2VudHJhbCBvbmUgd2UncmUgZGVhbGluZyB3aXRoLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IHBlcnRhaW4gc3BlY2lmaWNhbGx5IHRvIGtwdHJzIGFuZCB0aGVzZSBmdW5jdGlvbiBjaGFuZ2VzLiBUaGUgdGVzdHMgdXNlIGBicGZfa3B0cl94Y2hnYCBhbmQgYGJwZl90YXNrX2FjcXVpcmVgLiBUaG9zZSB1c3VhbGx5IHB1bGwgaW4gYENPTkZJR19ERUJVR19JTkZPX0JURmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgdGhlIGBoYXNodGFiLmNgIHN0dWZmLCBpcyB0aWVkIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLCBhcyBleHBlY3RlZC5cblxuTm93LCBsZXQgbWUgc3ludGhlc2l6ZSB3aGF0IEkga25vdy4gVGhpcyBpcyB3aGF0IEknbSBjb25jbHVkaW5nIGZyb20gbXkgcmV2aWV3IG9mIHRoZSBjaGFuZ2VzOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseSwgeWVzLiBUaGVyZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgY3JpdGljYWwgYXJlYS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBEZWZpbml0ZWx5IGZvY3VzIG9uIHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9uczogYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQsIGNydWNpYWxseSwgYHJodGFiX21lbV9kdG9yYC4gVGhlc2UgYXJlIHRoZSB0b3VjaHBvaW50cyBmb3IgdGhlIGZpeC5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEJQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGVuYWJsZXIgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGUgdW5kZXJseWluZyBpc3N1ZSBpcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgY2F1c2VkIHByZW1hdHVyZSwgdW5zYWZlIGRlc3RydWN0aW9uIG9mIHJlZmVyZW5jZWQga3B0cnMuIFRoZSBwYXRjaCBjbGV2ZXJseSByZXdvcmtzIGByaHRhYl9jYW5jZWxfZmllbGRzYCB0byBvbmx5IGhhbmRsZSBOTUktc2FmZSBmaWVsZHMgYW5kIGRlZmVycyB0aGUgZnVsbCBkZXN0cnVjdGlvbiB0byBgcmh0YWJfbWVtX2R0b3JgLiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBpcyB0b3VjaGluZyByZWFjaGFibGUgQlBGIG1hcCBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAxMCwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MzAuNTMxMTAxNDYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTIzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWVtX2R0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHJoYXNoIG1hcCB3aGVyZSB1cGRhdGluZyBhbiBlbGVtZW50IGZyb20gYW4gTk1JIGNvbnRleHQgZWFnZXJseSBkZXN0cm95ZWQgcmVmZXJlbmNlZCBrcHRycywgd2hpY2ggaXMgbm90IHNhZmUuIEl0IGNoYW5nZXMgYHJodGFiX2NhbmNlbF9maWVsZHNgIHRvIG9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyBhbmQgZGVmZXJzIGZ1bGwgZGVzdHJ1Y3Rpb24gdG8gYHJodGFiX21lbV9kdG9yYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBCUEYgbWFwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcInJodGFiX21lbV9kdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiByaGFzaCBtYXAgd2hlcmUgdXBkYXRpbmcgYW4gZWxlbWVudCBmcm9tIGFuIE5NSSBjb250ZXh0IGVhZ2VybHkgZGVzdHJveWVkIHJlZmVyZW5jZWQga3B0cnMsIHdoaWNoIGlzIG5vdCBzYWZlLiBJdCBjaGFuZ2VzIGByaHRhYl9jYW5jZWxfZmllbGRzYCB0byBvbmx5IGNhbmNlbCBOTUktc2FmZSBmaWVsZHMgYW5kIGRlZmVycyBmdWxsIGRlc3RydWN0aW9uIHRvIGByaHRhYl9tZW1fZHRvcmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgQlBGIG1hcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMTozMC42NDgyMzM5MDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjU3MDQyNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MzAuNjQ5MDUyMzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MjU2MjE4NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2Ygc3BlY2lhbCBCUEYgbWFwIGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdXB0cnMsIGxpc3RzLCBhbmQgcmJ0cmVlcykgd2hlbiBhIG1hcCBlbGVtZW50IGlzIHVwZGF0ZWQgb3IgZGVsZXRlZCBpbiBhbiBOTUkgY29udGV4dC4gUHJldmlvdXNseSwgYGJwZl9vYmpfZnJlZV9maWVsZHMoKWAgd2FzIGNhbGxlZCwgd2hpY2ggZWFnZXJseSBkZXN0cm95ZWQgYWxsIGZpZWxkcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bnNhZmUgb3BlcmF0aW9ucyAobGlrZSBkZWFkbG9ja3Mgb3IgY3Jhc2hlcykgZnJvbSBhbiBOTUkgY29udGV4dC4gVGhlIGZpeCByZXBsYWNlcyB0aGlzIHdpdGggYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKClgLCB3aGljaCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzICh0aW1lcnMsIHdvcmtxdWV1ZXMsIHRhc2tfd29yaykgYW5kIGRlZmVycyB0aGUgZGVzdHJ1Y3Rpb24gb2Ygb3RoZXIgZmllbGRzIHRvIGByaHRhYl9tZW1fZHRvcigpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTNmYTZhZDczN2M0NzE3YzU4NDhiMDE1MzgwYTYzNjYwMDVjY2NjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEwOjE5OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggOWYzOTRlMWFhMmU4NS4uNzBmYTFlMWI0YjAwOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjUsMTQgKzI4NjUsMjMgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi1cdFx0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4rc3RhdGljIHZvaWQgcmh0YWJfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbitcdFx0XHRcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtKVxuIHtcbiBcdGlmIChJU19FUlJfT1JfTlVMTChyaHRhYi1cdTAwM2VtYXAucmVjb3JkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi1cdTAwM2VtYXAucmVjb3JkLFxuLVx0XHRcdCAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuK1x0LypcbitcdCAqIE9ubHkgY2FuY2VsIE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKSBoZXJlLlxuK1x0ICoga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGRlc3RydWN0aW9uIG11c3Qgbm90IHJ1biBmcm9tIGFyYml0cmFyeSBCUEZcbitcdCAqIGV4ZWN1dGlvbiBjb250ZXh0cyAoZS5nLiBOTUkpLCBzbyBsZWF2ZSB0aG9zZSBmaWVsZHMgYXR0YWNoZWQgdG9cbitcdCAqIHRoZSByZWN5Y2xlZCBlbGVtZW50IGFuZCBsZXQgcmh0YWJfbWVtX2R0b3IoKSBkZXN0cm95IHRoZW0gb25jZSB0aGVcbitcdCAqIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC4gVGhpcyBtYXRjaGVzIHRoZSBoYXNoIG1hcCBzZW1hbnRpY3NcbitcdCAqIGludHJvZHVjZWQgYnkgYTNhODFkMjQ3NjUxIChcImJwZjogQ2FuY2VsIHNwZWNpYWwgZmllbGRzIG9uIG1hcCB2YWx1ZVxuK1x0ICogcmVjeWNsZVwiKS5cbitcdCAqL1xuK1x0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLFxuK1x0XHRcdFx0ICAgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG5AQCAtMjk2NCw4ICsyOTczLDggQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xuIFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5KTtcbiBcdH1cbi1cdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0LyogQ2FuY2VsIE5NSS1zYWZlIGZpZWxkczsgZnVsbCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHJodGFiX21lbV9kdG9yICovXG4rXHRyaHRhYl9jYW5jZWxfZmllbGRzKHJodGFiLCBlbGVtKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXHUwMDI2cmh0YWItXHUwMDNlbWEsIGVsZW0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMjQsMTAgKzMwMzMsMTEgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxcbiBcdCAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy5cbiBcdCAqXG4gXHQgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy9cbi1cdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBDYW5jZWwgdGhlbSBhZnRlciB0aGUgY29weVxuLVx0ICogdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzLlxuK1x0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGUgTk1JLXNhZmUgb25lcyBhZnRlclxuK1x0ICogdGhlIGNvcHkgdG8gbWF0Y2ggYXJyYXltYXAncyB1cGRhdGUgc2VtYW50aWNzOyByZWZlcmVuY2VkIGtwdHJzXG4rXHQgKiBzdGF5IGF0dGFjaGVkIGFuZCBhcmUgZGVzdHJveWVkIGJ5IHJodGFiX21lbV9kdG9yKCkuXG4gXHQgKi9cbi1cdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4rXHRyaHRhYl9jYW5jZWxfZmllbGRzKHJodGFiLCBlbGVtKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OWJkY2RhOTU1NTU3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaHRhYl9rcHRyLmNcbkBAIC0wLDAgKzEsODcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBLeWxpblNvZnQgQ28uLCBMdGQuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJyaHRhYl9rcHRyLnNrZWwuaFwiXG4rXG4rc3RhdGljIF9fdTY0IHJlYWRfY291bnRlcihzdHJ1Y3Qgcmh0YWJfa3B0ciAqc2tlbCwgdTMyIGlkeClcbit7XG4rXHRfX3U2NCB2YWxzW2xpYmJwZl9udW1fcG9zc2libGVfY3B1cygpXTtcbitcdF9fdTY0IHN1bSA9IDA7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuY291bnRlcnMpLCBcdTAwMjZpZHgsIHZhbHMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImxvb2t1cF9jb3VudGVyXCIpKVxuK1x0XHRyZXR1cm4gMDtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpYmJwZl9udW1fcG9zc2libGVfY3B1cygpOyBpKyspXG4rXHRcdHN1bSArPSB2YWxzW2ldO1xuK1x0cmV0dXJuIHN1bTtcbit9XG4rXG4rdm9pZCB0ZXN0X3JodGFiX2twdHIodm9pZClcbit7XG4rXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHIgPSB7XG4rXHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuK1x0XHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuK1x0XHQuZnJlcSA9IDEsXG4rXHRcdC5zYW1wbGVfZnJlcSA9IHJlYWRfcGVyZl9tYXhfc2FtcGxlX2ZyZXEoKSxcbitcdFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4rXHR9O1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTtcbitcdHN0cnVjdCByaHRhYl9rcHRyICpza2VsO1xuK1x0X191MzIga2V5ID0gMDtcbitcdF9fdTY0IHplcm8gPSAwO1xuK1x0aW50IHBtdV9mZDtcbitcbitcdHNrZWwgPSByaHRhYl9rcHRyX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBDcmVhdGUgdGhlIGVsZW1lbnQgYW5kIHN0YXNoIGEgcmVmZXJlbmNlZCB0YXNrIGtwdHIgaW4gaXQuICovXG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfbWFwX3VwZGF0ZV9lbGVtKGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5yaHRhYiksXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmtleSwgXHUwMDI2emVybywgQlBGX0FOWSksIFwiY3JlYXRlX2VsZW1cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0soYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5pbml0X2VsZW0pLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0b3B0cyksIFwidGVzdF9ydW5faW5pdFwiKSB8fFxuK1x0ICAgICFBU1NFUlRfRVEodG9wdHMucmV0dmFsLCAwLCBcImluaXRfcmV0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHBtdV9mZCA9IHN5c2NhbGwoX19OUl9wZXJmX2V2ZW50X29wZW4sIFx1MDAyNmF0dHIsIC0xLCAwLCAtMSwgMCk7XG4rXHRpZiAocG11X2ZkIFx1MDAzYyAwKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3BlcmZfZXZlbnQoc2tlbC1cdTAwM2Vwcm9ncy5ubWlfdXBkYXRlLFxuK1x0XHRcdFx0XHRcdFx0XHRwbXVfZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3Mubm1pX3VwZGF0ZSwgXCJhdHRhY2hfcGVyZl9ldmVudFwiKSkge1xuK1x0XHRjbG9zZShwbXVfZmQpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIExldCB0aGUgTk1JIGhhbmRsZXIgb3ZlcndyaXRlIHRoZSBlbGVtZW50LiAqL1xuK1x0dXNsZWVwKDEwMDAwMCk7XG4rXG4rXHRicGZfbGlua19fZGVzdHJveShza2VsLVx1MDAzZWxpbmtzLm5taV91cGRhdGUpO1xuK1x0c2tlbC1cdTAwM2VsaW5rcy5ubWlfdXBkYXRlID0gTlVMTDtcbitcdGNsb3NlKHBtdV9mZCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIG9sZCBrcHRyIG11c3Qgc3RpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQ6IHRoZSBOTUkgdXBkYXRlXG4rXHQgKiBwYXRoIG9ubHkgY2FuY2VscyBOTUktc2FmZSBmaWVsZHMsIG1pcnJvcmluZyBoYXNoIG1hcCBzZW1hbnRpY3MuXG4rXHQgKiBCZWZvcmUgdGhlIGZpeCB0aGUga3B0ciB3YXMgcmVsZWFzZWQgZnJvbSB0aGUgTk1JIGNvbnRleHQgYW5kIHRoZVxuK1x0ICogcHJvYmUgYmVsb3cgd291bGQgc2VlIE5VTEwuXG4rXHQgKi9cbitcdHRvcHRzLnJldHZhbCA9IDA7XG4rXHRpZiAoIUFTU0VSVF9PSyhicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnByb2JlX2VsZW0pLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0b3B0cyksIFwidGVzdF9ydW5fcHJvYmVcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgMCwgXCJwcm9iZV9yZXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKHJlYWRfY291bnRlcihza2VsLCAyKSwgMSwgXCJ4Y2hnX25vbl9udWxsXCIpO1xuK1x0QVNTRVJUX0VRKHJlYWRfY291bnRlcihza2VsLCAzKSwgMCwgXCJ4Y2hnX251bGxcIik7XG4rb3V0OlxuK1x0cmh0YWJfa3B0cl9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JodGFiX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaHRhYl9rcHRyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTgwMGEyZTI0ZTYzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmh0YWJfa3B0ci5jXG5AQCAtMCwwICsxLDEwMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGluU29mdCBDby4sIEx0ZC4gKi9cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGEgcmh0YWIgdmFsdWUgdXBkYXRlIGlzc3VlZCBmcm9tIGEgcGVyZl9ldmVudCAoTk1JKSBwcm9ncmFtXG4rICogZG9lcyBub3QgZWFnZXJseSBkZXN0cm95IHJlZmVyZW5jZWQga3B0cnMuIHJodGFiIG11c3QgbWF0Y2ggdGhlIGhhc2ggbWFwXG4rICogc2VtYW50aWNzIGludHJvZHVjZWQgYnkgY29tbWl0IGEzYTgxZDI0NzY1MSAoXCJicGY6IENhbmNlbCBzcGVjaWFsIGZpZWxkc1xuKyAqIG9uIG1hcCB2YWx1ZSByZWN5Y2xlXCIpOiBvbmx5IE5NSS1zYWZlIGZpZWxkcyAodGltZXIsIHdvcmtxdWV1ZSwgdGFza193b3JrKVxuKyAqIGFyZSBjYW5jZWxsZWQgb24gdXBkYXRlL2RlbGV0ZSwgd2hpbGUga3B0cnMgc3RheSBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWRcbisgKiBlbGVtZW50IHVudGlsIGl0IGlzIGV2ZW50dWFsbHkgZnJlZWQuXG4rICpcbisgKiBXaXRob3V0IHRoZSBmaXgsIHRoZSBOTUkgdXBkYXRlIHJlbGVhc2VzIHRoZSBvbGQga3B0ciBhbmQgcHJvYmVfZWxlbSgpXG4rICogb2JzZXJ2ZXMgTlVMTCBpbiB0aGUgc2xvdDsgd2l0aCB0aGUgZml4IHRoZSBvbGQga3B0ciBpcyBpbmhlcml0ZWQgYW5kXG4rICogcHJvYmVfZWxlbSgpIG9ic2VydmVzIGEgbm9uLU5VTEwgcG9pbnRlci5cbisgKi9cbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB2YWxfdCB7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19rcHRyICp0c2s7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDE2KTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IHZhbF90KTtcbit9IHJodGFiIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDQpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBfX3U2NCk7XG4rfSBjb3VudGVycyBTRUMoXCIubWFwc1wiKTtcbitcbisvKiAwOiBpbml0IG9rLCAxOiBubWkgdXBkYXRlIG9rLCAyOiBwcm9iZSB4Y2hnIG5vbi1OVUxMLCAzOiBwcm9iZSB4Y2hnIE5VTEwgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnVtcCh1MzIgaWR4KVxuK3tcbitcdHU2NCAqdiA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2Y291bnRlcnMsIFx1MDAyNmlkeCk7XG4rXG4rXHRpZiAodilcbitcdFx0KCp2KSsrO1xuK31cbitcbitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK2V4dGVybiB2b2lkIGJwZl90YXNrX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rXG4rU0VDKFwicGVyZl9ldmVudFwiKVxuK2ludCBubWlfdXBkYXRlKHN0cnVjdCBicGZfcGVyZl9ldmVudF9kYXRhICpjdHgpXG4re1xuK1x0c3RydWN0IHZhbF90IHZhbCA9IHt9O1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRpZiAoYnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZyaHRhYiwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIEJQRl9BTlkpID09IDApXG4rXHRcdGJ1bXAoMSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBpbml0X2VsZW0odm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCB2YWxfdCAqdmFsO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCAqb2xkO1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnJodGFiLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAxO1xuK1x0dGFzayA9IGJwZl90YXNrX2FjcXVpcmUoYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCkpO1xuK1x0aWYgKCF0YXNrKVxuK1x0XHRyZXR1cm4gMjtcbitcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2dmFsLVx1MDAzZXRzaywgdGFzayk7XG4rXHRpZiAob2xkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKG9sZCk7XG4rXHRidW1wKDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgcHJvYmVfZWxlbSh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHZhbF90ICp2YWw7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZDtcbitcdHUzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZyaHRhYiwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2dmFsLVx1MDAzZXRzaywgTlVMTCk7XG4rXHRpZiAob2xkKSB7XG4rXHRcdGJwZl90YXNrX3JlbGVhc2Uob2xkKTtcbitcdFx0YnVtcCgyKTtcbitcdH0gZWxzZSB7XG4rXHRcdGJ1bXAoMyk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMTozMC42NDkwNTQwMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTQ0Njc2NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgQlBGIEhhc2h0YWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2Ag4oCTIHRoYXQncyB0aGUgcmVhbC10aW1lIGhhc2ggdGFibGUgY29kZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBJIHNlZSB0aGV5J3JlIHJlbmFtaW5nIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHRvIGByaHRhYl9jYW5jZWxfZmllbGRzYCwgd2hpY2ggc291bmRzIGxpa2UgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UgaW4gdGVybWlub2xvZ3ksIGxpa2VseSByZWZsZWN0aW5nIHRoZSBpbnRlbnQgb2YgdGhlIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBzd2FwcGluZyBvdXQgYSBjYWxsIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYCBmb3IgYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYC5cblxuVGhlIGNvbW1lbnQgaXMga2V5IGhlcmU6IGl0J3MgYWxsIGFib3V0IGhhbmRsaW5nIHRoZSBkZXN0cnVjdGlvbiBvZiB2YXJpb3VzIEJQRiBtYXAgZmllbGRzLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBzYWZldHkgb2YgZG9pbmcgc28gaW4gTk1JIGNvbnRleHRzLiBJdCdzIGV4cGxpY2l0bHkgZmxhZ2dpbmcgdGhhdCBmaWVsZHMgbGlrZSB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgYXJlIG9rYXkgdG8gYmUgY2FuY2VsZWQvY2xlYW5lZCB1cCBpbiBhbiBOTUktc2FmZSBtYW5uZXIgaGVyZS4gSG93ZXZlciwgY3J1Y2lhbGx5LCBpdCBpZGVudGlmaWVzIHRoYXQgYGtwdHJgLCBgdXB0cmAsIGBsaXN0YCwgYW5kIGByYnRyZWVgIGRlc3RydWN0aW9uIG11c3QgKm5vdCogaGFwcGVuIGluIGFuIGFyYml0cmFyeSBCUEYgZXhlY3V0aW9uIGNvbnRleHQsIGVzcGVjaWFsbHkgTk1Jcy4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0sIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxvY2t1cHMgb3Igb3RoZXIgbmFzdHkgcmFjZSBjb25kaXRpb25zLiBJdOKAmXMgZXhwbGljaXRseSBsZWF2aW5nIHRob3NlIGZpZWxkcyBhdHRhY2hlZCB0byB0aGUgcmVjeWNsZWQgZWxlbWVudCwga25vd2luZyBgcmh0YWJfbWVtX2R0b3IoKWAgd2lsbCB0YWtlIGNhcmUgb2YgdGhlbSBsYXRlciB3aGVuIGl0J3Mgc2FmZS5cblxuU28sIHRoaXMgaXMgYSBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZSwgc3BlY2lmaWNhbGx5IGZvciBCUEYgbWFwIGZpZWxkcywgbm90YWJseSBrZXJuZWwgcG9pbnRlcnMgKGtwdHJzKSB3aXRoaW4gdGhlIHJlYWwtdGltZSBoYXNoIHRhYmxlIGNvbnRleHQgYW5kIE5NSXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGFuZCBjb21wYXJlIHRvIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gV2FpdCwgSSBzZWUgd2hhdCdzIGdvaW5nIG9uISBUaGUgY2hhbmdlIGlzIHZlcnkgdGFyZ2V0ZWQuIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c2Agc3BlY2lmaWNhbGx5ICpjYW5jZWxzKiB0aG9zZSBOTUktc2FmZSBmaWVsZHMgYnV0IGRvZXNu4oCZdCBpbW1lZGlhdGVseSBkZXN0cm95IHRoZSBvdGhlcnMuIFRoYXQgaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3IuIFRoYXQgb3RoZXIgc3R1ZmYgaXMgdGFrZW4gY2FyZSBvZiBsYXRlci4gQW5kIHRoZXkgYXJlIHNheWluZyB0aGF0IGByaHRhYl9rcHRyLmNgIGhhcyBhIHRlc3QgdG8gdmVyaWZ5IGtwdHJzIGFyZSBub3QgZGVzdHJveWVkIHRvbyBzb29uLiBHb29kLlxuXG5JJ20gZ29pbmcgdG8gcXVpY2tseSBkcmlsbCBkb3duIGludG8gYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzYCBpdHNlbGYuIEnigJlsbCBsb29rIGZvciBpdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuIEp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvZ2ljIG1ha2VzIHNlbnNlIGFuZCB0aGF0IG5vIG5ldyBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUsIGNvbnRyb2xsZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6MzcuNzkzNzM0NzQ0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjczMzg5MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9NzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX2hhc19pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcwNi1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcwNzp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKm9iaik7XFxuaW5jbHVkZS9saW51eC9icGYuaC03MDgtXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9NDYwPXN0YXRpYyB2b2lkIGFycmF5X21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NjktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKylcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDcwOlxcdFxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKG1hcCwgYXJyYXlfbWFwX2VsZW1fcHRyKGFycmF5LCBpKSk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ3MS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMjE9c3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMzItXFx0XFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjMzOlxcdFxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjM0LVxcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE1OTI9c3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTYwMy1cXHRcXHRcXHQvKiBXZSBvbmx5IGZyZWUgaW50ZXJuYWwgc3RydWN0cyBvbiB1cmVmIGRyb3BwaW5nIHRvIHplcm8gKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNjA0OlxcdFxcdFxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTYwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODY4PXN0YXRpYyB2b2lkIHJodGFiX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODgyLVxcdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4ODM6XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjg4NC1cXHRcXHRcXHRcXHQgICAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTk9c3RhdGljIHZvaWQgcmh0YWJfZnJlZV9lbGVtKHZvaWQgKnB0ciwgdm9pZCAqYXJnKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTA0OlxcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFxcdTAwMjZyaHRhYi1cXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTA1LVxcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgZWxlbSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTI4PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTQtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1NTpcXHRcXHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhtYXAsIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTYtXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz01MDI1PXZvaWQgKl9fYnBmX2R5bnB0cl9kYXRhX3J3KGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTUwMzEtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NTAzMjp2b2lkIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMzLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgxMD12b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODExLXtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo4MTI6XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMobWFwLCBvYmopO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgxMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjQwLjA2NzEyOTU3MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg0OTcwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIE1hcCBDbGVhbnVwIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCB0byBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIHdpdGhpbiB0aGUgYHJodGFiX2NhbmNlbF9maWVsZHNgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgcmVhc29uaW5nLiBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXAg4oCTIHRpbWVycywgd29ya3F1ZXVlcywgYHRhc2tfd29ya2AsIHRoYXQgc29ydCBvZiB0aGluZy4gSXQncyBkZWxpYmVyYXRlbHkgKm5vdCogZnJlZWluZyB0aGUga3B0ci91cHRyL2xpc3QvcmJ0cmVlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgb24gdGhlIHJlY3ljbGVkIGVsZW1lbnQuIFRoYXQncyBhIGtleSBwb2ludC5cblxuVGhlIGNvbmNlcm4gaGVyZSwgYW5kIGl0J3MgYSB2YWxpZCBvbmUsIGlzIGF2b2lkaW5nIHVuc2FmZSBmcmVlaW5nIG9wZXJhdGlvbnMgZnJvbSBhbiBOTUkgY29udGV4dC4gV2UgYWxsIGtub3cgaG93IGRpY2V5IHRoYXQgY2FuIGJlIOKAkyBwb3RlbnRpYWwgZGVhZGxvY2tzLCBjcmFzaGVzLCB0aGUgd2hvbGUgc2hlYmFuZy4gU28sIGJ5IGxlYXZpbmcgdGhvc2UgYXR0YWNoZWQsIHRoZSByaXNrIG9mIHRyaWdnZXJpbmcgb25lIG9mIHRob3NlIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvcyBpcyBtaXRpZ2F0ZWQuIFRoZXknbGwgYmUgY2xlYW5lZCB1cCBsYXRlciBieSBgcmh0YWJfbWVtX2R0b3IoKWAsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGhlcmUuXG5cblRoZSBpbXBvcnRhbnQgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIG5vciBkb2VzIGl0IGFmZmVjdCBjb250cm9sIGZsb3cuIFRoZSBmaWVsZHMgYXJlIHN0aWxsIGF0dGFjaGVkIHRvIHRoZSBlbGVtZW50IGFuZCwgaW4gZWZmZWN0LCBhcmUgc2FmZS4gVGhlIHN1YnNlcXVlbnQgY2xlYW51cCBwcm9jZXNzIGhhbmRsZWQgYnkgYHJodGFiX21lbV9kdG9yYCB3aWxsIHJlc29sdmUgdGhlbSBhdCBhIGxhdGVyIHRpbWUuXG5cbkdpdmVuIHRoaXMgaW1wbGVtZW50YXRpb24sIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZXJlIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBLQVNBTiBhbmQgTE9DS0RFUCB3aWxsIHN0aWxsIGJlIGFibGUgdG8gY2FwdHVyZSBhbnkgaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgaW5hcHByb3ByaWF0ZSBmcmVlaW5nIGZyb20gTk1JIGNvbnRleHQuIEknbSBzYXRpc2ZpZWQuIExldCdzIG1ha2Ugc3VyZSBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIGlzIHBlcmZvcm1pbmcgYXMgZXhwZWN0ZWQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMDoyMTo0Ni4zNTIxMTE0ODJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzE0OTg5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9oYXNfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC03MDYtXFxuaW5jbHVkZS9saW51eC9icGYuaDo3MDc6dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNzA4LVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NTAyNT12b2lkICpfX2JwZl9keW5wdHJfZGF0YV9ydyhjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpwdHIsIHU2NCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy01MDMxLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjUwMzI6dm9pZCBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWwpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNTAzMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjQ4LjU4MzYxNzE0NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyMDQwMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgbWFwIGZyZWVpbmcgbWVjaGFuaXNtIGFjdHVhbGx5IHdvcmtzIHVuZGVyIHRoZSBob29kLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBkaWcgaW50byBgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHNgIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBCUEYgbWFwIGFyY2hpdGVjdHVyZSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSAqaW50ZXJuYWwqIGRldGFpbHMgb2YgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIHJlbGVhc2VkIHdoZW4gYSBtYXAgaXMgY2xvc2VkIG9yIGRlc3Ryb3llZC4gSSdtIGhvcGluZyB0byBnYWluIGluc2lnaHRzIGludG8gcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBsZXhpdGllcywgcmVzb3VyY2UgbGVha3MgKGhvd2V2ZXIgdW5saWtlbHkpLCBvciBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudCBCUEYgbWFwIHR5cGVzIGFuZCB0aGVpciBmcmVlaW5nIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgcGVyaGFwcyBzcGVjaWZpYyBwZXItbWFwLXR5cGUgc3RydWN0dXJlcywgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXAgYmV5b25kIHRoZSBiYXNpYyBrZXktdmFsdWUgZGF0YS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBlc3BlY2lhbGx5IGlmIHRoZSBtYXBzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBwcm9ncmFtcyBvciBjb250ZXh0cz8gTGV0J3MgZ2V0IGNyYWNraW5nIGFuZCBkaXNzZWN0IHRoaXMgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODI0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEwOjIxOjUyLjE5NTY2MDUwMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDg3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTAzMDpcXHR9XFxuNTAzMTpcXHRcXG41MDMyOlxcdHZvaWQgYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsKVxcbjUwMzM6XFx0e1xcbjUwMzQ6XFx0XFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfVElNRVIpKVxcbjUwMzU6XFx0XFx0XFx0YnBmX29ial9mcmVlX3RpbWVyKG1hcC1cXHUwMDNlcmVjb3JkLCB2YWwpO1xcbjUwMzY6XFx0XFx0aWYgKGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfV09SS1FVRVVFKSlcXG41MDM3OlxcdFxcdFxcdGJwZl9vYmpfZnJlZV93b3JrcXVldWUobWFwLVxcdTAwM2VyZWNvcmQsIHZhbCk7XFxuNTAzODpcXHRcXHRpZiAoYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVxcdTAwM2VyZWNvcmQsIEJQRl9UQVNLX1dPUkspKVxcbjUwMzk6XFx0XFx0XFx0YnBmX29ial9mcmVlX3Rhc2tfd29yayhtYXAtXFx1MDAzZXJlY29yZCwgdmFsKTtcXG41MDQwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6NTIuMTk2MDcxMzMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDkxNTEzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBNYXAgRmllbGQgTGlmZWN5Y2xlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgY2hhbmdlIGlzIHNwZWNpZmljYWxseSBhYm91dCByZWZpbmluZyBob3cgd2UgaGFuZGxlIGNlcnRhaW4gQlBGIG1hcCBmaWVsZHMg4oCTIHNwZWNpZmljYWxseSB0aGUgc3BlY2lhbCBvbmVzIGxpa2Uga2VybmVsIHBvaW50ZXJzIChrcHRycyksIHVzZXIgcG9pbnRlcnMgKHVwdHJzKSwgbGlzdHMsIGFuZCByZWQtYmxhY2sgdHJlZXMgKHJidHJlZXMpIOKAkyB3aGVuIGEgbWFwIGVsZW1lbnQgaXMgdXBkYXRlZCBvciBkZWxldGVkIHdpdGhpbiBhbiBOTUkgY29udGV4dC4gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgb2xkIGNvZGUgd2FzIHRvbyBlYWdlci4gSXQgd2FzIGNhbGxpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgLCB3aGljaCBhZ2dyZXNzaXZlbHkgZGVzdHJveWVkICpldmVyeXRoaW5nKiByaWdodCBhd2F5LiBUaGlzIGNyZWF0ZWQgYSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcywgcGFydGljdWxhcmx5IGRlYWRsb2NrcyBvciBldmVuIGNyYXNoZXMsIGJlY2F1c2UgTk1JIGNvbnRleHRzIGFyZSBzZW5zaXRpdmUuXG5cblRoaXMgZml4IGlzIHNtYXJ0OyBpdCdzIGEgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQuIEluc3RlYWQgb2YgdGhlIG51Y2xlYXIgb3B0aW9uIChgYnBmX29ial9mcmVlX2ZpZWxkc2ApLCBpdCBpbnRyb2R1Y2VzIGEgbW9yZSBncmFudWxhciBhcHByb2FjaC4gVGhlIGNvcmUgaXMgcmVwbGFjaW5nIGl0IHdpdGggYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKClgLCB3aGljaCBzbWFydGx5IG9ubHkgY2FuY2VscyBhbmQgZnJlZXMgdGhlIE5NSS1zYWZlIGZpZWxkcyBsaWtlIHRpbWVycywgd29ya3F1ZXVlcywgYW5kIHRhc2tfd29yayB3aXRoaW4gdGhlIE5NSSBjb250ZXh0LiBUaGUgcmVzdCBvZiB0aGUgZGVzdHJ1Y3Rpb24sIHRoZSBtb3JlIGNvbXBsZXggZmllbGRzIGxpa2UgdGhlIHBvaW50ZXJzLCBsaXN0cywgYW5kIHRyZWVzLCBhcmUgbm93IGRlZmVycmVkLiBUaGV5IHdpbGwgZ2V0IHRoZWlyIHByb3BlciBsaWZlY3ljbGUgdHJlYXRtZW50IGZyb20gYHJodGFiX21lbV9kdG9yKClgLiBUaGlzIGF2b2lkcyBhIHJhY2UgYW5kIGxldHMgdGhlbSBiZSBkZXN0cm95ZWQgc2FmZWx5LlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWxsb2NhdGlvbiBidWcuIEl04oCZcyBhYm91dCBlbnN1cmluZyBjb3JyZWN0IGxvY2tpbmcgYW5kIHByb3BlciBkZXN0cnVjdGlvbiBvcmRlci4gSWYgdGhpcyBwYXRjaCAqZGlkKiBpbnRyb2R1Y2UgYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSwgTE9DS0RFUCBvciBLQVNBTiB3b3VsZCBoYXZlIGNhdWdodCBpdC4gSXQncyBub3QgdGhlIGtpbmQgb2YgdGhpbmcgS01TQU4gaXMgZGVzaWduZWQgdG8gYWRkcmVzcy4gVGhlIGNoYW5nZSBpcyBhYm91dCAqd2hlbiogdGhpbmdzIGFyZSBmcmVlZCwgbm90ICpob3cqIHRoZXkgYXJlIGluaXRpYWxpemVkIG9yIGlmIHRoZXJl4oCZcyBhIG1lbW9yeSBsZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXNuJ3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBpbXBhY3QgaXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmc7IHRoaXMgaXMgYSBjbGVhciBmaXggZm9yIGEgbGlmZWN5Y2xlIGlzc3VlLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBJJ2xsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODIsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTA6MjE6NTkuOTA1MjI2MDEzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2Ygc3BlY2lhbCBCUEYgbWFwIGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdXB0cnMsIGxpc3RzLCBhbmQgcmJ0cmVlcykgd2hlbiBhIG1hcCBlbGVtZW50IGlzIHVwZGF0ZWQgb3IgZGVsZXRlZCBpbiBhbiBOTUkgY29udGV4dC4gUHJldmlvdXNseSwgYGJwZl9vYmpfZnJlZV9maWVsZHMoKWAgd2FzIGNhbGxlZCwgd2hpY2ggZWFnZXJseSBkZXN0cm95ZWQgYWxsIGZpZWxkcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bnNhZmUgb3BlcmF0aW9ucyAobGlrZSBkZWFkbG9ja3Mgb3IgY3Jhc2hlcykgZnJvbSBhbiBOTUkgY29udGV4dC4gVGhlIGZpeCByZXBsYWNlcyB0aGlzIHdpdGggYGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKClgLCB3aGljaCBvbmx5IGNhbmNlbHMgTk1JLXNhZmUgZmllbGRzICh0aW1lcnMsIHdvcmtxdWV1ZXMsIHRhc2tfd29yaykgYW5kIGRlZmVycyB0aGUgZGVzdHJ1Y3Rpb24gb2Ygb3RoZXIgZmllbGRzIHRvIGByaHRhYl9tZW1fZHRvcigpYC5cXG5cXG5UaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9sb2NraW5nIGFuZCBsaWZlY3ljbGUgYnVnICh3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBvciBLQVNBTiBpZiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBmcmVlKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IG9mIHNwZWNpYWwgQlBGIG1hcCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHVwdHJzLCBsaXN0cywgYW5kIHJidHJlZXMpIHdoZW4gYSBtYXAgZWxlbWVudCBpcyB1cGRhdGVkIG9yIGRlbGV0ZWQgaW4gYW4gTk1JIGNvbnRleHQuIFByZXZpb3VzbHksIGBicGZfb2JqX2ZyZWVfZmllbGRzKClgIHdhcyBjYWxsZWQsIHdoaWNoIGVhZ2VybHkgZGVzdHJveWVkIGFsbCBmaWVsZHMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5zYWZlIG9wZXJhdGlvbnMgKGxpa2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMpIGZyb20gYW4gTk1JIGNvbnRleHQuIFRoZSBmaXggcmVwbGFjZXMgdGhpcyB3aXRoIGBicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cygpYCwgd2hpY2ggb25seSBjYW5jZWxzIE5NSS1zYWZlIGZpZWxkcyAodGltZXJzLCB3b3JrcXVldWVzLCB0YXNrX3dvcmspIGFuZCBkZWZlcnMgdGhlIGRlc3RydWN0aW9uIG9mIG90aGVyIGZpZWxkcyB0byBgcmh0YWJfbWVtX2R0b3IoKWAuXFxuXFxuVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBhbmQgbGlmZWN5Y2xlIGJ1ZyAod2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAgb3IgS0FTQU4gaWYgaXQgY2F1c2VkIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgZnJlZSkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow8htg4[1] Phase: Succeeded StartedAt: 2026-08-11 10:22:11 +0000 UTC FinishedAt: 2026-08-11 10:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 10:22:11 +0000 UTC FinishedAt: 2026-08-11 10:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2] Phase: Succeeded StartedAt: 2026-08-11 10:22:11 +0000 UTC FinishedAt: 2026-08-11 14:08:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 10:22:12 +0000 UTC FinishedAt: 2026-08-11 14:08:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 10:22:12 +0000 UTC FinishedAt: 2026-08-11 10:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 10:22:12 +0000 UTC FinishedAt: 2026-08-11 10:22:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8htg4/series-workflow8htg4-convert-artifact-4175858957/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 10:22:22 +0000 UTC FinishedAt: 2026-08-11 10:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 10:22:22 +0000 UTC FinishedAt: 2026-08-11 10:38:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*15047e69-2dd2-4034-9ef2-f983e9b5b41a,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-workflow8htg4/series-workflow8htg4-convert-artifact-4175858957/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": "f8cb9957-c661-4e81-8055-37459afab8fe", "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-workflow8htg4/series-workflow8htg4-build-action-3919440003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 10:22:22 +0000 UTC FinishedAt: 2026-08-11 10:38:37 +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:*15047e69-2dd2-4034-9ef2-f983e9b5b41a,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-workflow8htg4/series-workflow8htg4-convert-artifact-4175858957/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": "f8cb9957-c661-4e81-8055-37459afab8fe", "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-workflow8htg4/series-workflow8htg4-build-action-3919440003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 10:38:47 +0000 UTC FinishedAt: 2026-08-11 10:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 10:38:47 +0000 UTC FinishedAt: 2026-08-11 10:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 10:38:47 +0000 UTC FinishedAt: 2026-08-11 10:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 10:38:47 +0000 UTC FinishedAt: 2026-08-11 10:38:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8htg4/series-workflow8htg4-convert-artifact-1421069160/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 10:38:57 +0000 UTC FinishedAt: 2026-08-11 10:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 10:38:57 +0000 UTC FinishedAt: 2026-08-11 10:41:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f8cb9957-c661-4e81-8055-37459afab8fe,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-workflow8htg4/series-workflow8htg4-build-action-3919440003/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-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 10:41:24 +0000 UTC FinishedAt: 2026-08-11 10:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 10:41:24 +0000 UTC FinishedAt: 2026-08-11 10:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 10:41:24 +0000 UTC FinishedAt: 2026-08-11 10:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 10:41:24 +0000 UTC FinishedAt: 2026-08-11 10:57:44 +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:*15047e69-2dd2-4034-9ef2-f983e9b5b41a,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-workflow8htg4/series-workflow8htg4-convert-artifact-1421069160/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": "6d79f99c-6342-4a5c-a403-9879bc797a97", "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-workflow8htg4/series-workflow8htg4-build-action-2090894100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 10:41:24 +0000 UTC FinishedAt: 2026-08-11 10:57:34 +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:*15047e69-2dd2-4034-9ef2-f983e9b5b41a,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-workflow8htg4/series-workflow8htg4-convert-artifact-1421069160/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": "6d79f99c-6342-4a5c-a403-9879bc797a97", "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-workflow8htg4/series-workflow8htg4-build-action-2090894100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 10:57:44 +0000 UTC FinishedAt: 2026-08-11 10:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 10:57:44 +0000 UTC FinishedAt: 2026-08-11 10:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 10:57:44 +0000 UTC FinishedAt: 2026-08-11 10:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 10:57:44 +0000 UTC FinishedAt: 2026-08-11 10:59:40 +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:*6d79f99c-6342-4a5c-a403-9879bc797a97,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-workflow8htg4/series-workflow8htg4-build-action-2090894100/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-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 10:59:50 +0000 UTC FinishedAt: 2026-08-11 14:08:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 10:59:50 +0000 UTC FinishedAt: 2026-08-11 14:08:25 +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":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"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:*f8cb9957-c661-4e81-8055-37459afab8fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d79f99c-6342-4a5c-a403-9879bc797a97,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-workflow8htg4/series-workflow8htg4-build-action-3919440003/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-workflow8htg4/series-workflow8htg4-build-action-2090894100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 10:59:50 +0000 UTC FinishedAt: 2026-08-11 11:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 10:59:50 +0000 UTC FinishedAt: 2026-08-11 10:59:55 +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":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"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-workflow8htg4/series-workflow8htg4-convert-artifact-1300594337/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 10:59:50 +0000 UTC FinishedAt: 2026-08-11 10:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 10:59:50 +0000 UTC FinishedAt: 2026-08-11 10:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 10:59:50 +0000 UTC FinishedAt: 2026-08-11 10:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 11:00:00 +0000 UTC FinishedAt: 2026-08-11 14:08:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8htg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rhtab_map_update_elem","rhtab_map_delete_elem","rhtab_map_lookup_and_delete_elem","rhtab_mem_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"055a5c2b-7ebc-4f23-bf12-c480983e5dff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 11:00:00 +0000 UTC FinishedAt: 2026-08-11 14:08:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f8cb9957-c661-4e81-8055-37459afab8fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d79f99c-6342-4a5c-a403-9879bc797a97,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-workflow8htg4/series-workflow8htg4-build-action-3919440003/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-workflow8htg4/series-workflow8htg4-build-action-2090894100/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-workflow8htg4/series-workflow8htg4-convert-artifact-1300594337/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,}