Name: series-workflowhrh64 Phase: Succeeded StartedAt: 2026-08-13 19:14:24 +0000 UTC FinishedAt: 2026-08-14 00:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[0] Phase: Succeeded StartedAt: 2026-08-13 19:14:24 +0000 UTC FinishedAt: 2026-08-13 20:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 19:14:24 +0000 UTC FinishedAt: 2026-08-13 20:28:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_FTP", "IP_VS_PROTO_TCP", "NF_CONNTRACK", "NF_NAT", "NF_CONNTRACK_FTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_FTP", "IP_VS_PROTO_TCP", "NF_CONNTRACK", "NF_NAT", "NF_CONNTRACK_FTP" ], "series_id": "ed1b35db-9f98-401a-aab8-4dd500253753" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_ftp_out", "ip_vs_ftp_in", "ip_vs_ftp_get_addrport" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0ZUUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZnRwX291dCYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfaW4mIzM0OywKICAgICYjMzQ7aXBfdnNfZnRwX2dldF9hZGRycG9ydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBhbmQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGUgcGFyc2VkIGRhdGEgY29tZXMgZnJvbSBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHBhY2tldCBwYXlsb2FkLCBhbmQgdGhlIGxvY2FsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHBhcnNpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdGhlIHBhcnNpbmcgb2YgSVAgYWRkcmVzc2VzIGFuZCBwb3J0cyBpbiBGVFAgY29tbWFuZHMgd2l0aGluIHRoZSBJUFZTIEZUUCBhcHBsaWNhdGlvbiBoZWxwZXIuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBsb2dpYyBidWdzIHdoZW4gaGFuZGxpbmcgbWFsZm9ybWVkIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMuIEZ1enppbmcgdGhlIElQVlMgRlRQIGhlbHBlciBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0YmFkYTRiMDc5ZGQ5NWQ1Y2ZmMDljZWQxMjI0ODFlNmE3MmQ2ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDoyNzoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG4gXHRjaGFyICpzLCBjO1xuIFx0dW5zaWduZWQgY2hhciBwWzZdO1xuIFx0Y2hhciBlZGVsaW07XG4tXHRfX3UxNiBocG9ydDtcbiYjNDM7XHRfX3UzMiBocG9ydDtcbiBcdGludCBpID0gMDtcbiBcbiBcdGlmIChkYXRhX2xpbWl0IC0gZGF0YSBcdTAwM2MgcGxlbikge1xuQEAgLTE0NCw3ICYjNDM7MTQ0LDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdGMgPSAqZGF0YTtcbiBcdFx0XHRpZiAoaXNkaWdpdChjKSkge1xuLVx0XHRcdFx0cFtpXSA9IHBbaV0qMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7O1xuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAodmFsIFx1MDAzZSAyNTUpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0cFtpXSA9IHZhbDtcbiBcdFx0XHR9IGVsc2UgaWYgKGMgPT0gJiMzOTssJiMzOTsgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIDUpIHtcbiBcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIFx0XHRcdFx0cFtpXSA9IDA7XG5AQCAtMjIyLDYgJiM0MzsyMjYsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcbiBcdFx0aWYgKCFpc2RpZ2l0KCpzKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTs7XG4mIzQzO1x0XHRpZiAoaHBvcnQgXHUwMDNlIDY1NTM1KVxuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRpZiAocyA9PSBkYXRhX2xpbWl0IHx8ICFocG9ydCB8fCAqcyAhPSBlZGVsaW0pXG4gXHRcdHJldHVybiAtMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfRlRQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19GVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19mdHBfb3V0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Z0cF9pbiYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfZ2V0X2FkZHJwb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGJhZGE0YjA3OWRkOTVkNWNmZjA5Y2VkMTIyNDgxZTZhNzJkNmQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6Mjc6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKaW5kZXggYjMxNWM2MDhmZGE0My4uOWUzZTAwNWE4MjYzNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwpAQCAtMTAyLDcgJiM0MzsxMDIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCwKIAljaGFyICpzLCBjOwogCXVuc2lnbmVkIGNoYXIgcFs2XTsKIAljaGFyIGVkZWxpbTsKLQlfX3UxNiBocG9ydDsKJiM0MzsJX191MzIgaHBvcnQ7CiAJaW50IGkgPSAwOwogCiAJaWYgKGRhdGFfbGltaXQgLSBkYXRhICZsdDsgcGxlbikgewpAQCAtMTQ0LDcgJiM0MzsxNDQsMTEgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsCiAJCQkJcmV0dXJuIC0xOwogCQkJYyA9ICpkYXRhOwogCQkJaWYgKGlzZGlnaXQoYykpIHsKLQkJCQlwW2ldID0gcFtpXSoxMCAmIzQzOyBjIC0gJiMzOTswJiMzOTs7CiYjNDM7CQkJCXVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7OwomIzQzOwomIzQzOwkJCQlpZiAodmFsICZndDsgMjU1KQomIzQzOwkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQlwW2ldID0gdmFsOwogCQkJfSBlbHNlIGlmIChjID09ICYjMzk7LCYjMzk7ICZhbXA7JmFtcDsgaSAmbHQ7IDUpIHsKIAkJCQlpJiM0MzsmIzQzOzsKIAkJCQlwW2ldID0gMDsKQEAgLTIyMiw2ICYjNDM7MjI2LDggQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsCiAJCWlmICghaXNkaWdpdCgqcykpCiAJCQlicmVhazsKIAkJaHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTs7CiYjNDM7CQlpZiAoaHBvcnQgJmd0OyA2NTUzNSkKJiM0MzsJCQlyZXR1cm4gLTE7CiAJfQogCWlmIChzID09IGRhdGFfbGltaXQgfHwgIWhwb3J0IHx8ICpzICE9IGVkZWxpbSkKIAkJcmV0dXJuIC0xOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkwCgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIEZUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNgLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBob3cgSVBWUyBoYW5kbGVzIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIHRvIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBmb3IgYGhwb3J0YCBhbmQgdGhlIElQIGFkZHJlc3MgY29tcG9uZW50cyAoYHZhbGApLiBUaGlzIGlzIGEgc29saWQgYnVnIGZpeCDigJMgaW1wb3J0YW50IHRvIHNob3JlIHVwIGFueSBwYXJzaW5nIGlzc3VlcyBpbiB0aGUgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4KCk5vdywgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiB0aGluZ3MsIGFzIHRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBJUCBWaXJ0dWFsIFNlcnZlci4gRmlyc3QsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBJUFZTIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiBvdXIgc3lzdGVtLiBJdCYjMzk7cyBwYXJ0IG9mIG5ldGZpbHRlciwgc28gdGhhdCBzZWVtcyBsaWtlbHkuIFNlY29uZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBJUF9WU2AgaXMgdGhlIGNvcmUgSVBWUyBjb21wb25lbnQsIG9idmlvdXNseS4gV2UmIzM5O2xsIGFsc28gbmVlZCBgSVBfVlNfRlRQYCBmb3IgdGhpcyBzcGVjaWZpYyBGVFAgYXBwbGljYXRpb24gaGVscGVyIGZ1bmN0aW9uYWxpdHkuIFNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGFyZSBlbmFibGVkLgoKVGltZSB0byBkaXZlIGluIGFuZCBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgIGFuZCBgSVBfVlNfRlRQYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgd2hlcmUgZWxzZSB0aG9zZSBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJlYXMgb2YgY29uY2Vybi4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZnRwX2dldF9hZGRycG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9ODY9aXBfdnNfZnRwX2RvbmVfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtOTUtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6OTY6c3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtOTctXHRcdFx0XHQgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBwbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz0yNTQ9c3RhdGljIGludCBpcF92c19mdHBfb3V0KHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yODUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6Mjg2Olx0XHRpZiAoaXBfdnNfZnRwX2dldF9hZGRycG9ydChkYXRhLCBkYXRhX2xpbWl0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTI4Ny1cdFx0XHRcdFx0ICAgU0VSVkVSX1NUUklOR19QQVNWLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0zMDYtXHRcdGZyb20gPSBjcC1cdTAwM2VkYWRkcjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzozMDc6XHRcdGlmIChpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGRhdGEsIGRhdGFfbGltaXQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzA4LVx0XHRcdFx0XHQgICBTRVJWRVJfU1RSSU5HX0VQU1YsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTQyND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9pbihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDk3LVx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NDk4Olx0ICAgIGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoZGF0YV9zdGFydCwgZGF0YV9saW1pdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy00OTktXHRcdFx0XHQgICBDTElFTlRfU1RSSU5HX1BPUlQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTUxMS1cdFx0XHQgIG50b2hzKGNwLVx1MDAzZXZwb3J0KS0xKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo1MTI6XHR9IGVsc2UgaWYgKGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoZGF0YV9zdGFydCwgZGF0YV9saW1pdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01MTMtXHRcdFx0XHRcdCAgQ0xJRU5UX1NUUklOR19FUFJULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX0ZUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgSVBWUyBhbmQgRlRQIFN1cHBvcnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEZUUCB3aXRoaW4gdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBmcmFtZXdvcmsuIE15IGZpcnN0IHN0b3AsIGFzIGFsd2F5cywgaXMgZ29pbmcgdG8gYmUgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSVBWUyBzaG91bGQgYmUgZGVmaW5lZCwgaW5jbHVkaW5nLCBob3BlZnVsbHksIGFueXRoaW5nIHNwZWNpZmljIHRvIEZUUCBvciByZWxhdGVkIHRvIGl0cyBoYW5kbGluZy4gSXTigJlzIHRoZSBjYW5vbmljYWwgcGxhY2UgdG8gZmluZCBvdXQgd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgZGlyZWN0IHN1cHBvcnQgZm9yIEZUUCBwcm90b2NvbHMgb3IgcGVyaGFwcyBtb3JlIGdlbmVyYWwgb3B0aW9ucyB0aGF0IGFmZmVjdCBpdHMgYmVoYXZpb3IuIEkgaG9wZSBJIGNhbiBmaW5kIGl0IGRpcmVjdGx5IHdpdGhvdXQgc2VhcmNoaW5nIHRocm91Z2ggdG9vIG11Y2ggdG8gZmluZCB0aGUgc3BlY2lmaWMgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMTk9Y29tbWVudCAmIzM5O0lQVlMgYXBwbGljYXRpb24gaGVscGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMTpjb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIyOlx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIzLVx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI0Olx0XHRORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjUtXHRzZWxlY3QgSVBfVlNfTkZDVFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI2LVx0aGVscFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI3Olx0ICBGVFAgaXMgYSBwcm90b2NvbCB0aGF0IHRyYW5zZmVycyBJUCBhZGRyZXNzIGFuZC9vciBwb3J0IG51bWJlciBpblxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI4LVx0ICB0aGUgcGF5bG9hZC4gSW4gdGhlIHZpcnR1YWwgc2VydmVyIHZpYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjktXHQgIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciBvZiByZWFsIHNlcnZlcnMgY2Fubm90IGJlIHNlbnQgdG9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzMDpcdCAgY2xpZW50cyBpbiBmdHAgY29ubmVjdGlvbnMgZGlyZWN0bHksIHNvIEZUUCBwcm90b2NvbCBoZWxwZXIgaXNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzMS1cdCAgcmVxdWlyZWQgZm9yIHRyYWNraW5nIHRoZSBjb25uZWN0aW9uIGFuZCBtYW5nbGluZyBpdCBiYWNrIHRvIHRoYXQgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBGVFAgTG9hZCBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBJUF9WU19GVFBgLiBSaWdodCwgYW5kIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMsIHRoaXMgcmVsaWVzIG9uIGBJUF9WU19QUk9UT19UQ1BgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX05BVGAsIGFuZCBgTkZfQ09OTlRSQUNLX0ZUUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IFRDUCBpcyB0aGUgdHJhbnNwb3J0IHByb3RvY29sLCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVzc2VudGlhbCBmb3Igc3RhdGVmdWwgbG9hZCBiYWxhbmNpbmcsIE5BVCBpcyBwcm9iYWJseSBob3cgd2UmIzM5O3JlIHJld3JpdGluZyBhZGRyZXNzZXMsIGFuZCBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIGZvciBGVFAmIzM5O3MgY29udHJvbCBhbmQgZGF0YSBjaGFubmVsIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbS4KCkFscmlnaHQsIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgKnRoaXMqIHNldHRpbmcsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb3JlIGBJUF9WU2AgbG9hZCBiYWxhbmNpbmcgZnVuY3Rpb25hbGl0eSBpdHNlbGYgaXMgY29uZmlndXJlZC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGZvciBgSVBfVlNgIGl0c2VsZi4gSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBGVFAtc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NwoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRlRQIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBGVFAgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBJdCYjMzk7cyBjbGVhciB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCBib3RoIGBJUF9WU2AgYW5kIGBJUF9WU19GVFBgIGVuYWJsZWQuIE5vdywgdGhlIGZ1bmN0aW9uIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBpdCBtZWFucyBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBzb3VyY2UgZmlsZS4gSXQmIzM5O3MgdXNlZCBieSBib3RoIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAsIHdoaWNoIGFyZSBib3RoIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBGVFAgdHJhZmZpYy4gU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjayBpcyB3aGV0aGVyIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAgYXJlIGFsc28gc3RhdGljLCBnaXZlbiBob3cgdGhleSB1c2UgdGhlIHN0YXRpYyBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgZnVuY3Rpb24sIGFuZCBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVpciB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2Z0cF9vdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTk2PXN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTMtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6MjU0OnN0YXRpYyBpbnQgaXBfdnNfZnRwX291dChzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTUtXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTY0PXN0YXRpYyBzdHJ1Y3QgaXBfdnNfYXBwIGlwX3ZzX2Z0cCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTczLVx0LnVuYmluZF9jb25uID1cdE5VTEwsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc0Olx0LnBrdF9vdXQgPVx0aXBfdnNfZnRwX291dCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzUtXHQucGt0X2luID1cdGlwX3ZzX2Z0cF9pbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZnRwX2luJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz03Nj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6Nzc6aXBfdnNfZnRwX2luaXRfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy03OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQyMy0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0MjQ6c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDI1LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTY0PXN0YXRpYyBzdHJ1Y3QgaXBfdnNfYXBwIGlwX3ZzX2Z0cCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTY5LVx0LmluY3NfbGlzdCA9XHRMSVNUX0hFQURfSU5JVChpcF92c19mdHAuaW5jc19saXN0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo1NzA6XHQuaW5pdF9jb25uID1cdGlwX3ZzX2Z0cF9pbml0X2Nvbm4sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTcxLVx0LmRvbmVfY29ubiA9XHRpcF92c19mdHBfZG9uZV9jb25uLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzQtXHQucGt0X291dCA9XHRpcF92c19mdHBfb3V0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3NTpcdC5wa3RfaW4gPVx0aXBfdnNfZnRwX2luLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3Ni19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01ODAtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTgxOnN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2Z0cF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01ODIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02MjA9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF92c19mdHBfb3BzID0ge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjYyMTpcdC5pbml0ID0gX19pcF92c19mdHBfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MjItXHQuZXhpdCA9IF9faXBfdnNfZnRwX2V4aXQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYyNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo2MjU6c3RhdGljIGludCBfX2luaXQgaXBfdnNfZnRwX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MjYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02MzQ9c3RhdGljIHZvaWQgX19leGl0IGlwX3ZzX2Z0cF9leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY0MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo2NDI6bW9kdWxlX2luaXQoaXBfdnNfZnRwX2luaXQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY0My1tb2R1bGVfZXhpdChpcF92c19mdHBfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDcKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBGVFAgQXBwbGljYXRpb24gSGVscGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEZUUCBhcHBsaWNhdGlvbiBoZWxwZXIsIGFuZCB0aGUgY29yZSBvZiBpdCwgdGhlIHBhY2tldCBwcm9jZXNzaW5nLCBzZWVtcyB0byBiZSBoYW5kbGVkIGJ5IHRoZXNlIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAgZnVuY3Rpb25zLCB3aGljaCBhcmUgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBgaXBfdnNfZnRwYCBzdHJ1Y3QsIGFuIGBpcF92c19hcHBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSB0aGVzZSBhcmUgZGVmaW5lZCBhcyBgc3RhdGljYCwgdGhleSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMuIFRoYXQgcHJlc2VudHMgYSBjaGFsbGVuZ2UgZm9yIGZ1enppbmcsIHJpZ2h0PyBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiByZXNvbHZlIHRoZW0gaWYgdGhlIGZ1enplciBrbm93cyB0aGVpciBuYW1lcyBhbmQgdGhleSBhcmVuJiMzOTt0IGlubGluZWQsIGJ1dCBpZiB0aGV5JiMzOTtyZSBub3QgdmlzaWJsZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCB0aGF0IG1ha2VzIHRoaW5ncyB0cmlja3kuCgpUaGVuIEkgcmVhbGl6ZWQgc29tZXRoaW5nOiBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFyZSBwcmV0dHkgc2l6YWJsZSBmdW5jdGlvbnMuIEl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0aGV5JiMzOTt2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGVpciBzaXplLCBJIGNhbiBwcm9iYWJseSBzYWZlbHkgYXNzdW1lIHRoZXkmIzM5O3JlIHByZXNlbnQgaW4gdGhlIG9iamVjdCBjb2RlLiBUaGlzIGxlYWRzIG1lIHRvIG15IG5leHQgc3RlcCAtIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHRydWUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRocm91Z2ggYGlwX3ZzX2Z0cC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaWRlYSBvZiBob3cgcmVhZGlseSBhY2Nlc3NpYmxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdG8gZnV6emluZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAyCgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBpcF92c19mdHAuY2AgZm9yIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlwX3ZzX2Z0cC5jYCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aGluLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgY29kaW5nIHN0eWxlIGFuZCB0aGUgbGlrZWx5IGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyBhIHRhcmdldGVkIGdyZXAuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgZ3JlcCB0byBmaW5kIGxpbmVzIHRoYXQgbGlrZWx5IHJlcHJlc2VudCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYmFzZWQgb24gY29tbW9uIHJldHVybiB0eXBlcy4gSSYjMzk7bGwgZm9jdXMgb24gcGF0dGVybnMgc3VjaCBhcyBgXmludCBgIChpbnRlZ2VyIHJldHVybiksIGBedm9pZCBgICh2b2lkIHJldHVybiksIGFuZCBgXnN0YXRpYyBpbnQgYCAoc3RhdGljIGludGVnZXIgcmV0dXJuKS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgcHJvYmFibGUgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBleGFtaW5lIGZ1cnRoZXIuIEkmIzM5O20gY2hvb3NpbmcgdGhpcyBhcHByb2FjaCBiZWNhdXNlLCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIGFuZCBteSBleHBlcnQgZXhwZXJpZW5jZSwgYSBmdWxsIHBhcnNlIHdpdGggYSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG9vbCBpcyB1bm5lY2Vzc2FyeSBmb3IgdGhpcyBpbml0aWFsIHNjb3BpbmcuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljXFxzJiM0MzspP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXHMmIzQzO1xcKj9bYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02Mz1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcJiMzNDtQb3J0cyB0byBtb25pdG9yIGZvciBGVFAgY29udHJvbCBjb21tYW5kc1wmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjY2OnN0YXRpYyBjaGFyICppcF92c19mdHBfZGF0YV9wdHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTg2PWlwX3ZzX2Z0cF9kb25lX2Nvbm4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTk1LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjk2OnN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTk3LVx0XHRcdFx0ICBjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3QgcGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjUzLSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjI1NDpzdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjU1LVx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKmRpZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQyMy0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0MjQ6c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDI1LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTgxPXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2Z0cF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNjA5LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjYxMDpzdGF0aWMgdm9pZCBfX2lwX3ZzX2Z0cF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU0CgkJCQkJCQlvdXRwdXQ6IDYyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUFZTIEZUUCBGdW5jdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIElQVlMgRlRQIGZ1bmN0aW9uczogYGlwX3ZzX2Z0cF9vdXRgLCBgaXBfdnNfZnRwX2luYCwgYW5kIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGlwX3ZzX2Z0cF9vdXRgIGFuZCBgaXBfdnNfZnRwX2luYCBhcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZvY3VzIHN5bWJvbHMgYmVjYXVzZSB0aGV5JiMzOTtyZSBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLiBUaGV5JiMzOTtyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGlwX3ZzX2Z0cGAgc3RydWN0LCB3aGljaCBtYWtlcyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMuCgpCdXQgdGhlbiwgaG9sZCBvbi4gU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5JiMzOTtyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBIb3dldmVyLCBpdOKAmXMgc3RpbGwgcHJlZmVyYWJsZSB0byBnaXZlIGl0IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpZiB0aGV5IGV4aXN0LiBUaGF0IHdpbGwgbWFrZSBteSBsaWZlIGVhc2llci4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWN0dWFsbHkgKmNhbGxzKiBgcGt0X291dGAgYW5kIGBwa3RfaW5gPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3MgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBwa3Rfb3V0YCBhbmQgYHBrdF9pbmAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYC4gIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYW5kIGlmIEkgY2FuIGxldmVyYWdlIHRoZW0gZm9yIG1vcmUgZWZmaWNpZW50IGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdF9vdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYz0zNDU9c3RhdGljIGlubGluZSB2b2lkIHZzX3NlcV91cGRhdGUoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfc2VxICp2c2VxLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zNTgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzU5OnN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzYwLVx0XHRcdFx0ICBzdHJ1Y3QgaXBfdnNfYXBwICphcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM4Ny1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM4ODpcdGlmIChhcHAtXHUwMDNlcGt0X291dCA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM4OS1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzkwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM5MTpcdGlmICghYXBwLVx1MDAzZXBrdF9vdXQoYXBwLCBjcCwgc2tiLCBcdTAwMjZkaWZmLCBpcHZzaCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzkyLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDA4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQwOTppbnQgaXBfdnNfYXBwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQxMC1cdFx0ICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDIyLVx0aWYgKGNwLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQyMzpcdFx0cmV0dXJuIGFwcF90Y3BfcGt0X291dChjcCwgc2tiLCBhcHAsIGlwdnNoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MjQtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyNy1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQyODpcdGlmIChhcHAtXHUwMDNlcGt0X291dCA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyOS1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDMwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQzMTpcdHJldHVybiBhcHAtXHUwMDNlcGt0X291dChhcHAsIGNwLCBza2IsIE5VTEwsIGlwdnNoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzItfVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01NjQ9c3RhdGljIHN0cnVjdCBpcF92c19hcHAgaXBfdnNfZnRwID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzMtXHQudW5iaW5kX2Nvbm4gPVx0TlVMTCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo1NzQ6XHQucGt0X291dCA9XHRpcF92c19mdHBfb3V0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3NS1cdC5wa3RfaW4gPVx0aXBfdnNfZnRwX2luLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExNS1cdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjExNjpcdFx0cmV0ID0gaXBfdnNfYXBwX3BrdF9vdXQoY3AsIHNrYiwgaXBoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTE3LVx0XHRpZiAocmV0ID09IDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTE0Nz10Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE3Mi1cdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTczOlx0XHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X291dChjcCwgc2tiLCBpcGgpKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNzQtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE2My1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTY0Olx0XHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X291dChjcCwgc2tiLCBpcGgpKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNjUtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdF9pbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTQwOT1pbnQgaXBfdnNfYXBwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDM1OnN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzYtXHRcdFx0XHQgc3RydWN0IGlwX3ZzX2FwcCAqYXBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjMtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0NjQ6XHRpZiAoYXBwLVx1MDAzZXBrdF9pbiA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ2NS1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDY2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ2NzpcdGlmICghYXBwLVx1MDAzZXBrdF9pbihhcHAsIGNwLCBza2IsIFx1MDAyNmRpZmYsIGlwdnNoKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00ODQtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDg1OmludCBpcF92c19hcHBfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00ODYtXHRcdCAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDk4LVx0aWYgKGNwLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ5OTpcdFx0cmV0dXJuIGFwcF90Y3BfcGt0X2luKGNwLCBza2IsIGFwcCwgaXB2c2gpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNTAzLVx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NTA0Olx0aWYgKGFwcC1cdTAwM2Vwa3RfaW4gPT0gTlVMTClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy01MDUtXHRcdHJldHVybiAxO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo1MDc6XHRyZXR1cm4gYXBwLVx1MDAzZXBrdF9pbihhcHAsIGNwLCBza2IsIE5VTEwsIGlwdnNoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy01MDgtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01NjQ9c3RhdGljIHN0cnVjdCBpcF92c19hcHAgaXBfdnNfZnRwID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzQtXHQucGt0X291dCA9XHRpcF92c19mdHBfb3V0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3NTpcdC5wa3RfaW4gPVx0aXBfdnNfZnRwX2luLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3Ni19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTQwPXNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNjMtXHRcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNjQ6XHRcdHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTY1LVx0XHRpZiAocmV0ID09IDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTIyNT10Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1My1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MjU0Olx0XHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X2luKGNwLCBza2IsIGlwaCkpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1NS1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjQ3LVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoyNDg6XHRcdGlmICghKHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKSkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjQ5LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJUFZTIEZUUCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGUgSVBWUyBGVFAgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgYGlwX3ZzX2FwcF9wa3Rfb3V0YCBhbmQgYGlwX3ZzX2FwcF9wa3RfaW5gIGFyZSB0aGUgaW5pdGlhbCBub24tc3RhdGljIHBvaW50cyBvZiBlbnRyeSwgYnV0IHRob3NlIGFyZSBnZW5lcmljIGFjcm9zcyBhbGwgSVBWUyBhcHBsaWNhdGlvbnMuIE15IGtleSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHNwZWNpZmljIHRvIGBpcF92c19mdHAuY2A/IE5vLCBJIGFscmVhZHkgY29uZmlybWVkIHRoYXQuCgpUaGVyZWZvcmUsIHRoZSBtb3N0IGRpcmVjdCB0YXJnZXRzLCB0aGUgKmZvY3VzKiBzeW1ib2xzLCBzZWVtIHRvIGJlIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAuIEkgaGFkIHRvIGNvbmZpcm0gdGhleSB3ZXJlIHN0YXRpYywgYnV0IHRoYXQgYWN0dWFsbHkgd29ya3MgaW4gb3VyIGZhdm91ciwgYmVjYXVzZSB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgcG9wdWxhdGUgdGhlIGBpcF92c19mdHBgIHN0cnVjdCwgdGhleSAqbXVzdCogYmUgYWRkcmVzc2FibGUuIFRoaXMgbWVhbnMgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgdXNlIHRoZW0gZGlyZWN0bHksIHdoaWNoIGlzIGdyZWF0LiBJIGNhbiB1c2UgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLiBJIGNvdWxkIGFsc28gYWRkIGBpcF92c19hcHBfcGt0X291dGAgYW5kIGBpcF92c19hcHBfcGt0X2luYCwgYnV0IHRoZXkmIzM5O3JlIGRlZmluZWQgaW4gYGlwX3ZzX2FwcC5jYCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IHNlcGFyYXRlLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgcmV2aWV3IGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTX0ZUUGAsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19QUk9UT19UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBJUF9WU19QUk9UT19UQ1BgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGxpa2VseSByZWxhdGVkIHRvIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBhbmQgVENQIHByb3RvY29sIGhhbmRsaW5nLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBtYWNybyBkZWZpbml0aW9uIGluIGEga2VybmVsIGNvbmZpZyBmaWxlLCBvciBwZXJoYXBzIGEgc2V0dGluZyBpbiBhIHVzZXItc3BhY2UgdXRpbGl0eSByZWxhdGVkIHRvIGxvYWQgYmFsYW5jaW5nIG9yIG5ldHdvcmsgbWFuYWdlbWVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgYSBmb2N1c2VkIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGVyZSB0aGlzIHNwZWNpZmljIHN0cmluZyBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiBteSBrbm93biBlbnZpcm9ubWVudCBvciB0aGUgcmVsZXZhbnQgY29kZWJhc2UgSSYjMzk7bSB3b3JraW5nIHdpdGguIFRoaXMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIGl0cyBleGFjdCBwdXJwb3NlIGFuZCB0aGUgY29udGV4dCBvZiBpdHMgYXBwbGljYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhlYWRlciBmaWxlcywgYnVpbGQgc2NyaXB0cywgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIElQVlMgbW9kdWxlIG9yIGFueSBzb2Z0d2FyZSBsZXZlcmFnaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFwmIzM0O0lQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXHRJUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZUUCBDb25uZWN0aW9uIFRyYWNraW5nIEZpeCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX1ZTX1BST1RPX1RDUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZXMgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgIGFyZSBhbHNvIG5lY2Vzc2FyeS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYElQX1ZTYCBpcyBlbmFibGVkLCB5ZXAsIHRoYXQmIzM5O3MgdGhlIG1haW4gbWVudWNvbmZpZyBmb3IgSVAgVmlydHVhbCBTZXJ2ZXIuIFNvLCBteSBlbmFibGUgbGlzdCBsb29rcyBsaWtlIHRoaXM6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBgTkZfQ09OTlRSQUNLX0ZUUGAuCgpOb3csIGFib3V0IHRoZSBjb2RlIGl0c2VsZi4uLiBsZXQgbWUgc2VlIGlmIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBjYW4gYmUgaW5saW5lZC4gSXQmIzM5O3MgbWFya2VkIHN0YXRpYyBhbmQgYXBwZWFycyB0byBvbmx5IGJlIGNhbGxlZCBmcm9tIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAuIEl0JiMzOTtzIGxpa2VseSBpbmxpbmVkLCBzbyBmb2N1c2luZyBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gLCBpcyBwcm9iYWJseSB0aGUgYmVzdCBhcHByb2FjaC4KClJpZ2h0LCBsZXQgbWUgcmV2aXNpdCB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIHRoZSBGVFAgcGFyc2luZyBjb2RlLiBUaGUgY29kZSBgcFtpXSA9IHBbaV0qMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7YCBjb3VsZCBvdmVyZmxvdyBpZiBwcm9jZXNzaW5nIGEgbnVtYmVyICZndDsgMjU1IGFuZCBgaHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTtgIGNvdWxkIG92ZXJmbG93IGlmIHByb2Nlc3NpbmcgYSBudW1iZXIgJmd0OyA2NTUzNS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgZml4aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBvciBsb2dpYyBidWcgd2hlbiBwcm9jZXNzaW5nIEZUUCBjb21tYW5kcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHJpZ29yb3VzIGZ1enppbmcuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmU6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLgoKQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX05BVGAgYXJlIHByZXR0eSBzdGFuZGFyZC4gYE5GX0NPTk5UUkFDS19GVFBgIGlzIGFsc28gYSB3ZWxsLWtub3duIG1vZHVsZS4gYElQX1ZTYCBhbmQgYElQX1ZTX0ZUUGAgYXJlIHRoZSBzcGVjaWZpYyBvbmVzIHRvIGtlZXAgYW4gZXllIG9uLiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgYE5GX0NPTk5UUkFDS19GVFBgIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19GVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjEyPWNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEwMgoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBWUyBGVFAgSGVscGVyIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGNvbmZpcm1pbmcgdGhhdCBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIHRvIGJlIGF3YXJlIG9mIGhlcmUuIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIG1vc3QgZWZmZWN0aXZlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBGVFAgaGVscGVyIHdpdGhpbiBJUFZTLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cyBhcyB0aGV5JiMzOTtyZSB0aGUgbWFpbiBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgaGVscGVyIHdpdGhpbiBJUFZTLiBUaGV5JiMzOTtyZSBzdGF0aWMsIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLgoKSG93ZXZlciwgYWZ0ZXIgYSBzZWNvbmQgbG9vaywgSSByZWFsaXplZCB0aGF0IGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBzYXcgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSBzaG91bGQgaW5jbHVkZSB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwgdG8gbWFrZSBzdXJlIEkmIzM5O20gY292ZXJpbmcgYWxsIGJhc2VzLgoKU28sIGxldCYjMzk7cyBmaW5hbGl6ZSB0aGUgcmVzdWx0cy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCBvZiBjb3Vyc2UuIFRoZSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBpcF92c19mdHBfb3V0YCwgYGlwX3ZzX2Z0cF9pbmAsIGFuZCBpbXBvcnRhbnRseSwgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgLiBUaGUgZm9sbG93aW5nIGBFbmFibGVDb25maWdzYCBhcmUgbmVjZXNzYXJ5OiBgSVBfVlNgLCBgSVBfVlNfRlRQYCwgYElQX1ZTX1BST1RPX1RDUGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfTkFUYCwgYW5kIGBORl9DT05OVFJBQ0tfRlRQYC4gTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGRlYWxzIHdpdGggYm91bmQgY2hlY2tzIGR1cmluZyB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIHdpdGhpbiBGVFAgY29tbWFuZHMsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgbG9naWMgZmxhd3MgcmVsYXRlZCB0byBtYWxmb3JtZWQgUE9SVC9FUFJUIGNvbW1hbmRzIHdpdGhpbiBJUFZTLiBGdXp6aW5nIHRoaXMgaGVscGVyIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHBhcnNpbmcgbG9naWMgaXMgY29tcGxldGVseSByb2J1c3QgYW5kIGNhbiBoYW5kbGUgYWxsIGZvcm1zIG9mIGlucHV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfRlRQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19GVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19mdHBfb3V0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Z0cF9pbiYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfZ2V0X2FkZHJwb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0ZUUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZnRwX291dCYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfaW4mIzM0OywKICAgICYjMzQ7aXBfdnNfZnRwX2dldF9hZGRycG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGluIEZUUCBjb21tYW5kcyB3aXRoaW4gdGhlIElQVlMgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGxvZ2ljIGJ1Z3Mgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgRlRQIFBPUlQvRVBSVCBjb21tYW5kcy4gRnV6emluZyB0aGUgSVBWUyBGVFAgaGVscGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHBhcnNpbmcgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBhbmQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGUgcGFyc2VkIGRhdGEgY29tZXMgZnJvbSBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHBhY2tldCBwYXlsb2FkLCBhbmQgdGhlIGxvY2FsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHBhcnNpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiYWRhNGIwNzlkZDk1ZDVjZmYwOWNlZDEyMjQ4MWU2YTcyZDZkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDIwOjI3OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsCiAJY2hhciAqcywgYzsKIAl1bnNpZ25lZCBjaGFyIHBbNl07CiAJY2hhciBlZGVsaW07Ci0JX191MTYgaHBvcnQ7CiYjNDM7CV9fdTMyIGhwb3J0OwogCWludCBpID0gMDsKIAogCWlmIChkYXRhX2xpbWl0IC0gZGF0YSAmbHQ7IHBsZW4pIHsKQEAgLTE0NCw3ICYjNDM7MTQ0LDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LAogCQkJCXJldHVybiAtMTsKIAkJCWMgPSAqZGF0YTsKIAkJCWlmIChpc2RpZ2l0KGMpKSB7Ci0JCQkJcFtpXSA9IHBbaV0qMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7OwomIzQzOwkJCQl1bnNpZ25lZCBpbnQgdmFsID0gcFtpXSAqIDEwICYjNDM7IGMgLSAmIzM5OzAmIzM5OzsKJiM0MzsKJiM0MzsJCQkJaWYgKHZhbCAmZ3Q7IDI1NSkKJiM0MzsJCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJcFtpXSA9IHZhbDsKIAkJCX0gZWxzZSBpZiAoYyA9PSAmIzM5OywmIzM5OyAmYW1wOyZhbXA7IGkgJmx0OyA1KSB7CiAJCQkJaSYjNDM7JiM0Mzs7CiAJCQkJcFtpXSA9IDA7CkBAIC0yMjIsNiAmIzQzOzIyNiw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LAogCQlpZiAoIWlzZGlnaXQoKnMpKQogCQkJYnJlYWs7CiAJCWhwb3J0ID0gaHBvcnQgKiAxMCAmIzQzOyAqcyAtICYjMzk7MCYjMzk7OwomIzQzOwkJaWYgKGhwb3J0ICZndDsgNjU1MzUpCiYjNDM7CQkJcmV0dXJuIC0xOwogCX0KIAlpZiAocyA9PSBkYXRhX2xpbWl0IHx8ICFocG9ydCB8fCAqcyAhPSBlZGVsaW0pCiAJCXJldHVybiAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBJUFZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgaW4gdGhlIElQVlMgY29kZS4gSXQmIzM5O3MgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSBmcm9tIGBfX3UxNmAgdG8gYF9fdTMyYCBmb3IgYGhwb3J0YC4gVGhhdCBzY3JlYW1zIGludGVnZXIgb3ZlcmZsb3cgZml4LCBhbmQgdGhlIGFkZGVkIGNoZWNrcyBmdXJ0aGVyIHN1cHBvcnQgdGhhdCBzdXNwaWNpb24uIFdlJiMzOTtyZSBub3cgdmFsaWRhdGluZyB0aGUgcGFyc2VkIHZhbHVlcy4gV2UgaGF2ZSBgaWYgKHZhbCAmZ3Q7IDI1NSlgIGZvciB0aGUgSVAgYWRkcmVzcyBjb21wb25lbnRzIGR1cmluZyBjb21tYS1zZXBhcmF0ZWQgbnVtYmVyIHBhcnNpbmcsIGFuZCBgaWYgKGhwb3J0ICZndDsgNjU1MzUpYCBmb3IgdGhlIHBvcnQgbnVtYmVyIHBhcnNpbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIG1hbGljaW91cyBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLCBwYXJ0aWN1bGFybHkgdGhlIHBhcnQgd2hlcmUgaXQmIzM5O3MgcGFyc2luZyB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydC4gVGhlIGBwW2ldID0gcFtpXSoxMCAmIzQzOyBjIC0gJiMzOTswJiMzOTtgIGFuZCBgaHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTtgIGNhbGN1bGF0aW9ucyBsb29rIHZ1bG5lcmFibGUgdG8gYW4gb3ZlcmZsb3cuIElmIHRoZSBpbnB1dCBkYXRhIGlzIGNyYWZ0ZWQgY2FyZWZ1bGx5LCB0aGVzZSBjb3VsZCB3cmFwIGFyb3VuZCwgcmVzdWx0aW5nIGluIGluY29ycmVjdCBJUCBvciBwb3J0IHZhbHVlcyBiZWluZyB1c2VkLiBUaGlzIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSBpcyBhbiBvbGQgb25lIGJ1dCBjYW4gc3RpbGwgYmUgZm91bmQgaW4gbGVnYWN5IGNvZGUgdGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkgdmFsaWRhdGUuCgpOb3csIG15IG5leHQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gVGhlIHBhdGNoIGlzIGFkZGluZyB0aGVzZSBib3VuZHMgY2hlY2tzLCByZXR1cm5pbmcgLTEgaWYgdGhlIHZhbHVlcyBhcmUgb3V0IG9mIHJhbmdlLiBUaGF0JiMzOTtzIGdvb2QsIGl0IHByZXZlbnRzIGluY29ycmVjdCBwYXJzaW5nLiBCdXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBhcyBhIHJlc3VsdCBvZiB0aGUgY2hhbmdlcy4KCkkmIzM5O20gdGhpbmtpbmcsIG5vLCBpdCBzaG91bGRuJiMzOTt0LiBXZSYjMzk7cmUgcGFyc2luZyBkYXRhIGRpcmVjdGx5IGZyb20gYSBwYWNrZXQgYnVmZmVyIChgY2hhciAqZGF0YWApLiBUaGlzIGRhdGEgaXMgYWxyZWFkeSBpbml0aWFsaXplZCDigJMgaXQmIzM5O3MgdGhlIHBheWxvYWQgb2YgdGhlIHBhY2tldC4gVGhlIHZhcmlhYmxlcywgYHBgIChmb3IgdGhlIElQIGFkZHJlc3MgcGFydHMpIGFuZCBgaHBvcnRgLCBhcmUgYmVpbmcgKnBvcHVsYXRlZCogZnJvbSB0aGF0IGRhdGEuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hlcmUgdGhvc2UgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4gSSByZW1lbWJlciB0aGF0IHRoZSBgcGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiB0aGUgY29kZSwgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBjb25maXJtIHRoZSBjb2RlIGFuZCByZWFkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHRcdFx0ICBfX3UxNiBhZiwgY2hhciAqKnN0YXJ0LCBjaGFyICoqZW5kKVxuIDEwMTpcdHtcbiAxMDI6XHRcdGNoYXIgKnMsIGM7XG4gMTAzOlx0XHR1bnNpZ25lZCBjaGFyIHBbNl07XG4gMTA0Olx0XHRjaGFyIGVkZWxpbTtcbiAxMDU6XHRcdF9fdTMyIGhwb3J0O1xuIDEwNjpcdFx0aW50IGkgPSAwO1xuIDEwNzpcdFxuIDEwODpcdFx0aWYgKGRhdGFfbGltaXQgLSBkYXRhIFx1MDAzYyBwbGVuKSB7XG4gMTA5Olx0XHRcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIHBhcnRpYWwgbWF0Y2ggKi9cbiAxMTA6XHRcdFx0aWYgKHN0cm5jYXNlY21wKGRhdGEsIHBhdHRlcm4sIGRhdGFfbGltaXQgLSBkYXRhKSA9PSAwKVxuIDExMTpcdFx0XHRcdHJldHVybiAtMTtcbiAxMTI6XHRcdFx0ZWxzZVxuIDExMzpcdFx0XHRcdHJldHVybiAwO1xuIDExNDpcdFx0fVxuIDExNTpcdFxuIDExNjpcdFx0aWYgKHN0cm5jYXNlY21wKGRhdGEsIHBhdHRlcm4sIHBsZW4pICE9IDApIHtcbiAxMTc6XHRcdFx0cmV0dXJuIDA7XG4gMTE4Olx0XHR9XG4gMTE5Olx0XHRzID0gZGF0YSAmIzQzOyBwbGVuO1xuIDEyMDpcdFx0aWYgKHNraXApIHtcbiAxMjE6XHRcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuIDEyMjpcdFxuIDEyMzpcdFx0XHRmb3IgKDs7IHMmIzQzOyYjNDM7KSB7XG4gMTI0Olx0XHRcdFx0aWYgKHMgPT0gZGF0YV9saW1pdClcbiAxMjU6XHRcdFx0XHRcdHJldHVybiAtMTtcbiAxMjY6XHRcdFx0XHRpZiAoIWZvdW5kKSB7XG4gMTI3Olx0XHRcdFx0XHQvKiBcJiMzNDsoXCYjMzQ7IGlzIG9wdGlvbmFsIGZvciBub24tZXh0ZW5kZWQgZm9ybWF0LFxuIDEyODpcdFx0XHRcdFx0ICogc28gY2F0Y2ggdGhlIHN0YXJ0IG9mIElQdjQgYWRkcmVzc1xuIDEyOTpcdFx0XHRcdFx0ICovXG4gMTMwOlx0XHRcdFx0XHRpZiAoIWV4dCBcdTAwMjZcdTAwMjYgaXNkaWdpdCgqcykpXG4gMTMxOlx0XHRcdFx0XHRcdGJyZWFrO1xuIDEzMjpcdFx0XHRcdFx0aWYgKCpzID09IHNraXApXG4gMTMzOlx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbiAxMzQ6XHRcdFx0XHR9IGVsc2UgaWYgKCpzICE9IHNraXApIHtcbiAxMzU6XHRcdFx0XHRcdGJyZWFrO1xuIDEzNjpcdFx0XHRcdH1cbiAxMzc6XHRcdFx0fVxuIDEzODpcdFx0fVxuIDEzOTpcdFx0LyogT2xkIElQdjQtb25seSBmb3JtYXQ/ICovXG4gMTQwOlx0XHRpZiAoIWV4dCkge1xuIDE0MTpcdFx0XHRwWzBdID0gMDtcbiAxNDI6XHRcdFx0Zm9yIChkYXRhID0gczsgOyBkYXRhJiM0MzsmIzQzOykge1xuIDE0MzpcdFx0XHRcdGlmIChkYXRhID09IGRhdGFfbGltaXQpXG4gMTQ0Olx0XHRcdFx0XHRyZXR1cm4gLTE7XG4gMTQ1Olx0XHRcdFx0YyA9ICpkYXRhO1xuIDE0NjpcdFx0XHRcdGlmIChpc2RpZ2l0KGMpKSB7XG4gMTQ3Olx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdmFsID0gcFtpXSAqIDEwICYjNDM7IGMgLSAmIzM5OzAmIzM5OztcbiAxNDg6XHRcbiAxNDk6XHRcdFx0XHRcdGlmICh2YWwgXHUwMDNlIDI1NSlcbiAxNTA6XHRcdFx0XHRcdFx0cmV0dXJuIC0xO1xuIDE1MTpcdFx0XHRcdFx0cFtpXSA9IHZhbDtcbiAxNTI6XHRcdFx0XHR9IGVsc2UgaWYgKGMgPT0gJiMzOTssJiMzOTsgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIDUpIHtcbiAxNTM6XHRcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIDE1NDpcdFx0XHRcdFx0cFtpXSA9IDA7XG4gMTU1Olx0XHRcdFx0fSBlbHNlIHtcbiAxNTY6XHRcdFx0XHRcdC8qIHVuZXhwZWN0ZWQgY2hhcmFjdGVyIG9yIHRlcm1pbmF0b3IgKi9cbiAxNTc6XHRcdFx0XHRcdGJyZWFrO1xuIDE1ODpcdFx0XHRcdH1cbiAxNTk6XHRcdFx0fVxuIDE2MDpcdFxuIDE2MTpcdFx0XHRpZiAoaSAhPSA1KVxuIDE2MjpcdFx0XHRcdHJldHVybiAtMTtcbiAxNjM6XHRcbiAxNjQ6XHRcdFx0KnN0YXJ0ID0gcztcbiAxNjU6XHRcdFx0KmVuZCA9IGRhdGE7XG4gMTY2Olx0XHRcdGFkZHItXHUwMDNlaXAgPSBnZXRfdW5hbGlnbmVkKChfX2JlMzIgKikgcCk7XG4gMTY3Olx0XHRcdCpwb3J0ID0gZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopIChwICYjNDM7IDQpKTtcbiAxNjg6XHRcdFx0cmV0dXJuIDE7XG4gMTY5Olx0XHR9XG4gMTcwOlx0XHRpZiAocyA9PSBkYXRhX2xpbWl0KVxuIDE3MTpcdFx0XHRyZXR1cm4gLTE7XG4gMTcyOlx0XHQqc3RhcnQgPSBzO1xuIDE3MzpcdFx0ZWRlbGltID0gKnMmIzQzOyYjNDM7O1xuIDE3NDpcdFx0aWYgKGVkZWxpbSBcdTAwM2MgMzMgfHwgZWRlbGltIFx1MDAzZSAxMjYpXG4gMTc1Olx0XHRcdHJldHVybiAtMTtcbiAxNzY6XHRcdGlmIChzID09IGRhdGFfbGltaXQpXG4gMTc3Olx0XHRcdHJldHVybiAtMTtcbiAxNzg6XHRcdGlmICgqcyA9PSBlZGVsaW0pIHtcbiAxNzk6XHRcdFx0LyogQWRkcmVzcyBmYW1pbHkgaXMgdXN1YWxseSBtaXNzaW5nIGZvciBFUFNWIHJlc3BvbnNlICovXG4gMTgwOlx0XHRcdGlmIChtb2RlICE9IElQX1ZTX0ZUUF9FUFNWKVxuIDE4MTpcdFx0XHRcdHJldHVybiAtMTtcbiAxODI6XHRcdFx0cyYjNDM7JiM0Mzs7XG4gMTgzOlx0XHRcdGlmIChzID09IGRhdGFfbGltaXQpXG4gMTg0Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE4NTpcdFx0XHQvKiBUaGVuIGFkZHJlc3Mgc2hvdWxkIGJlIG1pc3NpbmcgdG9vICovXG4gMTg2Olx0XHRcdGlmICgqcyAhPSBlZGVsaW0pXG4gMTg3Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE4ODpcdFx0XHQvKiBDYWxsZXIgY2FuIHByZS1zZXQgYWRkciwgaWYgbmVlZGVkICovXG4gMTg5Olx0XHRcdHMmIzQzOyYjNDM7O1xuIDE5MDpcdFx0fSBlbHNlIHtcbiAxOTE6XHRcdFx0Y29uc3QgY2hhciAqZXA7XG4gMTkyOlx0XG4gMTkzOlx0XHRcdC8qIFdlIGFsbG93IGFkZHJlc3Mgb25seSBmcm9tIHNhbWUgZmFtaWx5ICovXG4gMTk0Olx0XHRcdGlmIChhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjYgKnMgIT0gJiMzOTsyJiMzOTspXG4gMTk1Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE5NjpcdFx0XHRpZiAoYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgKnMgIT0gJiMzOTsxJiMzOTspXG4gMTk3Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE5ODpcdFx0XHRzJiM0MzsmIzQzOztcbiAxOTk6XHRcdFx0aWYgKHMgPT0gZGF0YV9saW1pdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ4NgoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiA2MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBQYXJzaW5nIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCBiZWVuIHJldmlld2luZyB0aGlzIEZUUCBwYXJzaW5nIGNvZGUsIGFuZCBoZXJlJiMzOTtzIG15IHRha2UuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBsb2dpYyBmb3IgZXh0cmFjdGluZyBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGZyb20gdGhlIEZUUCBwYWNrZXQgcGF5bG9hZCBoYXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBob3cgdGhlIGNvZGUgcHJvY2Vzc2VzIHRoZSBkYXRhIHdpdGhpbiBhbiBGVFAgcGFja2V0IOKAkyB2YWx1ZXMgYXJlIGJlaW5nIHBhcnNlZCBhbmQgc3RvcmVkIGludG8gdmFyaWFibGVzLCBhbmQgdGhlIHdheSB0aGlzIGlzIGJlaW5nIGRvbmUgaXMgZmxhd2VkLgoKVGhlIGNvZGUgdXNlcyBgdW5zaWduZWQgY2hhcmAgZm9yIHRoZSBJUCBhbmQgcG9ydCBzZWdtZW50cywgYW5kIGBfX3UxNmAgZm9yIHRoZSBwb3J0IGluIHRoZSBleHRlbmRlZCBwb3J0IGNhc2UuIFRoZSB2dWxuZXJhYmlsaXR5IGlzIHRoYXQgaWYgdGhlIGluY29taW5nIGRhdGEgY29udGFpbnMgdmFsdWVzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB0aGF0IHRob3NlIHZhcmlhYmxlIHR5cGVzIGNhbiBob2xkIOKAkyAyNTUgZm9yIHRoZSBgdW5zaWduZWQgY2hhcmAgc2VnbWVudHMgb2YgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQsIGFuZCA2NTUzNSBmb3IgdGhlIGV4dGVuZGVkIHBvcnQg4oCTIGl0IHNpbXBseSB3cmFwcyBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFNvLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciBvciByZWplY3RpbmcgdGhlIHBhY2tldCwgaXQganVzdCBzaWxlbnRseSB0cnVuY2F0ZXMgdGhlIHZhbHVlLCBsZWFkaW5nIHRvIGluY29ycmVjdCBwYXJzaW5nLiBGb3IgZXhhbXBsZSwgaWYgaXQgcmVjZWl2ZXMgMjU2IGZvciBhbiBJUCBzZWdtZW50IGl0IHdvdWxkIGludGVycHJldCBpdCBhcyB6ZXJvLCA2NTUzNiBiZWNvbWVzIHplcm8gYW5kIHNvIG9uLgoKVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpY2FsIGVycm9yIGluIHRoZSBwYXJzaW5nIGFuZCBpdCBpbnZvbHZlcyBpbnRlZ2VyIG92ZXJmbG93LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCwgYW5kIHRoaXMgKmRvZXNuJiMzOTt0KiBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMuIGBwYCBpcyBhbiBhcnJheSB0aGF0IGlzIGluaXRpYWxpemVkIGFzIGl0IHBhcnNlcy4gVGhlIGNvZGUgc2V0cyBgcFswXWAgdG8gMCBpbml0aWFsbHksIGFuZCB0aGVuIHByb2dyZXNzaXZlbHkgcG9wdWxhdGVzIHRoZSByZXN0IG9mIGBwYCBiYXNlZCBvbiB0aGUgZGF0YS4gVGhlIGxvb3Agd2lsbCBpbmNyZW1lbnQgdGhlIGluZGV4IGBpYCBhbmQgc2V0IGBwW2ldID0gMGAgd2hlbmV2ZXIgaXQgZW5jb3VudGVycyBhIGNvbW1hLiBBbmQgaWYgdGhlIHByb2Nlc3MgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgbWVhbmluZyB0aGUgcGFja2V0JiMzOTtzIElQIGFuZCBwb3J0IGFyZSBjb21wbGV0ZWx5IHBhcnNlZCwgdGhlbiBhbGwgb2YgdGhlIGVsZW1lbnRzIGluIGBwYCB3aWxsIGJlIGluaXRpYWxpemVkLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBpbnRlZ2VyIG92ZXJmbG93LCBub3QgYW4gaXNzdWUgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGJ1ZyB3aWxsIGJlIGRldGVjdGFibGUgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiwgYW5kIHBvdGVudGlhbGx5IGZ1enppbmcgdG9vbHMgdGhhdCBjYW4gZXhwb3NlIHBhcnNpbmcgaXNzdWVzLgoKSW4gc2hvcnQsIHRoZSBwYXRjaCBuZWVkcyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCBhbnkgdmFsdWVzIGR1cmluZyBwYXJzaW5nIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2VzIGZvciBJUCBhZGRyZXNzIHNlZ21lbnRzIGFuZCBwb3J0IG51bWJlcnMuIEl0IHNob3VsZCBhbHNvIGNoYW5nZSBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvd3MgYmVmb3JlIHRoZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgcGFyc2luZyBvZiBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzIGluIHRoZSBJUFZTIEZUUCBoZWxwZXIuIFdoZW4gcGFyc2luZyB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBmcm9tIHRoZSBwYWNrZXQgcGF5bG9hZCwgdGhlIGNvZGUgdXNlZCBhbiBgdW5zaWduZWQgY2hhcmAgZm9yIHRoZSBJUC9wb3J0IHNlZ21lbnRzIChgcFtpXWApIGFuZCBhIGBfX3UxNmAgZm9yIHRoZSBleHRlbmRlZCBwb3J0IChgaHBvcnRgKS4gSWYgdGhlIHBhY2tldCBjb250YWluZWQgdmFsdWVzIGxhcmdlciB0aGFuIDI1NSBmb3IgdGhlIElQIHNlZ21lbnRzIG9yIDY1NTM1IGZvciB0aGUgcG9ydCwgdGhlIHZhbHVlcyB3b3VsZCBzaWxlbnRseSB3cmFwIGFyb3VuZCBkdWUgdG8gaW50ZWdlciBvdmVyZmxvdy4gVGhlIHBhdGNoIGFkZHMgZXhwbGljaXQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCB2YWx1ZXMgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gYWxsb3dlZCBsaW1pdHMgKDI1NSBhbmQgNjU1MzUgcmVzcGVjdGl2ZWx5KSBhbmQgY2hhbmdlcyBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvdyBiZWZvcmUgdGhlIGNoZWNrLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgcGFyc2luZyBvZiBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzIGluIHRoZSBJUFZTIEZUUCBoZWxwZXIuIFdoZW4gcGFyc2luZyB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBmcm9tIHRoZSBwYWNrZXQgcGF5bG9hZCwgdGhlIGNvZGUgdXNlZCBhbiBgdW5zaWduZWQgY2hhcmAgZm9yIHRoZSBJUC9wb3J0IHNlZ21lbnRzIChgcFtpXWApIGFuZCBhIGBfX3UxNmAgZm9yIHRoZSBleHRlbmRlZCBwb3J0IChgaHBvcnRgKS4gSWYgdGhlIHBhY2tldCBjb250YWluZWQgdmFsdWVzIGxhcmdlciB0aGFuIDI1NSBmb3IgdGhlIElQIHNlZ21lbnRzIG9yIDY1NTM1IGZvciB0aGUgcG9ydCwgdGhlIHZhbHVlcyB3b3VsZCBzaWxlbnRseSB3cmFwIGFyb3VuZCBkdWUgdG8gaW50ZWdlciBvdmVyZmxvdy4gVGhlIHBhdGNoIGFkZHMgZXhwbGljaXQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCB2YWx1ZXMgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gYWxsb3dlZCBsaW1pdHMgKDI1NSBhbmQgNjU1MzUgcmVzcGVjdGl2ZWx5KSBhbmQgY2hhbmdlcyBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvdyBiZWZvcmUgdGhlIGNoZWNrLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoxNy42OTkwMzY1MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk5NDg2NjI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfRlRQXCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfRlRQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfZnRwX291dFwiLFxuICAgIFwiaXBfdnNfZnRwX2luXCIsXG4gICAgXCJpcF92c19mdHBfZ2V0X2FkZHJwb3J0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBwYXJzaW5nIG9mIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMgaW4gdGhlIElQVlMgRlRQIGhlbHBlci4gV2hlbiBwYXJzaW5nIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0IGZyb20gdGhlIHBhY2tldCBwYXlsb2FkLCB0aGUgY29kZSB1c2VkIGFuIGB1bnNpZ25lZCBjaGFyYCBmb3IgdGhlIElQL3BvcnQgc2VnbWVudHMgKGBwW2ldYCkgYW5kIGEgYF9fdTE2YCBmb3IgdGhlIGV4dGVuZGVkIHBvcnQgKGBocG9ydGApLiBJZiB0aGUgcGFja2V0IGNvbnRhaW5lZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMjU1IGZvciB0aGUgSVAgc2VnbWVudHMgb3IgNjU1MzUgZm9yIHRoZSBwb3J0LCB0aGUgdmFsdWVzIHdvdWxkIHNpbGVudGx5IHdyYXAgYXJvdW5kIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93LiBUaGUgcGF0Y2ggYWRkcyBleHBsaWNpdCBib3VuZHMgY2hlY2tpbmcgdG8gcmVqZWN0IHZhbHVlcyB0aGF0IGV4Y2VlZCB0aGUgbWF4aW11bSBhbGxvd2VkIGxpbWl0cyAoMjU1IGFuZCA2NTUzNSByZXNwZWN0aXZlbHkpIGFuZCBjaGFuZ2VzIGBocG9ydGAgdG8gYF9fdTMyYCB0byBwcmV2ZW50IG92ZXJmbG93IGJlZm9yZSB0aGUgY2hlY2suXFxuXFxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBhbmQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGUgcGFyc2VkIGRhdGEgY29tZXMgZnJvbSBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHBhY2tldCBwYXlsb2FkLCBhbmQgdGhlIGxvY2FsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHBhcnNpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGluIEZUUCBjb21tYW5kcyB3aXRoaW4gdGhlIElQVlMgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGxvZ2ljIGJ1Z3Mgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgRlRQIFBPUlQvRVBSVCBjb21tYW5kcy4gRnV6emluZyB0aGUgSVBWUyBGVFAgaGVscGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHBhcnNpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoxNy42OTkwNDMwMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQxMjkyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NGJhZGE0YjA3OWRkOTVkNWNmZjA5Y2VkMTIyNDgxZTZhNzJkNmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjI3OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xcbmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXFxuQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcXG4gXFx0Y2hhciAqcywgYztcXG4gXFx0dW5zaWduZWQgY2hhciBwWzZdO1xcbiBcXHRjaGFyIGVkZWxpbTtcXG4tXFx0X191MTYgaHBvcnQ7XFxuK1xcdF9fdTMyIGhwb3J0O1xcbiBcXHRpbnQgaSA9IDA7XFxuIFxcbiBcXHRpZiAoZGF0YV9saW1pdCAtIGRhdGEgXFx1MDAzYyBwbGVuKSB7XFxuQEAgLTE0NCw3ICsxNDQsMTEgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0XFx0XFx0YyA9ICpkYXRhO1xcbiBcXHRcXHRcXHRpZiAoaXNkaWdpdChjKSkge1xcbi1cXHRcXHRcXHRcXHRwW2ldID0gcFtpXSoxMCArIGMgLSAnMCc7XFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgKyBjIC0gJzAnO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIDI1NSlcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRwW2ldID0gdmFsO1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKGMgPT0gJywnIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyA1KSB7XFxuIFxcdFxcdFxcdFxcdGkrKztcXG4gXFx0XFx0XFx0XFx0cFtpXSA9IDA7XFxuQEAgLTIyMiw2ICsyMjYsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcXG4gXFx0XFx0aWYgKCFpc2RpZ2l0KCpzKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGhwb3J0ID0gaHBvcnQgKiAxMCArICpzIC0gJzAnO1xcbitcXHRcXHRpZiAoaHBvcnQgXFx1MDAzZSA2NTUzNSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcdGlmIChzID09IGRhdGFfbGltaXQgfHwgIWhwb3J0IHx8ICpzICE9IGVkZWxpbSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoxOS4xMTQwMzQ4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2ODkzMDA1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19GVFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19mdHBfb3V0XCIsXG4gICAgXCJpcF92c19mdHBfaW5cIixcbiAgICBcImlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGluIEZUUCBjb21tYW5kcyB3aXRoaW4gdGhlIElQVlMgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGxvZ2ljIGJ1Z3Mgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgRlRQIFBPUlQvRVBSVCBjb21tYW5kcy4gRnV6emluZyB0aGUgSVBWUyBGVFAgaGVscGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHBhcnNpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGJhZGE0YjA3OWRkOTVkNWNmZjA5Y2VkMTIyNDgxZTZhNzJkNmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6Mjc6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcbiBcdGNoYXIgKnMsIGM7XG4gXHR1bnNpZ25lZCBjaGFyIHBbNl07XG4gXHRjaGFyIGVkZWxpbTtcbi1cdF9fdTE2IGhwb3J0O1xuK1x0X191MzIgaHBvcnQ7XG4gXHRpbnQgaSA9IDA7XG4gXG4gXHRpZiAoZGF0YV9saW1pdCAtIGRhdGEgXHUwMDNjIHBsZW4pIHtcbkBAIC0xNDQsNyArMTQ0LDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdGMgPSAqZGF0YTtcbiBcdFx0XHRpZiAoaXNkaWdpdChjKSkge1xuLVx0XHRcdFx0cFtpXSA9IHBbaV0qMTAgKyBjIC0gJzAnO1xuK1x0XHRcdFx0dW5zaWduZWQgaW50IHZhbCA9IHBbaV0gKiAxMCArIGMgLSAnMCc7XG4rXG4rXHRcdFx0XHRpZiAodmFsIFx1MDAzZSAyNTUpXG4rXHRcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdHBbaV0gPSB2YWw7XG4gXHRcdFx0fSBlbHNlIGlmIChjID09ICcsJyBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgNSkge1xuIFx0XHRcdFx0aSsrO1xuIFx0XHRcdFx0cFtpXSA9IDA7XG5AQCAtMjIyLDYgKzIyNiw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0XHRpZiAoIWlzZGlnaXQoKnMpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRocG9ydCA9IGhwb3J0ICogMTAgKyAqcyAtICcwJztcbitcdFx0aWYgKGhwb3J0IFx1MDAzZSA2NTUzNSlcbitcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRpZiAocyA9PSBkYXRhX2xpbWl0IHx8ICFocG9ydCB8fCAqcyAhPSBlZGVsaW0pXG4gXHRcdHJldHVybiAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjE5LjExNDAzNjQxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDY0MTkwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQVlMgRlRQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY2AuIEl0IHNlZW1zIGxpa2UgdGhleSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gaG93IElQVlMgaGFuZGxlcyBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIHRvIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBmb3IgYGhwb3J0YCBhbmQgdGhlIElQIGFkZHJlc3MgY29tcG9uZW50cyAoYHZhbGApLiBUaGlzIGlzIGEgc29saWQgYnVnIGZpeCDigJMgaW1wb3J0YW50IHRvIHNob3JlIHVwIGFueSBwYXJzaW5nIGlzc3VlcyBpbiB0aGUgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIHRoaW5ncywgYXMgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIElQIFZpcnR1YWwgU2VydmVyLiBGaXJzdCwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IElQVlMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIHRoZSBjb250ZXh0IG9mIG91ciBzeXN0ZW0uIEl0J3MgcGFydCBvZiBuZXRmaWx0ZXIsIHNvIHRoYXQgc2VlbXMgbGlrZWx5LiBTZWNvbmQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgSVBfVlNgIGlzIHRoZSBjb3JlIElQVlMgY29tcG9uZW50LCBvYnZpb3VzbHkuIFdlJ2xsIGFsc28gbmVlZCBgSVBfVlNfRlRQYCBmb3IgdGhpcyBzcGVjaWZpYyBGVFAgYXBwbGljYXRpb24gaGVscGVyIGZ1bmN0aW9uYWxpdHkuIFNvIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgYXJlIGVuYWJsZWQuXG5cblRpbWUgdG8gZGl2ZSBpbiBhbmQgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBhbmQgYElQX1ZTX0ZUUGAuIEknbGwgd2FudCB0byBzZWUgd2hlcmUgZWxzZSB0aG9zZSBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJlYXMgb2YgY29uY2Vybi4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTAsIk91dHB1dFRva2VucyI6ODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoyMy45MjA0NTg2ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MDQ2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZnRwX2dldF9hZGRycG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTg2PWlwX3ZzX2Z0cF9kb25lX2Nvbm4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtOTUtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjk2OnN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy05Ny1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBwbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjg1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzoyODY6XFx0XFx0aWYgKGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoZGF0YSwgZGF0YV9saW1pdCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjg3LVxcdFxcdFxcdFxcdFxcdCAgIFNFUlZFUl9TVFJJTkdfUEFTVixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0zMDYtXFx0XFx0ZnJvbSA9IGNwLVxcdTAwM2VkYWRkcjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6MzA3OlxcdFxcdGlmIChpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGRhdGEsIGRhdGFfbGltaXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMwOC1cXHRcXHRcXHRcXHRcXHQgICBTRVJWRVJfU1RSSU5HX0VQU1YsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NDI0PXN0YXRpYyBpbnQgaXBfdnNfZnRwX2luKHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ5Ny1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NDk4OlxcdCAgICBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGRhdGFfc3RhcnQsIGRhdGFfbGltaXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ5OS1cXHRcXHRcXHRcXHQgICBDTElFTlRfU1RSSU5HX1BPUlQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTExLVxcdFxcdFxcdCAgbnRvaHMoY3AtXFx1MDAzZXZwb3J0KS0xKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTEyOlxcdH0gZWxzZSBpZiAoaXBfdnNfZnRwX2dldF9hZGRycG9ydChkYXRhX3N0YXJ0LCBkYXRhX2xpbWl0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01MTMtXFx0XFx0XFx0XFx0XFx0ICBDTElFTlRfU1RSSU5HX0VQUlQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjIzLjk4NDA2NzMyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzMTY1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX0ZUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6MjQuMDMxNjA3MTY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDk2MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBJUFZTIGFuZCBGVFAgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBGVFAgd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgZnJhbWV3b3JrLiBNeSBmaXJzdCBzdG9wLCBhcyBhbHdheXMsIGlzIGdvaW5nIHRvIGJlIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSVBWUyBzaG91bGQgYmUgZGVmaW5lZCwgaW5jbHVkaW5nLCBob3BlZnVsbHksIGFueXRoaW5nIHNwZWNpZmljIHRvIEZUUCBvciByZWxhdGVkIHRvIGl0cyBoYW5kbGluZy4gSXTigJlzIHRoZSBjYW5vbmljYWwgcGxhY2UgdG8gZmluZCBvdXQgd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgZGlyZWN0IHN1cHBvcnQgZm9yIEZUUCBwcm90b2NvbHMgb3IgcGVyaGFwcyBtb3JlIGdlbmVyYWwgb3B0aW9ucyB0aGF0IGFmZmVjdCBpdHMgYmVoYXZpb3IuIEkgaG9wZSBJIGNhbiBmaW5kIGl0IGRpcmVjdGx5IHdpdGhvdXQgc2VhcmNoaW5nIHRocm91Z2ggdG9vIG11Y2ggdG8gZmluZCB0aGUgc3BlY2lmaWMgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoyNy4yMzY1NzM1OThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3NDgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlRQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMxOT1jb21tZW50ICdJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIxOmNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMjpcXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjMtXFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI0OlxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjUtXFx0c2VsZWN0IElQX1ZTX05GQ1RcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjYtXFx0aGVscFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyNzpcXHQgIEZUUCBpcyBhIHByb3RvY29sIHRoYXQgdHJhbnNmZXJzIElQIGFkZHJlc3MgYW5kL29yIHBvcnQgbnVtYmVyIGluXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI4LVxcdCAgdGhlIHBheWxvYWQuIEluIHRoZSB2aXJ0dWFsIHNlcnZlciB2aWEgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyOS1cXHQgIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciBvZiByZWFsIHNlcnZlcnMgY2Fubm90IGJlIHNlbnQgdG9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzA6XFx0ICBjbGllbnRzIGluIGZ0cCBjb25uZWN0aW9ucyBkaXJlY3RseSwgc28gRlRQIHByb3RvY29sIGhlbHBlciBpc1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzMS1cXHQgIHJlcXVpcmVkIGZvciB0cmFja2luZyB0aGUgY29ubmVjdGlvbiBhbmQgbWFuZ2xpbmcgaXQgYmFjayB0byB0aGF0IG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjI3LjI5NTMyODExN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzkwODAxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGVFAgTG9hZCBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJJ20gbG9va2luZyBhdCBpcyBgSVBfVlNfRlRQYC4gUmlnaHQsIGFuZCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzLCB0aGlzIHJlbGllcyBvbiBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLiBUaGF0IG1ha2VzIHNlbnNlOyBUQ1AgaXMgdGhlIHRyYW5zcG9ydCBwcm90b2NvbCwgY29ubmVjdGlvbiB0cmFja2luZyBpcyBlc3NlbnRpYWwgZm9yIHN0YXRlZnVsIGxvYWQgYmFsYW5jaW5nLCBOQVQgaXMgcHJvYmFibHkgaG93IHdlJ3JlIHJld3JpdGluZyBhZGRyZXNzZXMsIGFuZCBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIGZvciBGVFAncyBjb250cm9sIGFuZCBkYXRhIGNoYW5uZWwgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaWcgaW50byB0aGUgc3BlY2lmaWNzIG9mICp0aGlzKiBzZXR0aW5nLCBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBgSVBfVlNgIGxvYWQgYmFsYW5jaW5nIGZ1bmN0aW9uYWxpdHkgaXRzZWxmIGlzIGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYElQX1ZTYCBpdHNlbGYuIEkgbmVlZCB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgRlRQLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzozMS4xMzQ0MTA3NDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1ODk1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjMxLjE4NzAwNDgzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQzODc2NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRlRQIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRlRQIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS4gSXQncyBjbGVhciB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCBib3RoIGBJUF9WU2AgYW5kIGBJUF9WU19GVFBgIGVuYWJsZWQuIE5vdywgdGhlIGZ1bmN0aW9uIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0IG1lYW5zIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgc291cmNlIGZpbGUuIEl0J3MgdXNlZCBieSBib3RoIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAsIHdoaWNoIGFyZSBib3RoIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBGVFAgdHJhZmZpYy4gU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjayBpcyB3aGV0aGVyIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAgYXJlIGFsc28gc3RhdGljLCBnaXZlbiBob3cgdGhleSB1c2UgdGhlIHN0YXRpYyBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgZnVuY3Rpb24sIGFuZCBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVpciB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTcsIk91dHB1dFRva2VucyI6ODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzozNS41MzA4ODUyMDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzM1NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2Z0cF9vdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz05Nj1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjI1NDpzdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTI1NS1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpkaWZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTU2ND1zdGF0aWMgc3RydWN0IGlwX3ZzX2FwcCBpcF92c19mdHAgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTczLVxcdC51bmJpbmRfY29ubiA9XFx0TlVMTCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc0OlxcdC5wa3Rfb3V0ID1cXHRpcF92c19mdHBfb3V0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzUtXFx0LnBrdF9pbiA9XFx0aXBfdnNfZnRwX2luLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzozNS41Nzg2MjYwMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2Z0cF9pblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTc2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6Nzc6aXBfdnNfZnRwX2luaXRfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDIzLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0MjQ6c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQyNS1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKmRpZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTY0PXN0YXRpYyBzdHJ1Y3QgaXBfdnNfYXBwIGlwX3ZzX2Z0cCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NjktXFx0LmluY3NfbGlzdCA9XFx0TElTVF9IRUFEX0lOSVQoaXBfdnNfZnRwLmluY3NfbGlzdCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3MDpcXHQuaW5pdF9jb25uID1cXHRpcF92c19mdHBfaW5pdF9jb25uLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzEtXFx0LmRvbmVfY29ubiA9XFx0aXBfdnNfZnRwX2RvbmVfY29ubixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzQtXFx0LnBrdF9vdXQgPVxcdGlwX3ZzX2Z0cF9vdXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3NTpcXHQucGt0X2luID1cXHRpcF92c19mdHBfaW4sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3Ni19O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU4MC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTgxOnN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2Z0cF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTgyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02MjA9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF92c19mdHBfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo2MjE6XFx0LmluaXQgPSBfX2lwX3ZzX2Z0cF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MjItXFx0LmV4aXQgPSBfX2lwX3ZzX2Z0cF9leGl0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYyNC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjI1OnN0YXRpYyBpbnQgX19pbml0IGlwX3ZzX2Z0cF9pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYyNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NjM0PXN0YXRpYyB2b2lkIF9fZXhpdCBpcF92c19mdHBfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY0MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjQyOm1vZHVsZV9pbml0KGlwX3ZzX2Z0cF9pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNjQzLW1vZHVsZV9leGl0KGlwX3ZzX2Z0cF9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6MzUuNjIzMDc5OTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjczMjI5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBGVFAgQXBwbGljYXRpb24gSGVscGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBGVFAgYXBwbGljYXRpb24gaGVscGVyLCBhbmQgdGhlIGNvcmUgb2YgaXQsIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgc2VlbXMgdG8gYmUgaGFuZGxlZCBieSB0aGVzZSBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgYGlwX3ZzX2Z0cGAgc3RydWN0LCBhbiBgaXBfdnNfYXBwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgdGhlc2UgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AsIHRoZXkncmUgbm90IGdvaW5nIHRvIGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMuIFRoYXQgcHJlc2VudHMgYSBjaGFsbGVuZ2UgZm9yIGZ1enppbmcsIHJpZ2h0PyBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiByZXNvbHZlIHRoZW0gaWYgdGhlIGZ1enplciBrbm93cyB0aGVpciBuYW1lcyBhbmQgdGhleSBhcmVuJ3QgaW5saW5lZCwgYnV0IGlmIHRoZXkncmUgbm90IHZpc2libGUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdGhhdCBtYWtlcyB0aGluZ3MgdHJpY2t5LlxuXG5UaGVuIEkgcmVhbGl6ZWQgc29tZXRoaW5nOiBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFyZSBwcmV0dHkgc2l6YWJsZSBmdW5jdGlvbnMuIEl0J3MgaGlnaGx5IHVubGlrZWx5IHRoZXkndmUgYmVlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gR2l2ZW4gdGhlaXIgc2l6ZSwgSSBjYW4gcHJvYmFibHkgc2FmZWx5IGFzc3VtZSB0aGV5J3JlIHByZXNlbnQgaW4gdGhlIG9iamVjdCBjb2RlLiBUaGlzIGxlYWRzIG1lIHRvIG15IG5leHQgc3RlcCAtIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHRydWUuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdGhyb3VnaCBgaXBfdnNfZnRwLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBpZGVhIG9mIGhvdyByZWFkaWx5IGFjY2Vzc2libGUgdGhlc2UgZnVuY3Rpb25zIGFyZSB0byBmdXp6aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ3LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzo0MS4wOTA0MDYwMTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjIwNjQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjQxLjE0OTYzNzY3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDc5NjU1NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGlwX3ZzX2Z0cC5jYCBmb3IgRnVuY3Rpb24gRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGlwX3ZzX2Z0cC5jYCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aGluLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgY29kaW5nIHN0eWxlIGFuZCB0aGUgbGlrZWx5IGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyBhIHRhcmdldGVkIGdyZXAuIEknbSBnb2luZyB0byBsZXZlcmFnZSBncmVwIHRvIGZpbmQgbGluZXMgdGhhdCBsaWtlbHkgcmVwcmVzZW50IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBiYXNlZCBvbiBjb21tb24gcmV0dXJuIHR5cGVzLiBJJ2xsIGZvY3VzIG9uIHBhdHRlcm5zIHN1Y2ggYXMgYF5pbnQgYCAoaW50ZWdlciByZXR1cm4pLCBgXnZvaWQgYCAodm9pZCByZXR1cm4pLCBhbmQgYF5zdGF0aWMgaW50IGAgKHN0YXRpYyBpbnRlZ2VyIHJldHVybikuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIHByb2JhYmxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8gZXhhbWluZSBmdXJ0aGVyLiBJJ20gY2hvb3NpbmcgdGhpcyBhcHByb2FjaCBiZWNhdXNlLCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBzdHJ1Y3R1cmUgYW5kIG15IGV4cGVydCBleHBlcmllbmNlLCBhIGZ1bGwgcGFyc2Ugd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZCB0b29sIGlzIHVubmVjZXNzYXJ5IGZvciB0aGlzIGluaXRpYWwgc2NvcGluZy4gVGhpcyB3aWxsIGxpa2VseSBwcm92aWRlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwMiwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjQ1LjIyOTI5NjUyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDA4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWNcXFxccyspP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccytcXFxcKj9bYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02Mz1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcXFwiUG9ydHMgdG8gbW9uaXRvciBmb3IgRlRQIGNvbnRyb2wgY29tbWFuZHNcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjY6c3RhdGljIGNoYXIgKmlwX3ZzX2Z0cF9kYXRhX3B0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9ODY9aXBfdnNfZnRwX2RvbmVfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy05NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6OTY6c3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTk3LVxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IHBsZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjUzLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzoyNTQ6c3RhdGljIGludCBpcF92c19mdHBfb3V0KHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTUtXFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy00MjMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjQyNDpzdGF0aWMgaW50IGlwX3ZzX2Z0cF9pbihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDI1LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01ODE9c3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfZnRwX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYwOS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjEwOnN0YXRpYyB2b2lkIF9faXBfdnNfZnRwX2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzo0NS4yNzc1MDMxNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNDUxOTUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVBWUyBGVFAgRnVuY3Rpb25zIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgSVBWUyBGVFAgZnVuY3Rpb25zOiBgaXBfdnNfZnRwX291dGAsIGBpcF92c19mdHBfaW5gLCBhbmQgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkncmUgc3RhdGljIGJ1dCBub3QgaW5saW5lZC4gVGhleSdyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGlwX3ZzX2Z0cGAgc3RydWN0LCB3aGljaCBtYWtlcyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMuXG5cbkJ1dCB0aGVuLCBob2xkIG9uLiBTeXprYWxsZXIgKmNhbiogaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMsIHByb3ZpZGVkIHRoZXkncmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSG93ZXZlciwgaXTigJlzIHN0aWxsIHByZWZlcmFibGUgdG8gZ2l2ZSBpdCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgaWYgdGhleSBleGlzdC4gVGhhdCB3aWxsIG1ha2UgbXkgbGlmZSBlYXNpZXIuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWN0dWFsbHkgKmNhbGxzKiBgcGt0X291dGAgYW5kIGBwa3RfaW5gPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlLiBMZXQncyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHBrdF9vdXRgIGFuZCBgcGt0X2luYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9gLiAgVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgaWYgSSBjYW4gbGV2ZXJhZ2UgdGhlbSBmb3IgbW9yZSBlZmZpY2llbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1NCwiT3V0cHV0VG9rZW5zIjo2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzo1MC4yMTIwMjQ5NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTM2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdF9vdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzQ1PXN0YXRpYyBpbmxpbmUgdm9pZCB2c19zZXFfdXBkYXRlKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX3NlcSAqdnNlcSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zNTgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM1OTpzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zNjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfYXBwICphcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzg3LVxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozODg6XFx0aWYgKGFwcC1cXHUwMDNlcGt0X291dCA9PSBOVUxMKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zODktXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM5MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzkxOlxcdGlmICghYXBwLVxcdTAwM2Vwa3Rfb3V0KGFwcCwgY3AsIHNrYiwgXFx1MDAyNmRpZmYsIGlwdnNoKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzkyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQwOC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDA5OmludCBpcF92c19hcHBfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQxMC1cXHRcXHQgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyMi1cXHRpZiAoY3AtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0MjM6XFx0XFx0cmV0dXJuIGFwcF90Y3BfcGt0X291dChjcCwgc2tiLCBhcHAsIGlwdnNoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDI0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyNy1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDI4OlxcdGlmIChhcHAtXFx1MDAzZXBrdF9vdXQgPT0gTlVMTClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDI5LVxcdFxcdHJldHVybiAxO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQzMTpcXHRyZXR1cm4gYXBwLVxcdTAwM2Vwa3Rfb3V0KGFwcCwgY3AsIHNrYiwgTlVMTCwgaXB2c2gpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzItfVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTU2ND1zdGF0aWMgc3RydWN0IGlwX3ZzX2FwcCBpcF92c19mdHAgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTczLVxcdC51bmJpbmRfY29ubiA9XFx0TlVMTCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc0OlxcdC5wa3Rfb3V0ID1cXHRpcF92c19mdHBfb3V0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzUtXFx0LnBrdF9pbiA9XFx0aXBfdnNfZnRwX2luLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05Mj1zY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xMTUtXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxMTY6XFx0XFx0cmV0ID0gaXBfdnNfYXBwX3BrdF9vdXQoY3AsIHNrYiwgaXBoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExNy1cXHRcXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MTQ3PXRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNzItXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjE3MzpcXHRcXHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X291dChjcCwgc2tiLCBpcGgpKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTc0LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTYzLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxNjQ6XFx0XFx0aWYgKCEocmV0ID0gaXBfdnNfYXBwX3BrdF9vdXQoY3AsIHNrYiwgaXBoKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE2NS1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6NTAuMjYwMTY2MzEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk5ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RfaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9NDA5PWludCBpcF92c19hcHBfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDM0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0MzU6c3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3RfaW4oc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzYtXFx0XFx0XFx0XFx0IHN0cnVjdCBpcF92c19hcHAgKmFwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjMtXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ2NDpcXHRpZiAoYXBwLVxcdTAwM2Vwa3RfaW4gPT0gTlVMTClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDY1LVxcdFxcdHJldHVybiAxO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ2NzpcXHRpZiAoIWFwcC1cXHUwMDNlcGt0X2luKGFwcCwgY3AsIHNrYiwgXFx1MDAyNmRpZmYsIGlwdnNoKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDY4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ4NC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDg1OmludCBpcF92c19hcHBfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDg2LVxcdFxcdCAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00OTgtXFx0aWYgKGNwLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDk5OlxcdFxcdHJldHVybiBhcHBfdGNwX3BrdF9pbihjcCwgc2tiLCBhcHAsIGlwdnNoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNTAwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwMy1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NTA0OlxcdGlmIChhcHAtXFx1MDAzZXBrdF9pbiA9PSBOVUxMKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy01MDUtXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NTA3OlxcdHJldHVybiBhcHAtXFx1MDAzZXBrdF9pbihhcHAsIGNwLCBza2IsIE5VTEwsIGlwdnNoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNTA4LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01NjQ9c3RhdGljIHN0cnVjdCBpcF92c19hcHAgaXBfdnNfZnRwID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3NC1cXHQucGt0X291dCA9XFx0aXBfdnNfZnRwX291dCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc1OlxcdC5wa3RfaW4gPVxcdGlwX3ZzX2Z0cF9pbixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTc2LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNjMtXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNjQ6XFx0XFx0cmV0ID0gaXBfdnNfYXBwX3BrdF9pbihjcCwgc2tiLCBpcGgpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTY1LVxcdFxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0yMjU9dGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1My1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MjU0OlxcdFxcdGlmICghKHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1NS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz0yMTk9dWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0Ny1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MjQ4OlxcdFxcdGlmICghKHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0OS1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6NTAuMzAzMTY5NjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzI3OTU0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVBWUyBGVFAgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoZSBJUFZTIEZUUCBmdW5jdGlvbmFsaXR5LiBJdCBzZWVtcyBgaXBfdnNfYXBwX3BrdF9vdXRgIGFuZCBgaXBfdnNfYXBwX3BrdF9pbmAgYXJlIHRoZSBpbml0aWFsIG5vbi1zdGF0aWMgcG9pbnRzIG9mIGVudHJ5LCBidXQgdGhvc2UgYXJlIGdlbmVyaWMgYWNyb3NzIGFsbCBJUFZTIGFwcGxpY2F0aW9ucy4gTXkga2V5IHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gYGlwX3ZzX2Z0cC5jYD8gTm8sIEkgYWxyZWFkeSBjb25maXJtZWQgdGhhdC5cblxuVGhlcmVmb3JlLCB0aGUgbW9zdCBkaXJlY3QgdGFyZ2V0cywgdGhlICpmb2N1cyogc3ltYm9scywgc2VlbSB0byBiZSBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gLiBJIGhhZCB0byBjb25maXJtIHRoZXkgd2VyZSBzdGF0aWMsIGJ1dCB0aGF0IGFjdHVhbGx5IHdvcmtzIGluIG91ciBmYXZvdXIsIGJlY2F1c2UgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgcG9wdWxhdGUgdGhlIGBpcF92c19mdHBgIHN0cnVjdCwgdGhleSAqbXVzdCogYmUgYWRkcmVzc2FibGUuIFRoaXMgbWVhbnMgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgdXNlIHRoZW0gZGlyZWN0bHksIHdoaWNoIGlzIGdyZWF0LiBJIGNhbiB1c2UgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLiBJIGNvdWxkIGFsc28gYWRkIGBpcF92c19hcHBfcGt0X291dGAgYW5kIGBpcF92c19hcHBfcGt0X2luYCwgYnV0IHRoZXkncmUgZGVmaW5lZCBpbiBgaXBfdnNfYXBwLmNgLCBzbyBJJ2xsIGtlZXAgdGhhdCBzZXBhcmF0ZS5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIHJldmlldyBkZXBlbmRlbmNpZXMgZm9yIGBJUF9WU19GVFBgLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gYElQX1ZTX1BST1RPX1RDUGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfTkFUYCwgYW5kIGBORl9DT05OVFJBQ0tfRlRQYC4gSSdsbCBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6NTYuMDc1OTY4MTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzcyNzUzMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19QUk9UT19UQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjU2LjM1MzI1NjI1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc4MzI4NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgSVBfVlNfUFJPVE9fVENQYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgYW5kIFRDUCBwcm90b2NvbCBoYW5kbGluZy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBtYWNybyBkZWZpbml0aW9uIGluIGEga2VybmVsIGNvbmZpZyBmaWxlLCBvciBwZXJoYXBzIGEgc2V0dGluZyBpbiBhIHVzZXItc3BhY2UgdXRpbGl0eSByZWxhdGVkIHRvIGxvYWQgYmFsYW5jaW5nIG9yIG5ldHdvcmsgbWFuYWdlbWVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgYSBmb2N1c2VkIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgc3BlY2lmaWMgc3RyaW5nIGlzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIG15IGtub3duIGVudmlyb25tZW50IG9yIHRoZSByZWxldmFudCBjb2RlYmFzZSBJJ20gd29ya2luZyB3aXRoLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBpdHMgZXhhY3QgcHVycG9zZSBhbmQgdGhlIGNvbnRleHQgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhlYWRlciBmaWxlcywgYnVpbGQgc2NyaXB0cywgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIElQVlMgbW9kdWxlIG9yIGFueSBzb2Z0d2FyZSBsZXZlcmFnaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI4OjAxLjAzMTU4NzU3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MjgxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXFx0SVBfVlNfRlRQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgaGVscGVyXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXFx0XFx0TkZfQ09OTlRSQUNLX0ZUUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODowMS4wOTEzMjE0NThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3OTgwMTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGVFAgQ29ubmVjdGlvbiBUcmFja2luZyBGaXgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX1ZTX1BST1RPX1RDUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZXMgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgIGFyZSBhbHNvIG5lY2Vzc2FyeS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYElQX1ZTYCBpcyBlbmFibGVkLCB5ZXAsIHRoYXQncyB0aGUgbWFpbiBtZW51Y29uZmlnIGZvciBJUCBWaXJ0dWFsIFNlcnZlci4gU28sIG15IGVuYWJsZSBsaXN0IGxvb2tzIGxpa2UgdGhpczogYElQX1ZTYCwgYElQX1ZTX0ZUUGAsIGBJUF9WU19QUk9UT19UQ1BgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX05BVGAsIGBORl9DT05OVFJBQ0tfRlRQYC5cblxuTm93LCBhYm91dCB0aGUgY29kZSBpdHNlbGYuLi4gbGV0IG1lIHNlZSBpZiBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgY2FuIGJlIGlubGluZWQuIEl0J3MgbWFya2VkIHN0YXRpYyBhbmQgYXBwZWFycyB0byBvbmx5IGJlIGNhbGxlZCBmcm9tIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAuIEl0J3MgbGlrZWx5IGlubGluZWQsIHNvIGZvY3VzaW5nIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAsIGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5SaWdodCwgbGV0IG1lIHJldmlzaXQgdGhlIHBhdGNoLiBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiB0aGUgRlRQIHBhcnNpbmcgY29kZS4gVGhlIGNvZGUgYHBbaV0gPSBwW2ldKjEwICsgYyAtICcwJ2AgY291bGQgb3ZlcmZsb3cgaWYgcHJvY2Vzc2luZyBhIG51bWJlciBcdTAwM2UgMjU1IGFuZCBgaHBvcnQgPSBocG9ydCAqIDEwICsgKnMgLSAnMCdgIGNvdWxkIG92ZXJmbG93IGlmIHByb2Nlc3NpbmcgYSBudW1iZXIgXHUwMDNlIDY1NTM1LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBmaXhpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIG9yIGxvZ2ljIGJ1ZyB3aGVuIHByb2Nlc3NpbmcgRlRQIGNvbW1hbmRzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgcmlnb3JvdXMgZnV6emluZy5cblxuTGV0J3MgcmV2aWV3IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmU6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gY29uc2lkZXI/IGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfTkFUYCBhcmUgcHJldHR5IHN0YW5kYXJkLiBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgYWxzbyBhIHdlbGwta25vd24gbW9kdWxlLiBgSVBfVlNgIGFuZCBgSVBfVlNfRlRQYCBhcmUgdGhlIHNwZWNpZmljIG9uZXMgdG8ga2VlcCBhbiBleWUgb24uIExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoZSBgTkZfQ09OTlRSQUNLX0ZUUGAgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODowOC4xNzExMjYzODlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODU2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMTI9Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODowOC4yMzA5ODk0MzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NDYyMDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUFZTIEZUUCBIZWxwZXIgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBjb25maXJtaW5nIHRoYXQgYE5GX0NPTk5UUkFDS19GVFBgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSB0byBiZSBhd2FyZSBvZiBoZXJlLiBOb3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgRlRQIGhlbHBlciB3aXRoaW4gSVBWUy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGlwX3ZzX2Z0cF9vdXRgIGFuZCBgaXBfdnNfZnRwX2luYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgYXMgdGhleSdyZSB0aGUgbWFpbiBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgaGVscGVyIHdpdGhpbiBJUFZTLiBUaGV5J3JlIHN0YXRpYywgYW5kIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgYWNjZXNzZWQsIHNvIHRoZXkncmUgZGVmaW5pdGVseSBub3QgaW5saW5lZC5cblxuSG93ZXZlciwgYWZ0ZXIgYSBzZWNvbmQgbG9vaywgSSByZWFsaXplZCB0aGF0IGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBzYXcgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSBzaG91bGQgaW5jbHVkZSB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwgdG8gbWFrZSBzdXJlIEknbSBjb3ZlcmluZyBhbGwgYmFzZXMuXG5cblNvLCBsZXQncyBmaW5hbGl6ZSB0aGUgcmVzdWx0cy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIG9mIGNvdXJzZS4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYGlwX3ZzX2Z0cF9vdXRgLCBgaXBfdnNfZnRwX2luYCwgYW5kIGltcG9ydGFudGx5LCBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAuIFRoZSBmb2xsb3dpbmcgYEVuYWJsZUNvbmZpZ3NgIGFyZSBuZWNlc3Nhcnk6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLiBNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBib3VuZCBjaGVja3MgZHVyaW5nIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgd2l0aGluIEZUUCBjb21tYW5kcywgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHBvdGVudGlhbCBsb2dpYyBmbGF3cyByZWxhdGVkIHRvIG1hbGZvcm1lZCBQT1JUL0VQUlQgY29tbWFuZHMgd2l0aGluIElQVlMuIEZ1enppbmcgdGhpcyBoZWxwZXIgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCB0aGUgcGFyc2luZyBsb2dpYyBpcyBjb21wbGV0ZWx5IHJvYnVzdCBhbmQgY2FuIGhhbmRsZSBhbGwgZm9ybXMgb2YgaW5wdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTAyLCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoxNS45MjU2MTMzNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQyNDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0ZUUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Z0cF9vdXRcIixcbiAgICBcImlwX3ZzX2Z0cF9pblwiLFxuICAgIFwiaXBfdnNfZnRwX2dldF9hZGRycG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0ZUUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Z0cF9vdXRcIixcbiAgICBcImlwX3ZzX2Z0cF9pblwiLFxuICAgIFwiaXBfdnNfZnRwX2dldF9hZGRycG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI4OjE2LjAwNzA0NDAwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODY4NDg5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoxNi4wMDc2NzAxMTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg2ODYyMTczMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cXG5cXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0YmFkYTRiMDc5ZGQ5NWQ1Y2ZmMDljZWQxMjI0ODFlNmE3MmQ2ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDoyNzoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuaW5kZXggYjMxNWM2MDhmZGE0My4uOWUzZTAwNWE4MjYzNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXG5AQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0Y2hhciAqcywgYztcbiBcdHVuc2lnbmVkIGNoYXIgcFs2XTtcbiBcdGNoYXIgZWRlbGltO1xuLVx0X191MTYgaHBvcnQ7XG4rXHRfX3UzMiBocG9ydDtcbiBcdGludCBpID0gMDtcbiBcbiBcdGlmIChkYXRhX2xpbWl0IC0gZGF0YSBcdTAwM2MgcGxlbikge1xuQEAgLTE0NCw3ICsxNDQsMTEgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG4gXHRcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdFx0YyA9ICpkYXRhO1xuIFx0XHRcdGlmIChpc2RpZ2l0KGMpKSB7XG4tXHRcdFx0XHRwW2ldID0gcFtpXSoxMCArIGMgLSAnMCc7XG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdmFsID0gcFtpXSAqIDEwICsgYyAtICcwJztcbitcbitcdFx0XHRcdGlmICh2YWwgXHUwMDNlIDI1NSlcbitcdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0cFtpXSA9IHZhbDtcbiBcdFx0XHR9IGVsc2UgaWYgKGMgPT0gJywnIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyA1KSB7XG4gXHRcdFx0XHRpKys7XG4gXHRcdFx0XHRwW2ldID0gMDtcbkBAIC0yMjIsNiArMjI2LDggQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG4gXHRcdGlmICghaXNkaWdpdCgqcykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGhwb3J0ID0gaHBvcnQgKiAxMCArICpzIC0gJzAnO1xuK1x0XHRpZiAoaHBvcnQgXHUwMDNlIDY1NTM1KVxuK1x0XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcdGlmIChzID09IGRhdGFfbGltaXQgfHwgIWhwb3J0IHx8ICpzICE9IGVkZWxpbSlcbiBcdFx0cmV0dXJuIC0xO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjg6MTYuMDA3NjcwODY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMjkzODc0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBJUFZTIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgIGluIHRoZSBJUFZTIGNvZGUuIEl0J3MgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSBmcm9tIGBfX3UxNmAgdG8gYF9fdTMyYCBmb3IgYGhwb3J0YC4gVGhhdCBzY3JlYW1zIGludGVnZXIgb3ZlcmZsb3cgZml4LCBhbmQgdGhlIGFkZGVkIGNoZWNrcyBmdXJ0aGVyIHN1cHBvcnQgdGhhdCBzdXNwaWNpb24uIFdlJ3JlIG5vdyB2YWxpZGF0aW5nIHRoZSBwYXJzZWQgdmFsdWVzLiBXZSBoYXZlIGBpZiAodmFsIFx1MDAzZSAyNTUpYCBmb3IgdGhlIElQIGFkZHJlc3MgY29tcG9uZW50cyBkdXJpbmcgY29tbWEtc2VwYXJhdGVkIG51bWJlciBwYXJzaW5nLCBhbmQgYGlmIChocG9ydCBcdTAwM2UgNjU1MzUpYCBmb3IgdGhlIHBvcnQgbnVtYmVyIHBhcnNpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gbWFsaWNpb3VzIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMsIHBhcnRpY3VsYXJseSB0aGUgcGFydCB3aGVyZSBpdCdzIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQuIFRoZSBgcFtpXSA9IHBbaV0qMTAgKyBjIC0gJzAnYCBhbmQgYGhwb3J0ID0gaHBvcnQgKiAxMCArICpzIC0gJzAnYCBjYWxjdWxhdGlvbnMgbG9vayB2dWxuZXJhYmxlIHRvIGFuIG92ZXJmbG93LiBJZiB0aGUgaW5wdXQgZGF0YSBpcyBjcmFmdGVkIGNhcmVmdWxseSwgdGhlc2UgY291bGQgd3JhcCBhcm91bmQsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgSVAgb3IgcG9ydCB2YWx1ZXMgYmVpbmcgdXNlZC4gVGhpcyBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgaXMgYW4gb2xkIG9uZSBidXQgY2FuIHN0aWxsIGJlIGZvdW5kIGluIGxlZ2FjeSBjb2RlIHRoYXQgZG9lcyBub3QgY29ycmVjdGx5IHZhbGlkYXRlLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gVGhlIHBhdGNoIGlzIGFkZGluZyB0aGVzZSBib3VuZHMgY2hlY2tzLCByZXR1cm5pbmcgLTEgaWYgdGhlIHZhbHVlcyBhcmUgb3V0IG9mIHJhbmdlLiBUaGF0J3MgZ29vZCwgaXQgcHJldmVudHMgaW5jb3JyZWN0IHBhcnNpbmcuIEJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGVyZSBpc24ndCBzb21lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNoYW5nZXMuXG5cbkknbSB0aGlua2luZywgbm8sIGl0IHNob3VsZG4ndC4gV2UncmUgcGFyc2luZyBkYXRhIGRpcmVjdGx5IGZyb20gYSBwYWNrZXQgYnVmZmVyIChgY2hhciAqZGF0YWApLiBUaGlzIGRhdGEgaXMgYWxyZWFkeSBpbml0aWFsaXplZCDigJMgaXQncyB0aGUgcGF5bG9hZCBvZiB0aGUgcGFja2V0LiBUaGUgdmFyaWFibGVzLCBgcGAgKGZvciB0aGUgSVAgYWRkcmVzcyBwYXJ0cykgYW5kIGBocG9ydGAsIGFyZSBiZWluZyAqcG9wdWxhdGVkKiBmcm9tIHRoYXQgZGF0YS4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGVyZSB0aG9zZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGBwYCBpcyBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjb2RlLCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGNvZGUgYW5kIHJlYWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoyMy4wMzcwNjIxODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdFxcdFxcdCAgX191MTYgYWYsIGNoYXIgKipzdGFydCwgY2hhciAqKmVuZClcXG4gMTAxOlxcdHtcXG4gMTAyOlxcdFxcdGNoYXIgKnMsIGM7XFxuIDEwMzpcXHRcXHR1bnNpZ25lZCBjaGFyIHBbNl07XFxuIDEwNDpcXHRcXHRjaGFyIGVkZWxpbTtcXG4gMTA1OlxcdFxcdF9fdTMyIGhwb3J0O1xcbiAxMDY6XFx0XFx0aW50IGkgPSAwO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRpZiAoZGF0YV9saW1pdCAtIGRhdGEgXFx1MDAzYyBwbGVuKSB7XFxuIDEwOTpcXHRcXHRcXHQvKiBjaGVjayBpZiB0aGVyZSBpcyBwYXJ0aWFsIG1hdGNoICovXFxuIDExMDpcXHRcXHRcXHRpZiAoc3RybmNhc2VjbXAoZGF0YSwgcGF0dGVybiwgZGF0YV9saW1pdCAtIGRhdGEpID09IDApXFxuIDExMTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDExMjpcXHRcXHRcXHRlbHNlXFxuIDExMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTE0OlxcdFxcdH1cXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0aWYgKHN0cm5jYXNlY21wKGRhdGEsIHBhdHRlcm4sIHBsZW4pICE9IDApIHtcXG4gMTE3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTg6XFx0XFx0fVxcbiAxMTk6XFx0XFx0cyA9IGRhdGEgKyBwbGVuO1xcbiAxMjA6XFx0XFx0aWYgKHNraXApIHtcXG4gMTIxOlxcdFxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0XFx0Zm9yICg7OyBzKyspIHtcXG4gMTI0OlxcdFxcdFxcdFxcdGlmIChzID09IGRhdGFfbGltaXQpXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDEyNjpcXHRcXHRcXHRcXHRpZiAoIWZvdW5kKSB7XFxuIDEyNzpcXHRcXHRcXHRcXHRcXHQvKiBcXFwiKFxcXCIgaXMgb3B0aW9uYWwgZm9yIG5vbi1leHRlbmRlZCBmb3JtYXQsXFxuIDEyODpcXHRcXHRcXHRcXHRcXHQgKiBzbyBjYXRjaCB0aGUgc3RhcnQgb2YgSVB2NCBhZGRyZXNzXFxuIDEyOTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTMwOlxcdFxcdFxcdFxcdFxcdGlmICghZXh0IFxcdTAwMjZcXHUwMDI2IGlzZGlnaXQoKnMpKVxcbiAxMzE6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEzMjpcXHRcXHRcXHRcXHRcXHRpZiAoKnMgPT0gc2tpcClcXG4gMTMzOlxcdFxcdFxcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4gMTM0OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoKnMgIT0gc2tpcCkge1xcbiAxMzU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEzNjpcXHRcXHRcXHRcXHR9XFxuIDEzNzpcXHRcXHRcXHR9XFxuIDEzODpcXHRcXHR9XFxuIDEzOTpcXHRcXHQvKiBPbGQgSVB2NC1vbmx5IGZvcm1hdD8gKi9cXG4gMTQwOlxcdFxcdGlmICghZXh0KSB7XFxuIDE0MTpcXHRcXHRcXHRwWzBdID0gMDtcXG4gMTQyOlxcdFxcdFxcdGZvciAoZGF0YSA9IHM7IDsgZGF0YSsrKSB7XFxuIDE0MzpcXHRcXHRcXHRcXHRpZiAoZGF0YSA9PSBkYXRhX2xpbWl0KVxcbiAxNDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNDU6XFx0XFx0XFx0XFx0YyA9ICpkYXRhO1xcbiAxNDY6XFx0XFx0XFx0XFx0aWYgKGlzZGlnaXQoYykpIHtcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgKyBjIC0gJzAnO1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRcXHRcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2UgMjU1KVxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNTE6XFx0XFx0XFx0XFx0XFx0cFtpXSA9IHZhbDtcXG4gMTUyOlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoYyA9PSAnLCcgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIDUpIHtcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdGkrKztcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdHBbaV0gPSAwO1xcbiAxNTU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTU2OlxcdFxcdFxcdFxcdFxcdC8qIHVuZXhwZWN0ZWQgY2hhcmFjdGVyIG9yIHRlcm1pbmF0b3IgKi9cXG4gMTU3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNTg6XFx0XFx0XFx0XFx0fVxcbiAxNTk6XFx0XFx0XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRcXHRpZiAoaSAhPSA1KVxcbiAxNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRcXHQqc3RhcnQgPSBzO1xcbiAxNjU6XFx0XFx0XFx0KmVuZCA9IGRhdGE7XFxuIDE2NjpcXHRcXHRcXHRhZGRyLVxcdTAwM2VpcCA9IGdldF91bmFsaWduZWQoKF9fYmUzMiAqKSBwKTtcXG4gMTY3OlxcdFxcdFxcdCpwb3J0ID0gZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopIChwICsgNCkpO1xcbiAxNjg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDE2OTpcXHRcXHR9XFxuIDE3MDpcXHRcXHRpZiAocyA9PSBkYXRhX2xpbWl0KVxcbiAxNzE6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNzI6XFx0XFx0KnN0YXJ0ID0gcztcXG4gMTczOlxcdFxcdGVkZWxpbSA9ICpzKys7XFxuIDE3NDpcXHRcXHRpZiAoZWRlbGltIFxcdTAwM2MgMzMgfHwgZWRlbGltIFxcdTAwM2UgMTI2KVxcbiAxNzU6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNzY6XFx0XFx0aWYgKHMgPT0gZGF0YV9saW1pdClcXG4gMTc3OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTc4OlxcdFxcdGlmICgqcyA9PSBlZGVsaW0pIHtcXG4gMTc5OlxcdFxcdFxcdC8qIEFkZHJlc3MgZmFtaWx5IGlzIHVzdWFsbHkgbWlzc2luZyBmb3IgRVBTViByZXNwb25zZSAqL1xcbiAxODA6XFx0XFx0XFx0aWYgKG1vZGUgIT0gSVBfVlNfRlRQX0VQU1YpXFxuIDE4MTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE4MjpcXHRcXHRcXHRzKys7XFxuIDE4MzpcXHRcXHRcXHRpZiAocyA9PSBkYXRhX2xpbWl0KVxcbiAxODQ6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxODU6XFx0XFx0XFx0LyogVGhlbiBhZGRyZXNzIHNob3VsZCBiZSBtaXNzaW5nIHRvbyAqL1xcbiAxODY6XFx0XFx0XFx0aWYgKCpzICE9IGVkZWxpbSlcXG4gMTg3OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTg4OlxcdFxcdFxcdC8qIENhbGxlciBjYW4gcHJlLXNldCBhZGRyLCBpZiBuZWVkZWQgKi9cXG4gMTg5OlxcdFxcdFxcdHMrKztcXG4gMTkwOlxcdFxcdH0gZWxzZSB7XFxuIDE5MTpcXHRcXHRcXHRjb25zdCBjaGFyICplcDtcXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0LyogV2UgYWxsb3cgYWRkcmVzcyBvbmx5IGZyb20gc2FtZSBmYW1pbHkgKi9cXG4gMTk0OlxcdFxcdFxcdGlmIChhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNiAqcyAhPSAnMicpXFxuIDE5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE5NjpcXHRcXHRcXHRpZiAoYWYgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiAqcyAhPSAnMScpXFxuIDE5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE5ODpcXHRcXHRcXHRzKys7XFxuIDE5OTpcXHRcXHRcXHRpZiAocyA9PSBkYXRhX2xpbWl0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoyMy4wMzcxODIwOTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NTY2Nzc1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBQYXJzaW5nIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiByZXZpZXdpbmcgdGhpcyBGVFAgcGFyc2luZyBjb2RlLCBhbmQgaGVyZSdzIG15IHRha2UuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBsb2dpYyBmb3IgZXh0cmFjdGluZyBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGZyb20gdGhlIEZUUCBwYWNrZXQgcGF5bG9hZCBoYXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGhvdyB0aGUgY29kZSBwcm9jZXNzZXMgdGhlIGRhdGEgd2l0aGluIGFuIEZUUCBwYWNrZXQg4oCTIHZhbHVlcyBhcmUgYmVpbmcgcGFyc2VkIGFuZCBzdG9yZWQgaW50byB2YXJpYWJsZXMsIGFuZCB0aGUgd2F5IHRoaXMgaXMgYmVpbmcgZG9uZSBpcyBmbGF3ZWQuXG5cblRoZSBjb2RlIHVzZXMgYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAgYW5kIHBvcnQgc2VnbWVudHMsIGFuZCBgX191MTZgIGZvciB0aGUgcG9ydCBpbiB0aGUgZXh0ZW5kZWQgcG9ydCBjYXNlLiBUaGUgdnVsbmVyYWJpbGl0eSBpcyB0aGF0IGlmIHRoZSBpbmNvbWluZyBkYXRhIGNvbnRhaW5zIHZhbHVlcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdGhhdCB0aG9zZSB2YXJpYWJsZSB0eXBlcyBjYW4gaG9sZCDigJMgMjU1IGZvciB0aGUgYHVuc2lnbmVkIGNoYXJgIHNlZ21lbnRzIG9mIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0LCBhbmQgNjU1MzUgZm9yIHRoZSBleHRlbmRlZCBwb3J0IOKAkyBpdCBzaW1wbHkgd3JhcHMgYXJvdW5kIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93LiBTbywgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3Igb3IgcmVqZWN0aW5nIHRoZSBwYWNrZXQsIGl0IGp1c3Qgc2lsZW50bHkgdHJ1bmNhdGVzIHRoZSB2YWx1ZSwgbGVhZGluZyB0byBpbmNvcnJlY3QgcGFyc2luZy4gRm9yIGV4YW1wbGUsIGlmIGl0IHJlY2VpdmVzIDI1NiBmb3IgYW4gSVAgc2VnbWVudCBpdCB3b3VsZCBpbnRlcnByZXQgaXQgYXMgemVybywgNjU1MzYgYmVjb21lcyB6ZXJvIGFuZCBzbyBvbi5cblxuVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpY2FsIGVycm9yIGluIHRoZSBwYXJzaW5nIGFuZCBpdCBpbnZvbHZlcyBpbnRlZ2VyIG92ZXJmbG93LiBJJ3ZlIGRvdWJsZS1jaGVja2VkLCBhbmQgdGhpcyAqZG9lc24ndCogaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzLiBgcGAgaXMgYW4gYXJyYXkgdGhhdCBpcyBpbml0aWFsaXplZCBhcyBpdCBwYXJzZXMuIFRoZSBjb2RlIHNldHMgYHBbMF1gIHRvIDAgaW5pdGlhbGx5LCBhbmQgdGhlbiBwcm9ncmVzc2l2ZWx5IHBvcHVsYXRlcyB0aGUgcmVzdCBvZiBgcGAgYmFzZWQgb24gdGhlIGRhdGEuIFRoZSBsb29wIHdpbGwgaW5jcmVtZW50IHRoZSBpbmRleCBgaWAgYW5kIHNldCBgcFtpXSA9IDBgIHdoZW5ldmVyIGl0IGVuY291bnRlcnMgYSBjb21tYS4gQW5kIGlmIHRoZSBwcm9jZXNzIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIG1lYW5pbmcgdGhlIHBhY2tldCdzIElQIGFuZCBwb3J0IGFyZSBjb21wbGV0ZWx5IHBhcnNlZCwgdGhlbiBhbGwgb2YgdGhlIGVsZW1lbnRzIGluIGBwYCB3aWxsIGJlIGluaXRpYWxpemVkLlxuXG5HaXZlbiB0aGF0IGl0J3MgYW4gaW50ZWdlciBvdmVyZmxvdywgbm90IGFuIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBidWcgd2lsbCBiZSBkZXRlY3RhYmxlIGJ5IG90aGVyIHRvb2xzIGxpa2UgS0FTQU4sIGFuZCBwb3RlbnRpYWxseSBmdXp6aW5nIHRvb2xzIHRoYXQgY2FuIGV4cG9zZSBwYXJzaW5nIGlzc3Vlcy5cblxuSW4gc2hvcnQsIHRoZSBwYXRjaCBuZWVkcyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCBhbnkgdmFsdWVzIGR1cmluZyBwYXJzaW5nIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2VzIGZvciBJUCBhZGRyZXNzIHNlZ21lbnRzIGFuZCBwb3J0IG51bWJlcnMuIEl0IHNob3VsZCBhbHNvIGNoYW5nZSBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvd3MgYmVmb3JlIHRoZSBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4NiwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODozNC42OTM4NjM1NzlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cXG5cXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cXG5cXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhrh64[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 19:14:24 +0000 UTC FinishedAt: 2026-08-13 20:28:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_FTP", "IP_VS_PROTO_TCP", "NF_CONNTRACK", "NF_NAT", "NF_CONNTRACK_FTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_FTP", "IP_VS_PROTO_TCP", "NF_CONNTRACK", "NF_NAT", "NF_CONNTRACK_FTP" ], "series_id": "ed1b35db-9f98-401a-aab8-4dd500253753" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_ftp_out", "ip_vs_ftp_in", "ip_vs_ftp_get_addrport" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0ZUUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZnRwX291dCYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfaW4mIzM0OywKICAgICYjMzQ7aXBfdnNfZnRwX2dldF9hZGRycG9ydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBhbmQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGUgcGFyc2VkIGRhdGEgY29tZXMgZnJvbSBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHBhY2tldCBwYXlsb2FkLCBhbmQgdGhlIGxvY2FsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHBhcnNpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdGhlIHBhcnNpbmcgb2YgSVAgYWRkcmVzc2VzIGFuZCBwb3J0cyBpbiBGVFAgY29tbWFuZHMgd2l0aGluIHRoZSBJUFZTIEZUUCBhcHBsaWNhdGlvbiBoZWxwZXIuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBsb2dpYyBidWdzIHdoZW4gaGFuZGxpbmcgbWFsZm9ybWVkIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMuIEZ1enppbmcgdGhlIElQVlMgRlRQIGhlbHBlciBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBwYXJzaW5nIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0YmFkYTRiMDc5ZGQ5NWQ1Y2ZmMDljZWQxMjI0ODFlNmE3MmQ2ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDoyNzoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG4gXHRjaGFyICpzLCBjO1xuIFx0dW5zaWduZWQgY2hhciBwWzZdO1xuIFx0Y2hhciBlZGVsaW07XG4tXHRfX3UxNiBocG9ydDtcbiYjNDM7XHRfX3UzMiBocG9ydDtcbiBcdGludCBpID0gMDtcbiBcbiBcdGlmIChkYXRhX2xpbWl0IC0gZGF0YSBcdTAwM2MgcGxlbikge1xuQEAgLTE0NCw3ICYjNDM7MTQ0LDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdGMgPSAqZGF0YTtcbiBcdFx0XHRpZiAoaXNkaWdpdChjKSkge1xuLVx0XHRcdFx0cFtpXSA9IHBbaV0qMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7O1xuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAodmFsIFx1MDAzZSAyNTUpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0cFtpXSA9IHZhbDtcbiBcdFx0XHR9IGVsc2UgaWYgKGMgPT0gJiMzOTssJiMzOTsgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIDUpIHtcbiBcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIFx0XHRcdFx0cFtpXSA9IDA7XG5AQCAtMjIyLDYgJiM0MzsyMjYsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcbiBcdFx0aWYgKCFpc2RpZ2l0KCpzKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTs7XG4mIzQzO1x0XHRpZiAoaHBvcnQgXHUwMDNlIDY1NTM1KVxuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRpZiAocyA9PSBkYXRhX2xpbWl0IHx8ICFocG9ydCB8fCAqcyAhPSBlZGVsaW0pXG4gXHRcdHJldHVybiAtMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfRlRQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19GVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19mdHBfb3V0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Z0cF9pbiYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfZ2V0X2FkZHJwb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NGJhZGE0YjA3OWRkOTVkNWNmZjA5Y2VkMTIyNDgxZTZhNzJkNmQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6Mjc6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKaW5kZXggYjMxNWM2MDhmZGE0My4uOWUzZTAwNWE4MjYzNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwpAQCAtMTAyLDcgJiM0MzsxMDIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCwKIAljaGFyICpzLCBjOwogCXVuc2lnbmVkIGNoYXIgcFs2XTsKIAljaGFyIGVkZWxpbTsKLQlfX3UxNiBocG9ydDsKJiM0MzsJX191MzIgaHBvcnQ7CiAJaW50IGkgPSAwOwogCiAJaWYgKGRhdGFfbGltaXQgLSBkYXRhICZsdDsgcGxlbikgewpAQCAtMTQ0LDcgJiM0MzsxNDQsMTEgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsCiAJCQkJcmV0dXJuIC0xOwogCQkJYyA9ICpkYXRhOwogCQkJaWYgKGlzZGlnaXQoYykpIHsKLQkJCQlwW2ldID0gcFtpXSoxMCAmIzQzOyBjIC0gJiMzOTswJiMzOTs7CiYjNDM7CQkJCXVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7OwomIzQzOwomIzQzOwkJCQlpZiAodmFsICZndDsgMjU1KQomIzQzOwkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQlwW2ldID0gdmFsOwogCQkJfSBlbHNlIGlmIChjID09ICYjMzk7LCYjMzk7ICZhbXA7JmFtcDsgaSAmbHQ7IDUpIHsKIAkJCQlpJiM0MzsmIzQzOzsKIAkJCQlwW2ldID0gMDsKQEAgLTIyMiw2ICYjNDM7MjI2LDggQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsCiAJCWlmICghaXNkaWdpdCgqcykpCiAJCQlicmVhazsKIAkJaHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTs7CiYjNDM7CQlpZiAoaHBvcnQgJmd0OyA2NTUzNSkKJiM0MzsJCQlyZXR1cm4gLTE7CiAJfQogCWlmIChzID09IGRhdGFfbGltaXQgfHwgIWhwb3J0IHx8ICpzICE9IGVkZWxpbSkKIAkJcmV0dXJuIC0xOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkwCgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIEZUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNgLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBob3cgSVBWUyBoYW5kbGVzIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIHRvIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBmb3IgYGhwb3J0YCBhbmQgdGhlIElQIGFkZHJlc3MgY29tcG9uZW50cyAoYHZhbGApLiBUaGlzIGlzIGEgc29saWQgYnVnIGZpeCDigJMgaW1wb3J0YW50IHRvIHNob3JlIHVwIGFueSBwYXJzaW5nIGlzc3VlcyBpbiB0aGUgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4KCk5vdywgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiB0aGluZ3MsIGFzIHRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBJUCBWaXJ0dWFsIFNlcnZlci4gRmlyc3QsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBJUFZTIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiBvdXIgc3lzdGVtLiBJdCYjMzk7cyBwYXJ0IG9mIG5ldGZpbHRlciwgc28gdGhhdCBzZWVtcyBsaWtlbHkuIFNlY29uZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBJUF9WU2AgaXMgdGhlIGNvcmUgSVBWUyBjb21wb25lbnQsIG9idmlvdXNseS4gV2UmIzM5O2xsIGFsc28gbmVlZCBgSVBfVlNfRlRQYCBmb3IgdGhpcyBzcGVjaWZpYyBGVFAgYXBwbGljYXRpb24gaGVscGVyIGZ1bmN0aW9uYWxpdHkuIFNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGFyZSBlbmFibGVkLgoKVGltZSB0byBkaXZlIGluIGFuZCBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgIGFuZCBgSVBfVlNfRlRQYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgd2hlcmUgZWxzZSB0aG9zZSBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJlYXMgb2YgY29uY2Vybi4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZnRwX2dldF9hZGRycG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9ODY9aXBfdnNfZnRwX2RvbmVfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtOTUtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6OTY6c3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtOTctXHRcdFx0XHQgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBwbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz0yNTQ9c3RhdGljIGludCBpcF92c19mdHBfb3V0KHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yODUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6Mjg2Olx0XHRpZiAoaXBfdnNfZnRwX2dldF9hZGRycG9ydChkYXRhLCBkYXRhX2xpbWl0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTI4Ny1cdFx0XHRcdFx0ICAgU0VSVkVSX1NUUklOR19QQVNWLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0zMDYtXHRcdGZyb20gPSBjcC1cdTAwM2VkYWRkcjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzozMDc6XHRcdGlmIChpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGRhdGEsIGRhdGFfbGltaXQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMzA4LVx0XHRcdFx0XHQgICBTRVJWRVJfU1RSSU5HX0VQU1YsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTQyND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9pbihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDk3LVx0aWYgKGNwLVx1MDAzZWFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NDk4Olx0ICAgIGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoZGF0YV9zdGFydCwgZGF0YV9saW1pdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy00OTktXHRcdFx0XHQgICBDTElFTlRfU1RSSU5HX1BPUlQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTUxMS1cdFx0XHQgIG50b2hzKGNwLVx1MDAzZXZwb3J0KS0xKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo1MTI6XHR9IGVsc2UgaWYgKGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoZGF0YV9zdGFydCwgZGF0YV9saW1pdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01MTMtXHRcdFx0XHRcdCAgQ0xJRU5UX1NUUklOR19FUFJULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX0ZUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgSVBWUyBhbmQgRlRQIFN1cHBvcnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEZUUCB3aXRoaW4gdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBmcmFtZXdvcmsuIE15IGZpcnN0IHN0b3AsIGFzIGFsd2F5cywgaXMgZ29pbmcgdG8gYmUgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSVBWUyBzaG91bGQgYmUgZGVmaW5lZCwgaW5jbHVkaW5nLCBob3BlZnVsbHksIGFueXRoaW5nIHNwZWNpZmljIHRvIEZUUCBvciByZWxhdGVkIHRvIGl0cyBoYW5kbGluZy4gSXTigJlzIHRoZSBjYW5vbmljYWwgcGxhY2UgdG8gZmluZCBvdXQgd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgZGlyZWN0IHN1cHBvcnQgZm9yIEZUUCBwcm90b2NvbHMgb3IgcGVyaGFwcyBtb3JlIGdlbmVyYWwgb3B0aW9ucyB0aGF0IGFmZmVjdCBpdHMgYmVoYXZpb3IuIEkgaG9wZSBJIGNhbiBmaW5kIGl0IGRpcmVjdGx5IHdpdGhvdXQgc2VhcmNoaW5nIHRocm91Z2ggdG9vIG11Y2ggdG8gZmluZCB0aGUgc3BlY2lmaWMgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMTk9Y29tbWVudCAmIzM5O0lQVlMgYXBwbGljYXRpb24gaGVscGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMTpjb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIyOlx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIzLVx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI0Olx0XHRORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjUtXHRzZWxlY3QgSVBfVlNfTkZDVFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI2LVx0aGVscFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI3Olx0ICBGVFAgaXMgYSBwcm90b2NvbCB0aGF0IHRyYW5zZmVycyBJUCBhZGRyZXNzIGFuZC9vciBwb3J0IG51bWJlciBpblxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI4LVx0ICB0aGUgcGF5bG9hZC4gSW4gdGhlIHZpcnR1YWwgc2VydmVyIHZpYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjktXHQgIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciBvZiByZWFsIHNlcnZlcnMgY2Fubm90IGJlIHNlbnQgdG9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzMDpcdCAgY2xpZW50cyBpbiBmdHAgY29ubmVjdGlvbnMgZGlyZWN0bHksIHNvIEZUUCBwcm90b2NvbCBoZWxwZXIgaXNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzMS1cdCAgcmVxdWlyZWQgZm9yIHRyYWNraW5nIHRoZSBjb25uZWN0aW9uIGFuZCBtYW5nbGluZyBpdCBiYWNrIHRvIHRoYXQgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBGVFAgTG9hZCBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBJUF9WU19GVFBgLiBSaWdodCwgYW5kIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMsIHRoaXMgcmVsaWVzIG9uIGBJUF9WU19QUk9UT19UQ1BgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX05BVGAsIGFuZCBgTkZfQ09OTlRSQUNLX0ZUUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IFRDUCBpcyB0aGUgdHJhbnNwb3J0IHByb3RvY29sLCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVzc2VudGlhbCBmb3Igc3RhdGVmdWwgbG9hZCBiYWxhbmNpbmcsIE5BVCBpcyBwcm9iYWJseSBob3cgd2UmIzM5O3JlIHJld3JpdGluZyBhZGRyZXNzZXMsIGFuZCBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIGZvciBGVFAmIzM5O3MgY29udHJvbCBhbmQgZGF0YSBjaGFubmVsIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN5c3RlbS4KCkFscmlnaHQsIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgKnRoaXMqIHNldHRpbmcsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb3JlIGBJUF9WU2AgbG9hZCBiYWxhbmNpbmcgZnVuY3Rpb25hbGl0eSBpdHNlbGYgaXMgY29uZmlndXJlZC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIGZvciBgSVBfVlNgIGl0c2VsZi4gSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBGVFAtc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NwoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRlRQIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBGVFAgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBJdCYjMzk7cyBjbGVhciB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCBib3RoIGBJUF9WU2AgYW5kIGBJUF9WU19GVFBgIGVuYWJsZWQuIE5vdywgdGhlIGZ1bmN0aW9uIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBpdCBtZWFucyBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBzb3VyY2UgZmlsZS4gSXQmIzM5O3MgdXNlZCBieSBib3RoIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAsIHdoaWNoIGFyZSBib3RoIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBGVFAgdHJhZmZpYy4gU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjayBpcyB3aGV0aGVyIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAgYXJlIGFsc28gc3RhdGljLCBnaXZlbiBob3cgdGhleSB1c2UgdGhlIHN0YXRpYyBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgZnVuY3Rpb24sIGFuZCBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVpciB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2Z0cF9vdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTk2PXN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTMtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6MjU0OnN0YXRpYyBpbnQgaXBfdnNfZnRwX291dChzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTUtXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTY0PXN0YXRpYyBzdHJ1Y3QgaXBfdnNfYXBwIGlwX3ZzX2Z0cCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTczLVx0LnVuYmluZF9jb25uID1cdE5VTEwsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc0Olx0LnBrdF9vdXQgPVx0aXBfdnNfZnRwX291dCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzUtXHQucGt0X2luID1cdGlwX3ZzX2Z0cF9pbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfZnRwX2luJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz03Nj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6Nzc6aXBfdnNfZnRwX2luaXRfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy03OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQyMy0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0MjQ6c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDI1LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTY0PXN0YXRpYyBzdHJ1Y3QgaXBfdnNfYXBwIGlwX3ZzX2Z0cCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTY5LVx0LmluY3NfbGlzdCA9XHRMSVNUX0hFQURfSU5JVChpcF92c19mdHAuaW5jc19saXN0KSxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo1NzA6XHQuaW5pdF9jb25uID1cdGlwX3ZzX2Z0cF9pbml0X2Nvbm4sXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTcxLVx0LmRvbmVfY29ubiA9XHRpcF92c19mdHBfZG9uZV9jb25uLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzQtXHQucGt0X291dCA9XHRpcF92c19mdHBfb3V0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3NTpcdC5wa3RfaW4gPVx0aXBfdnNfZnRwX2luLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3Ni19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01ODAtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTgxOnN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2Z0cF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01ODIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02MjA9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF92c19mdHBfb3BzID0ge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjYyMTpcdC5pbml0ID0gX19pcF92c19mdHBfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MjItXHQuZXhpdCA9IF9faXBfdnNfZnRwX2V4aXQsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYyNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo2MjU6c3RhdGljIGludCBfX2luaXQgaXBfdnNfZnRwX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MjYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02MzQ9c3RhdGljIHZvaWQgX19leGl0IGlwX3ZzX2Z0cF9leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY0MS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo2NDI6bW9kdWxlX2luaXQoaXBfdnNfZnRwX2luaXQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY0My1tb2R1bGVfZXhpdChpcF92c19mdHBfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDcKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBGVFAgQXBwbGljYXRpb24gSGVscGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEZUUCBhcHBsaWNhdGlvbiBoZWxwZXIsIGFuZCB0aGUgY29yZSBvZiBpdCwgdGhlIHBhY2tldCBwcm9jZXNzaW5nLCBzZWVtcyB0byBiZSBoYW5kbGVkIGJ5IHRoZXNlIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAgZnVuY3Rpb25zLCB3aGljaCBhcmUgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBgaXBfdnNfZnRwYCBzdHJ1Y3QsIGFuIGBpcF92c19hcHBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSB0aGVzZSBhcmUgZGVmaW5lZCBhcyBgc3RhdGljYCwgdGhleSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMuIFRoYXQgcHJlc2VudHMgYSBjaGFsbGVuZ2UgZm9yIGZ1enppbmcsIHJpZ2h0PyBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiByZXNvbHZlIHRoZW0gaWYgdGhlIGZ1enplciBrbm93cyB0aGVpciBuYW1lcyBhbmQgdGhleSBhcmVuJiMzOTt0IGlubGluZWQsIGJ1dCBpZiB0aGV5JiMzOTtyZSBub3QgdmlzaWJsZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCB0aGF0IG1ha2VzIHRoaW5ncyB0cmlja3kuCgpUaGVuIEkgcmVhbGl6ZWQgc29tZXRoaW5nOiBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFyZSBwcmV0dHkgc2l6YWJsZSBmdW5jdGlvbnMuIEl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0aGV5JiMzOTt2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGVpciBzaXplLCBJIGNhbiBwcm9iYWJseSBzYWZlbHkgYXNzdW1lIHRoZXkmIzM5O3JlIHByZXNlbnQgaW4gdGhlIG9iamVjdCBjb2RlLiBUaGlzIGxlYWRzIG1lIHRvIG15IG5leHQgc3RlcCAtIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHRydWUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRocm91Z2ggYGlwX3ZzX2Z0cC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaWRlYSBvZiBob3cgcmVhZGlseSBhY2Nlc3NpYmxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdG8gZnV6emluZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKlxccyYjNDM7XFwqP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAyCgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBpcF92c19mdHAuY2AgZm9yIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlwX3ZzX2Z0cC5jYCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aGluLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgY29kaW5nIHN0eWxlIGFuZCB0aGUgbGlrZWx5IGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyBhIHRhcmdldGVkIGdyZXAuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgZ3JlcCB0byBmaW5kIGxpbmVzIHRoYXQgbGlrZWx5IHJlcHJlc2VudCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYmFzZWQgb24gY29tbW9uIHJldHVybiB0eXBlcy4gSSYjMzk7bGwgZm9jdXMgb24gcGF0dGVybnMgc3VjaCBhcyBgXmludCBgIChpbnRlZ2VyIHJldHVybiksIGBedm9pZCBgICh2b2lkIHJldHVybiksIGFuZCBgXnN0YXRpYyBpbnQgYCAoc3RhdGljIGludGVnZXIgcmV0dXJuKS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgcHJvYmFibGUgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBleGFtaW5lIGZ1cnRoZXIuIEkmIzM5O20gY2hvb3NpbmcgdGhpcyBhcHByb2FjaCBiZWNhdXNlLCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIGFuZCBteSBleHBlcnQgZXhwZXJpZW5jZSwgYSBmdWxsIHBhcnNlIHdpdGggYSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG9vbCBpcyB1bm5lY2Vzc2FyeSBmb3IgdGhpcyBpbml0aWFsIHNjb3BpbmcuIFRoaXMgd2lsbCBsaWtlbHkgcHJvdmlkZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljXFxzJiM0MzspP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXHMmIzQzO1xcKj9bYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02Mz1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcJiMzNDtQb3J0cyB0byBtb25pdG9yIGZvciBGVFAgY29udHJvbCBjb21tYW5kc1wmIzM0Oyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjY2OnN0YXRpYyBjaGFyICppcF92c19mdHBfZGF0YV9wdHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02Ny17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTg2PWlwX3ZzX2Z0cF9kb25lX2Nvbm4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTk1LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjk2OnN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTk3LVx0XHRcdFx0ICBjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3QgcGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjUzLSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjI1NDpzdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjU1LVx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKmRpZmYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQyMy0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0MjQ6c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDI1LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTgxPXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2Z0cF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNjA5LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjYxMDpzdGF0aWMgdm9pZCBfX2lwX3ZzX2Z0cF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU0CgkJCQkJCQlvdXRwdXQ6IDYyCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUFZTIEZUUCBGdW5jdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIElQVlMgRlRQIGZ1bmN0aW9uczogYGlwX3ZzX2Z0cF9vdXRgLCBgaXBfdnNfZnRwX2luYCwgYW5kIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGlwX3ZzX2Z0cF9vdXRgIGFuZCBgaXBfdnNfZnRwX2luYCBhcmUgdGhlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZvY3VzIHN5bWJvbHMgYmVjYXVzZSB0aGV5JiMzOTtyZSBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLiBUaGV5JiMzOTtyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGlwX3ZzX2Z0cGAgc3RydWN0LCB3aGljaCBtYWtlcyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMuCgpCdXQgdGhlbiwgaG9sZCBvbi4gU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5JiMzOTtyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBIb3dldmVyLCBpdOKAmXMgc3RpbGwgcHJlZmVyYWJsZSB0byBnaXZlIGl0IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpZiB0aGV5IGV4aXN0LiBUaGF0IHdpbGwgbWFrZSBteSBsaWZlIGVhc2llci4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWN0dWFsbHkgKmNhbGxzKiBgcGt0X291dGAgYW5kIGBwa3RfaW5gPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3MgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGBwa3Rfb3V0YCBhbmQgYHBrdF9pbmAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYC4gIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYW5kIGlmIEkgY2FuIGxldmVyYWdlIHRoZW0gZm9yIG1vcmUgZWZmaWNpZW50IGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdF9vdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYz0zNDU9c3RhdGljIGlubGluZSB2b2lkIHZzX3NlcV91cGRhdGUoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfc2VxICp2c2VxLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zNTgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzU5OnN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzYwLVx0XHRcdFx0ICBzdHJ1Y3QgaXBfdnNfYXBwICphcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM4Ny1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM4ODpcdGlmIChhcHAtXHUwMDNlcGt0X291dCA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM4OS1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzkwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM5MTpcdGlmICghYXBwLVx1MDAzZXBrdF9vdXQoYXBwLCBjcCwgc2tiLCBcdTAwMjZkaWZmLCBpcHZzaCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzkyLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDA4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQwOTppbnQgaXBfdnNfYXBwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQxMC1cdFx0ICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDIyLVx0aWYgKGNwLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQyMzpcdFx0cmV0dXJuIGFwcF90Y3BfcGt0X291dChjcCwgc2tiLCBhcHAsIGlwdnNoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MjQtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyNy1cdCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQyODpcdGlmIChhcHAtXHUwMDNlcGt0X291dCA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyOS1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDMwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQzMTpcdHJldHVybiBhcHAtXHUwMDNlcGt0X291dChhcHAsIGNwLCBza2IsIE5VTEwsIGlwdnNoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzItfVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01NjQ9c3RhdGljIHN0cnVjdCBpcF92c19hcHAgaXBfdnNfZnRwID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzMtXHQudW5iaW5kX2Nvbm4gPVx0TlVMTCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo1NzQ6XHQucGt0X291dCA9XHRpcF92c19mdHBfb3V0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3NS1cdC5wa3RfaW4gPVx0aXBfdnNfZnRwX2luLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9OTI9c2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExNS1cdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jOjExNjpcdFx0cmV0ID0gaXBfdnNfYXBwX3BrdF9vdXQoY3AsIHNrYiwgaXBoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTE3LVx0XHRpZiAocmV0ID09IDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTE0Nz10Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTE3Mi1cdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MTczOlx0XHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X291dChjcCwgc2tiLCBpcGgpKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNzQtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE2My1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MTY0Olx0XHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X291dChjcCwgc2tiLCBpcGgpKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYy0xNjUtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrdF9pbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jPTQwOT1pbnQgaXBfdnNfYXBwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDM1OnN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzYtXHRcdFx0XHQgc3RydWN0IGlwX3ZzX2FwcCAqYXBwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjMtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0NjQ6XHRpZiAoYXBwLVx1MDAzZXBrdF9pbiA9PSBOVUxMKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ2NS1cdFx0cmV0dXJuIDE7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDY2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ2NzpcdGlmICghYXBwLVx1MDAzZXBrdF9pbihhcHAsIGNwLCBza2IsIFx1MDAyNmRpZmYsIGlwdnNoKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00ODQtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDg1OmludCBpcF92c19hcHBfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00ODYtXHRcdCAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDk4LVx0aWYgKGNwLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ5OTpcdFx0cmV0dXJuIGFwcF90Y3BfcGt0X2luKGNwLCBza2IsIGFwcCwgaXB2c2gpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNTAzLVx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NTA0Olx0aWYgKGFwcC1cdTAwM2Vwa3RfaW4gPT0gTlVMTClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy01MDUtXHRcdHJldHVybiAxO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo1MDc6XHRyZXR1cm4gYXBwLVx1MDAzZXBrdF9pbihhcHAsIGNwLCBza2IsIE5VTEwsIGlwdnNoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy01MDgtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01NjQ9c3RhdGljIHN0cnVjdCBpcF92c19hcHAgaXBfdnNfZnRwID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzQtXHQucGt0X291dCA9XHRpcF92c19mdHBfb3V0LFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3NTpcdC5wa3RfaW4gPVx0aXBfdnNfZnRwX2luLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3Ni19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmM9MTQwPXNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNjMtXHRcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNjQ6XHRcdHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTY1LVx0XHRpZiAocmV0ID09IDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jPTIyNT10Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1My1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MjU0Olx0XHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X2luKGNwLCBza2IsIGlwaCkpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1NS1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM9MjE5PXVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjQ3LVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoyNDg6XHRcdGlmICghKHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKSkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMjQ5LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJUFZTIEZUUCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGUgSVBWUyBGVFAgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgYGlwX3ZzX2FwcF9wa3Rfb3V0YCBhbmQgYGlwX3ZzX2FwcF9wa3RfaW5gIGFyZSB0aGUgaW5pdGlhbCBub24tc3RhdGljIHBvaW50cyBvZiBlbnRyeSwgYnV0IHRob3NlIGFyZSBnZW5lcmljIGFjcm9zcyBhbGwgSVBWUyBhcHBsaWNhdGlvbnMuIE15IGtleSBxdWVzdGlvbiBpczogYXJlIHRoZXJlIGFueSAqb3RoZXIqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHNwZWNpZmljIHRvIGBpcF92c19mdHAuY2A/IE5vLCBJIGFscmVhZHkgY29uZmlybWVkIHRoYXQuCgpUaGVyZWZvcmUsIHRoZSBtb3N0IGRpcmVjdCB0YXJnZXRzLCB0aGUgKmZvY3VzKiBzeW1ib2xzLCBzZWVtIHRvIGJlIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAuIEkgaGFkIHRvIGNvbmZpcm0gdGhleSB3ZXJlIHN0YXRpYywgYnV0IHRoYXQgYWN0dWFsbHkgd29ya3MgaW4gb3VyIGZhdm91ciwgYmVjYXVzZSB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgcG9wdWxhdGUgdGhlIGBpcF92c19mdHBgIHN0cnVjdCwgdGhleSAqbXVzdCogYmUgYWRkcmVzc2FibGUuIFRoaXMgbWVhbnMgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgdXNlIHRoZW0gZGlyZWN0bHksIHdoaWNoIGlzIGdyZWF0LiBJIGNhbiB1c2UgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLiBJIGNvdWxkIGFsc28gYWRkIGBpcF92c19hcHBfcGt0X291dGAgYW5kIGBpcF92c19hcHBfcGt0X2luYCwgYnV0IHRoZXkmIzM5O3JlIGRlZmluZWQgaW4gYGlwX3ZzX2FwcC5jYCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IHNlcGFyYXRlLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgcmV2aWV3IGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTX0ZUUGAsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19QUk9UT19UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBJUF9WU19QUk9UT19UQ1BgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGxpa2VseSByZWxhdGVkIHRvIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBhbmQgVENQIHByb3RvY29sIGhhbmRsaW5nLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBtYWNybyBkZWZpbml0aW9uIGluIGEga2VybmVsIGNvbmZpZyBmaWxlLCBvciBwZXJoYXBzIGEgc2V0dGluZyBpbiBhIHVzZXItc3BhY2UgdXRpbGl0eSByZWxhdGVkIHRvIGxvYWQgYmFsYW5jaW5nIG9yIG5ldHdvcmsgbWFuYWdlbWVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgYSBmb2N1c2VkIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGVyZSB0aGlzIHNwZWNpZmljIHN0cmluZyBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiBteSBrbm93biBlbnZpcm9ubWVudCBvciB0aGUgcmVsZXZhbnQgY29kZWJhc2UgSSYjMzk7bSB3b3JraW5nIHdpdGguIFRoaXMgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIGl0cyBleGFjdCBwdXJwb3NlIGFuZCB0aGUgY29udGV4dCBvZiBpdHMgYXBwbGljYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhlYWRlciBmaWxlcywgYnVpbGQgc2NyaXB0cywgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIElQVlMgbW9kdWxlIG9yIGFueSBzb2Z0d2FyZSBsZXZlcmFnaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03Nz1jb21tZW50IFwmIzM0O0lQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTc4LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXHRJUF9WU19QUk9UT19UQ1Bcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTgwLVx0Ym9vbCBcJiMzNDtUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMyMT1jb25maWdcdElQX1ZTX0ZUUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIGhlbHBlclwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIzOlx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfTkFUIFx1MDAyNlx1MDAyNiBcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVx0XHRORl9DT05OVFJBQ0tfRlRQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZUUCBDb25uZWN0aW9uIFRyYWNraW5nIEZpeCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX1ZTX1BST1RPX1RDUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZXMgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgIGFyZSBhbHNvIG5lY2Vzc2FyeS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYElQX1ZTYCBpcyBlbmFibGVkLCB5ZXAsIHRoYXQmIzM5O3MgdGhlIG1haW4gbWVudWNvbmZpZyBmb3IgSVAgVmlydHVhbCBTZXJ2ZXIuIFNvLCBteSBlbmFibGUgbGlzdCBsb29rcyBsaWtlIHRoaXM6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBgTkZfQ09OTlRSQUNLX0ZUUGAuCgpOb3csIGFib3V0IHRoZSBjb2RlIGl0c2VsZi4uLiBsZXQgbWUgc2VlIGlmIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBjYW4gYmUgaW5saW5lZC4gSXQmIzM5O3MgbWFya2VkIHN0YXRpYyBhbmQgYXBwZWFycyB0byBvbmx5IGJlIGNhbGxlZCBmcm9tIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAuIEl0JiMzOTtzIGxpa2VseSBpbmxpbmVkLCBzbyBmb2N1c2luZyBvbiB0aG9zZSB0d28gZnVuY3Rpb25zLCBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gLCBpcyBwcm9iYWJseSB0aGUgYmVzdCBhcHByb2FjaC4KClJpZ2h0LCBsZXQgbWUgcmV2aXNpdCB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIHRoZSBGVFAgcGFyc2luZyBjb2RlLiBUaGUgY29kZSBgcFtpXSA9IHBbaV0qMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7YCBjb3VsZCBvdmVyZmxvdyBpZiBwcm9jZXNzaW5nIGEgbnVtYmVyICZndDsgMjU1IGFuZCBgaHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTtgIGNvdWxkIG92ZXJmbG93IGlmIHByb2Nlc3NpbmcgYSBudW1iZXIgJmd0OyA2NTUzNS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgZml4aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCBvciBsb2dpYyBidWcgd2hlbiBwcm9jZXNzaW5nIEZUUCBjb21tYW5kcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHJpZ29yb3VzIGZ1enppbmcuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmU6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLgoKQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX05BVGAgYXJlIHByZXR0eSBzdGFuZGFyZC4gYE5GX0NPTk5UUkFDS19GVFBgIGlzIGFsc28gYSB3ZWxsLWtub3duIG1vZHVsZS4gYElQX1ZTYCBhbmQgYElQX1ZTX0ZUUGAgYXJlIHRoZSBzcGVjaWZpYyBvbmVzIHRvIGtlZXAgYW4gZXllIG9uLiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgYE5GX0NPTk5UUkFDS19GVFBgIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19GVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjEyPWNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEwMgoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBWUyBGVFAgSGVscGVyIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGNvbmZpcm1pbmcgdGhhdCBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIHRvIGJlIGF3YXJlIG9mIGhlcmUuIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIG1vc3QgZWZmZWN0aXZlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBGVFAgaGVscGVyIHdpdGhpbiBJUFZTLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50cyBhcyB0aGV5JiMzOTtyZSB0aGUgbWFpbiBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgaGVscGVyIHdpdGhpbiBJUFZTLiBUaGV5JiMzOTtyZSBzdGF0aWMsIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIGFjY2Vzc2VkLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLgoKSG93ZXZlciwgYWZ0ZXIgYSBzZWNvbmQgbG9vaywgSSByZWFsaXplZCB0aGF0IGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBzYXcgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSBzaG91bGQgaW5jbHVkZSB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwgdG8gbWFrZSBzdXJlIEkmIzM5O20gY292ZXJpbmcgYWxsIGJhc2VzLgoKU28sIGxldCYjMzk7cyBmaW5hbGl6ZSB0aGUgcmVzdWx0cy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCBvZiBjb3Vyc2UuIFRoZSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBpcF92c19mdHBfb3V0YCwgYGlwX3ZzX2Z0cF9pbmAsIGFuZCBpbXBvcnRhbnRseSwgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgLiBUaGUgZm9sbG93aW5nIGBFbmFibGVDb25maWdzYCBhcmUgbmVjZXNzYXJ5OiBgSVBfVlNgLCBgSVBfVlNfRlRQYCwgYElQX1ZTX1BST1RPX1RDUGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfTkFUYCwgYW5kIGBORl9DT05OVFJBQ0tfRlRQYC4gTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGRlYWxzIHdpdGggYm91bmQgY2hlY2tzIGR1cmluZyB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIHdpdGhpbiBGVFAgY29tbWFuZHMsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGludGVnZXIgb3ZlcmZsb3dzIGFuZCBwb3RlbnRpYWwgbG9naWMgZmxhd3MgcmVsYXRlZCB0byBtYWxmb3JtZWQgUE9SVC9FUFJUIGNvbW1hbmRzIHdpdGhpbiBJUFZTLiBGdXp6aW5nIHRoaXMgaGVscGVyIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHBhcnNpbmcgbG9naWMgaXMgY29tcGxldGVseSByb2J1c3QgYW5kIGNhbiBoYW5kbGUgYWxsIGZvcm1zIG9mIGlucHV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfRlRQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19GVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19mdHBfb3V0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Z0cF9pbiYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfZ2V0X2FkZHJwb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0ZUUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfRlRQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfZnRwX291dCYjMzQ7LAogICAgJiMzNDtpcF92c19mdHBfaW4mIzM0OywKICAgICYjMzQ7aXBfdnNfZnRwX2dldF9hZGRycG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGluIEZUUCBjb21tYW5kcyB3aXRoaW4gdGhlIElQVlMgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGxvZ2ljIGJ1Z3Mgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgRlRQIFBPUlQvRVBSVCBjb21tYW5kcy4gRnV6emluZyB0aGUgSVBWUyBGVFAgaGVscGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHBhcnNpbmcgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cblxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBhbmQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGUgcGFyc2VkIGRhdGEgY29tZXMgZnJvbSBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHBhY2tldCBwYXlsb2FkLCBhbmQgdGhlIGxvY2FsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHBhcnNpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDRiYWRhNGIwNzlkZDk1ZDVjZmYwOWNlZDEyMjQ4MWU2YTcyZDZkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDIwOjI3OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKQEAgLTEwMiw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsCiAJY2hhciAqcywgYzsKIAl1bnNpZ25lZCBjaGFyIHBbNl07CiAJY2hhciBlZGVsaW07Ci0JX191MTYgaHBvcnQ7CiYjNDM7CV9fdTMyIGhwb3J0OwogCWludCBpID0gMDsKIAogCWlmIChkYXRhX2xpbWl0IC0gZGF0YSAmbHQ7IHBsZW4pIHsKQEAgLTE0NCw3ICYjNDM7MTQ0LDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LAogCQkJCXJldHVybiAtMTsKIAkJCWMgPSAqZGF0YTsKIAkJCWlmIChpc2RpZ2l0KGMpKSB7Ci0JCQkJcFtpXSA9IHBbaV0qMTAgJiM0MzsgYyAtICYjMzk7MCYjMzk7OwomIzQzOwkJCQl1bnNpZ25lZCBpbnQgdmFsID0gcFtpXSAqIDEwICYjNDM7IGMgLSAmIzM5OzAmIzM5OzsKJiM0MzsKJiM0MzsJCQkJaWYgKHZhbCAmZ3Q7IDI1NSkKJiM0MzsJCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJcFtpXSA9IHZhbDsKIAkJCX0gZWxzZSBpZiAoYyA9PSAmIzM5OywmIzM5OyAmYW1wOyZhbXA7IGkgJmx0OyA1KSB7CiAJCQkJaSYjNDM7JiM0Mzs7CiAJCQkJcFtpXSA9IDA7CkBAIC0yMjIsNiAmIzQzOzIyNiw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LAogCQlpZiAoIWlzZGlnaXQoKnMpKQogCQkJYnJlYWs7CiAJCWhwb3J0ID0gaHBvcnQgKiAxMCAmIzQzOyAqcyAtICYjMzk7MCYjMzk7OwomIzQzOwkJaWYgKGhwb3J0ICZndDsgNjU1MzUpCiYjNDM7CQkJcmV0dXJuIC0xOwogCX0KIAlpZiAocyA9PSBkYXRhX2xpbWl0IHx8ICFocG9ydCB8fCAqcyAhPSBlZGVsaW0pCiAJCXJldHVybiAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBJUFZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgaW4gdGhlIElQVlMgY29kZS4gSXQmIzM5O3MgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSBmcm9tIGBfX3UxNmAgdG8gYF9fdTMyYCBmb3IgYGhwb3J0YC4gVGhhdCBzY3JlYW1zIGludGVnZXIgb3ZlcmZsb3cgZml4LCBhbmQgdGhlIGFkZGVkIGNoZWNrcyBmdXJ0aGVyIHN1cHBvcnQgdGhhdCBzdXNwaWNpb24uIFdlJiMzOTtyZSBub3cgdmFsaWRhdGluZyB0aGUgcGFyc2VkIHZhbHVlcy4gV2UgaGF2ZSBgaWYgKHZhbCAmZ3Q7IDI1NSlgIGZvciB0aGUgSVAgYWRkcmVzcyBjb21wb25lbnRzIGR1cmluZyBjb21tYS1zZXBhcmF0ZWQgbnVtYmVyIHBhcnNpbmcsIGFuZCBgaWYgKGhwb3J0ICZndDsgNjU1MzUpYCBmb3IgdGhlIHBvcnQgbnVtYmVyIHBhcnNpbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIG1hbGljaW91cyBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLCBwYXJ0aWN1bGFybHkgdGhlIHBhcnQgd2hlcmUgaXQmIzM5O3MgcGFyc2luZyB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydC4gVGhlIGBwW2ldID0gcFtpXSoxMCAmIzQzOyBjIC0gJiMzOTswJiMzOTtgIGFuZCBgaHBvcnQgPSBocG9ydCAqIDEwICYjNDM7ICpzIC0gJiMzOTswJiMzOTtgIGNhbGN1bGF0aW9ucyBsb29rIHZ1bG5lcmFibGUgdG8gYW4gb3ZlcmZsb3cuIElmIHRoZSBpbnB1dCBkYXRhIGlzIGNyYWZ0ZWQgY2FyZWZ1bGx5LCB0aGVzZSBjb3VsZCB3cmFwIGFyb3VuZCwgcmVzdWx0aW5nIGluIGluY29ycmVjdCBJUCBvciBwb3J0IHZhbHVlcyBiZWluZyB1c2VkLiBUaGlzIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSBpcyBhbiBvbGQgb25lIGJ1dCBjYW4gc3RpbGwgYmUgZm91bmQgaW4gbGVnYWN5IGNvZGUgdGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkgdmFsaWRhdGUuCgpOb3csIG15IG5leHQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gVGhlIHBhdGNoIGlzIGFkZGluZyB0aGVzZSBib3VuZHMgY2hlY2tzLCByZXR1cm5pbmcgLTEgaWYgdGhlIHZhbHVlcyBhcmUgb3V0IG9mIHJhbmdlLiBUaGF0JiMzOTtzIGdvb2QsIGl0IHByZXZlbnRzIGluY29ycmVjdCBwYXJzaW5nLiBCdXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gdGhlcmUgaXNuJiMzOTt0IHNvbWUgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBhcyBhIHJlc3VsdCBvZiB0aGUgY2hhbmdlcy4KCkkmIzM5O20gdGhpbmtpbmcsIG5vLCBpdCBzaG91bGRuJiMzOTt0LiBXZSYjMzk7cmUgcGFyc2luZyBkYXRhIGRpcmVjdGx5IGZyb20gYSBwYWNrZXQgYnVmZmVyIChgY2hhciAqZGF0YWApLiBUaGlzIGRhdGEgaXMgYWxyZWFkeSBpbml0aWFsaXplZCDigJMgaXQmIzM5O3MgdGhlIHBheWxvYWQgb2YgdGhlIHBhY2tldC4gVGhlIHZhcmlhYmxlcywgYHBgIChmb3IgdGhlIElQIGFkZHJlc3MgcGFydHMpIGFuZCBgaHBvcnRgLCBhcmUgYmVpbmcgKnBvcHVsYXRlZCogZnJvbSB0aGF0IGRhdGEuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hlcmUgdGhvc2UgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZC4gSSByZW1lbWJlciB0aGF0IHRoZSBgcGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBpbiB0aGUgY29kZSwgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBjb25maXJtIHRoZSBjb2RlIGFuZCByZWFkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHRcdFx0ICBfX3UxNiBhZiwgY2hhciAqKnN0YXJ0LCBjaGFyICoqZW5kKVxuIDEwMTpcdHtcbiAxMDI6XHRcdGNoYXIgKnMsIGM7XG4gMTAzOlx0XHR1bnNpZ25lZCBjaGFyIHBbNl07XG4gMTA0Olx0XHRjaGFyIGVkZWxpbTtcbiAxMDU6XHRcdF9fdTMyIGhwb3J0O1xuIDEwNjpcdFx0aW50IGkgPSAwO1xuIDEwNzpcdFxuIDEwODpcdFx0aWYgKGRhdGFfbGltaXQgLSBkYXRhIFx1MDAzYyBwbGVuKSB7XG4gMTA5Olx0XHRcdC8qIGNoZWNrIGlmIHRoZXJlIGlzIHBhcnRpYWwgbWF0Y2ggKi9cbiAxMTA6XHRcdFx0aWYgKHN0cm5jYXNlY21wKGRhdGEsIHBhdHRlcm4sIGRhdGFfbGltaXQgLSBkYXRhKSA9PSAwKVxuIDExMTpcdFx0XHRcdHJldHVybiAtMTtcbiAxMTI6XHRcdFx0ZWxzZVxuIDExMzpcdFx0XHRcdHJldHVybiAwO1xuIDExNDpcdFx0fVxuIDExNTpcdFxuIDExNjpcdFx0aWYgKHN0cm5jYXNlY21wKGRhdGEsIHBhdHRlcm4sIHBsZW4pICE9IDApIHtcbiAxMTc6XHRcdFx0cmV0dXJuIDA7XG4gMTE4Olx0XHR9XG4gMTE5Olx0XHRzID0gZGF0YSAmIzQzOyBwbGVuO1xuIDEyMDpcdFx0aWYgKHNraXApIHtcbiAxMjE6XHRcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuIDEyMjpcdFxuIDEyMzpcdFx0XHRmb3IgKDs7IHMmIzQzOyYjNDM7KSB7XG4gMTI0Olx0XHRcdFx0aWYgKHMgPT0gZGF0YV9saW1pdClcbiAxMjU6XHRcdFx0XHRcdHJldHVybiAtMTtcbiAxMjY6XHRcdFx0XHRpZiAoIWZvdW5kKSB7XG4gMTI3Olx0XHRcdFx0XHQvKiBcJiMzNDsoXCYjMzQ7IGlzIG9wdGlvbmFsIGZvciBub24tZXh0ZW5kZWQgZm9ybWF0LFxuIDEyODpcdFx0XHRcdFx0ICogc28gY2F0Y2ggdGhlIHN0YXJ0IG9mIElQdjQgYWRkcmVzc1xuIDEyOTpcdFx0XHRcdFx0ICovXG4gMTMwOlx0XHRcdFx0XHRpZiAoIWV4dCBcdTAwMjZcdTAwMjYgaXNkaWdpdCgqcykpXG4gMTMxOlx0XHRcdFx0XHRcdGJyZWFrO1xuIDEzMjpcdFx0XHRcdFx0aWYgKCpzID09IHNraXApXG4gMTMzOlx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbiAxMzQ6XHRcdFx0XHR9IGVsc2UgaWYgKCpzICE9IHNraXApIHtcbiAxMzU6XHRcdFx0XHRcdGJyZWFrO1xuIDEzNjpcdFx0XHRcdH1cbiAxMzc6XHRcdFx0fVxuIDEzODpcdFx0fVxuIDEzOTpcdFx0LyogT2xkIElQdjQtb25seSBmb3JtYXQ/ICovXG4gMTQwOlx0XHRpZiAoIWV4dCkge1xuIDE0MTpcdFx0XHRwWzBdID0gMDtcbiAxNDI6XHRcdFx0Zm9yIChkYXRhID0gczsgOyBkYXRhJiM0MzsmIzQzOykge1xuIDE0MzpcdFx0XHRcdGlmIChkYXRhID09IGRhdGFfbGltaXQpXG4gMTQ0Olx0XHRcdFx0XHRyZXR1cm4gLTE7XG4gMTQ1Olx0XHRcdFx0YyA9ICpkYXRhO1xuIDE0NjpcdFx0XHRcdGlmIChpc2RpZ2l0KGMpKSB7XG4gMTQ3Olx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdmFsID0gcFtpXSAqIDEwICYjNDM7IGMgLSAmIzM5OzAmIzM5OztcbiAxNDg6XHRcbiAxNDk6XHRcdFx0XHRcdGlmICh2YWwgXHUwMDNlIDI1NSlcbiAxNTA6XHRcdFx0XHRcdFx0cmV0dXJuIC0xO1xuIDE1MTpcdFx0XHRcdFx0cFtpXSA9IHZhbDtcbiAxNTI6XHRcdFx0XHR9IGVsc2UgaWYgKGMgPT0gJiMzOTssJiMzOTsgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIDUpIHtcbiAxNTM6XHRcdFx0XHRcdGkmIzQzOyYjNDM7O1xuIDE1NDpcdFx0XHRcdFx0cFtpXSA9IDA7XG4gMTU1Olx0XHRcdFx0fSBlbHNlIHtcbiAxNTY6XHRcdFx0XHRcdC8qIHVuZXhwZWN0ZWQgY2hhcmFjdGVyIG9yIHRlcm1pbmF0b3IgKi9cbiAxNTc6XHRcdFx0XHRcdGJyZWFrO1xuIDE1ODpcdFx0XHRcdH1cbiAxNTk6XHRcdFx0fVxuIDE2MDpcdFxuIDE2MTpcdFx0XHRpZiAoaSAhPSA1KVxuIDE2MjpcdFx0XHRcdHJldHVybiAtMTtcbiAxNjM6XHRcbiAxNjQ6XHRcdFx0KnN0YXJ0ID0gcztcbiAxNjU6XHRcdFx0KmVuZCA9IGRhdGE7XG4gMTY2Olx0XHRcdGFkZHItXHUwMDNlaXAgPSBnZXRfdW5hbGlnbmVkKChfX2JlMzIgKikgcCk7XG4gMTY3Olx0XHRcdCpwb3J0ID0gZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopIChwICYjNDM7IDQpKTtcbiAxNjg6XHRcdFx0cmV0dXJuIDE7XG4gMTY5Olx0XHR9XG4gMTcwOlx0XHRpZiAocyA9PSBkYXRhX2xpbWl0KVxuIDE3MTpcdFx0XHRyZXR1cm4gLTE7XG4gMTcyOlx0XHQqc3RhcnQgPSBzO1xuIDE3MzpcdFx0ZWRlbGltID0gKnMmIzQzOyYjNDM7O1xuIDE3NDpcdFx0aWYgKGVkZWxpbSBcdTAwM2MgMzMgfHwgZWRlbGltIFx1MDAzZSAxMjYpXG4gMTc1Olx0XHRcdHJldHVybiAtMTtcbiAxNzY6XHRcdGlmIChzID09IGRhdGFfbGltaXQpXG4gMTc3Olx0XHRcdHJldHVybiAtMTtcbiAxNzg6XHRcdGlmICgqcyA9PSBlZGVsaW0pIHtcbiAxNzk6XHRcdFx0LyogQWRkcmVzcyBmYW1pbHkgaXMgdXN1YWxseSBtaXNzaW5nIGZvciBFUFNWIHJlc3BvbnNlICovXG4gMTgwOlx0XHRcdGlmIChtb2RlICE9IElQX1ZTX0ZUUF9FUFNWKVxuIDE4MTpcdFx0XHRcdHJldHVybiAtMTtcbiAxODI6XHRcdFx0cyYjNDM7JiM0Mzs7XG4gMTgzOlx0XHRcdGlmIChzID09IGRhdGFfbGltaXQpXG4gMTg0Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE4NTpcdFx0XHQvKiBUaGVuIGFkZHJlc3Mgc2hvdWxkIGJlIG1pc3NpbmcgdG9vICovXG4gMTg2Olx0XHRcdGlmICgqcyAhPSBlZGVsaW0pXG4gMTg3Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE4ODpcdFx0XHQvKiBDYWxsZXIgY2FuIHByZS1zZXQgYWRkciwgaWYgbmVlZGVkICovXG4gMTg5Olx0XHRcdHMmIzQzOyYjNDM7O1xuIDE5MDpcdFx0fSBlbHNlIHtcbiAxOTE6XHRcdFx0Y29uc3QgY2hhciAqZXA7XG4gMTkyOlx0XG4gMTkzOlx0XHRcdC8qIFdlIGFsbG93IGFkZHJlc3Mgb25seSBmcm9tIHNhbWUgZmFtaWx5ICovXG4gMTk0Olx0XHRcdGlmIChhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjYgKnMgIT0gJiMzOTsyJiMzOTspXG4gMTk1Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE5NjpcdFx0XHRpZiAoYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgKnMgIT0gJiMzOTsxJiMzOTspXG4gMTk3Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDE5ODpcdFx0XHRzJiM0MzsmIzQzOztcbiAxOTk6XHRcdFx0aWYgKHMgPT0gZGF0YV9saW1pdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ4NgoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiA2MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBQYXJzaW5nIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCBiZWVuIHJldmlld2luZyB0aGlzIEZUUCBwYXJzaW5nIGNvZGUsIGFuZCBoZXJlJiMzOTtzIG15IHRha2UuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBsb2dpYyBmb3IgZXh0cmFjdGluZyBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGZyb20gdGhlIEZUUCBwYWNrZXQgcGF5bG9hZCBoYXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBob3cgdGhlIGNvZGUgcHJvY2Vzc2VzIHRoZSBkYXRhIHdpdGhpbiBhbiBGVFAgcGFja2V0IOKAkyB2YWx1ZXMgYXJlIGJlaW5nIHBhcnNlZCBhbmQgc3RvcmVkIGludG8gdmFyaWFibGVzLCBhbmQgdGhlIHdheSB0aGlzIGlzIGJlaW5nIGRvbmUgaXMgZmxhd2VkLgoKVGhlIGNvZGUgdXNlcyBgdW5zaWduZWQgY2hhcmAgZm9yIHRoZSBJUCBhbmQgcG9ydCBzZWdtZW50cywgYW5kIGBfX3UxNmAgZm9yIHRoZSBwb3J0IGluIHRoZSBleHRlbmRlZCBwb3J0IGNhc2UuIFRoZSB2dWxuZXJhYmlsaXR5IGlzIHRoYXQgaWYgdGhlIGluY29taW5nIGRhdGEgY29udGFpbnMgdmFsdWVzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB0aGF0IHRob3NlIHZhcmlhYmxlIHR5cGVzIGNhbiBob2xkIOKAkyAyNTUgZm9yIHRoZSBgdW5zaWduZWQgY2hhcmAgc2VnbWVudHMgb2YgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQsIGFuZCA2NTUzNSBmb3IgdGhlIGV4dGVuZGVkIHBvcnQg4oCTIGl0IHNpbXBseSB3cmFwcyBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFNvLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciBvciByZWplY3RpbmcgdGhlIHBhY2tldCwgaXQganVzdCBzaWxlbnRseSB0cnVuY2F0ZXMgdGhlIHZhbHVlLCBsZWFkaW5nIHRvIGluY29ycmVjdCBwYXJzaW5nLiBGb3IgZXhhbXBsZSwgaWYgaXQgcmVjZWl2ZXMgMjU2IGZvciBhbiBJUCBzZWdtZW50IGl0IHdvdWxkIGludGVycHJldCBpdCBhcyB6ZXJvLCA2NTUzNiBiZWNvbWVzIHplcm8gYW5kIHNvIG9uLgoKVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpY2FsIGVycm9yIGluIHRoZSBwYXJzaW5nIGFuZCBpdCBpbnZvbHZlcyBpbnRlZ2VyIG92ZXJmbG93LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCwgYW5kIHRoaXMgKmRvZXNuJiMzOTt0KiBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMuIGBwYCBpcyBhbiBhcnJheSB0aGF0IGlzIGluaXRpYWxpemVkIGFzIGl0IHBhcnNlcy4gVGhlIGNvZGUgc2V0cyBgcFswXWAgdG8gMCBpbml0aWFsbHksIGFuZCB0aGVuIHByb2dyZXNzaXZlbHkgcG9wdWxhdGVzIHRoZSByZXN0IG9mIGBwYCBiYXNlZCBvbiB0aGUgZGF0YS4gVGhlIGxvb3Agd2lsbCBpbmNyZW1lbnQgdGhlIGluZGV4IGBpYCBhbmQgc2V0IGBwW2ldID0gMGAgd2hlbmV2ZXIgaXQgZW5jb3VudGVycyBhIGNvbW1hLiBBbmQgaWYgdGhlIHByb2Nlc3MgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgbWVhbmluZyB0aGUgcGFja2V0JiMzOTtzIElQIGFuZCBwb3J0IGFyZSBjb21wbGV0ZWx5IHBhcnNlZCwgdGhlbiBhbGwgb2YgdGhlIGVsZW1lbnRzIGluIGBwYCB3aWxsIGJlIGluaXRpYWxpemVkLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBpbnRlZ2VyIG92ZXJmbG93LCBub3QgYW4gaXNzdWUgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGJ1ZyB3aWxsIGJlIGRldGVjdGFibGUgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiwgYW5kIHBvdGVudGlhbGx5IGZ1enppbmcgdG9vbHMgdGhhdCBjYW4gZXhwb3NlIHBhcnNpbmcgaXNzdWVzLgoKSW4gc2hvcnQsIHRoZSBwYXRjaCBuZWVkcyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCBhbnkgdmFsdWVzIGR1cmluZyBwYXJzaW5nIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2VzIGZvciBJUCBhZGRyZXNzIHNlZ21lbnRzIGFuZCBwb3J0IG51bWJlcnMuIEl0IHNob3VsZCBhbHNvIGNoYW5nZSBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvd3MgYmVmb3JlIHRoZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgcGFyc2luZyBvZiBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzIGluIHRoZSBJUFZTIEZUUCBoZWxwZXIuIFdoZW4gcGFyc2luZyB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBmcm9tIHRoZSBwYWNrZXQgcGF5bG9hZCwgdGhlIGNvZGUgdXNlZCBhbiBgdW5zaWduZWQgY2hhcmAgZm9yIHRoZSBJUC9wb3J0IHNlZ21lbnRzIChgcFtpXWApIGFuZCBhIGBfX3UxNmAgZm9yIHRoZSBleHRlbmRlZCBwb3J0IChgaHBvcnRgKS4gSWYgdGhlIHBhY2tldCBjb250YWluZWQgdmFsdWVzIGxhcmdlciB0aGFuIDI1NSBmb3IgdGhlIElQIHNlZ21lbnRzIG9yIDY1NTM1IGZvciB0aGUgcG9ydCwgdGhlIHZhbHVlcyB3b3VsZCBzaWxlbnRseSB3cmFwIGFyb3VuZCBkdWUgdG8gaW50ZWdlciBvdmVyZmxvdy4gVGhlIHBhdGNoIGFkZHMgZXhwbGljaXQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCB2YWx1ZXMgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gYWxsb3dlZCBsaW1pdHMgKDI1NSBhbmQgNjU1MzUgcmVzcGVjdGl2ZWx5KSBhbmQgY2hhbmdlcyBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvdyBiZWZvcmUgdGhlIGNoZWNrLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgcGFyc2luZyBvZiBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzIGluIHRoZSBJUFZTIEZUUCBoZWxwZXIuIFdoZW4gcGFyc2luZyB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBmcm9tIHRoZSBwYWNrZXQgcGF5bG9hZCwgdGhlIGNvZGUgdXNlZCBhbiBgdW5zaWduZWQgY2hhcmAgZm9yIHRoZSBJUC9wb3J0IHNlZ21lbnRzIChgcFtpXWApIGFuZCBhIGBfX3UxNmAgZm9yIHRoZSBleHRlbmRlZCBwb3J0IChgaHBvcnRgKS4gSWYgdGhlIHBhY2tldCBjb250YWluZWQgdmFsdWVzIGxhcmdlciB0aGFuIDI1NSBmb3IgdGhlIElQIHNlZ21lbnRzIG9yIDY1NTM1IGZvciB0aGUgcG9ydCwgdGhlIHZhbHVlcyB3b3VsZCBzaWxlbnRseSB3cmFwIGFyb3VuZCBkdWUgdG8gaW50ZWdlciBvdmVyZmxvdy4gVGhlIHBhdGNoIGFkZHMgZXhwbGljaXQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCB2YWx1ZXMgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gYWxsb3dlZCBsaW1pdHMgKDI1NSBhbmQgNjU1MzUgcmVzcGVjdGl2ZWx5KSBhbmQgY2hhbmdlcyBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvdyBiZWZvcmUgdGhlIGNoZWNrLlxuXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoxNy42OTkwMzY1MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk5NDg2NjI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfRlRQXCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfRlRQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfZnRwX291dFwiLFxuICAgIFwiaXBfdnNfZnRwX2luXCIsXG4gICAgXCJpcF92c19mdHBfZ2V0X2FkZHJwb3J0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBwYXJzaW5nIG9mIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMgaW4gdGhlIElQVlMgRlRQIGhlbHBlci4gV2hlbiBwYXJzaW5nIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0IGZyb20gdGhlIHBhY2tldCBwYXlsb2FkLCB0aGUgY29kZSB1c2VkIGFuIGB1bnNpZ25lZCBjaGFyYCBmb3IgdGhlIElQL3BvcnQgc2VnbWVudHMgKGBwW2ldYCkgYW5kIGEgYF9fdTE2YCBmb3IgdGhlIGV4dGVuZGVkIHBvcnQgKGBocG9ydGApLiBJZiB0aGUgcGFja2V0IGNvbnRhaW5lZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMjU1IGZvciB0aGUgSVAgc2VnbWVudHMgb3IgNjU1MzUgZm9yIHRoZSBwb3J0LCB0aGUgdmFsdWVzIHdvdWxkIHNpbGVudGx5IHdyYXAgYXJvdW5kIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93LiBUaGUgcGF0Y2ggYWRkcyBleHBsaWNpdCBib3VuZHMgY2hlY2tpbmcgdG8gcmVqZWN0IHZhbHVlcyB0aGF0IGV4Y2VlZCB0aGUgbWF4aW11bSBhbGxvd2VkIGxpbWl0cyAoMjU1IGFuZCA2NTUzNSByZXNwZWN0aXZlbHkpIGFuZCBjaGFuZ2VzIGBocG9ydGAgdG8gYF9fdTMyYCB0byBwcmV2ZW50IG92ZXJmbG93IGJlZm9yZSB0aGUgY2hlY2suXFxuXFxuVGhpcyBpcyBhIGxvZ2ljIGJ1ZyBhbmQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGUgcGFyc2VkIGRhdGEgY29tZXMgZnJvbSBhbiBhbHJlYWR5IGluaXRpYWxpemVkIHBhY2tldCBwYXlsb2FkLCBhbmQgdGhlIGxvY2FsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHBhcnNpbmcuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGluIEZUUCBjb21tYW5kcyB3aXRoaW4gdGhlIElQVlMgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGxvZ2ljIGJ1Z3Mgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgRlRQIFBPUlQvRVBSVCBjb21tYW5kcy4gRnV6emluZyB0aGUgSVBWUyBGVFAgaGVscGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHBhcnNpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoxNy42OTkwNDMwMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQxMjkyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NGJhZGE0YjA3OWRkOTVkNWNmZjA5Y2VkMTIyNDgxZTZhNzJkNmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjI3OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xcbmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXFxuQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcXG4gXFx0Y2hhciAqcywgYztcXG4gXFx0dW5zaWduZWQgY2hhciBwWzZdO1xcbiBcXHRjaGFyIGVkZWxpbTtcXG4tXFx0X191MTYgaHBvcnQ7XFxuK1xcdF9fdTMyIGhwb3J0O1xcbiBcXHRpbnQgaSA9IDA7XFxuIFxcbiBcXHRpZiAoZGF0YV9saW1pdCAtIGRhdGEgXFx1MDAzYyBwbGVuKSB7XFxuQEAgLTE0NCw3ICsxNDQsMTEgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0XFx0XFx0YyA9ICpkYXRhO1xcbiBcXHRcXHRcXHRpZiAoaXNkaWdpdChjKSkge1xcbi1cXHRcXHRcXHRcXHRwW2ldID0gcFtpXSoxMCArIGMgLSAnMCc7XFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgKyBjIC0gJzAnO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNlIDI1NSlcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRwW2ldID0gdmFsO1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKGMgPT0gJywnIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyA1KSB7XFxuIFxcdFxcdFxcdFxcdGkrKztcXG4gXFx0XFx0XFx0XFx0cFtpXSA9IDA7XFxuQEAgLTIyMiw2ICsyMjYsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcXG4gXFx0XFx0aWYgKCFpc2RpZ2l0KCpzKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGhwb3J0ID0gaHBvcnQgKiAxMCArICpzIC0gJzAnO1xcbitcXHRcXHRpZiAoaHBvcnQgXFx1MDAzZSA2NTUzNSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcdGlmIChzID09IGRhdGFfbGltaXQgfHwgIWhwb3J0IHx8ICpzICE9IGVkZWxpbSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoxOS4xMTQwMzQ4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2ODkzMDA1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19GVFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIixcbiAgICBcIk5GX0NPTk5UUkFDS19GVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19mdHBfb3V0XCIsXG4gICAgXCJpcF92c19mdHBfaW5cIixcbiAgICBcImlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB0aGUgcGFyc2luZyBvZiBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGluIEZUUCBjb21tYW5kcyB3aXRoaW4gdGhlIElQVlMgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MgYW5kIGxvZ2ljIGJ1Z3Mgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgRlRQIFBPUlQvRVBSVCBjb21tYW5kcy4gRnV6emluZyB0aGUgSVBWUyBGVFAgaGVscGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHBhcnNpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGJhZGE0YjA3OWRkOTVkNWNmZjA5Y2VkMTIyNDgxZTZhNzJkNmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6Mjc6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbmluZGV4IGIzMTVjNjA4ZmRhNDMuLjllM2UwMDVhODI2MzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcbiBcdGNoYXIgKnMsIGM7XG4gXHR1bnNpZ25lZCBjaGFyIHBbNl07XG4gXHRjaGFyIGVkZWxpbTtcbi1cdF9fdTE2IGhwb3J0O1xuK1x0X191MzIgaHBvcnQ7XG4gXHRpbnQgaSA9IDA7XG4gXG4gXHRpZiAoZGF0YV9saW1pdCAtIGRhdGEgXHUwMDNjIHBsZW4pIHtcbkBAIC0xNDQsNyArMTQ0LDExIEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdGMgPSAqZGF0YTtcbiBcdFx0XHRpZiAoaXNkaWdpdChjKSkge1xuLVx0XHRcdFx0cFtpXSA9IHBbaV0qMTAgKyBjIC0gJzAnO1xuK1x0XHRcdFx0dW5zaWduZWQgaW50IHZhbCA9IHBbaV0gKiAxMCArIGMgLSAnMCc7XG4rXG4rXHRcdFx0XHRpZiAodmFsIFx1MDAzZSAyNTUpXG4rXHRcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdHBbaV0gPSB2YWw7XG4gXHRcdFx0fSBlbHNlIGlmIChjID09ICcsJyBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgNSkge1xuIFx0XHRcdFx0aSsrO1xuIFx0XHRcdFx0cFtpXSA9IDA7XG5AQCAtMjIyLDYgKzIyNiw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0XHRpZiAoIWlzZGlnaXQoKnMpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRocG9ydCA9IGhwb3J0ICogMTAgKyAqcyAtICcwJztcbitcdFx0aWYgKGhwb3J0IFx1MDAzZSA2NTUzNSlcbitcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRpZiAocyA9PSBkYXRhX2xpbWl0IHx8ICFocG9ydCB8fCAqcyAhPSBlZGVsaW0pXG4gXHRcdHJldHVybiAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjE5LjExNDAzNjQxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDY0MTkwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQVlMgRlRQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY2AuIEl0IHNlZW1zIGxpa2UgdGhleSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gaG93IElQVlMgaGFuZGxlcyBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYm91bmRzIGNoZWNraW5nIHRvIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBmb3IgYGhwb3J0YCBhbmQgdGhlIElQIGFkZHJlc3MgY29tcG9uZW50cyAoYHZhbGApLiBUaGlzIGlzIGEgc29saWQgYnVnIGZpeCDigJMgaW1wb3J0YW50IHRvIHNob3JlIHVwIGFueSBwYXJzaW5nIGlzc3VlcyBpbiB0aGUgRlRQIGFwcGxpY2F0aW9uIGhlbHBlci5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIHRoaW5ncywgYXMgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIElQIFZpcnR1YWwgU2VydmVyLiBGaXJzdCwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IElQVlMgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIHRoZSBjb250ZXh0IG9mIG91ciBzeXN0ZW0uIEl0J3MgcGFydCBvZiBuZXRmaWx0ZXIsIHNvIHRoYXQgc2VlbXMgbGlrZWx5LiBTZWNvbmQsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgSVBfVlNgIGlzIHRoZSBjb3JlIElQVlMgY29tcG9uZW50LCBvYnZpb3VzbHkuIFdlJ2xsIGFsc28gbmVlZCBgSVBfVlNfRlRQYCBmb3IgdGhpcyBzcGVjaWZpYyBGVFAgYXBwbGljYXRpb24gaGVscGVyIGZ1bmN0aW9uYWxpdHkuIFNvIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgYXJlIGVuYWJsZWQuXG5cblRpbWUgdG8gZGl2ZSBpbiBhbmQgZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBhbmQgYElQX1ZTX0ZUUGAuIEknbGwgd2FudCB0byBzZWUgd2hlcmUgZWxzZSB0aG9zZSBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJlYXMgb2YgY29uY2Vybi4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTAsIk91dHB1dFRva2VucyI6ODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoyMy45MjA0NTg2ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MDQ2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfZnRwX2dldF9hZGRycG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTg2PWlwX3ZzX2Z0cF9kb25lX2Nvbm4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtOTUtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjk2OnN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy05Ny1cXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBwbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjg1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzoyODY6XFx0XFx0aWYgKGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoZGF0YSwgZGF0YV9saW1pdCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjg3LVxcdFxcdFxcdFxcdFxcdCAgIFNFUlZFUl9TVFJJTkdfUEFTVixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0zMDYtXFx0XFx0ZnJvbSA9IGNwLVxcdTAwM2VkYWRkcjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6MzA3OlxcdFxcdGlmIChpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGRhdGEsIGRhdGFfbGltaXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTMwOC1cXHRcXHRcXHRcXHRcXHQgICBTRVJWRVJfU1RSSU5HX0VQU1YsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NDI0PXN0YXRpYyBpbnQgaXBfdnNfZnRwX2luKHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ5Ny1cXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NDk4OlxcdCAgICBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGRhdGFfc3RhcnQsIGRhdGFfbGltaXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQ5OS1cXHRcXHRcXHRcXHQgICBDTElFTlRfU1RSSU5HX1BPUlQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTExLVxcdFxcdFxcdCAgbnRvaHMoY3AtXFx1MDAzZXZwb3J0KS0xKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTEyOlxcdH0gZWxzZSBpZiAoaXBfdnNfZnRwX2dldF9hZGRycG9ydChkYXRhX3N0YXJ0LCBkYXRhX2xpbWl0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01MTMtXFx0XFx0XFx0XFx0XFx0ICBDTElFTlRfU1RSSU5HX0VQUlQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjIzLjk4NDA2NzMyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUzMTY1MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTX0ZUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6MjQuMDMxNjA3MTY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDk2MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBJUFZTIGFuZCBGVFAgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBGVFAgd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgZnJhbWV3b3JrLiBNeSBmaXJzdCBzdG9wLCBhcyBhbHdheXMsIGlzIGdvaW5nIHRvIGJlIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSVBWUyBzaG91bGQgYmUgZGVmaW5lZCwgaW5jbHVkaW5nLCBob3BlZnVsbHksIGFueXRoaW5nIHNwZWNpZmljIHRvIEZUUCBvciByZWxhdGVkIHRvIGl0cyBoYW5kbGluZy4gSXTigJlzIHRoZSBjYW5vbmljYWwgcGxhY2UgdG8gZmluZCBvdXQgd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgZGlyZWN0IHN1cHBvcnQgZm9yIEZUUCBwcm90b2NvbHMgb3IgcGVyaGFwcyBtb3JlIGdlbmVyYWwgb3B0aW9ucyB0aGF0IGFmZmVjdCBpdHMgYmVoYXZpb3IuIEkgaG9wZSBJIGNhbiBmaW5kIGl0IGRpcmVjdGx5IHdpdGhvdXQgc2VhcmNoaW5nIHRocm91Z2ggdG9vIG11Y2ggdG8gZmluZCB0aGUgc3BlY2lmaWMgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzoyNy4yMzY1NzM1OThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3NDgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlRQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMxOT1jb21tZW50ICdJUFZTIGFwcGxpY2F0aW9uIGhlbHBlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjAtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzIxOmNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMjpcXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjMtXFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzI0OlxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjUtXFx0c2VsZWN0IElQX1ZTX05GQ1RcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjYtXFx0aGVscFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyNzpcXHQgIEZUUCBpcyBhIHByb3RvY29sIHRoYXQgdHJhbnNmZXJzIElQIGFkZHJlc3MgYW5kL29yIHBvcnQgbnVtYmVyIGluXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI4LVxcdCAgdGhlIHBheWxvYWQuIEluIHRoZSB2aXJ0dWFsIHNlcnZlciB2aWEgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyOS1cXHQgIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciBvZiByZWFsIHNlcnZlcnMgY2Fubm90IGJlIHNlbnQgdG9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzA6XFx0ICBjbGllbnRzIGluIGZ0cCBjb25uZWN0aW9ucyBkaXJlY3RseSwgc28gRlRQIHByb3RvY29sIGhlbHBlciBpc1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMzMS1cXHQgIHJlcXVpcmVkIGZvciB0cmFja2luZyB0aGUgY29ubmVjdGlvbiBhbmQgbWFuZ2xpbmcgaXQgYmFjayB0byB0aGF0IG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjI3LjI5NTMyODExN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzkwODAxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGVFAgTG9hZCBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJJ20gbG9va2luZyBhdCBpcyBgSVBfVlNfRlRQYC4gUmlnaHQsIGFuZCBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzLCB0aGlzIHJlbGllcyBvbiBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLiBUaGF0IG1ha2VzIHNlbnNlOyBUQ1AgaXMgdGhlIHRyYW5zcG9ydCBwcm90b2NvbCwgY29ubmVjdGlvbiB0cmFja2luZyBpcyBlc3NlbnRpYWwgZm9yIHN0YXRlZnVsIGxvYWQgYmFsYW5jaW5nLCBOQVQgaXMgcHJvYmFibHkgaG93IHdlJ3JlIHJld3JpdGluZyBhZGRyZXNzZXMsIGFuZCBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIGZvciBGVFAncyBjb250cm9sIGFuZCBkYXRhIGNoYW5uZWwgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaWcgaW50byB0aGUgc3BlY2lmaWNzIG9mICp0aGlzKiBzZXR0aW5nLCBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29yZSBgSVBfVlNgIGxvYWQgYmFsYW5jaW5nIGZ1bmN0aW9uYWxpdHkgaXRzZWxmIGlzIGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYElQX1ZTYCBpdHNlbGYuIEkgbmVlZCB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgRlRQLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzozMS4xMzQ0MTA3NDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1ODk1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjMxLjE4NzAwNDgzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQzODc2NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRlRQIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRlRQIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS4gSXQncyBjbGVhciB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCBib3RoIGBJUF9WU2AgYW5kIGBJUF9WU19GVFBgIGVuYWJsZWQuIE5vdywgdGhlIGZ1bmN0aW9uIGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0IG1lYW5zIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgc291cmNlIGZpbGUuIEl0J3MgdXNlZCBieSBib3RoIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAsIHdoaWNoIGFyZSBib3RoIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBGVFAgdHJhZmZpYy4gU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjayBpcyB3aGV0aGVyIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAgYXJlIGFsc28gc3RhdGljLCBnaXZlbiBob3cgdGhleSB1c2UgdGhlIHN0YXRpYyBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgZnVuY3Rpb24sIGFuZCBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVpciB1c2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTcsIk91dHB1dFRva2VucyI6ODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzozNS41MzA4ODUyMDRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzM1NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2Z0cF9vdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz05Nj1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjI1NDpzdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTI1NS1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpkaWZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTU2ND1zdGF0aWMgc3RydWN0IGlwX3ZzX2FwcCBpcF92c19mdHAgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTczLVxcdC51bmJpbmRfY29ubiA9XFx0TlVMTCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc0OlxcdC5wa3Rfb3V0ID1cXHRpcF92c19mdHBfb3V0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzUtXFx0LnBrdF9pbiA9XFx0aXBfdnNfZnRwX2luLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzozNS41Nzg2MjYwMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2Z0cF9pblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTc2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6Nzc6aXBfdnNfZnRwX2luaXRfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTI1ND1zdGF0aWMgaW50IGlwX3ZzX2Z0cF9vdXQoc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDIzLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo0MjQ6c3RhdGljIGludCBpcF92c19mdHBfaW4oc3RydWN0IGlwX3ZzX2FwcCAqYXBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTQyNS1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKmRpZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NTY0PXN0YXRpYyBzdHJ1Y3QgaXBfdnNfYXBwIGlwX3ZzX2Z0cCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NjktXFx0LmluY3NfbGlzdCA9XFx0TElTVF9IRUFEX0lOSVQoaXBfdnNfZnRwLmluY3NfbGlzdCksXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3MDpcXHQuaW5pdF9jb25uID1cXHRpcF92c19mdHBfaW5pdF9jb25uLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzEtXFx0LmRvbmVfY29ubiA9XFx0aXBfdnNfZnRwX2RvbmVfY29ubixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzQtXFx0LnBrdF9vdXQgPVxcdGlwX3ZzX2Z0cF9vdXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjU3NTpcXHQucGt0X2luID1cXHRpcF92c19mdHBfaW4sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3Ni19O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU4MC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTgxOnN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2Z0cF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTgyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02MjA9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF92c19mdHBfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzo2MjE6XFx0LmluaXQgPSBfX2lwX3ZzX2Z0cF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MjItXFx0LmV4aXQgPSBfX2lwX3ZzX2Z0cF9leGl0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYyNC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjI1OnN0YXRpYyBpbnQgX19pbml0IGlwX3ZzX2Z0cF9pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYyNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9NjM0PXN0YXRpYyB2b2lkIF9fZXhpdCBpcF92c19mdHBfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTY0MS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjQyOm1vZHVsZV9pbml0KGlwX3ZzX2Z0cF9pbml0KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNjQzLW1vZHVsZV9leGl0KGlwX3ZzX2Z0cF9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6MzUuNjIzMDc5OTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjczMjI5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBGVFAgQXBwbGljYXRpb24gSGVscGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBGVFAgYXBwbGljYXRpb24gaGVscGVyLCBhbmQgdGhlIGNvcmUgb2YgaXQsIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgc2VlbXMgdG8gYmUgaGFuZGxlZCBieSB0aGVzZSBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgYGlwX3ZzX2Z0cGAgc3RydWN0LCBhbiBgaXBfdnNfYXBwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgdGhlc2UgYXJlIGRlZmluZWQgYXMgYHN0YXRpY2AsIHRoZXkncmUgbm90IGdvaW5nIHRvIGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMuIFRoYXQgcHJlc2VudHMgYSBjaGFsbGVuZ2UgZm9yIGZ1enppbmcsIHJpZ2h0PyBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiByZXNvbHZlIHRoZW0gaWYgdGhlIGZ1enplciBrbm93cyB0aGVpciBuYW1lcyBhbmQgdGhleSBhcmVuJ3QgaW5saW5lZCwgYnV0IGlmIHRoZXkncmUgbm90IHZpc2libGUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdGhhdCBtYWtlcyB0aGluZ3MgdHJpY2t5LlxuXG5UaGVuIEkgcmVhbGl6ZWQgc29tZXRoaW5nOiBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFyZSBwcmV0dHkgc2l6YWJsZSBmdW5jdGlvbnMuIEl0J3MgaGlnaGx5IHVubGlrZWx5IHRoZXkndmUgYmVlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gR2l2ZW4gdGhlaXIgc2l6ZSwgSSBjYW4gcHJvYmFibHkgc2FmZWx5IGFzc3VtZSB0aGV5J3JlIHByZXNlbnQgaW4gdGhlIG9iamVjdCBjb2RlLiBUaGlzIGxlYWRzIG1lIHRvIG15IG5leHQgc3RlcCAtIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgYXNzdW1wdGlvbnMgYXJlIHRydWUuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdGhyb3VnaCBgaXBfdnNfZnRwLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBpZGVhIG9mIGhvdyByZWFkaWx5IGFjY2Vzc2libGUgdGhlc2UgZnVuY3Rpb25zIGFyZSB0byBmdXp6aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ3LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzo0MS4wOTA0MDYwMTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjIwNjQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjQxLjE0OTYzNzY3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDc5NjU1NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGlwX3ZzX2Z0cC5jYCBmb3IgRnVuY3Rpb24gRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGlwX3ZzX2Z0cC5jYCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aGluLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgY29kaW5nIHN0eWxlIGFuZCB0aGUgbGlrZWx5IGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyBhIHRhcmdldGVkIGdyZXAuIEknbSBnb2luZyB0byBsZXZlcmFnZSBncmVwIHRvIGZpbmQgbGluZXMgdGhhdCBsaWtlbHkgcmVwcmVzZW50IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBiYXNlZCBvbiBjb21tb24gcmV0dXJuIHR5cGVzLiBJJ2xsIGZvY3VzIG9uIHBhdHRlcm5zIHN1Y2ggYXMgYF5pbnQgYCAoaW50ZWdlciByZXR1cm4pLCBgXnZvaWQgYCAodm9pZCByZXR1cm4pLCBhbmQgYF5zdGF0aWMgaW50IGAgKHN0YXRpYyBpbnRlZ2VyIHJldHVybikuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIHByb2JhYmxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8gZXhhbWluZSBmdXJ0aGVyLiBJJ20gY2hvb3NpbmcgdGhpcyBhcHByb2FjaCBiZWNhdXNlLCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBzdHJ1Y3R1cmUgYW5kIG15IGV4cGVydCBleHBlcmllbmNlLCBhIGZ1bGwgcGFyc2Ugd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZCB0b29sIGlzIHVubmVjZXNzYXJ5IGZvciB0aGlzIGluaXRpYWwgc2NvcGluZy4gVGhpcyB3aWxsIGxpa2VseSBwcm92aWRlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwMiwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjQ1LjIyOTI5NjUyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDA4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWNcXFxccyspP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXFxccytcXFxcKj9bYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz02Mz1NT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCBcXFwiUG9ydHMgdG8gbW9uaXRvciBmb3IgRlRQIGNvbnRyb2wgY29tbWFuZHNcXFwiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjY6c3RhdGljIGNoYXIgKmlwX3ZzX2Z0cF9kYXRhX3B0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM9ODY9aXBfdnNfZnRwX2RvbmVfY29ubihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy05NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6OTY6c3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTk3LVxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IHBsZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtMjUzLSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYzoyNTQ6c3RhdGljIGludCBpcF92c19mdHBfb3V0KHN0cnVjdCBpcF92c19hcHAgKmFwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy0yNTUtXFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy00MjMtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jOjQyNDpzdGF0aWMgaW50IGlwX3ZzX2Z0cF9pbihzdHJ1Y3QgaXBfdnNfYXBwICphcHAsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNDI1LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIGludCAqZGlmZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01ODE9c3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfZnRwX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTYwOS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NjEwOnN0YXRpYyB2b2lkIF9faXBfdnNfZnRwX2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy02MTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzo0NS4yNzc1MDMxNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNDUxOTUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVBWUyBGVFAgRnVuY3Rpb25zIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgSVBWUyBGVFAgZnVuY3Rpb25zOiBgaXBfdnNfZnRwX291dGAsIGBpcF92c19mdHBfaW5gLCBhbmQgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkncmUgc3RhdGljIGJ1dCBub3QgaW5saW5lZC4gVGhleSdyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYGlwX3ZzX2Z0cGAgc3RydWN0LCB3aGljaCBtYWtlcyB0aGVtIGludGVyZXN0aW5nIHRhcmdldHMuXG5cbkJ1dCB0aGVuLCBob2xkIG9uLiBTeXprYWxsZXIgKmNhbiogaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMsIHByb3ZpZGVkIHRoZXkncmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSG93ZXZlciwgaXTigJlzIHN0aWxsIHByZWZlcmFibGUgdG8gZ2l2ZSBpdCB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgaWYgdGhleSBleGlzdC4gVGhhdCB3aWxsIG1ha2UgbXkgbGlmZSBlYXNpZXIuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWN0dWFsbHkgKmNhbGxzKiBgcGt0X291dGAgYW5kIGBwa3RfaW5gPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlLiBMZXQncyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHBrdF9vdXRgIGFuZCBgcGt0X2luYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9gLiAgVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgaWYgSSBjYW4gbGV2ZXJhZ2UgdGhlbSBmb3IgbW9yZSBlZmZpY2llbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1NCwiT3V0cHV0VG9rZW5zIjo2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyNzo1MC4yMTIwMjQ5NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTM2NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrdF9vdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9MzQ1PXN0YXRpYyBpbmxpbmUgdm9pZCB2c19zZXFfdXBkYXRlKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX3NlcSAqdnNlcSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zNTgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjM1OTpzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9vdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zNjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfYXBwICphcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzg3LVxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzozODg6XFx0aWYgKGFwcC1cXHUwMDNlcGt0X291dCA9PSBOVUxMKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy0zODktXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTM5MC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6MzkxOlxcdGlmICghYXBwLVxcdTAwM2Vwa3Rfb3V0KGFwcCwgY3AsIHNrYiwgXFx1MDAyNmRpZmYsIGlwdnNoKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtMzkyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQwOC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDA5OmludCBpcF92c19hcHBfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQxMC1cXHRcXHQgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyMi1cXHRpZiAoY3AtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0MjM6XFx0XFx0cmV0dXJuIGFwcF90Y3BfcGt0X291dChjcCwgc2tiLCBhcHAsIGlwdnNoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDI0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQyNy1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDI4OlxcdGlmIChhcHAtXFx1MDAzZXBrdF9vdXQgPT0gTlVMTClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDI5LVxcdFxcdHJldHVybiAxO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQzMTpcXHRyZXR1cm4gYXBwLVxcdTAwM2Vwa3Rfb3V0KGFwcCwgY3AsIHNrYiwgTlVMTCwgaXB2c2gpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzItfVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jPTU2ND1zdGF0aWMgc3RydWN0IGlwX3ZzX2FwcCBpcF92c19mdHAgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTczLVxcdC51bmJpbmRfY29ubiA9XFx0TlVMTCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc0OlxcdC5wa3Rfb3V0ID1cXHRpcF92c19mdHBfb3V0LFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYy01NzUtXFx0LnBrdF9pbiA9XFx0aXBfdnNfZnRwX2luLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYz05Mj1zY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xMTUtXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxMTY6XFx0XFx0cmV0ID0gaXBfdnNfYXBwX3BrdF9vdXQoY3AsIHNrYiwgaXBoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jLTExNy1cXHRcXHRpZiAocmV0ID09IDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM9MTQ3PXRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYy0xNzItXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jOjE3MzpcXHRcXHRpZiAoIShyZXQgPSBpcF92c19hcHBfcGt0X291dChjcCwgc2tiLCBpcGgpKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMtMTc0LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jPTEzNj11ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMtMTYzLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYzoxNjQ6XFx0XFx0aWYgKCEocmV0ID0gaXBfdnNfYXBwX3BrdF9vdXQoY3AsIHNrYiwgaXBoKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTE2NS1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6NTAuMjYwMTY2MzEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk5ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa3RfaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM9NDA5PWludCBpcF92c19hcHBfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDM0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYzo0MzU6c3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3RfaW4oc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00MzYtXFx0XFx0XFx0XFx0IHN0cnVjdCBpcF92c19hcHAgKmFwcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjMtXFx0ICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ2NDpcXHRpZiAoYXBwLVxcdTAwM2Vwa3RfaW4gPT0gTlVMTClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDY1LVxcdFxcdHJldHVybiAxO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00NjYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jOjQ2NzpcXHRpZiAoIWFwcC1cXHUwMDNlcGt0X2luKGFwcCwgY3AsIHNrYiwgXFx1MDAyNmRpZmYsIGlwdnNoKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDY4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTQ4NC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDg1OmludCBpcF92c19hcHBfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNDg2LVxcdFxcdCAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy00OTgtXFx0aWYgKGNwLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NDk5OlxcdFxcdHJldHVybiBhcHBfdGNwX3BrdF9pbihjcCwgc2tiLCBhcHAsIGlwdnNoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNTAwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwMy1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NTA0OlxcdGlmIChhcHAtXFx1MDAzZXBrdF9pbiA9PSBOVUxMKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYy01MDUtXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jLTUwNi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmM6NTA3OlxcdHJldHVybiBhcHAtXFx1MDAzZXBrdF9pbihhcHAsIGNwLCBza2IsIE5VTEwsIGlwdnNoKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMtNTA4LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYz01NjQ9c3RhdGljIHN0cnVjdCBpcF92c19hcHAgaXBfdnNfZnRwID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jLTU3NC1cXHQucGt0X291dCA9XFx0aXBfdnNfZnRwX291dCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmM6NTc1OlxcdC5wa3RfaW4gPVxcdGlwX3ZzX2Z0cF9pbixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMtNTc2LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jPTE0MD1zY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYy0xNjMtXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYzoxNjQ6XFx0XFx0cmV0ID0gaXBfdnNfYXBwX3BrdF9pbihjcCwgc2tiLCBpcGgpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMtMTY1LVxcdFxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYz0yMjU9dGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1My1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmM6MjU0OlxcdFxcdGlmICghKHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jLTI1NS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYz0yMTk9dWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0Ny1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmM6MjQ4OlxcdFxcdGlmICghKHJldCA9IGlwX3ZzX2FwcF9wa3RfaW4oY3AsIHNrYiwgaXBoKSkpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jLTI0OS1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6NTAuMzAzMTY5NjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzI3OTU0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVBWUyBGVFAgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoZSBJUFZTIEZUUCBmdW5jdGlvbmFsaXR5LiBJdCBzZWVtcyBgaXBfdnNfYXBwX3BrdF9vdXRgIGFuZCBgaXBfdnNfYXBwX3BrdF9pbmAgYXJlIHRoZSBpbml0aWFsIG5vbi1zdGF0aWMgcG9pbnRzIG9mIGVudHJ5LCBidXQgdGhvc2UgYXJlIGdlbmVyaWMgYWNyb3NzIGFsbCBJUFZTIGFwcGxpY2F0aW9ucy4gTXkga2V5IHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gYGlwX3ZzX2Z0cC5jYD8gTm8sIEkgYWxyZWFkeSBjb25maXJtZWQgdGhhdC5cblxuVGhlcmVmb3JlLCB0aGUgbW9zdCBkaXJlY3QgdGFyZ2V0cywgdGhlICpmb2N1cyogc3ltYm9scywgc2VlbSB0byBiZSBgaXBfdnNfZnRwX291dGAgYW5kIGBpcF92c19mdHBfaW5gLiBJIGhhZCB0byBjb25maXJtIHRoZXkgd2VyZSBzdGF0aWMsIGJ1dCB0aGF0IGFjdHVhbGx5IHdvcmtzIGluIG91ciBmYXZvdXIsIGJlY2F1c2UgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgcG9wdWxhdGUgdGhlIGBpcF92c19mdHBgIHN0cnVjdCwgdGhleSAqbXVzdCogYmUgYWRkcmVzc2FibGUuIFRoaXMgbWVhbnMgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgdXNlIHRoZW0gZGlyZWN0bHksIHdoaWNoIGlzIGdyZWF0LiBJIGNhbiB1c2UgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLiBJIGNvdWxkIGFsc28gYWRkIGBpcF92c19hcHBfcGt0X291dGAgYW5kIGBpcF92c19hcHBfcGt0X2luYCwgYnV0IHRoZXkncmUgZGVmaW5lZCBpbiBgaXBfdnNfYXBwLmNgLCBzbyBJJ2xsIGtlZXAgdGhhdCBzZXBhcmF0ZS5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIHJldmlldyBkZXBlbmRlbmNpZXMgZm9yIGBJUF9WU19GVFBgLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gYElQX1ZTX1BST1RPX1RDUGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfTkFUYCwgYW5kIGBORl9DT05OVFJBQ0tfRlRQYC4gSSdsbCBjb25maXJtIHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjc6NTYuMDc1OTY4MTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzcyNzUzMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19QUk9UT19UQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI3OjU2LjM1MzI1NjI1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc4MzI4NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgSVBfVlNfUFJPVE9fVENQYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgYW5kIFRDUCBwcm90b2NvbCBoYW5kbGluZy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoaXMgY291bGQgYmUgYSBtYWNybyBkZWZpbml0aW9uIGluIGEga2VybmVsIGNvbmZpZyBmaWxlLCBvciBwZXJoYXBzIGEgc2V0dGluZyBpbiBhIHVzZXItc3BhY2UgdXRpbGl0eSByZWxhdGVkIHRvIGxvYWQgYmFsYW5jaW5nIG9yIG5ldHdvcmsgbWFuYWdlbWVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgYSBmb2N1c2VkIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgc3BlY2lmaWMgc3RyaW5nIGlzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIG15IGtub3duIGVudmlyb25tZW50IG9yIHRoZSByZWxldmFudCBjb2RlYmFzZSBJJ20gd29ya2luZyB3aXRoLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBpdHMgZXhhY3QgcHVycG9zZSBhbmQgdGhlIGNvbnRleHQgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhlYWRlciBmaWxlcywgYnVpbGQgc2NyaXB0cywgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIElQVlMgbW9kdWxlIG9yIGFueSBzb2Z0d2FyZSBsZXZlcmFnaW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI4OjAxLjAzMTU4NzU3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MjgxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXFx0SVBfVlNfRlRQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgaGVscGVyXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXFx0XFx0TkZfQ09OTlRSQUNLX0ZUUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODowMS4wOTEzMjE0NThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3OTgwMTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGVFAgQ29ubmVjdGlvbiBUcmFja2luZyBGaXgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYElQX1ZTX1BST1RPX1RDUGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZXMgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgIGFyZSBhbHNvIG5lY2Vzc2FyeS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYElQX1ZTYCBpcyBlbmFibGVkLCB5ZXAsIHRoYXQncyB0aGUgbWFpbiBtZW51Y29uZmlnIGZvciBJUCBWaXJ0dWFsIFNlcnZlci4gU28sIG15IGVuYWJsZSBsaXN0IGxvb2tzIGxpa2UgdGhpczogYElQX1ZTYCwgYElQX1ZTX0ZUUGAsIGBJUF9WU19QUk9UT19UQ1BgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX05BVGAsIGBORl9DT05OVFJBQ0tfRlRQYC5cblxuTm93LCBhYm91dCB0aGUgY29kZSBpdHNlbGYuLi4gbGV0IG1lIHNlZSBpZiBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAgY2FuIGJlIGlubGluZWQuIEl0J3MgbWFya2VkIHN0YXRpYyBhbmQgYXBwZWFycyB0byBvbmx5IGJlIGNhbGxlZCBmcm9tIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAuIEl0J3MgbGlrZWx5IGlubGluZWQsIHNvIGZvY3VzaW5nIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGBpcF92c19mdHBfb3V0YCBhbmQgYGlwX3ZzX2Z0cF9pbmAsIGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5SaWdodCwgbGV0IG1lIHJldmlzaXQgdGhlIHBhdGNoLiBJdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiB0aGUgRlRQIHBhcnNpbmcgY29kZS4gVGhlIGNvZGUgYHBbaV0gPSBwW2ldKjEwICsgYyAtICcwJ2AgY291bGQgb3ZlcmZsb3cgaWYgcHJvY2Vzc2luZyBhIG51bWJlciBcdTAwM2UgMjU1IGFuZCBgaHBvcnQgPSBocG9ydCAqIDEwICsgKnMgLSAnMCdgIGNvdWxkIG92ZXJmbG93IGlmIHByb2Nlc3NpbmcgYSBudW1iZXIgXHUwMDNlIDY1NTM1LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCBmaXhpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIG9yIGxvZ2ljIGJ1ZyB3aGVuIHByb2Nlc3NpbmcgRlRQIGNvbW1hbmRzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgcmlnb3JvdXMgZnV6emluZy5cblxuTGV0J3MgcmV2aWV3IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmU6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gY29uc2lkZXI/IGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfTkFUYCBhcmUgcHJldHR5IHN0YW5kYXJkLiBgTkZfQ09OTlRSQUNLX0ZUUGAgaXMgYWxzbyBhIHdlbGwta25vd24gbW9kdWxlLiBgSVBfVlNgIGFuZCBgSVBfVlNfRlRQYCBhcmUgdGhlIHNwZWNpZmljIG9uZXMgdG8ga2VlcCBhbiBleWUgb24uIExldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoZSBgTkZfQ09OTlRSQUNLX0ZUUGAgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODowOC4xNzExMjYzODlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODU2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMTI9Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODowOC4yMzA5ODk0MzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NDYyMDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUFZTIEZUUCBIZWxwZXIgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBjb25maXJtaW5nIHRoYXQgYE5GX0NPTk5UUkFDS19GVFBgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSB0byBiZSBhd2FyZSBvZiBoZXJlLiBOb3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgRlRQIGhlbHBlciB3aXRoaW4gSVBWUy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGlwX3ZzX2Z0cF9vdXRgIGFuZCBgaXBfdnNfZnRwX2luYCBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgYXMgdGhleSdyZSB0aGUgbWFpbiBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCB0aGUgaGVscGVyIHdpdGhpbiBJUFZTLiBUaGV5J3JlIHN0YXRpYywgYW5kIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgYWNjZXNzZWQsIHNvIHRoZXkncmUgZGVmaW5pdGVseSBub3QgaW5saW5lZC5cblxuSG93ZXZlciwgYWZ0ZXIgYSBzZWNvbmQgbG9vaywgSSByZWFsaXplZCB0aGF0IGBpcF92c19mdHBfZ2V0X2FkZHJwb3J0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBzYXcgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSSBzaG91bGQgaW5jbHVkZSB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwgdG8gbWFrZSBzdXJlIEknbSBjb3ZlcmluZyBhbGwgYmFzZXMuXG5cblNvLCBsZXQncyBmaW5hbGl6ZSB0aGUgcmVzdWx0cy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIG9mIGNvdXJzZS4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYGlwX3ZzX2Z0cF9vdXRgLCBgaXBfdnNfZnRwX2luYCwgYW5kIGltcG9ydGFudGx5LCBgaXBfdnNfZnRwX2dldF9hZGRycG9ydGAuIFRoZSBmb2xsb3dpbmcgYEVuYWJsZUNvbmZpZ3NgIGFyZSBuZWNlc3Nhcnk6IGBJUF9WU2AsIGBJUF9WU19GVFBgLCBgSVBfVlNfUFJPVE9fVENQYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9OQVRgLCBhbmQgYE5GX0NPTk5UUkFDS19GVFBgLiBNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggZGVhbHMgd2l0aCBib3VuZCBjaGVja3MgZHVyaW5nIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgd2l0aGluIEZUUCBjb21tYW5kcywgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHBvdGVudGlhbCBsb2dpYyBmbGF3cyByZWxhdGVkIHRvIG1hbGZvcm1lZCBQT1JUL0VQUlQgY29tbWFuZHMgd2l0aGluIElQVlMuIEZ1enppbmcgdGhpcyBoZWxwZXIgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCB0aGUgcGFyc2luZyBsb2dpYyBpcyBjb21wbGV0ZWx5IHJvYnVzdCBhbmQgY2FuIGhhbmRsZSBhbGwgZm9ybXMgb2YgaW5wdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTAyLCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoxNS45MjU2MTMzNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQyNDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0ZUUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Z0cF9vdXRcIixcbiAgICBcImlwX3ZzX2Z0cF9pblwiLFxuICAgIFwiaXBfdnNfZnRwX2dldF9hZGRycG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0ZUUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX05BVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLX0ZUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Z0cF9vdXRcIixcbiAgICBcImlwX3ZzX2Z0cF9pblwiLFxuICAgIFwiaXBfdnNfZnRwX2dldF9hZGRycG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHRoZSBwYXJzaW5nIG9mIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgaW4gRlRQIGNvbW1hbmRzIHdpdGhpbiB0aGUgSVBWUyBGVFAgYXBwbGljYXRpb24gaGVscGVyLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgbG9naWMgYnVncyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBGVFAgUE9SVC9FUFJUIGNvbW1hbmRzLiBGdXp6aW5nIHRoZSBJUFZTIEZUUCBoZWxwZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgcGFyc2luZyBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjI4OjE2LjAwNzA0NDAwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODY4NDg5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoxNi4wMDc2NzAxMTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg2ODYyMTczMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cXG5cXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0YmFkYTRiMDc5ZGQ5NWQ1Y2ZmMDljZWQxMjI0ODFlNmE3MmQ2ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDoyNzoxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuaW5kZXggYjMxNWM2MDhmZGE0My4uOWUzZTAwNWE4MjYzNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jXG5AQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfZnRwX2dldF9hZGRycG9ydChjaGFyICpkYXRhLCBjaGFyICpkYXRhX2xpbWl0LFxuIFx0Y2hhciAqcywgYztcbiBcdHVuc2lnbmVkIGNoYXIgcFs2XTtcbiBcdGNoYXIgZWRlbGltO1xuLVx0X191MTYgaHBvcnQ7XG4rXHRfX3UzMiBocG9ydDtcbiBcdGludCBpID0gMDtcbiBcbiBcdGlmIChkYXRhX2xpbWl0IC0gZGF0YSBcdTAwM2MgcGxlbikge1xuQEAgLTE0NCw3ICsxNDQsMTEgQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG4gXHRcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdFx0YyA9ICpkYXRhO1xuIFx0XHRcdGlmIChpc2RpZ2l0KGMpKSB7XG4tXHRcdFx0XHRwW2ldID0gcFtpXSoxMCArIGMgLSAnMCc7XG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdmFsID0gcFtpXSAqIDEwICsgYyAtICcwJztcbitcbitcdFx0XHRcdGlmICh2YWwgXHUwMDNlIDI1NSlcbitcdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0cFtpXSA9IHZhbDtcbiBcdFx0XHR9IGVsc2UgaWYgKGMgPT0gJywnIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyA1KSB7XG4gXHRcdFx0XHRpKys7XG4gXHRcdFx0XHRwW2ldID0gMDtcbkBAIC0yMjIsNiArMjI2LDggQEAgc3RhdGljIGludCBpcF92c19mdHBfZ2V0X2FkZHJwb3J0KGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfbGltaXQsXG4gXHRcdGlmICghaXNkaWdpdCgqcykpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGhwb3J0ID0gaHBvcnQgKiAxMCArICpzIC0gJzAnO1xuK1x0XHRpZiAoaHBvcnQgXHUwMDNlIDY1NTM1KVxuK1x0XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcdGlmIChzID09IGRhdGFfbGltaXQgfHwgIWhwb3J0IHx8ICpzICE9IGVkZWxpbSlcbiBcdFx0cmV0dXJuIC0xO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6Mjg6MTYuMDA3NjcwODY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMjkzODc0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBJUFZTIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnRgIGluIHRoZSBJUFZTIGNvZGUuIEl0J3MgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSBmcm9tIGBfX3UxNmAgdG8gYF9fdTMyYCBmb3IgYGhwb3J0YC4gVGhhdCBzY3JlYW1zIGludGVnZXIgb3ZlcmZsb3cgZml4LCBhbmQgdGhlIGFkZGVkIGNoZWNrcyBmdXJ0aGVyIHN1cHBvcnQgdGhhdCBzdXNwaWNpb24uIFdlJ3JlIG5vdyB2YWxpZGF0aW5nIHRoZSBwYXJzZWQgdmFsdWVzLiBXZSBoYXZlIGBpZiAodmFsIFx1MDAzZSAyNTUpYCBmb3IgdGhlIElQIGFkZHJlc3MgY29tcG9uZW50cyBkdXJpbmcgY29tbWEtc2VwYXJhdGVkIG51bWJlciBwYXJzaW5nLCBhbmQgYGlmIChocG9ydCBcdTAwM2UgNjU1MzUpYCBmb3IgdGhlIHBvcnQgbnVtYmVyIHBhcnNpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gbWFsaWNpb3VzIEZUUCBQT1JUL0VQUlQgY29tbWFuZHMsIHBhcnRpY3VsYXJseSB0aGUgcGFydCB3aGVyZSBpdCdzIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQuIFRoZSBgcFtpXSA9IHBbaV0qMTAgKyBjIC0gJzAnYCBhbmQgYGhwb3J0ID0gaHBvcnQgKiAxMCArICpzIC0gJzAnYCBjYWxjdWxhdGlvbnMgbG9vayB2dWxuZXJhYmxlIHRvIGFuIG92ZXJmbG93LiBJZiB0aGUgaW5wdXQgZGF0YSBpcyBjcmFmdGVkIGNhcmVmdWxseSwgdGhlc2UgY291bGQgd3JhcCBhcm91bmQsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgSVAgb3IgcG9ydCB2YWx1ZXMgYmVpbmcgdXNlZC4gVGhpcyBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgaXMgYW4gb2xkIG9uZSBidXQgY2FuIHN0aWxsIGJlIGZvdW5kIGluIGxlZ2FjeSBjb2RlIHRoYXQgZG9lcyBub3QgY29ycmVjdGx5IHZhbGlkYXRlLlxuXG5Ob3csIG15IG5leHQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gVGhlIHBhdGNoIGlzIGFkZGluZyB0aGVzZSBib3VuZHMgY2hlY2tzLCByZXR1cm5pbmcgLTEgaWYgdGhlIHZhbHVlcyBhcmUgb3V0IG9mIHJhbmdlLiBUaGF0J3MgZ29vZCwgaXQgcHJldmVudHMgaW5jb3JyZWN0IHBhcnNpbmcuIEJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGVyZSBpc24ndCBzb21lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNoYW5nZXMuXG5cbkknbSB0aGlua2luZywgbm8sIGl0IHNob3VsZG4ndC4gV2UncmUgcGFyc2luZyBkYXRhIGRpcmVjdGx5IGZyb20gYSBwYWNrZXQgYnVmZmVyIChgY2hhciAqZGF0YWApLiBUaGlzIGRhdGEgaXMgYWxyZWFkeSBpbml0aWFsaXplZCDigJMgaXQncyB0aGUgcGF5bG9hZCBvZiB0aGUgcGFja2V0LiBUaGUgdmFyaWFibGVzLCBgcGAgKGZvciB0aGUgSVAgYWRkcmVzcyBwYXJ0cykgYW5kIGBocG9ydGAsIGFyZSBiZWluZyAqcG9wdWxhdGVkKiBmcm9tIHRoYXQgZGF0YS4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGVyZSB0aG9zZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLiBJIHJlbWVtYmVyIHRoYXQgdGhlIGBwYCBpcyBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjb2RlLCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGNvZGUgYW5kIHJlYWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoyMy4wMzcwNjIxODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdFxcdFxcdCAgX191MTYgYWYsIGNoYXIgKipzdGFydCwgY2hhciAqKmVuZClcXG4gMTAxOlxcdHtcXG4gMTAyOlxcdFxcdGNoYXIgKnMsIGM7XFxuIDEwMzpcXHRcXHR1bnNpZ25lZCBjaGFyIHBbNl07XFxuIDEwNDpcXHRcXHRjaGFyIGVkZWxpbTtcXG4gMTA1OlxcdFxcdF9fdTMyIGhwb3J0O1xcbiAxMDY6XFx0XFx0aW50IGkgPSAwO1xcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRpZiAoZGF0YV9saW1pdCAtIGRhdGEgXFx1MDAzYyBwbGVuKSB7XFxuIDEwOTpcXHRcXHRcXHQvKiBjaGVjayBpZiB0aGVyZSBpcyBwYXJ0aWFsIG1hdGNoICovXFxuIDExMDpcXHRcXHRcXHRpZiAoc3RybmNhc2VjbXAoZGF0YSwgcGF0dGVybiwgZGF0YV9saW1pdCAtIGRhdGEpID09IDApXFxuIDExMTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDExMjpcXHRcXHRcXHRlbHNlXFxuIDExMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTE0OlxcdFxcdH1cXG4gMTE1OlxcdFxcbiAxMTY6XFx0XFx0aWYgKHN0cm5jYXNlY21wKGRhdGEsIHBhdHRlcm4sIHBsZW4pICE9IDApIHtcXG4gMTE3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxMTg6XFx0XFx0fVxcbiAxMTk6XFx0XFx0cyA9IGRhdGEgKyBwbGVuO1xcbiAxMjA6XFx0XFx0aWYgKHNraXApIHtcXG4gMTIxOlxcdFxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0XFx0Zm9yICg7OyBzKyspIHtcXG4gMTI0OlxcdFxcdFxcdFxcdGlmIChzID09IGRhdGFfbGltaXQpXFxuIDEyNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDEyNjpcXHRcXHRcXHRcXHRpZiAoIWZvdW5kKSB7XFxuIDEyNzpcXHRcXHRcXHRcXHRcXHQvKiBcXFwiKFxcXCIgaXMgb3B0aW9uYWwgZm9yIG5vbi1leHRlbmRlZCBmb3JtYXQsXFxuIDEyODpcXHRcXHRcXHRcXHRcXHQgKiBzbyBjYXRjaCB0aGUgc3RhcnQgb2YgSVB2NCBhZGRyZXNzXFxuIDEyOTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gMTMwOlxcdFxcdFxcdFxcdFxcdGlmICghZXh0IFxcdTAwMjZcXHUwMDI2IGlzZGlnaXQoKnMpKVxcbiAxMzE6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEzMjpcXHRcXHRcXHRcXHRcXHRpZiAoKnMgPT0gc2tpcClcXG4gMTMzOlxcdFxcdFxcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4gMTM0OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoKnMgIT0gc2tpcCkge1xcbiAxMzU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEzNjpcXHRcXHRcXHRcXHR9XFxuIDEzNzpcXHRcXHRcXHR9XFxuIDEzODpcXHRcXHR9XFxuIDEzOTpcXHRcXHQvKiBPbGQgSVB2NC1vbmx5IGZvcm1hdD8gKi9cXG4gMTQwOlxcdFxcdGlmICghZXh0KSB7XFxuIDE0MTpcXHRcXHRcXHRwWzBdID0gMDtcXG4gMTQyOlxcdFxcdFxcdGZvciAoZGF0YSA9IHM7IDsgZGF0YSsrKSB7XFxuIDE0MzpcXHRcXHRcXHRcXHRpZiAoZGF0YSA9PSBkYXRhX2xpbWl0KVxcbiAxNDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNDU6XFx0XFx0XFx0XFx0YyA9ICpkYXRhO1xcbiAxNDY6XFx0XFx0XFx0XFx0aWYgKGlzZGlnaXQoYykpIHtcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB2YWwgPSBwW2ldICogMTAgKyBjIC0gJzAnO1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRcXHRcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2UgMjU1KVxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNTE6XFx0XFx0XFx0XFx0XFx0cFtpXSA9IHZhbDtcXG4gMTUyOlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoYyA9PSAnLCcgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIDUpIHtcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdGkrKztcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdHBbaV0gPSAwO1xcbiAxNTU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTU2OlxcdFxcdFxcdFxcdFxcdC8qIHVuZXhwZWN0ZWQgY2hhcmFjdGVyIG9yIHRlcm1pbmF0b3IgKi9cXG4gMTU3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNTg6XFx0XFx0XFx0XFx0fVxcbiAxNTk6XFx0XFx0XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRcXHRpZiAoaSAhPSA1KVxcbiAxNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRcXHQqc3RhcnQgPSBzO1xcbiAxNjU6XFx0XFx0XFx0KmVuZCA9IGRhdGE7XFxuIDE2NjpcXHRcXHRcXHRhZGRyLVxcdTAwM2VpcCA9IGdldF91bmFsaWduZWQoKF9fYmUzMiAqKSBwKTtcXG4gMTY3OlxcdFxcdFxcdCpwb3J0ID0gZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopIChwICsgNCkpO1xcbiAxNjg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDE2OTpcXHRcXHR9XFxuIDE3MDpcXHRcXHRpZiAocyA9PSBkYXRhX2xpbWl0KVxcbiAxNzE6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNzI6XFx0XFx0KnN0YXJ0ID0gcztcXG4gMTczOlxcdFxcdGVkZWxpbSA9ICpzKys7XFxuIDE3NDpcXHRcXHRpZiAoZWRlbGltIFxcdTAwM2MgMzMgfHwgZWRlbGltIFxcdTAwM2UgMTI2KVxcbiAxNzU6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxNzY6XFx0XFx0aWYgKHMgPT0gZGF0YV9saW1pdClcXG4gMTc3OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTc4OlxcdFxcdGlmICgqcyA9PSBlZGVsaW0pIHtcXG4gMTc5OlxcdFxcdFxcdC8qIEFkZHJlc3MgZmFtaWx5IGlzIHVzdWFsbHkgbWlzc2luZyBmb3IgRVBTViByZXNwb25zZSAqL1xcbiAxODA6XFx0XFx0XFx0aWYgKG1vZGUgIT0gSVBfVlNfRlRQX0VQU1YpXFxuIDE4MTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE4MjpcXHRcXHRcXHRzKys7XFxuIDE4MzpcXHRcXHRcXHRpZiAocyA9PSBkYXRhX2xpbWl0KVxcbiAxODQ6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAxODU6XFx0XFx0XFx0LyogVGhlbiBhZGRyZXNzIHNob3VsZCBiZSBtaXNzaW5nIHRvbyAqL1xcbiAxODY6XFx0XFx0XFx0aWYgKCpzICE9IGVkZWxpbSlcXG4gMTg3OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gMTg4OlxcdFxcdFxcdC8qIENhbGxlciBjYW4gcHJlLXNldCBhZGRyLCBpZiBuZWVkZWQgKi9cXG4gMTg5OlxcdFxcdFxcdHMrKztcXG4gMTkwOlxcdFxcdH0gZWxzZSB7XFxuIDE5MTpcXHRcXHRcXHRjb25zdCBjaGFyICplcDtcXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0LyogV2UgYWxsb3cgYWRkcmVzcyBvbmx5IGZyb20gc2FtZSBmYW1pbHkgKi9cXG4gMTk0OlxcdFxcdFxcdGlmIChhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNiAqcyAhPSAnMicpXFxuIDE5NTpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE5NjpcXHRcXHRcXHRpZiAoYWYgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiAqcyAhPSAnMScpXFxuIDE5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDE5ODpcXHRcXHRcXHRzKys7XFxuIDE5OTpcXHRcXHRcXHRpZiAocyA9PSBkYXRhX2xpbWl0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODoyMy4wMzcxODIwOTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NTY2Nzc1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZUUCBQYXJzaW5nIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYmVlbiByZXZpZXdpbmcgdGhpcyBGVFAgcGFyc2luZyBjb2RlLCBhbmQgaGVyZSdzIG15IHRha2UuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBsb2dpYyBmb3IgZXh0cmFjdGluZyBJUCBhZGRyZXNzZXMgYW5kIHBvcnRzIGZyb20gdGhlIEZUUCBwYWNrZXQgcGF5bG9hZCBoYXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGhvdyB0aGUgY29kZSBwcm9jZXNzZXMgdGhlIGRhdGEgd2l0aGluIGFuIEZUUCBwYWNrZXQg4oCTIHZhbHVlcyBhcmUgYmVpbmcgcGFyc2VkIGFuZCBzdG9yZWQgaW50byB2YXJpYWJsZXMsIGFuZCB0aGUgd2F5IHRoaXMgaXMgYmVpbmcgZG9uZSBpcyBmbGF3ZWQuXG5cblRoZSBjb2RlIHVzZXMgYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAgYW5kIHBvcnQgc2VnbWVudHMsIGFuZCBgX191MTZgIGZvciB0aGUgcG9ydCBpbiB0aGUgZXh0ZW5kZWQgcG9ydCBjYXNlLiBUaGUgdnVsbmVyYWJpbGl0eSBpcyB0aGF0IGlmIHRoZSBpbmNvbWluZyBkYXRhIGNvbnRhaW5zIHZhbHVlcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdGhhdCB0aG9zZSB2YXJpYWJsZSB0eXBlcyBjYW4gaG9sZCDigJMgMjU1IGZvciB0aGUgYHVuc2lnbmVkIGNoYXJgIHNlZ21lbnRzIG9mIHRoZSBJUCBhZGRyZXNzIGFuZCBwb3J0LCBhbmQgNjU1MzUgZm9yIHRoZSBleHRlbmRlZCBwb3J0IOKAkyBpdCBzaW1wbHkgd3JhcHMgYXJvdW5kIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93LiBTbywgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3Igb3IgcmVqZWN0aW5nIHRoZSBwYWNrZXQsIGl0IGp1c3Qgc2lsZW50bHkgdHJ1bmNhdGVzIHRoZSB2YWx1ZSwgbGVhZGluZyB0byBpbmNvcnJlY3QgcGFyc2luZy4gRm9yIGV4YW1wbGUsIGlmIGl0IHJlY2VpdmVzIDI1NiBmb3IgYW4gSVAgc2VnbWVudCBpdCB3b3VsZCBpbnRlcnByZXQgaXQgYXMgemVybywgNjU1MzYgYmVjb21lcyB6ZXJvIGFuZCBzbyBvbi5cblxuVGhlIGJ1ZyBpcyBwdXJlbHkgYSBsb2dpY2FsIGVycm9yIGluIHRoZSBwYXJzaW5nIGFuZCBpdCBpbnZvbHZlcyBpbnRlZ2VyIG92ZXJmbG93LiBJJ3ZlIGRvdWJsZS1jaGVja2VkLCBhbmQgdGhpcyAqZG9lc24ndCogaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzLiBgcGAgaXMgYW4gYXJyYXkgdGhhdCBpcyBpbml0aWFsaXplZCBhcyBpdCBwYXJzZXMuIFRoZSBjb2RlIHNldHMgYHBbMF1gIHRvIDAgaW5pdGlhbGx5LCBhbmQgdGhlbiBwcm9ncmVzc2l2ZWx5IHBvcHVsYXRlcyB0aGUgcmVzdCBvZiBgcGAgYmFzZWQgb24gdGhlIGRhdGEuIFRoZSBsb29wIHdpbGwgaW5jcmVtZW50IHRoZSBpbmRleCBgaWAgYW5kIHNldCBgcFtpXSA9IDBgIHdoZW5ldmVyIGl0IGVuY291bnRlcnMgYSBjb21tYS4gQW5kIGlmIHRoZSBwcm9jZXNzIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIG1lYW5pbmcgdGhlIHBhY2tldCdzIElQIGFuZCBwb3J0IGFyZSBjb21wbGV0ZWx5IHBhcnNlZCwgdGhlbiBhbGwgb2YgdGhlIGVsZW1lbnRzIGluIGBwYCB3aWxsIGJlIGluaXRpYWxpemVkLlxuXG5HaXZlbiB0aGF0IGl0J3MgYW4gaW50ZWdlciBvdmVyZmxvdywgbm90IGFuIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnksIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBidWcgd2lsbCBiZSBkZXRlY3RhYmxlIGJ5IG90aGVyIHRvb2xzIGxpa2UgS0FTQU4sIGFuZCBwb3RlbnRpYWxseSBmdXp6aW5nIHRvb2xzIHRoYXQgY2FuIGV4cG9zZSBwYXJzaW5nIGlzc3Vlcy5cblxuSW4gc2hvcnQsIHRoZSBwYXRjaCBuZWVkcyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHRvIHJlamVjdCBhbnkgdmFsdWVzIGR1cmluZyBwYXJzaW5nIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFsbG93ZWQgcmFuZ2VzIGZvciBJUCBhZGRyZXNzIHNlZ21lbnRzIGFuZCBwb3J0IG51bWJlcnMuIEl0IHNob3VsZCBhbHNvIGNoYW5nZSBgaHBvcnRgIHRvIGBfX3UzMmAgdG8gcHJldmVudCBvdmVyZmxvd3MgYmVmb3JlIHRoZSBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4NiwiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDoyODozNC42OTM4NjM1NzlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cXG5cXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIHBhcnNpbmcgb2YgRlRQIFBPUlQvRVBSVCBjb21tYW5kcyBpbiB0aGUgSVBWUyBGVFAgaGVscGVyLiBXaGVuIHBhcnNpbmcgdGhlIElQIGFkZHJlc3MgYW5kIHBvcnQgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQsIHRoZSBjb2RlIHVzZWQgYW4gYHVuc2lnbmVkIGNoYXJgIGZvciB0aGUgSVAvcG9ydCBzZWdtZW50cyAoYHBbaV1gKSBhbmQgYSBgX191MTZgIGZvciB0aGUgZXh0ZW5kZWQgcG9ydCAoYGhwb3J0YCkuIElmIHRoZSBwYWNrZXQgY29udGFpbmVkIHZhbHVlcyBsYXJnZXIgdGhhbiAyNTUgZm9yIHRoZSBJUCBzZWdtZW50cyBvciA2NTUzNSBmb3IgdGhlIHBvcnQsIHRoZSB2YWx1ZXMgd291bGQgc2lsZW50bHkgd3JhcCBhcm91bmQgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGJvdW5kcyBjaGVja2luZyB0byByZWplY3QgdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGltaXRzICgyNTUgYW5kIDY1NTM1IHJlc3BlY3RpdmVseSkgYW5kIGNoYW5nZXMgYGhwb3J0YCB0byBgX191MzJgIHRvIHByZXZlbnQgb3ZlcmZsb3cgYmVmb3JlIHRoZSBjaGVjay5cXG5cXG5UaGlzIGlzIGEgbG9naWMgYnVnIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZSBwYXJzZWQgZGF0YSBjb21lcyBmcm9tIGFuIGFscmVhZHkgaW5pdGlhbGl6ZWQgcGFja2V0IHBheWxvYWQsIGFuZCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdXJpbmcgcGFyc2luZy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhrh64[1] Phase: Succeeded StartedAt: 2026-08-13 20:28:46 +0000 UTC FinishedAt: 2026-08-13 20:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 20:28:46 +0000 UTC FinishedAt: 2026-08-13 20:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2] Phase: Succeeded StartedAt: 2026-08-13 20:28:46 +0000 UTC FinishedAt: 2026-08-14 00:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 20:28:46 +0000 UTC FinishedAt: 2026-08-14 00:15:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 20:28:46 +0000 UTC FinishedAt: 2026-08-13 20:28:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 20:28:46 +0000 UTC FinishedAt: 2026-08-13 20:28:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflowhrh64/series-workflowhrh64-convert-artifact-774766270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 20:28:56 +0000 UTC FinishedAt: 2026-08-13 20:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 20:28:56 +0000 UTC FinishedAt: 2026-08-13 20:50:30 +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:*faf1ace9-fea2-4cb5-b178-9c726f6841d1,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-workflowhrh64/series-workflowhrh64-convert-artifact-774766270/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": "9ecd4349-3c7e-4089-a658-52bb69c600b0", "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-workflowhrh64/series-workflowhrh64-build-action-1336268708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 20:28:56 +0000 UTC FinishedAt: 2026-08-13 20:50:09 +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:*faf1ace9-fea2-4cb5-b178-9c726f6841d1,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-workflowhrh64/series-workflowhrh64-convert-artifact-774766270/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": "9ecd4349-3c7e-4089-a658-52bb69c600b0", "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-workflowhrh64/series-workflowhrh64-build-action-1336268708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 20:50:30 +0000 UTC FinishedAt: 2026-08-13 20:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 20:50:30 +0000 UTC FinishedAt: 2026-08-13 20:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 20:50:30 +0000 UTC FinishedAt: 2026-08-13 20:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 20:50:30 +0000 UTC FinishedAt: 2026-08-13 20:50:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflowhrh64/series-workflowhrh64-convert-artifact-3273738737/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 20:50:40 +0000 UTC FinishedAt: 2026-08-13 20:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 20:50:40 +0000 UTC FinishedAt: 2026-08-13 20:52:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ecd4349-3c7e-4089-a658-52bb69c600b0,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-workflowhrh64/series-workflowhrh64-build-action-1336268708/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-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 20:52:47 +0000 UTC FinishedAt: 2026-08-13 20:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 20:52:47 +0000 UTC FinishedAt: 2026-08-13 20:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 20:52:47 +0000 UTC FinishedAt: 2026-08-13 21:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 20:52:47 +0000 UTC FinishedAt: 2026-08-13 21:12:17 +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:*faf1ace9-fea2-4cb5-b178-9c726f6841d1,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-workflowhrh64/series-workflowhrh64-convert-artifact-3273738737/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": "5a2e697d-d276-4649-90bf-1d589b8d5924", "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-workflowhrh64/series-workflowhrh64-build-action-829876157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 20:52:47 +0000 UTC FinishedAt: 2026-08-13 21:12:07 +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:*faf1ace9-fea2-4cb5-b178-9c726f6841d1,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-workflowhrh64/series-workflowhrh64-convert-artifact-3273738737/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": "5a2e697d-d276-4649-90bf-1d589b8d5924", "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-workflowhrh64/series-workflowhrh64-build-action-829876157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 21:12:17 +0000 UTC FinishedAt: 2026-08-13 21:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 21:12:17 +0000 UTC FinishedAt: 2026-08-13 21:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 21:12:17 +0000 UTC FinishedAt: 2026-08-13 21:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 21:12:17 +0000 UTC FinishedAt: 2026-08-13 21:14:11 +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:*5a2e697d-d276-4649-90bf-1d589b8d5924,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-workflowhrh64/series-workflowhrh64-build-action-829876157/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-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 21:14:21 +0000 UTC FinishedAt: 2026-08-14 00:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 21:14:21 +0000 UTC FinishedAt: 2026-08-14 00:15:54 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"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:*9ecd4349-3c7e-4089-a658-52bb69c600b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a2e697d-d276-4649-90bf-1d589b8d5924,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-workflowhrh64/series-workflowhrh64-build-action-1336268708/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-workflowhrh64/series-workflowhrh64-build-action-829876157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 21:14:21 +0000 UTC FinishedAt: 2026-08-13 21:14:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 21:14:21 +0000 UTC FinishedAt: 2026-08-13 21:14:27 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"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-workflowhrh64/series-workflowhrh64-convert-artifact-718764710/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 21:14:21 +0000 UTC FinishedAt: 2026-08-13 21:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 21:14:21 +0000 UTC FinishedAt: 2026-08-13 21:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 21:14:21 +0000 UTC FinishedAt: 2026-08-13 21:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 21:14:31 +0000 UTC FinishedAt: 2026-08-14 00:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhrh64[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_ftp_out","ip_vs_ftp_in","ip_vs_ftp_get_addrport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_FTP","IP_VS_PROTO_TCP","NF_CONNTRACK","NF_NAT","NF_CONNTRACK_FTP"],"series_id":"ed1b35db-9f98-401a-aab8-4dd500253753","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 21:14:31 +0000 UTC FinishedAt: 2026-08-14 00:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ecd4349-3c7e-4089-a658-52bb69c600b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a2e697d-d276-4649-90bf-1d589b8d5924,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-workflowhrh64/series-workflowhrh64-build-action-1336268708/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-workflowhrh64/series-workflowhrh64-build-action-829876157/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-workflowhrh64/series-workflowhrh64-convert-artifact-718764710/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,}