Name: series-workflowddvqn Phase: Succeeded StartedAt: 2026-07-20 23:47:02 +0000 UTC FinishedAt: 2026-07-21 04:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[0] Phase: Succeeded StartedAt: 2026-07-20 23:47:02 +0000 UTC FinishedAt: 2026-07-21 00:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 23:47:02 +0000 UTC FinishedAt: 2026-07-21 00:09:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8fc574321e59a2484063b2e75016772815038608", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8fc574321e59a2484063b2e75016772815038608", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "5f0096f7-90ec-4621-b3c3-5c7ded839535" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg", "tcp_bpf_recvmsg_parser", "tcp_msg_wait_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hlbiB3YWl0aW5nIGZvciBkYXRhIG9uIGEgVENQIHNvY2tldCBpbiBhIHNvY2ttYXAuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmUzMTk0ZjA4MWZjODY5NTA0NmY0ZjNkMDdhNTg0MDY5YWZmOTZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA4OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmFhNWM1ZDc0MTU5OWEzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbiYjNDM7XHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbiYjNDM7XHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4mIzQzO1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICYjNDM7MjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgJiM0Mzs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuJiM0MztcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuJiM0MztcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgJiM0MzszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4mIzQzO1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4mIzQzO1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4mIzQzO1x0XHRcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuJiM0MztcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuJiM0MztcdFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkge1xuJiM0MztcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRpbWVvKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiAmIzQzOzQzOSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uZDE4ZmFmNDZmYWMwYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTEzNzMsNiAmIzQzOzEzNzMsMTI2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhpbnQgc290eXBlKVxuIFx0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkICp0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCh2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQgPSAqKGludCAqKWFyZztcbiYjNDM7XHRjaGFyIGJ1ZlsxMDI0XTtcbiYjNDM7XHR2b2lkICpyZXN1bHQgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSAtMSkge1xuJiM0MztcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJlc3VsdCA9ICh2b2lkICopMTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFsZW4gfHwgYnVmW2xlbiAtIDFdID09ICYjMzk7ZSYjMzk7KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlbmQoZmQsIFwmIzM0O3Rlc3RcJiMzNDssIDQsIE1TR19OT1NJR05BTCk7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlc3VsdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nICpza2VsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMO1xuJiM0MztcdHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuJiM0MztcdGNoYXIgKmJ1ZiA9IE5VTEw7XG4mIzQzO1x0aW50IG1hcCwgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWFwID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLnNvY2tfbWFwX21zZyk7XG4mIzQzO1xuJiM0MztcdGlmICh3aXRoX3ZlcmRpY3QpIHtcbiYjNDM7XHRcdHByb2cgPSBza2VsLVx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3Q7XG4mIzQzO1x0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfcHJvZ19hdHRhY2ggdmVyZGljdFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1hbGxvYyhidWZsZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidWYsIFwmIzM0O21hbGxvYyBidWZcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XG4mIzQzO1x0YnVmW2J1ZmxlbiAtIDFdID0gJiMzOTtlJiMzOTs7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyAyMDA7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzc2l6ZV90IHNlbnQ7XG4mIzQzO1x0XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XHRcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0XHRib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7XG4mIzQzO1x0XHRzaXplX3QgcmVtID0gYnVmbGVuO1xuJiM0MztcdFx0aW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDtcbiYjNDM7XHRcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Y3JlYXRlX3BhaXJcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQsIFx1MDAyNnApO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4mIzQzO1x0XHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNmMsIEJQRl9BTlkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX3VwZGF0ZV9lbGVtXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAocmVtKSB7XG4mIzQzO1x0XHRcdHNlbnQgPSB4c2VuZChjLCBidWYgJiM0MzsgKGJ1ZmxlbiAtIHJlbSksIHJlbSwgMCk7XG4mIzQzO1x0XHRcdGlmIChzZW50ID09IC0xKVxuJiM0MztcdFx0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4mIzQzO1x0XHRcdHJlbSAtPSBzZW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHdlIGNhbm5vdCB1c2UgcmVjdl90aW1lb3V0KCksIG90aGVyd2lzZSBFQUdBSU4gd291bGQgYmUgYW4gZXhwZWN0ZWQgZXJybm8uICovXG4mIzQzO1x0XHRlcnIgPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZFxuJiM0MztcdFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgXCYjMzQ7cmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHRzdWNjZXNzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO2VuZF9hdHRlbXB0OlxuJiM0MztcdFx0aWYgKGMgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRjbG9zZShjKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGhyZWFkX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWQsIFx1MDAyNnJldHZhbCk7XG4mIzQzO1x0XHRcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcJiMzNDtyZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRocmVhZF9jcmVhdGVkIFx1MDAyNlx1MDAyNiBwIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Y2xvc2UocCk7XG4mIzQzO1x0XHRpZiAoIXN1Y2Nlc3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGJ1ZilcbiYjNDM7XHRcdGZyZWUoYnVmKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXCYjMzQ7KSlcbkBAIC0xNDUxLDQgJiM0MzsxNTcxLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzXCYjMzQ7KSlcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oZmFsc2UpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluIHdpdGggdmVyZGljdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlMzE5NGYwODFmYzg2OTUwNDZmNGYzZDA3YTU4NDA2OWFmZjk2YzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyMSAwMDowODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCi0JCQkgICAgIGxvbmcgdGltZW8pCiYjNDM7CQkJICAgICBsb25nICp0aW1lbykKIHsKIAlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCByZXQgPSAwOwpAQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCWlmIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKQogCQlyZXR1cm4gMTsKIAotCWlmICghdGltZW8pCiYjNDM7CWlmICghKnRpbWVvKQogCQlyZXR1cm4gcmV0OwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwogCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7Ci0JcmV0ID0gc2tfd2FpdF9ldmVudChzaywgJmFtcDt0aW1lbywKJiM0MzsJcmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sCiAJCQkgICAgIWxpc3RfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19tc2cpIHx8CiAJCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSwgJmFtcDt3YWl0KTsKIAlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJaW50IGNvcGllZF9mcm9tX3NlbGYgPSAwOwogCWludCBjb3BpZWQgPSAwOwogCXUzMiBzZXE7CiYjNDM7CWxvbmcgdGltZW87CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTVNHX0VSUlFVRVVFKSkKIAkJcmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pOwpAQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQl9CiAJfQogCiYjNDM7CXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKJiM0MzsKIG1zZ19ieXRlc19yZWFkeToKIAljb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCAmYW1wO2NvcGllZF9mcm9tX3NlbGYpOwogCS8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5CkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJfQogCXNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQpAQCAtMjk5LDcgJiM0MzszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJCWlmICghdGltZW8pIHsKIAkJCWNvcGllZCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTMxMCwxMyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQljb3BpZWQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJaWYgKGRhdGEgJmFtcDsmYW1wOyAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQogCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQlpZiAoIWRhdGEgJmFtcDsmYW1wOyB0aW1lbyAmZ3Q7IDApCiYjNDM7CQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiAJCWNvcGllZCA9IC1FQUdBSU47CiAJfQogb3V0OgpAQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIHsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCWludCBjb3BpZWQsIHJldDsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0zNzEsMTQgJiM0MzszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAl9CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7Ci0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiYjNDM7CQkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gc29ja19lcnJvcihzayk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCWlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQomIzQzOwkJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKJiM0MzsJCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkgewomIzQzOwkJCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCQlza19wc29ja19wdXQoc2ssIHBzb2NrKTsKJiM0MzsJCQkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKJiM0MzsJCQlyZXQgPSAtRU5PVENPTk47CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRpbWVvKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQlyZXQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CkBAIC0zOTAsNiAmIzQzOzQzOSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiAJCQlyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7CiAJCX0KJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiAJcmV0ID0gY29waWVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jCmluZGV4IGNiMzIyOTcxMWY5M2EzLi5kMThmYWY0NmZhYzBjMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwpAQCAtMTM3Myw2ICYjNDM7MTM3MywxMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpCiAJdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkICp0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCh2b2lkICphcmcpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSAqKGludCAqKWFyZzsKJiM0MzsJY2hhciBidWZbMTAyNF07CiYjNDM7CXZvaWQgKnJlc3VsdCA9IE5VTEw7CiYjNDM7CiYjNDM7CXdoaWxlICh0cnVlKSB7CiYjNDM7CQlzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChsZW4gPT0gLTEpIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJlc3VsdCA9ICh2b2lkICopMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbGVuIHx8IGJ1ZltsZW4gLSAxXSA9PSAmIzM5O2UmIzM5OykKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlzZW5kKGZkLCAmIzM0O3Rlc3QmIzM0OywgNCwgTVNHX05PU0lHTkFMKTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdWx0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGJvb2wgd2l0aF92ZXJkaWN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc29ja21hcF9wYXNzX3Byb2cgKnNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMOwomIzQzOwlzaXplX3QgYnVmbGVuID0gMTAyNCAqIDEwMjQgKiAyNTsKJiM0MzsJY2hhciAqYnVmID0gTlVMTDsKJiM0MzsJaW50IG1hcCwgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltYXAgPSBicGZfbWFwX19mZChza2VsLSZndDttYXBzLnNvY2tfbWFwX21zZyk7CiYjNDM7CiYjNDM7CWlmICh3aXRoX3ZlcmRpY3QpIHsKJiM0MzsJCXByb2cgPSBza2VsLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0OwomIzQzOwkJZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfcHJvZ19hdHRhY2ggdmVyZGljdCYjMzQ7KSkKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmID0gbWFsbG9jKGJ1Zmxlbik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidWYsICYjMzQ7bWFsbG9jIGJ1ZiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWVtc2V0KGJ1ZiwgMCwgYnVmbGVuKTsKJiM0MzsJYnVmW2J1ZmxlbiAtIDFdID0gJiMzOTtlJiMzOTs7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgMjAwOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3NpemVfdCBzZW50OwomIzQzOwkJY2hhciBpZ25vcmVkWzEyOF07CiYjNDM7CQlwdGhyZWFkX3QgdGhyZWFkOwomIzQzOwkJYm9vbCB0aHJlYWRfY3JlYXRlZCA9IGZhbHNlOwomIzQzOwkJc2l6ZV90IHJlbSA9IGJ1ZmxlbjsKJiM0MzsJCWludCBjID0gLTEsIHAgPSAtMSwgemVybyA9IDA7CiYjNDM7CQlib29sIHN1Y2Nlc3MgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAmYW1wO2MsICZhbXA7cCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7Y3JlYXRlX3BhaXImIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsKJiM0MzsJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCAmYW1wO3Rlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW5fdGhyZWFkLCAmYW1wO3ApOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3B0aHJlYWRfY3JlYXRlJiMzNDspKQomIzQzOwkJCWdvdG8gZW5kX2F0dGVtcHQ7CiYjNDM7CQl0aHJlYWRfY3JlYXRlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgJmFtcDt6ZXJvLCAmYW1wO2MsIEJQRl9BTlkpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9tYXBfdXBkYXRlX2VsZW0mIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsKJiM0MzsJCXdoaWxlIChyZW0pIHsKJiM0MzsJCQlzZW50ID0geHNlbmQoYywgYnVmICYjNDM7IChidWZsZW4gLSByZW0pLCByZW0sIDApOwomIzQzOwkJCWlmIChzZW50ID09IC0xKQomIzQzOwkJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwkJCXJlbSAtPSBzZW50OwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogd2UgY2Fubm90IHVzZSByZWN2X3RpbWVvdXQoKSwgb3RoZXJ3aXNlIEVBR0FJTiB3b3VsZCBiZSBhbiBleHBlY3RlZCBlcnJuby4gKi8KJiM0MzsJCWVyciA9IHJlY3Zmcm9tKGMsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogd2UgYXJlIGNoZWNraW5nIGZvciB0aGUgaW52YWxpZCByZXR1cm4gb2YgRUFHQUlOLCBhbnkgb3RoZXIgcmV0dXJuIGlzIGNvbnNpZGVyZWQKJiM0MzsJCSAqIHN1Y2Nlc3NmdWwgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHRlc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgJiMzNDtyZWN2ZnJvbSBlYWdhaW4mIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsKJiM0MzsJCXN1Y2Nlc3MgPSB0cnVlOwomIzQzOwomIzQzO2VuZF9hdHRlbXB0OgomIzQzOwkJaWYgKGMgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShjKTsKJiM0MzsKJiM0MzsJCWlmICh0aHJlYWRfY3JlYXRlZCkgewomIzQzOwkJCXZvaWQgKnJldHZhbCA9IE5VTEw7CiYjNDM7CiYjNDM7CQkJcHRocmVhZF9qb2luKHRocmVhZCwgJmFtcDtyZXR2YWwpOwomIzQzOwkJCWlmICghQVNTRVJUX05VTEwocmV0dmFsLCAmIzM0O3JldHZhbCYjMzQ7KSkKJiM0MzsJCQkJc3VjY2VzcyA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCF0aHJlYWRfY3JlYXRlZCAmYW1wOyZhbXA7IHAgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShwKTsKJiM0MzsJCWlmICghc3VjY2VzcykKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChidWYpCiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CiYjNDM7CXRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlJiMzNDspKQpAQCAtMTQ1MSw0ICYjNDM7MTU3MSw4IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpCiAJCXRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX1NUUkVBTSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHVkcCBtdWx0aSBjaGFubmVscyYjMzQ7KSkKIAkJdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluJiMzNDspKQomIzQzOwkJdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2FpbihmYWxzZSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCByZWN2ZnJvbSBlYWdhaW4gd2l0aCB2ZXJkaWN0JiMzNDspKQomIzQzOwkJdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbih0cnVlKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYSByZWxhdGVkIHRlc3QgdXBkYXRlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBrZXJuZWwmIzM5O3MgVENQIEJQRi9zb2NrbWFwIGFyZWEuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGhvdyB0aGUgdGltZW91dCBpcyBoYW5kbGVkIHdpdGhpbiBgdGNwX21zZ193YWl0X2RhdGFgLiBQcmV2aW91c2x5IGl0IHRvb2sgYSBgbG9uZyB0aW1lb2AsIGJ1dCB0aGlzIHBhdGNoIGNoYW5nZXMgaXQgdG8gdGFrZSBhIGBsb25nICp0aW1lb2Ag4oCTIGEgcG9pbnRlci4gVGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBuYW1lbHkgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCwgd2hlcmUgdGhleSBub3cgcGFzcyB0aGUgYWRkcmVzcyBvZiB0aGUgdGltZW91dCB2YXJpYWJsZSAoYCZhbXA7dGltZW9gKSBpbnN0ZWFkIG9mIHRoZSB2YWx1ZSBpdHNlbGYuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIGEgZGVzaXJlIHRvIG1vZGlmeSB0aGUgdGltZW91dCB2YWx1ZSAqd2l0aGluKiBgdGNwX21zZ193YWl0X2RhdGFgLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIHByb3ZpZGUgZmluZXItZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHRpbWVvdXQgaGFuZGxpbmcuIFBlcmhhcHMsIHRvIHJlc29sdmUgYW4gaXNzdWUgd2hlcmUgYHJlY3Zmcm9tYCBtaWdodCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAgd2hlbiBpdCBzaG91bGRuJiMzOTt0IOKAkyBhcyB0aGV5IG1lbnRpb25lZC4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUmIzM5O3MgbWludXRpYWUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQgZm9yIHRoaXMgbW9kdWxlLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGB0Y3BfYnBmLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGtlcm5lbCBjb25maWcgb3B0aW9ucyBjb250cm9sIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgc2VhcmNoIHRocm91Z2ggYG5ldC9pcHY0L01ha2VmaWxlYCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gS25vd2luZyB0aG9zZSBvcHRpb25zIHdpbGwgaGVscCBtZSBpbnRlcnByZXQgdGhpcyBjaGFuZ2UgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcHJlbGltaW5hcnkgdGhvdWdodHMsIGV4cHJlc3NlZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDoKCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aW5nIGlzIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gTm8gc3VycHJpc2VzIHRoZXJlOyB3ZSBuZWVkIHRoYXQgZm91bmRhdGlvbmFsIHNvY2tldCBtZXNzYWdpbmcgc3VwcG9ydCwgb2J2aW91c2x5LiBUaGVuLCBmb3IgbGV2ZXJhZ2luZyBCUEYsIHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIGdvYWwgaGVyZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIG5lZWRlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBzaG91bGQgcXVpY2tseSBkbyBhIHNhbml0eSBjaGVjayB0byBzZWUgaWYgYHRjcF9icGYuY2AgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEJldHRlciB0byBoYXZlIHRoZW0gYWxsIGluIG9uZSBwbGFjZSBhbmQgbm90IGZpbmQgb3V0IGxhdGVyIEkgbmVlZCB0byByZWNvbXBpbGUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZm9jdXMgb24gdGNwIGFuZCBicGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTc4PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTgxLXN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MTM9c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNC1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU2LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTc6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9ODAzPXZvaWQgdGNwX2JwZl9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtODA5LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo4MTA6I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEJQRi1FbmFibGVkIFRDUCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHRjcF9tc2dfd2FpdF9kYXRhYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIFRoZSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgaW5kaWNhdGVzIHRoZXNlIGFyZSByZWxhdGVkIHRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGludGVncmF0aW9uLCBhbmQgc3BlY2lmaWNhbGx5LCBCUEYgc3lzY2FsbCBlbmhhbmNlbWVudHMuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGJ1aWxkaW5nIG9uIHRoZSBleGlzdGluZyBUQ1AgcmVjZWl2ZSBwYXRoIHRvIHN1cHBvcnQgQlBGIGZpbHRlcmluZyBhbmQgcHJvY2Vzc2luZyBkdXJpbmcgYHJlY3Ztc2dgIGNhbGxzLgoKVGhlIGNvcmUgb2YgdGhpcyBoYXMgdG8gYmUgaW4gdGhlIHBhcnNpbmcgYW5kIGByZWN2bXNnYCBmdW5jdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBsb2dpYyBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHR5cGljYWwgYHJlY3Ztc2dgIGZsb3cgaGVyZS4gQXJlIHRoZXkgdXNpbmcgdGhlIEJQRiBwcm9ncmFtIHRvIHZhbGlkYXRlIG9yIG1vZGlmeSB0aGUgaW5jb21pbmcgZGF0YSwgY29udHJvbCBidWZmZXIgYWxsb2NhdGlvbiwgb3Igc29tZXRoaW5nIG1vcmU/IFRoZSBwYXJzZXIgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHByb2dyYW0gaW50ZXJwcmV0cyB0aGUgaW5jb21pbmcgZGF0YS4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgQlBGIHByb2dyYW0gaXMgcmV0cmlldmVkLCBhbmQgaG93IGRhdGEgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIFRDUCBzdGFjayBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIHRoZSBgcmVjdm1zZ2Agb3BlcmF0aW9uIHdpdGggQlBGIHByb2dyYW1zIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTMzOD1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTM1NS1cbm5ldC9pcHY0L3RjcF9icGYuYzozNTY6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVx0XHRcdCAgIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc0PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3OS1cdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVx0XHQ9IHNvY2tfbWFwX2Nsb3NlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY4MDpcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY4MS1cdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg3LVx0cHJvdFtUQ1BfQlBGX1JYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY4ODpcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg5LVxubmV0L2lwdjQvdGNwX2JwZi5jLTY5MC1cdHByb3RbVENQX0JQRl9UWFJYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTE6XHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkyLX1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI0PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NDctXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzQ4Olx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cbm5ldC9pcHY0L3RjcF9icGYuYy03NDktXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzE5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIEJQRiBSZWN2bXNnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBUaGV5IGFyZSBjYWxsZWQgdmlhIGByZWN2bXNnYCBvbiBhIFRDUCBzb2NrZXQgdGhhdCBoYXMgYmVlbiBhZGRlZCB0byBhIHNvY2ttYXAuIFRoaXMgbWVhbnMgYENPTkZJR19ORVRfU09DS19NU0dgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgZGVmaW5pdGVseSBrZXkgaGVyZS4gTm93LCBJIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgc2VsZWN0ZWQgYnkgZWl0aGVyIGBDT05GSUdfQ0dST1VQX0JQRmAgb3IgcG9zc2libHkgYnkgYENPTkZJR19CUEZfU1lTQ0FMTGAgYWxvbmcgd2l0aCBgQ09ORklHX0lORVRgIGluIHNvbWUgc2NlbmFyaW9zLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L0tjb25maWdgIGFuZCBwb3RlbnRpYWxseSBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBzdWJ0bGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJQRiBpbnRlZ3JhdGlvbiB3aXRoIFRDUCBzb2NrZXRzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIFNlbGVjdG9yKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgd2hlcmUgYE5FVF9TT0NLX01TR2AgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZXhlcmNpc2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2sgSSYjMzk7bSB3b3JraW5nIHdpdGguIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdGhyb3VnaCB0aGUgY29kZSwgc3RhcnRpbmcgd2l0aCB0aGUgaW1tZWRpYXRlIGNvbnRleHQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgZmxvdyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZWxlY3RvciBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZXJyb3IgaGFuZGxpbmcuIEVzc2VudGlhbGx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJvbGUgYE5FVF9TT0NLX01TR2AgcGxheXMgaW4gdGhlIG5ldHdvcmsgc29ja2V0IG1lc3NhZ2luZyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIEJQRiBTdHJlYW0gUGFyc2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGEgc3BlY2lmaWMgZGV0YWlsOiB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBzZWVtcyB0byBiZSBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB3aXRoIGBORVRfU09DS19NU0dgLiBUaGF0IHJlbGF0aW9uc2hpcCBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEkgbmVlZCB0byBlc3RhYmxpc2ggYSBjbGVhcmVyIHBpY3R1cmUuIFdoYXQmIzM5O3MgdGhlIGtleSB0aGF0IHVubG9ja3MgdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgdGhlbj8gSSBoYXZlIHRvIHRyYWNlIGJhY2sgdGhlIGxvZ2ljYWwgZmxvdyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbXBvbmVudCBvciBtZWNoYW5pc20gaXMgcmVzcG9uc2libGUgZm9yICpzZWxlY3RpbmcqIG9yICp0cmlnZ2VyaW5nKiB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZywgYW5kIHRoZSBrZXJuZWwgY29uZmlnIGlzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSBleHBlY3QgdGhhdCB0aGlzIHdpbGwgZ2l2ZSBtZSBzb21lIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgcmVsYXRlIHRvIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1hcCB0aGUgcHJvYmxlbSBJIGhhdmUgdG8gdGhlIHJlbGV2YW50IGtlcm5lbCBmZWF0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXG4tLVxubmV0L0tjb25maWctMzYwLVxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWctMzYyLVx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgYXMgYSB1c2VyLWNvbmZpZ3VyYWJsZSBvcHRpb24uIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYENHUk9VUF9CUEZgIGFzIGEgcG90ZW50aWFsIGNvLWRlcGVuZGVudCBvciByZWxhdGVkIGZlYXR1cmUuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2VzLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IHRvIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSBnaXZlbiB0aGUgQlBGIGZvY3VzLCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhlc2Ugc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBicm9hZGVyIGNvbnRleHQgZm9yIGJvdGggb3B0aW9ucywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kIHdoZW4gaW50ZWdyYXRpbmcgdGhlbSwgb3IgY29uc2lkZXJpbmcgdGhlbSBpbiBhbiBleGlzdGluZyBwcm9qZWN0LiBJJiMzOTttIGFmdGVyIHRoZSBmdWxsIHBpY3R1cmUgLSB3aGF0IHRoZXNlIGRvLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIga2VybmVsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy0zMy1cdHNlbGVjdCBCSU5BUllfUFJJTlRGXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4tLVxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuLS1cbm5ldC9LY29uZmlnLTM2Ni1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZzozNjc6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy0zNjgtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWctMzg3LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTMtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjYvS2NvbmZpZzo5NDpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWctOTUtXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcbi0tXG5uZXQvdGxzL0tjb25maWctMTAtXHRzZWxlY3QgQ1JZUFRPX0dDTVxubmV0L3Rscy9LY29uZmlnOjExOlx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L3Rscy9LY29uZmlnLTEyLVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFRDUCBTb2NrbWFwIGFuZCByZWN2bXNnKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgdG8gZm9jdXMgb24gYE5FVF9TT0NLX01TR2AgYmVjYXVzZSBgQlBGX1NZU0NBTExgIChzdGFuZGFyZCBmb3IgZnV6emluZywgcmlnaHQ/KSBzZWVtcyB0byBlbmFibGUgaXQgd2hlbiBgTkVUYCBpcyBhbHNvIGVuYWJsZWQuIFRoYXQgbWVhbnMgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBjb2RlIHRoYXQgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRfU09DS19NU0dgLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBidWlsZCBzeXN0ZW0gKGBuZXQvaXB2NC9NYWtlZmlsZWApLCBpbmNsdWRlcyBgdGNwX2JwZi5vYC4gTWFrZXMgc2Vuc2UsIHNvIGl0JiMzOTtzIGNvbXBpbGVkIGluLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkPyBMZXQmIzM5O3Mgc2VlLi4uIEkgaGF2ZSBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gQWhhISBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgd2hlbiBhIFRDUCBzb2NrZXQgZ2V0cyBhZGRlZCB0byBhIHNvY2ttYXAgYW5kIHRoZW4gYHJlY3Ztc2dgIGlzIGNhbGxlZC4gQmluZ28hIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCB0YXJnZXRpbmcgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgIOKAkyB0aGVzZSBhcmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgdGNwX21zZ193YWl0X2RhdGFgLCBzaW5jZSBpdCYjMzk7cyBhIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0byBidWlsZCB0aGlzLiBJIGtub3cgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhcmUgbmVjZXNzYXJ5LiBPYnZpb3VzbHksIGBDT05GSUdfSU5FVGAgaXMgdG9vLiBXaGF0IGFib3V0IGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgPyBUaGF0IG1pZ2h0IGJlIG5lZWRlZCBmb3IgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IG1vcmUgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY3ND1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODctXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njg4Olx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02ODktXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY5MTpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MjQ9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ny1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTc0OS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRi1yZWxhdGVkIGByZWN2bXNnYCBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHJlY3Ztc2dgIGlzIGhhbmRsZWQgaW4gdGhpcyBjb250ZXh0LiBJdCBhcHBlYXJzIHRoaXMgY29kZSBzcGVjaWZpY2FsbHkgdGllcyBpbnRvIGBwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dgIGFuZCBgcHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dgLiBSaWdodCwgdGhlc2UgYXJlIHRoZSBob29rcyB1c2VkIHdoZW4gYSBCUEYgcHJvZ3JhbSBpcyBhY3RpdmUgb24gYSBzb2NrbWFwLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSBwcm9ncmFtIGxpa2UgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIG9yIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGhhcyBiZWVuIGF0dGFjaGVkLiBUaGUgdGVzdCBjYXNlIGB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluYCBzZWVtcyB0byBiZSBhdHRhY2hpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgLiBUaGVyZWZvcmUsIHRoZSBtaW5pbWFsIHJlcXVpcmVtZW50cyBzaG91bGQgYmUgaGF2aW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVF9TT0NLX01TR2AgZW5hYmxlZC4KCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXNuJiMzOTt0IHNvbWVob3cgbmVjZXNzYXJ5IGZvciBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIHRyaXZpYWwsIGJ1dCBpdCBuZXZlciBodXJ0cyB0byBiZSB0aG9yb3VnaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz03MTM9c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNC1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU2LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTc6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTkKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldG1hcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBsaXZlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgZGVmaW5pdGVseSBub3QgYmVoaW5kIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpYCwgYXMgSSBpbml0aWFsbHkgdGhvdWdodDsgaXQmIzM5O3MgZ3VhcmRlZCBieSB0aGUgbW9yZSBnZW5lcmFsIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgd2hpY2gsIG9mIGNvdXJzZSwgY292ZXJzIHRoZSBtYWpvcml0eSBvZiB0aGF0IGZpbGUuIEdvb2QgdG8gbWFrZSBzdXJlIEkmIzM5O20gcHJlY2lzZSBhYm91dCB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KCkxldCBtZSBqdXN0IGxpc3QgdGhvc2UgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIG15IG93biBjbGFyaXR5OiBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NPQ0tfTVNHYC4gR290IGl0LgoKTm93LCBmb2N1c2luZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IGB0Y3BfYnBmX3JlY3Ztc2dgLCB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoaWNoIHNlZW1zIGNlbnRyYWwgdG8gdGhpcywgYW5kIGFsc28gYHRjcF9tc2dfd2FpdF9kYXRhYC4KClRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aW1lb3V0IGhhbmRsaW5nIGlzIG1hbmFnZWQgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGl0cyBwYXJzZXIgd2hlbiB3ZSYjMzk7cmUgd2FpdGluZyBmb3IgZGF0YSBvbiBhIFRDUCBzb2NrZXQgd2l0aGluIGEgc29ja21hcCBjb250ZXh0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gIOKAkyB3aGljaCB3b3VsZCBiZSBhIHByZXR0eSBuYXN0eSByZWdyZXNzaW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc3Vic3lzdGVtLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgYW5kIHRvIGd1YXJkIGFnYWluc3QgaW50cm9kdWNpbmcgYW55IHJlZ3Jlc3Npb25zLiBJIG5lZWQgdG8gZmxhZyB0aGF0IGZvciBjb25zaWRlcmF0aW9uLgoKT2theSwgSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGlzLiBJJiMzOTtsbCBtYWtlIGEgY2FsbCBvbiB0aGlzIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hlbiB3YWl0aW5nIGZvciBkYXRhIG9uIGEgVENQIHNvY2tldCBpbiBhIHNvY2ttYXAuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MDMuMzAwMTk2MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk0MjgwNzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfbXNnX3dhaXRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hlbiB3YWl0aW5nIGZvciBkYXRhIG9uIGEgVENQIHNvY2tldCBpbiBhIHNvY2ttYXAuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowMy4zMDAyMDY1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3NDY4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmUzMTk0ZjA4MWZjODY5NTA0NmY0ZjNkMDdhNTg0MDY5YWZmOTZjMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAwMDowODowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tXFx0XFx0XFx0ICAgICBsb25nIHRpbWVvKVxcbitcXHRcXHRcXHQgICAgIGxvbmcgKnRpbWVvKVxcbiB7XFxuIFxcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC0xODcsMTIgKzE4NywxMiBAQCBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTilcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAoIXRpbWVvKVxcbitcXHRpZiAoISp0aW1lbylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbi1cXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcXHUwMDI2dGltZW8sXFxuK1xcdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIHRpbWVvLFxcbiBcXHRcXHRcXHQgICAgIWxpc3RfZW1wdHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX21zZykgfHxcXG4gXFx0XFx0XFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XFxuQEAgLTIyOSw2ICsyMjksNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XFxuIFxcdGludCBjb3BpZWQgPSAwO1xcbiBcXHR1MzIgc2VxO1xcbitcXHRsb25nIHRpbWVvO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSlcXG4gXFx0XFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4rXFxuIG1zZ19ieXRlc19yZWFkeTpcXG4gXFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xcbiBcXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxcbkBAIC0yODAsNyArMjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0fVxcbiBcXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbiBcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxcbkBAIC0yOTksNyArMzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiBcXHRcXHRpZiAoIXRpbWVvKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0zMTAsMTMgKzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcXHUwMDI2dGltZW8pO1xcbiBcXHRcXHRpZiAoZGF0YSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0Y29waWVkID0gZGF0YTtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAyNlxcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4gXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIG91dDpcXG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiB7XFxuIFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuIFxcdGludCBjb3BpZWQsIHJldDtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMzcxLDE0ICszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0fVxcbiBcXHRsb2NrX3NvY2soc2spO1xcbitcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4rXFx0XFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcXG4rXFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0XFx0XFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG4rXFx0XFx0XFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuK1xcdFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XFxuK1xcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTk9UQ09OTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghdGltZW8pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHJldCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbkBAIC0zOTAsNiArNDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKCFkYXRhIFxcdTAwMjZcXHUwMDI2IHRpbWVvIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuIFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdH1cXG4gXFx0cmV0ID0gY29waWVkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uZDE4ZmFmNDZmYWMwYzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuQEAgLTEzNzMsNiArMTM3MywxMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpXFxuIFxcdHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkICp0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCh2b2lkICphcmcpXFxuK3tcXG4rXFx0aW50IGZkID0gKihpbnQgKilhcmc7XFxuK1xcdGNoYXIgYnVmWzEwMjRdO1xcbitcXHR2b2lkICpyZXN1bHQgPSBOVUxMO1xcbitcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRcXHRpZiAobGVuID09IC0xKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJlc3VsdCA9ICh2b2lkICopMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghbGVuIHx8IGJ1ZltsZW4gLSAxXSA9PSAnZScpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzZW5kKGZkLCBcXFwidGVzdFxcXCIsIDQsIE1TR19OT1NJR05BTCk7XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGJvb2wgd2l0aF92ZXJkaWN0KVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nICpza2VsID0gTlVMTDtcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gTlVMTDtcXG4rXFx0c2l6ZV90IGJ1ZmxlbiA9IDEwMjQgKiAxMDI0ICogMjU7XFxuK1xcdGNoYXIgKmJ1ZiA9IE5VTEw7XFxuK1xcdGludCBtYXAsIGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtYXAgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnNvY2tfbWFwX21zZyk7XFxuK1xcbitcXHRpZiAod2l0aF92ZXJkaWN0KSB7XFxuK1xcdFxcdHByb2cgPSBza2VsLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xcbitcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfcHJvZ19hdHRhY2ggdmVyZGljdFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1ZiA9IG1hbGxvYyhidWZsZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcXFwibWFsbG9jIGJ1ZlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XFxuK1xcdGJ1ZltidWZsZW4gLSAxXSA9ICdlJztcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgMjAwOyArK2kpIHtcXG4rXFx0XFx0c3NpemVfdCBzZW50O1xcbitcXHRcXHRjaGFyIGlnbm9yZWRbMTI4XTtcXG4rXFx0XFx0cHRocmVhZF90IHRocmVhZDtcXG4rXFx0XFx0Ym9vbCB0aHJlYWRfY3JlYXRlZCA9IGZhbHNlO1xcbitcXHRcXHRzaXplX3QgcmVtID0gYnVmbGVuO1xcbitcXHRcXHRpbnQgYyA9IC0xLCBwID0gLTEsIHplcm8gPSAwO1xcbitcXHRcXHRib29sIHN1Y2Nlc3MgPSBmYWxzZTtcXG4rXFxuK1xcdFxcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcXHUwMDI2YywgXFx1MDAyNnApO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJjcmVhdGVfcGFpclxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGVuZF9hdHRlbXB0O1xcbitcXG4rXFx0XFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgXFx1MDAyNnRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW5fdGhyZWFkLCBcXHUwMDI2cCk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInB0aHJlYWRfY3JlYXRlXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcdFxcdHRocmVhZF9jcmVhdGVkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcXHUwMDI2emVybywgXFx1MDAyNmMsIEJQRl9BTlkpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX3VwZGF0ZV9lbGVtXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcbitcXHRcXHR3aGlsZSAocmVtKSB7XFxuK1xcdFxcdFxcdHNlbnQgPSB4c2VuZChjLCBidWYgKyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcXG4rXFx0XFx0XFx0aWYgKHNlbnQgPT0gLTEpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcdFxcdFxcdHJlbSAtPSBzZW50O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiB3ZSBjYW5ub3QgdXNlIHJlY3ZfdGltZW91dCgpLCBvdGhlcndpc2UgRUFHQUlOIHdvdWxkIGJlIGFuIGV4cGVjdGVkIGVycm5vLiAqL1xcbitcXHRcXHRlcnIgPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogd2UgYXJlIGNoZWNraW5nIGZvciB0aGUgaW52YWxpZCByZXR1cm4gb2YgRUFHQUlOLCBhbnkgb3RoZXIgcmV0dXJuIGlzIGNvbnNpZGVyZWRcXG4rXFx0XFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2ICFBU1NFUlRfTkVRKGVycm5vLCBFQUdBSU4sIFxcXCJyZWN2ZnJvbSBlYWdhaW5cXFwiKSlcXG4rXFx0XFx0XFx0Z290byBlbmRfYXR0ZW1wdDtcXG4rXFxuK1xcdFxcdHN1Y2Nlc3MgPSB0cnVlO1xcbitcXG4rZW5kX2F0dGVtcHQ6XFxuK1xcdFxcdGlmIChjIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKGMpO1xcbitcXG4rXFx0XFx0aWYgKHRocmVhZF9jcmVhdGVkKSB7XFxuK1xcdFxcdFxcdHZvaWQgKnJldHZhbCA9IE5VTEw7XFxuK1xcbitcXHRcXHRcXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBcXHUwMDI2cmV0dmFsKTtcXG4rXFx0XFx0XFx0aWYgKCFBU1NFUlRfTlVMTChyZXR2YWwsIFxcXCJyZXR2YWxcXFwiKSlcXG4rXFx0XFx0XFx0XFx0c3VjY2VzcyA9IGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXRocmVhZF9jcmVhdGVkIFxcdTAwMjZcXHUwMDI2IHAgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0Y2xvc2UocCk7XFxuK1xcdFxcdGlmICghc3VjY2VzcylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChidWYpXFxuK1xcdFxcdGZyZWUoYnVmKTtcXG4rXFxuK1xcdHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXFxuIHtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXFxcIikpXFxuQEAgLTE0NTEsNCArMTU3MSw4IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX1NUUkVBTSk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHVkcCBtdWx0aSBjaGFubmVsc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19ER1JBTSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpblxcXCIpKVxcbitcXHRcXHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGZhbHNlKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgcmVjdmZyb20gZWFnYWluIHdpdGggdmVyZGljdFxcXCIpKVxcbitcXHRcXHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjAzLjkyMzM3MzMwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxMzE5NjAzMTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmUzMTk0ZjA4MWZjODY5NTA0NmY0ZjNkMDdhNTg0MDY5YWZmOTZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA4OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi1cdFx0XHQgICAgIGxvbmcgdGltZW8pXG4rXHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXRpbWVvKVxuK1x0aWYgKCEqdGltZW8pXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFx1MDAyNndhaXQpO1xuIFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbi1cdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIFx1MDAyNnRpbWVvLFxuK1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdGludCBjb3BpZWRfZnJvbV9zZWxmID0gMDtcbiBcdGludCBjb3BpZWQgPSAwO1xuIFx0dTMyIHNlcTtcbitcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbitcbiBtc2dfYnl0ZXNfcmVhZHk6XG4gXHRjb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCBcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcbiBcdC8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5XG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuQEAgLTI5OSw3ICszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gXHRcdGlmICghdGltZW8pIHtcbiBcdFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTMxMCwxMyArMzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0Y29waWVkID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiBcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbitcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIHtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRpbnQgY29waWVkLCByZXQ7XG4rXHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMzcxLDE0ICszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4rXG4rXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuK1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4rXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbitcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4rXHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4rXHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4rXHRcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkge1xuK1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbitcdFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuK1x0XHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuK1x0XHRcdH1cbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbitcdFx0XHRyZXQgPSAtRU5PVENPTk47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKCF0aW1lbykge1xuK1x0XHRcdHJldCA9IC1FQUdBSU47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiArNDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0XHR9XG4rXHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4rXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uZDE4ZmFmNDZmYWMwYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTEzNzMsNiArMTM3MywxMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpXG4gXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxuK3tcbitcdGludCBmZCA9ICooaW50ICopYXJnO1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHR2b2lkICpyZXN1bHQgPSBOVUxMO1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4rXG4rXHRcdGlmIChsZW4gPT0gLTEpIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXN1bHQgPSAodm9pZCAqKTE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFsZW4gfHwgYnVmW2xlbiAtIDFdID09ICdlJylcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHNlbmQoZmQsIFwidGVzdFwiLCA0LCBNU0dfTk9TSUdOQUwpO1xuK1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHJlc3VsdDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMO1xuK1x0c2l6ZV90IGJ1ZmxlbiA9IDEwMjQgKiAxMDI0ICogMjU7XG4rXHRjaGFyICpidWYgPSBOVUxMO1xuK1x0aW50IG1hcCwgZXJyO1xuK1xuK1x0c2tlbCA9IHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdG1hcCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zb2NrX21hcF9tc2cpO1xuK1xuK1x0aWYgKHdpdGhfdmVyZGljdCkge1xuK1x0XHRwcm9nID0gc2tlbC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xuK1x0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfYXR0YWNoIHZlcmRpY3RcIikpXG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YnVmID0gbWFsbG9jKGJ1Zmxlbik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcIm1hbGxvYyBidWZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XG4rXHRidWZbYnVmbGVuIC0gMV0gPSAnZSc7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgMjAwOyArK2kpIHtcbitcdFx0c3NpemVfdCBzZW50O1xuK1x0XHRjaGFyIGlnbm9yZWRbMTI4XTtcbitcdFx0cHRocmVhZF90IHRocmVhZDtcbitcdFx0Ym9vbCB0aHJlYWRfY3JlYXRlZCA9IGZhbHNlO1xuK1x0XHRzaXplX3QgcmVtID0gYnVmbGVuO1xuK1x0XHRpbnQgYyA9IC0xLCBwID0gLTEsIHplcm8gPSAwO1xuK1x0XHRib29sIHN1Y2Nlc3MgPSBmYWxzZTtcbitcbitcdFx0ZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFx1MDAyNmMsIFx1MDAyNnApO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY3JlYXRlX3BhaXJcIikpXG4rXHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbitcbitcdFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBcdTAwMjZ0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCwgXHUwMDI2cCk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJwdGhyZWFkX2NyZWF0ZVwiKSlcbitcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuK1x0XHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XG4rXG4rXHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcdTAwMjZ6ZXJvLCBcdTAwMjZjLCBCUEZfQU5ZKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9tYXBfdXBkYXRlX2VsZW1cIikpXG4rXHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbitcbitcdFx0d2hpbGUgKHJlbSkge1xuK1x0XHRcdHNlbnQgPSB4c2VuZChjLCBidWYgKyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcbitcdFx0XHRpZiAoc2VudCA9PSAtMSlcbitcdFx0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXHRcdFx0cmVtIC09IHNlbnQ7XG4rXHRcdH1cbitcbitcdFx0Lyogd2UgY2Fubm90IHVzZSByZWN2X3RpbWVvdXQoKSwgb3RoZXJ3aXNlIEVBR0FJTiB3b3VsZCBiZSBhbiBleHBlY3RlZCBlcnJuby4gKi9cbitcdFx0ZXJyID0gcmVjdmZyb20oYywgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0LypcbitcdFx0ICogd2UgYXJlIGNoZWNraW5nIGZvciB0aGUgaW52YWxpZCByZXR1cm4gb2YgRUFHQUlOLCBhbnkgb3RoZXIgcmV0dXJuIGlzIGNvbnNpZGVyZWRcbitcdFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cbitcdFx0ICovXG4rXHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2ICFBU1NFUlRfTkVRKGVycm5vLCBFQUdBSU4sIFwicmVjdmZyb20gZWFnYWluXCIpKVxuK1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXG4rXHRcdHN1Y2Nlc3MgPSB0cnVlO1xuK1xuK2VuZF9hdHRlbXB0OlxuK1x0XHRpZiAoYyBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UoYyk7XG4rXG4rXHRcdGlmICh0aHJlYWRfY3JlYXRlZCkge1xuK1x0XHRcdHZvaWQgKnJldHZhbCA9IE5VTEw7XG4rXG4rXHRcdFx0cHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbitcdFx0XHRpZiAoIUFTU0VSVF9OVUxMKHJldHZhbCwgXCJyZXR2YWxcIikpXG4rXHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG4rXHRcdH1cbitcbitcdFx0aWYgKCF0aHJlYWRfY3JlYXRlZCBcdTAwMjZcdTAwMjYgcCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UocCk7XG4rXHRcdGlmICghc3VjY2VzcylcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitjbGVhbnVwOlxuK1x0aWYgKGJ1ZilcbitcdFx0ZnJlZShidWYpO1xuK1xuK1x0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbit9XG4rXG4gdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXCIpKVxuQEAgLTE0NTEsNCArMTU3MSw4IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXG4gXHRcdHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX1NUUkVBTSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzXCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19ER1JBTSk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgcmVjdmZyb20gZWFnYWluXCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGZhbHNlKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCByZWN2ZnJvbSBlYWdhaW4gd2l0aCB2ZXJkaWN0XCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjAzLjkyMzM3NjQ3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDQ3MDk5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGEgcmVsYXRlZCB0ZXN0IHVwZGF0ZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBrZXJuZWwncyBUQ1AgQlBGL3NvY2ttYXAgYXJlYS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gaG93IHRoZSB0aW1lb3V0IGlzIGhhbmRsZWQgd2l0aGluIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIFByZXZpb3VzbHkgaXQgdG9vayBhIGBsb25nIHRpbWVvYCwgYnV0IHRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB0YWtlIGEgYGxvbmcgKnRpbWVvYCDigJMgYSBwb2ludGVyLiBUaGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQsIG5hbWVseSBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLCB3aGVyZSB0aGV5IG5vdyBwYXNzIHRoZSBhZGRyZXNzIG9mIHRoZSB0aW1lb3V0IHZhcmlhYmxlIChgXHUwMDI2dGltZW9gKSBpbnN0ZWFkIG9mIHRoZSB2YWx1ZSBpdHNlbGYuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgc3VnZ2VzdHMgYSBkZXNpcmUgdG8gbW9kaWZ5IHRoZSB0aW1lb3V0IHZhbHVlICp3aXRoaW4qIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGV5IGFyZSB0cnlpbmcgdG8gcHJvdmlkZSBmaW5lci1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgdGltZW91dCBoYW5kbGluZy4gUGVyaGFwcywgdG8gcmVzb2x2ZSBhbiBpc3N1ZSB3aGVyZSBgcmVjdmZyb21gIG1pZ2h0IGluY29ycmVjdGx5IHJldHVybiBgRUFHQUlOYCB3aGVuIGl0IHNob3VsZG4ndCDigJMgYXMgdGhleSBtZW50aW9uZWQuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUncyBtaW51dGlhZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgdGhpcyBtb2R1bGUuIEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBgdGNwX2JwZi5jYC4gVGltZSB0byBzZWUgd2hhdCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEknbGwgc2VhcmNoIHRocm91Z2ggYG5ldC9pcHY0L01ha2VmaWxlYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRob3NlIG9wdGlvbnMgd2lsbCBoZWxwIG1lIGludGVycHJldCB0aGlzIGNoYW5nZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowOS4yNjgwODg3OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDM5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSArPSB0Y3BfaWxsaW5vaXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjA5LjQ5MjEzMzcxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTgyMTMxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBleHByZXNzZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gbm90aW5nIGlzIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gTm8gc3VycHJpc2VzIHRoZXJlOyB3ZSBuZWVkIHRoYXQgZm91bmRhdGlvbmFsIHNvY2tldCBtZXNzYWdpbmcgc3VwcG9ydCwgb2J2aW91c2x5LiBUaGVuLCBmb3IgbGV2ZXJhZ2luZyBCUEYsIHdoaWNoIEknbSBhc3N1bWluZyBpcyB0aGUgZ29hbCBoZXJlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyAqZGVmaW5pdGVseSogZ29pbmcgdG8gYmUgbmVlZGVkLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgc2hvdWxkIHF1aWNrbHkgZG8gYSBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIGB0Y3BfYnBmLmNgIGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBCZXR0ZXIgdG8gaGF2ZSB0aGVtIGFsbCBpbiBvbmUgcGxhY2UgYW5kIG5vdCBmaW5kIG91dCBsYXRlciBJIG5lZWQgdG8gcmVjb21waWxlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGZvY3VzIG9uIHRjcCBhbmQgYnBmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MTIuNTkwMzQ5NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NzE4Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxODA6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzEzPXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzIzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI0LWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ni19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz04MDM9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTgwOS19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMDojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjEyLjc3OTA3Mzk0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTI0ODMxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQlBGLUVuYWJsZWQgVENQIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBUaGUgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGluZGljYXRlcyB0aGVzZSBhcmUgcmVsYXRlZCB0byB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBpbnRlZ3JhdGlvbiwgYW5kIHNwZWNpZmljYWxseSwgQlBGIHN5c2NhbGwgZW5oYW5jZW1lbnRzLiBUaGF0J3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYnVpbGRpbmcgb24gdGhlIGV4aXN0aW5nIFRDUCByZWNlaXZlIHBhdGggdG8gc3VwcG9ydCBCUEYgZmlsdGVyaW5nIGFuZCBwcm9jZXNzaW5nIGR1cmluZyBgcmVjdm1zZ2AgY2FsbHMuXG5cblRoZSBjb3JlIG9mIHRoaXMgaGFzIHRvIGJlIGluIHRoZSBwYXJzaW5nIGFuZCBgcmVjdm1zZ2AgZnVuY3Rpb25zLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIGxvZ2ljIGlzIGludGVncmF0ZWQgaW50byB0aGUgdHlwaWNhbCBgcmVjdm1zZ2AgZmxvdyBoZXJlLiBBcmUgdGhleSB1c2luZyB0aGUgQlBGIHByb2dyYW0gdG8gdmFsaWRhdGUgb3IgbW9kaWZ5IHRoZSBpbmNvbWluZyBkYXRhLCBjb250cm9sIGJ1ZmZlciBhbGxvY2F0aW9uLCBvciBzb21ldGhpbmcgbW9yZT8gVGhlIHBhcnNlciBmdW5jdGlvbiB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCUEYgcHJvZ3JhbSBpbnRlcnByZXRzIHRoZSBpbmNvbWluZyBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBCUEYgcHJvZ3JhbSBpcyByZXRyaWV2ZWQsIGFuZCBob3cgZGF0YSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgVENQIHN0YWNrIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGByZWN2bXNnYCBvcGVyYXRpb24gd2l0aCBCUEYgcHJvZ3JhbXMgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoxNi40MzE1NTk5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDMyODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVxcdFxcdFxcdCAgIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02NzQ9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzktXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXFx0XFx0PSBzb2NrX21hcF9jbG9zZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjgwOlxcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4MS1cXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVxcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4Ny1cXHRwcm90W1RDUF9CUEZfUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4ODpcXHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdHByb3RbVENQX0JQRl9UWFJYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjkxOlxcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyND1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDctXFx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XFx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQ5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoxNi42MTM1OTkzMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM2Njk1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBSZWN2bXNnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gVGhleSBhcmUgY2FsbGVkIHZpYSBgcmVjdm1zZ2Agb24gYSBUQ1Agc29ja2V0IHRoYXQgaGFzIGJlZW4gYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIG1lYW5zIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIGRlZmluaXRlbHkga2V5IGhlcmUuIE5vdywgSSB3YW50IHRvIGJlIHRob3JvdWdoLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyBzZWxlY3RlZCBieSBlaXRoZXIgYENPTkZJR19DR1JPVVBfQlBGYCBvciBwb3NzaWJseSBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbG9uZyB3aXRoIGBDT05GSUdfSU5FVGAgaW4gc29tZSBzY2VuYXJpb3MuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGBuZXQvS2NvbmZpZ2AgYW5kIHBvdGVudGlhbGx5IGBuZXQvaXB2NC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWcgb3B0aW9ucyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBCUEYgaW50ZWdyYXRpb24gd2l0aCBUQ1Agc29ja2V0cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIwLjU1MDI5Nzc0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDEyMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIwLjc3NjcxNTk5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA2ODE4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIFNlbGVjdG9yKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBwaW5wb2ludCB3aGVyZSBgTkVUX1NPQ0tfTVNHYCBpcyBiZWluZyB1dGlsaXplZC4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGV4ZXJjaXNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBob3cgaXQgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrIEknbSB3b3JraW5nIHdpdGguIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRocm91Z2ggdGhlIGNvZGUsIHN0YXJ0aW5nIHdpdGggdGhlIGltbWVkaWF0ZSBjb250ZXh0IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBmbG93IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlbGVjdG9yIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBlcnJvciBoYW5kbGluZy4gRXNzZW50aWFsbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcm9sZSBgTkVUX1NPQ0tfTVNHYCBwbGF5cyBpbiB0aGUgbmV0d29yayBzb2NrZXQgbWVzc2FnaW5nIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIzLjU4MzUzNzgxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDczMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIzLjc2OTYxNjAzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMzODU4MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gQlBGIFN0cmVhbSBQYXJzaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGEgc3BlY2lmaWMgZGV0YWlsOiB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBzZWVtcyB0byBiZSBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB3aXRoIGBORVRfU09DS19NU0dgLiBUaGF0IHJlbGF0aW9uc2hpcCBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEkgbmVlZCB0byBlc3RhYmxpc2ggYSBjbGVhcmVyIHBpY3R1cmUuIFdoYXQncyB0aGUga2V5IHRoYXQgdW5sb2NrcyB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCB0aGVuPyBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgbG9naWNhbCBmbG93IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29tcG9uZW50IG9yIG1lY2hhbmlzbSBpcyByZXNwb25zaWJsZSBmb3IgKnNlbGVjdGluZyogb3IgKnRyaWdnZXJpbmcqIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MjYuODAzNDc4NzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTcyMTE1OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoyNy4xMDA2OTg2OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzODgwNzAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZywgYW5kIHRoZSBrZXJuZWwgY29uZmlnIGlzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgQlBGX1NUUkVBTV9QQVJTRVJgLiBJIGV4cGVjdCB0aGF0IHRoaXMgd2lsbCBnaXZlIG1lIHNvbWUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCByZWxhdGUgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIG1hcCB0aGUgcHJvYmxlbSBJIGhhdmUgdG8gdGhlIHJlbGV2YW50IGtlcm5lbCBmZWF0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoyOS43Mzk1MDg3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MjQxMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjI5Ljk0Njc1ODA3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA3MTk4MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcyBhIHVzZXItY29uZmlndXJhYmxlIG9wdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBgQ0dST1VQX0JQRmAgYXMgYSBwb3RlbnRpYWwgY28tZGVwZW5kZW50IG9yIHJlbGF0ZWQgZmVhdHVyZS4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYW5kIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGRlZmluaXRpdmUgc291cmNlcy4gSSdsbCBoZWFkIHN0cmFpZ2h0IHRvIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSBnaXZlbiB0aGUgQlBGIGZvY3VzLCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhlc2Ugc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBicm9hZGVyIGNvbnRleHQgZm9yIGJvdGggb3B0aW9ucywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kIHdoZW4gaW50ZWdyYXRpbmcgdGhlbSwgb3IgY29uc2lkZXJpbmcgdGhlbSBpbiBhbiBleGlzdGluZyBwcm9qZWN0LiBJJ20gYWZ0ZXIgdGhlIGZ1bGwgcGljdHVyZSAtIHdoYXQgdGhlc2UgZG8sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBrZXJuZWwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjMzLjA1Mzk1ODY4OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NzEzNDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjM3LjMyMTEwNDQ0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA4MjQ3OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBUQ1AgU29ja21hcCBhbmQgcmVjdm1zZyoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGVhZGluZyBtZSB0byBmb2N1cyBvbiBgTkVUX1NPQ0tfTVNHYCBiZWNhdXNlIGBCUEZfU1lTQ0FMTGAgKHN0YW5kYXJkIGZvciBmdXp6aW5nLCByaWdodD8pIHNlZW1zIHRvIGVuYWJsZSBpdCB3aGVuIGBORVRgIGlzIGFsc28gZW5hYmxlZC4gVGhhdCBtZWFucyBJJ2xsIGJlIGxvb2tpbmcgYXQgY29kZSB0aGF0IGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCwgd2hpY2gsIGFjY29yZGluZyB0byB0aGUgYnVpbGQgc3lzdGVtIChgbmV0L2lwdjQvTWFrZWZpbGVgKSwgaW5jbHVkZXMgYHRjcF9icGYub2AuIE1ha2VzIHNlbnNlLCBzbyBpdCdzIGNvbXBpbGVkIGluLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQ/IExldCdzIHNlZS4uLiBJIGhhdmUgYHRjcF9tc2dfd2FpdF9kYXRhYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEFoYSEgVGhlc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGdldHMgYWRkZWQgdG8gYSBzb2NrbWFwIGFuZCB0aGVuIGByZWN2bXNnYCBpcyBjYWxsZWQuIEJpbmdvISBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggdGFyZ2V0aW5nIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgIOKAkyB0aGVzZSBhcmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgdGNwX21zZ193YWl0X2RhdGFgLCBzaW5jZSBpdCdzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbi5cblxuT2theSwgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRvIGJ1aWxkIHRoaXMuIEkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRfU09DS19NU0dgIGFyZSBuZWNlc3NhcnkuIE9idmlvdXNseSwgYENPTkZJR19JTkVUYCBpcyB0b28uIFdoYXQgYWJvdXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmA/IFRoYXQgbWlnaHQgYmUgbmVlZGVkIGZvciBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIExldCdzIGRpZyBpbiBhIGJpdCBtb3JlIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6NDMuMTI5MzU1MDIxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE4ODkzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc0PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg3LVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njg4OlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg5LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTAtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTE6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY5Mi19XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI0PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ny1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc0ODpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDktXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjQzLjMzMTI0OTc4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk4MjU4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGLXJlbGF0ZWQgYHJlY3Ztc2dgIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHJlY3Ztc2dgIGlzIGhhbmRsZWQgaW4gdGhpcyBjb250ZXh0LiBJdCBhcHBlYXJzIHRoaXMgY29kZSBzcGVjaWZpY2FsbHkgdGllcyBpbnRvIGBwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dgIGFuZCBgcHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dgLiBSaWdodCwgdGhlc2UgYXJlIHRoZSBob29rcyB1c2VkIHdoZW4gYSBCUEYgcHJvZ3JhbSBpcyBhY3RpdmUgb24gYSBzb2NrbWFwLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSBwcm9ncmFtIGxpa2UgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIG9yIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGhhcyBiZWVuIGF0dGFjaGVkLiBUaGUgdGVzdCBjYXNlIGB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluYCBzZWVtcyB0byBiZSBhdHRhY2hpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgLiBUaGVyZWZvcmUsIHRoZSBtaW5pbWFsIHJlcXVpcmVtZW50cyBzaG91bGQgYmUgaGF2aW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVF9TT0NLX01TR2AgZW5hYmxlZC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZzogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGlzbid0IHNvbWVob3cgbmVjZXNzYXJ5IGZvciBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIHRyaXZpYWwsIGJ1dCBpdCBuZXZlciBodXJ0cyB0byBiZSB0aG9yb3VnaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTExMjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6NDguODI5NTEwODI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NDk2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9NzEzPXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzIzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI0LWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ni19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6NDguOTYyMjY2NjQ1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDMzMzU2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0bWFwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBsaXZlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBkZWZpbml0ZWx5IG5vdCBiZWhpbmQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilgLCBhcyBJIGluaXRpYWxseSB0aG91Z2h0OyBpdCdzIGd1YXJkZWQgYnkgdGhlIG1vcmUgZ2VuZXJhbCBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHdoaWNoLCBvZiBjb3Vyc2UsIGNvdmVycyB0aGUgbWFqb3JpdHkgb2YgdGhhdCBmaWxlLiBHb29kIHRvIG1ha2Ugc3VyZSBJJ20gcHJlY2lzZSBhYm91dCB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuTGV0IG1lIGp1c3QgbGlzdCB0aG9zZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgbXkgb3duIGNsYXJpdHk6IGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfU09DS19NU0dgLiBHb3QgaXQuXG5cbk5vdywgZm9jdXNpbmcgaW4gb24gdGhlIGtleSBzeW1ib2xzLCBJJ20gdGhpbmtpbmcgYWJvdXQ6IGB0Y3BfYnBmX3JlY3Ztc2dgLCB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoaWNoIHNlZW1zIGNlbnRyYWwgdG8gdGhpcywgYW5kIGFsc28gYHRjcF9tc2dfd2FpdF9kYXRhYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRpbWVvdXQgaGFuZGxpbmcgaXMgbWFuYWdlZCBpbiBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgaXRzIHBhcnNlciB3aGVuIHdlJ3JlIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IHdpdGhpbiBhIHNvY2ttYXAgY29udGV4dC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSBgcmVjdmZyb21gIGNvdWxkIGluY29ycmVjdGx5IHJldHVybiBgRUFHQUlOYCDigJMgd2hpY2ggd291bGQgYmUgYSBwcmV0dHkgbmFzdHkgcmVncmVzc2lvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29kZSBiZWhhdmVzIGFzIGV4cGVjdGVkIGFuZCB0byBndWFyZCBhZ2FpbnN0IGludHJvZHVjaW5nIGFueSByZWdyZXNzaW9ucy4gSSBuZWVkIHRvIGZsYWcgdGhhdCBmb3IgY29uc2lkZXJhdGlvbi5cblxuT2theSwgSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGlzLiBJJ2xsIG1ha2UgYSBjYWxsIG9uIHRoaXMgdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzk5LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODo1NC45NjU2MDU2NzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzczNjcxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoZW4gd2FpdGluZyBmb3IgZGF0YSBvbiBhIFRDUCBzb2NrZXQgaW4gYSBzb2NrbWFwLiBJdCBmaXhlcyBhIGJ1ZyB3aGVyZSBgcmVjdmZyb21gIGNvdWxkIGluY29ycmVjdGx5IHJldHVybiBgRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvciBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 23:47:02 +0000 UTC FinishedAt: 2026-07-21 00:08:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8fc574321e59a2484063b2e75016772815038608", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8fc574321e59a2484063b2e75016772815038608", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "5f0096f7-90ec-4621-b3c3-5c7ded839535" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg", "tcp_bpf_recvmsg_parser", "tcp_msg_wait_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hlbiB3YWl0aW5nIGZvciBkYXRhIG9uIGEgVENQIHNvY2tldCBpbiBhIHNvY2ttYXAuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmUzMTk0ZjA4MWZjODY5NTA0NmY0ZjNkMDdhNTg0MDY5YWZmOTZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA4OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLmFhNWM1ZDc0MTU5OWEzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbiYjNDM7XHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbiYjNDM7XHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4mIzQzO1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICYjNDM7MjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgJiM0Mzs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuJiM0MztcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuJiM0MztcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgJiM0MzszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4mIzQzO1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4mIzQzO1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4mIzQzO1x0XHRcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuJiM0MztcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuJiM0MztcdFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkge1xuJiM0MztcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRpbWVvKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiAmIzQzOzQzOSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uZDE4ZmFmNDZmYWMwYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTEzNzMsNiAmIzQzOzEzNzMsMTI2IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhpbnQgc290eXBlKVxuIFx0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkICp0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCh2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQgPSAqKGludCAqKWFyZztcbiYjNDM7XHRjaGFyIGJ1ZlsxMDI0XTtcbiYjNDM7XHR2b2lkICpyZXN1bHQgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSAtMSkge1xuJiM0MztcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdHJlc3VsdCA9ICh2b2lkICopMTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFsZW4gfHwgYnVmW2xlbiAtIDFdID09ICYjMzk7ZSYjMzk7KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlbmQoZmQsIFwmIzM0O3Rlc3RcJiMzNDssIDQsIE1TR19OT1NJR05BTCk7XG4mIzQzO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlc3VsdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nICpza2VsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMO1xuJiM0MztcdHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuJiM0MztcdGNoYXIgKmJ1ZiA9IE5VTEw7XG4mIzQzO1x0aW50IG1hcCwgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWFwID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLnNvY2tfbWFwX21zZyk7XG4mIzQzO1xuJiM0MztcdGlmICh3aXRoX3ZlcmRpY3QpIHtcbiYjNDM7XHRcdHByb2cgPSBza2VsLVx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3Q7XG4mIzQzO1x0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfcHJvZ19hdHRhY2ggdmVyZGljdFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IG1hbGxvYyhidWZsZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihidWYsIFwmIzM0O21hbGxvYyBidWZcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XG4mIzQzO1x0YnVmW2J1ZmxlbiAtIDFdID0gJiMzOTtlJiMzOTs7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyAyMDA7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzc2l6ZV90IHNlbnQ7XG4mIzQzO1x0XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XHRcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0XHRib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7XG4mIzQzO1x0XHRzaXplX3QgcmVtID0gYnVmbGVuO1xuJiM0MztcdFx0aW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDtcbiYjNDM7XHRcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Y3JlYXRlX3BhaXJcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQsIFx1MDAyNnApO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4mIzQzO1x0XHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNmMsIEJQRl9BTlkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX3VwZGF0ZV9lbGVtXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAocmVtKSB7XG4mIzQzO1x0XHRcdHNlbnQgPSB4c2VuZChjLCBidWYgJiM0MzsgKGJ1ZmxlbiAtIHJlbSksIHJlbSwgMCk7XG4mIzQzO1x0XHRcdGlmIChzZW50ID09IC0xKVxuJiM0MztcdFx0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4mIzQzO1x0XHRcdHJlbSAtPSBzZW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHdlIGNhbm5vdCB1c2UgcmVjdl90aW1lb3V0KCksIG90aGVyd2lzZSBFQUdBSU4gd291bGQgYmUgYW4gZXhwZWN0ZWQgZXJybm8uICovXG4mIzQzO1x0XHRlcnIgPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZFxuJiM0MztcdFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgXCYjMzQ7cmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHRzdWNjZXNzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO2VuZF9hdHRlbXB0OlxuJiM0MztcdFx0aWYgKGMgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRjbG9zZShjKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGhyZWFkX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWQsIFx1MDAyNnJldHZhbCk7XG4mIzQzO1x0XHRcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcJiMzNDtyZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRocmVhZF9jcmVhdGVkIFx1MDAyNlx1MDAyNiBwIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Y2xvc2UocCk7XG4mIzQzO1x0XHRpZiAoIXN1Y2Nlc3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGJ1ZilcbiYjNDM7XHRcdGZyZWUoYnVmKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXCYjMzQ7KSlcbkBAIC0xNDUxLDQgJiM0MzsxNTcxLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzXCYjMzQ7KSlcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oZmFsc2UpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluIHdpdGggdmVyZGljdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlMzE5NGYwODFmYzg2OTUwNDZmNGYzZDA3YTU4NDA2OWFmZjk2YzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyMSAwMDowODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCi0JCQkgICAgIGxvbmcgdGltZW8pCiYjNDM7CQkJICAgICBsb25nICp0aW1lbykKIHsKIAlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCByZXQgPSAwOwpAQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCWlmIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKQogCQlyZXR1cm4gMTsKIAotCWlmICghdGltZW8pCiYjNDM7CWlmICghKnRpbWVvKQogCQlyZXR1cm4gcmV0OwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwogCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7Ci0JcmV0ID0gc2tfd2FpdF9ldmVudChzaywgJmFtcDt0aW1lbywKJiM0MzsJcmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sCiAJCQkgICAgIWxpc3RfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19tc2cpIHx8CiAJCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSwgJmFtcDt3YWl0KTsKIAlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJaW50IGNvcGllZF9mcm9tX3NlbGYgPSAwOwogCWludCBjb3BpZWQgPSAwOwogCXUzMiBzZXE7CiYjNDM7CWxvbmcgdGltZW87CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTVNHX0VSUlFVRVVFKSkKIAkJcmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pOwpAQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQl9CiAJfQogCiYjNDM7CXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKJiM0MzsKIG1zZ19ieXRlc19yZWFkeToKIAljb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCAmYW1wO2NvcGllZF9mcm9tX3NlbGYpOwogCS8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5CkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJfQogCXNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQpAQCAtMjk5LDcgJiM0MzszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJCWlmICghdGltZW8pIHsKIAkJCWNvcGllZCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTMxMCwxMyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQljb3BpZWQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJaWYgKGRhdGEgJmFtcDsmYW1wOyAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQogCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQlpZiAoIWRhdGEgJmFtcDsmYW1wOyB0aW1lbyAmZ3Q7IDApCiYjNDM7CQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiAJCWNvcGllZCA9IC1FQUdBSU47CiAJfQogb3V0OgpAQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIHsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCWludCBjb3BpZWQsIHJldDsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0zNzEsMTQgJiM0MzszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAl9CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7Ci0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiYjNDM7CQkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gc29ja19lcnJvcihzayk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCWlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQomIzQzOwkJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKJiM0MzsJCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkgewomIzQzOwkJCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCQlza19wc29ja19wdXQoc2ssIHBzb2NrKTsKJiM0MzsJCQkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKJiM0MzsJCQlyZXQgPSAtRU5PVENPTk47CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRpbWVvKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQlyZXQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CkBAIC0zOTAsNiAmIzQzOzQzOSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiAJCQlyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7CiAJCX0KJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiAJcmV0ID0gY29waWVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jCmluZGV4IGNiMzIyOTcxMWY5M2EzLi5kMThmYWY0NmZhYzBjMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwpAQCAtMTM3Myw2ICYjNDM7MTM3MywxMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpCiAJdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkICp0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCh2b2lkICphcmcpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSAqKGludCAqKWFyZzsKJiM0MzsJY2hhciBidWZbMTAyNF07CiYjNDM7CXZvaWQgKnJlc3VsdCA9IE5VTEw7CiYjNDM7CiYjNDM7CXdoaWxlICh0cnVlKSB7CiYjNDM7CQlzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChsZW4gPT0gLTEpIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJlc3VsdCA9ICh2b2lkICopMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbGVuIHx8IGJ1ZltsZW4gLSAxXSA9PSAmIzM5O2UmIzM5OykKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlzZW5kKGZkLCAmIzM0O3Rlc3QmIzM0OywgNCwgTVNHX05PU0lHTkFMKTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdWx0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGJvb2wgd2l0aF92ZXJkaWN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc29ja21hcF9wYXNzX3Byb2cgKnNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMOwomIzQzOwlzaXplX3QgYnVmbGVuID0gMTAyNCAqIDEwMjQgKiAyNTsKJiM0MzsJY2hhciAqYnVmID0gTlVMTDsKJiM0MzsJaW50IG1hcCwgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltYXAgPSBicGZfbWFwX19mZChza2VsLSZndDttYXBzLnNvY2tfbWFwX21zZyk7CiYjNDM7CiYjNDM7CWlmICh3aXRoX3ZlcmRpY3QpIHsKJiM0MzsJCXByb2cgPSBza2VsLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0OwomIzQzOwkJZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfcHJvZ19hdHRhY2ggdmVyZGljdCYjMzQ7KSkKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmID0gbWFsbG9jKGJ1Zmxlbik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidWYsICYjMzQ7bWFsbG9jIGJ1ZiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWVtc2V0KGJ1ZiwgMCwgYnVmbGVuKTsKJiM0MzsJYnVmW2J1ZmxlbiAtIDFdID0gJiMzOTtlJiMzOTs7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgMjAwOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3NpemVfdCBzZW50OwomIzQzOwkJY2hhciBpZ25vcmVkWzEyOF07CiYjNDM7CQlwdGhyZWFkX3QgdGhyZWFkOwomIzQzOwkJYm9vbCB0aHJlYWRfY3JlYXRlZCA9IGZhbHNlOwomIzQzOwkJc2l6ZV90IHJlbSA9IGJ1ZmxlbjsKJiM0MzsJCWludCBjID0gLTEsIHAgPSAtMSwgemVybyA9IDA7CiYjNDM7CQlib29sIHN1Y2Nlc3MgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAmYW1wO2MsICZhbXA7cCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7Y3JlYXRlX3BhaXImIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsKJiM0MzsJCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCBOVUxMLCAmYW1wO3Rlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW5fdGhyZWFkLCAmYW1wO3ApOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3B0aHJlYWRfY3JlYXRlJiMzNDspKQomIzQzOwkJCWdvdG8gZW5kX2F0dGVtcHQ7CiYjNDM7CQl0aHJlYWRfY3JlYXRlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgJmFtcDt6ZXJvLCAmYW1wO2MsIEJQRl9BTlkpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9tYXBfdXBkYXRlX2VsZW0mIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsKJiM0MzsJCXdoaWxlIChyZW0pIHsKJiM0MzsJCQlzZW50ID0geHNlbmQoYywgYnVmICYjNDM7IChidWZsZW4gLSByZW0pLCByZW0sIDApOwomIzQzOwkJCWlmIChzZW50ID09IC0xKQomIzQzOwkJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwkJCXJlbSAtPSBzZW50OwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogd2UgY2Fubm90IHVzZSByZWN2X3RpbWVvdXQoKSwgb3RoZXJ3aXNlIEVBR0FJTiB3b3VsZCBiZSBhbiBleHBlY3RlZCBlcnJuby4gKi8KJiM0MzsJCWVyciA9IHJlY3Zmcm9tKGMsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogd2UgYXJlIGNoZWNraW5nIGZvciB0aGUgaW52YWxpZCByZXR1cm4gb2YgRUFHQUlOLCBhbnkgb3RoZXIgcmV0dXJuIGlzIGNvbnNpZGVyZWQKJiM0MzsJCSAqIHN1Y2Nlc3NmdWwgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHRlc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChlcnIgJmx0OyAwICZhbXA7JmFtcDsgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgJiMzNDtyZWN2ZnJvbSBlYWdhaW4mIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsKJiM0MzsJCXN1Y2Nlc3MgPSB0cnVlOwomIzQzOwomIzQzO2VuZF9hdHRlbXB0OgomIzQzOwkJaWYgKGMgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShjKTsKJiM0MzsKJiM0MzsJCWlmICh0aHJlYWRfY3JlYXRlZCkgewomIzQzOwkJCXZvaWQgKnJldHZhbCA9IE5VTEw7CiYjNDM7CiYjNDM7CQkJcHRocmVhZF9qb2luKHRocmVhZCwgJmFtcDtyZXR2YWwpOwomIzQzOwkJCWlmICghQVNTRVJUX05VTEwocmV0dmFsLCAmIzM0O3JldHZhbCYjMzQ7KSkKJiM0MzsJCQkJc3VjY2VzcyA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCF0aHJlYWRfY3JlYXRlZCAmYW1wOyZhbXA7IHAgJmd0Oz0gMCkKJiM0MzsJCQljbG9zZShwKTsKJiM0MzsJCWlmICghc3VjY2VzcykKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChidWYpCiYjNDM7CQlmcmVlKGJ1Zik7CiYjNDM7CiYjNDM7CXRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwogdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlJiMzNDspKQpAQCAtMTQ1MSw0ICYjNDM7MTU3MSw4IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpCiAJCXRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX1NUUkVBTSk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHVkcCBtdWx0aSBjaGFubmVscyYjMzQ7KSkKIAkJdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluJiMzNDspKQomIzQzOwkJdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2FpbihmYWxzZSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCByZWN2ZnJvbSBlYWdhaW4gd2l0aCB2ZXJkaWN0JiMzNDspKQomIzQzOwkJdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbih0cnVlKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYSByZWxhdGVkIHRlc3QgdXBkYXRlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBrZXJuZWwmIzM5O3MgVENQIEJQRi9zb2NrbWFwIGFyZWEuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGhvdyB0aGUgdGltZW91dCBpcyBoYW5kbGVkIHdpdGhpbiBgdGNwX21zZ193YWl0X2RhdGFgLiBQcmV2aW91c2x5IGl0IHRvb2sgYSBgbG9uZyB0aW1lb2AsIGJ1dCB0aGlzIHBhdGNoIGNoYW5nZXMgaXQgdG8gdGFrZSBhIGBsb25nICp0aW1lb2Ag4oCTIGEgcG9pbnRlci4gVGhpcyBjaGFuZ2UgcmlwcGxlcyB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBuYW1lbHkgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCwgd2hlcmUgdGhleSBub3cgcGFzcyB0aGUgYWRkcmVzcyBvZiB0aGUgdGltZW91dCB2YXJpYWJsZSAoYCZhbXA7dGltZW9gKSBpbnN0ZWFkIG9mIHRoZSB2YWx1ZSBpdHNlbGYuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIGEgZGVzaXJlIHRvIG1vZGlmeSB0aGUgdGltZW91dCB2YWx1ZSAqd2l0aGluKiBgdGNwX21zZ193YWl0X2RhdGFgLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIHByb3ZpZGUgZmluZXItZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIHRpbWVvdXQgaGFuZGxpbmcuIFBlcmhhcHMsIHRvIHJlc29sdmUgYW4gaXNzdWUgd2hlcmUgYHJlY3Zmcm9tYCBtaWdodCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAgd2hlbiBpdCBzaG91bGRuJiMzOTt0IOKAkyBhcyB0aGV5IG1lbnRpb25lZC4KCk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUmIzM5O3MgbWludXRpYWUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQgZm9yIHRoaXMgbW9kdWxlLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGB0Y3BfYnBmLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGtlcm5lbCBjb25maWcgb3B0aW9ucyBjb250cm9sIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgc2VhcmNoIHRocm91Z2ggYG5ldC9pcHY0L01ha2VmaWxlYCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gS25vd2luZyB0aG9zZSBvcHRpb25zIHdpbGwgaGVscCBtZSBpbnRlcnByZXQgdGhpcyBjaGFuZ2UgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcHJlbGltaW5hcnkgdGhvdWdodHMsIGV4cHJlc3NlZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhcyBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbDoKCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aW5nIGlzIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gTm8gc3VycHJpc2VzIHRoZXJlOyB3ZSBuZWVkIHRoYXQgZm91bmRhdGlvbmFsIHNvY2tldCBtZXNzYWdpbmcgc3VwcG9ydCwgb2J2aW91c2x5LiBUaGVuLCBmb3IgbGV2ZXJhZ2luZyBCUEYsIHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIGdvYWwgaGVyZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIG5lZWRlZC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBzaG91bGQgcXVpY2tseSBkbyBhIHNhbml0eSBjaGVjayB0byBzZWUgaWYgYHRjcF9icGYuY2AgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEJldHRlciB0byBoYXZlIHRoZW0gYWxsIGluIG9uZSBwbGFjZSBhbmQgbm90IGZpbmQgb3V0IGxhdGVyIEkgbmVlZCB0byByZWNvbXBpbGUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZm9jdXMgb24gdGNwIGFuZCBicGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTc4PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTgxLXN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MTM9c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNC1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU2LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTc6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9ODAzPXZvaWQgdGNwX2JwZl9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtODA5LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo4MTA6I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEJQRi1FbmFibGVkIFRDUCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHRjcF9tc2dfd2FpdF9kYXRhYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIFRoZSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgaW5kaWNhdGVzIHRoZXNlIGFyZSByZWxhdGVkIHRvIHRoZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGludGVncmF0aW9uLCBhbmQgc3BlY2lmaWNhbGx5LCBCUEYgc3lzY2FsbCBlbmhhbmNlbWVudHMuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGJ1aWxkaW5nIG9uIHRoZSBleGlzdGluZyBUQ1AgcmVjZWl2ZSBwYXRoIHRvIHN1cHBvcnQgQlBGIGZpbHRlcmluZyBhbmQgcHJvY2Vzc2luZyBkdXJpbmcgYHJlY3Ztc2dgIGNhbGxzLgoKVGhlIGNvcmUgb2YgdGhpcyBoYXMgdG8gYmUgaW4gdGhlIHBhcnNpbmcgYW5kIGByZWN2bXNnYCBmdW5jdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBsb2dpYyBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHR5cGljYWwgYHJlY3Ztc2dgIGZsb3cgaGVyZS4gQXJlIHRoZXkgdXNpbmcgdGhlIEJQRiBwcm9ncmFtIHRvIHZhbGlkYXRlIG9yIG1vZGlmeSB0aGUgaW5jb21pbmcgZGF0YSwgY29udHJvbCBidWZmZXIgYWxsb2NhdGlvbiwgb3Igc29tZXRoaW5nIG1vcmU/IFRoZSBwYXJzZXIgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHByb2dyYW0gaW50ZXJwcmV0cyB0aGUgaW5jb21pbmcgZGF0YS4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgQlBGIHByb2dyYW0gaXMgcmV0cmlldmVkLCBhbmQgaG93IGRhdGEgaXMgc2hhcmVkIGJldHdlZW4gaXQgYW5kIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIFRDUCBzdGFjayBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIHRoZSBgcmVjdm1zZ2Agb3BlcmF0aW9uIHdpdGggQlBGIHByb2dyYW1zIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTMzOD1zdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTM1NS1cbm5ldC9pcHY0L3RjcF9icGYuYzozNTY6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVx0XHRcdCAgIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc0PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3OS1cdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVx0XHQ9IHNvY2tfbWFwX2Nsb3NlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY4MDpcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY4MS1cdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg3LVx0cHJvdFtUQ1BfQlBGX1JYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY4ODpcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg5LVxubmV0L2lwdjQvdGNwX2JwZi5jLTY5MC1cdHByb3RbVENQX0JQRl9UWFJYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTE6XHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkyLX1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI0PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NDctXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzQ4Olx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cbm5ldC9pcHY0L3RjcF9icGYuYy03NDktXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzE5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIEJQRiBSZWN2bXNnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBUaGV5IGFyZSBjYWxsZWQgdmlhIGByZWN2bXNnYCBvbiBhIFRDUCBzb2NrZXQgdGhhdCBoYXMgYmVlbiBhZGRlZCB0byBhIHNvY2ttYXAuIFRoaXMgbWVhbnMgYENPTkZJR19ORVRfU09DS19NU0dgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgZGVmaW5pdGVseSBrZXkgaGVyZS4gTm93LCBJIHdhbnQgdG8gYmUgdGhvcm91Z2gsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgc2VsZWN0ZWQgYnkgZWl0aGVyIGBDT05GSUdfQ0dST1VQX0JQRmAgb3IgcG9zc2libHkgYnkgYENPTkZJR19CUEZfU1lTQ0FMTGAgYWxvbmcgd2l0aCBgQ09ORklHX0lORVRgIGluIHNvbWUgc2NlbmFyaW9zLiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L0tjb25maWdgIGFuZCBwb3RlbnRpYWxseSBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBzdWJ0bGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJQRiBpbnRlZ3JhdGlvbiB3aXRoIFRDUCBzb2NrZXRzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIFNlbGVjdG9yKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gcGlucG9pbnQgd2hlcmUgYE5FVF9TT0NLX01TR2AgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZXhlcmNpc2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2sgSSYjMzk7bSB3b3JraW5nIHdpdGguIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdGhyb3VnaCB0aGUgY29kZSwgc3RhcnRpbmcgd2l0aCB0aGUgaW1tZWRpYXRlIGNvbnRleHQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgZmxvdyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZWxlY3RvciBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZXJyb3IgaGFuZGxpbmcuIEVzc2VudGlhbGx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJvbGUgYE5FVF9TT0NLX01TR2AgcGxheXMgaW4gdGhlIG5ldHdvcmsgc29ja2V0IG1lc3NhZ2luZyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIEJQRiBTdHJlYW0gUGFyc2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGEgc3BlY2lmaWMgZGV0YWlsOiB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBzZWVtcyB0byBiZSBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB3aXRoIGBORVRfU09DS19NU0dgLiBUaGF0IHJlbGF0aW9uc2hpcCBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEkgbmVlZCB0byBlc3RhYmxpc2ggYSBjbGVhcmVyIHBpY3R1cmUuIFdoYXQmIzM5O3MgdGhlIGtleSB0aGF0IHVubG9ja3MgdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgdGhlbj8gSSBoYXZlIHRvIHRyYWNlIGJhY2sgdGhlIGxvZ2ljYWwgZmxvdyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbXBvbmVudCBvciBtZWNoYW5pc20gaXMgcmVzcG9uc2libGUgZm9yICpzZWxlY3RpbmcqIG9yICp0cmlnZ2VyaW5nKiB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZywgYW5kIHRoZSBrZXJuZWwgY29uZmlnIGlzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSBleHBlY3QgdGhhdCB0aGlzIHdpbGwgZ2l2ZSBtZSBzb21lIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgcmVsYXRlIHRvIHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1hcCB0aGUgcHJvYmxlbSBJIGhhdmUgdG8gdGhlIHJlbGV2YW50IGtlcm5lbCBmZWF0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXG4tLVxubmV0L0tjb25maWctMzYwLVxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWctMzYyLVx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgYXMgYSB1c2VyLWNvbmZpZ3VyYWJsZSBvcHRpb24uIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYENHUk9VUF9CUEZgIGFzIGEgcG90ZW50aWFsIGNvLWRlcGVuZGVudCBvciByZWxhdGVkIGZlYXR1cmUuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgZGVmaW5pdGl2ZSBzb3VyY2VzLiBJJiMzOTtsbCBoZWFkIHN0cmFpZ2h0IHRvIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSBnaXZlbiB0aGUgQlBGIGZvY3VzLCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhlc2Ugc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBicm9hZGVyIGNvbnRleHQgZm9yIGJvdGggb3B0aW9ucywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kIHdoZW4gaW50ZWdyYXRpbmcgdGhlbSwgb3IgY29uc2lkZXJpbmcgdGhlbSBpbiBhbiBleGlzdGluZyBwcm9qZWN0LiBJJiMzOTttIGFmdGVyIHRoZSBmdWxsIHBpY3R1cmUgLSB3aGF0IHRoZXNlIGRvLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIga2VybmVsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy0zMy1cdHNlbGVjdCBCSU5BUllfUFJJTlRGXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4tLVxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuLS1cbm5ldC9LY29uZmlnLTM2Ni1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZzozNjc6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy0zNjgtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWctMzg3LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTMtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjYvS2NvbmZpZzo5NDpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWctOTUtXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcbi0tXG5uZXQvdGxzL0tjb25maWctMTAtXHRzZWxlY3QgQ1JZUFRPX0dDTVxubmV0L3Rscy9LY29uZmlnOjExOlx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L3Rscy9LY29uZmlnLTEyLVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFRDUCBTb2NrbWFwIGFuZCByZWN2bXNnKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGxlYWRpbmcgbWUgdG8gZm9jdXMgb24gYE5FVF9TT0NLX01TR2AgYmVjYXVzZSBgQlBGX1NZU0NBTExgIChzdGFuZGFyZCBmb3IgZnV6emluZywgcmlnaHQ/KSBzZWVtcyB0byBlbmFibGUgaXQgd2hlbiBgTkVUYCBpcyBhbHNvIGVuYWJsZWQuIFRoYXQgbWVhbnMgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBjb2RlIHRoYXQgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRfU09DS19NU0dgLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBidWlsZCBzeXN0ZW0gKGBuZXQvaXB2NC9NYWtlZmlsZWApLCBpbmNsdWRlcyBgdGNwX2JwZi5vYC4gTWFrZXMgc2Vuc2UsIHNvIGl0JiMzOTtzIGNvbXBpbGVkIGluLgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkPyBMZXQmIzM5O3Mgc2VlLi4uIEkgaGF2ZSBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gQWhhISBUaGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgd2hlbiBhIFRDUCBzb2NrZXQgZ2V0cyBhZGRlZCB0byBhIHNvY2ttYXAgYW5kIHRoZW4gYHJlY3Ztc2dgIGlzIGNhbGxlZC4gQmluZ28hIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCB0YXJnZXRpbmcgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgIOKAkyB0aGVzZSBhcmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgdGNwX21zZ193YWl0X2RhdGFgLCBzaW5jZSBpdCYjMzk7cyBhIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0byBidWlsZCB0aGlzLiBJIGtub3cgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhcmUgbmVjZXNzYXJ5LiBPYnZpb3VzbHksIGBDT05GSUdfSU5FVGAgaXMgdG9vLiBXaGF0IGFib3V0IGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgPyBUaGF0IG1pZ2h0IGJlIG5lZWRlZCBmb3IgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IG1vcmUgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY3ND1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODctXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njg4Olx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02ODktXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY5MTpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MjQ9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ny1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTc0OS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEyMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRi1yZWxhdGVkIGByZWN2bXNnYCBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHJlY3Ztc2dgIGlzIGhhbmRsZWQgaW4gdGhpcyBjb250ZXh0LiBJdCBhcHBlYXJzIHRoaXMgY29kZSBzcGVjaWZpY2FsbHkgdGllcyBpbnRvIGBwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dgIGFuZCBgcHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dgLiBSaWdodCwgdGhlc2UgYXJlIHRoZSBob29rcyB1c2VkIHdoZW4gYSBCUEYgcHJvZ3JhbSBpcyBhY3RpdmUgb24gYSBzb2NrbWFwLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSBwcm9ncmFtIGxpa2UgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIG9yIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGhhcyBiZWVuIGF0dGFjaGVkLiBUaGUgdGVzdCBjYXNlIGB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluYCBzZWVtcyB0byBiZSBhdHRhY2hpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgLiBUaGVyZWZvcmUsIHRoZSBtaW5pbWFsIHJlcXVpcmVtZW50cyBzaG91bGQgYmUgaGF2aW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVF9TT0NLX01TR2AgZW5hYmxlZC4KCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXNuJiMzOTt0IHNvbWVob3cgbmVjZXNzYXJ5IGZvciBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIHRyaXZpYWwsIGJ1dCBpdCBuZXZlciBodXJ0cyB0byBiZSB0aG9yb3VnaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz03MTM9c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jLTcyNC1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU2LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTc6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3OTkKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldG1hcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBsaXZlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgZGVmaW5pdGVseSBub3QgYmVoaW5kIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpYCwgYXMgSSBpbml0aWFsbHkgdGhvdWdodDsgaXQmIzM5O3MgZ3VhcmRlZCBieSB0aGUgbW9yZSBnZW5lcmFsIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgd2hpY2gsIG9mIGNvdXJzZSwgY292ZXJzIHRoZSBtYWpvcml0eSBvZiB0aGF0IGZpbGUuIEdvb2QgdG8gbWFrZSBzdXJlIEkmIzM5O20gcHJlY2lzZSBhYm91dCB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KCkxldCBtZSBqdXN0IGxpc3QgdGhvc2UgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIG15IG93biBjbGFyaXR5OiBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NPQ0tfTVNHYC4gR290IGl0LgoKTm93LCBmb2N1c2luZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IGB0Y3BfYnBmX3JlY3Ztc2dgLCB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoaWNoIHNlZW1zIGNlbnRyYWwgdG8gdGhpcywgYW5kIGFsc28gYHRjcF9tc2dfd2FpdF9kYXRhYC4KClRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB0aW1lb3V0IGhhbmRsaW5nIGlzIG1hbmFnZWQgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGl0cyBwYXJzZXIgd2hlbiB3ZSYjMzk7cmUgd2FpdGluZyBmb3IgZGF0YSBvbiBhIFRDUCBzb2NrZXQgd2l0aGluIGEgc29ja21hcCBjb250ZXh0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gIOKAkyB3aGljaCB3b3VsZCBiZSBhIHByZXR0eSBuYXN0eSByZWdyZXNzaW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgc3Vic3lzdGVtLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgYW5kIHRvIGd1YXJkIGFnYWluc3QgaW50cm9kdWNpbmcgYW55IHJlZ3Jlc3Npb25zLiBJIG5lZWQgdG8gZmxhZyB0aGF0IGZvciBjb25zaWRlcmF0aW9uLgoKT2theSwgSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGlzLiBJJiMzOTtsbCBtYWtlIGEgY2FsbCBvbiB0aGlzIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hlbiB3YWl0aW5nIGZvciBkYXRhIG9uIGEgVENQIHNvY2tldCBpbiBhIHNvY2ttYXAuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MDMuMzAwMTk2MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk0MjgwNzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfbXNnX3dhaXRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hlbiB3YWl0aW5nIGZvciBkYXRhIG9uIGEgVENQIHNvY2tldCBpbiBhIHNvY2ttYXAuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIGByZWN2ZnJvbWAgY291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGBFQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZy9CUEYgc3Vic3lzdGVtIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowMy4zMDAyMDY1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3NDY4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmUzMTk0ZjA4MWZjODY5NTA0NmY0ZjNkMDdhNTg0MDY5YWZmOTZjMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAwMDowODowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tXFx0XFx0XFx0ICAgICBsb25nIHRpbWVvKVxcbitcXHRcXHRcXHQgICAgIGxvbmcgKnRpbWVvKVxcbiB7XFxuIFxcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC0xODcsMTIgKzE4NywxMiBAQCBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTilcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAoIXRpbWVvKVxcbitcXHRpZiAoISp0aW1lbylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbi1cXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcXHUwMDI2dGltZW8sXFxuK1xcdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIHRpbWVvLFxcbiBcXHRcXHRcXHQgICAgIWxpc3RfZW1wdHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX21zZykgfHxcXG4gXFx0XFx0XFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XFxuQEAgLTIyOSw2ICsyMjksNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XFxuIFxcdGludCBjb3BpZWQgPSAwO1xcbiBcXHR1MzIgc2VxO1xcbitcXHRsb25nIHRpbWVvO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSlcXG4gXFx0XFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4rXFxuIG1zZ19ieXRlc19yZWFkeTpcXG4gXFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xcbiBcXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxcbkBAIC0yODAsNyArMjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0fVxcbiBcXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbiBcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxcbkBAIC0yOTksNyArMzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiBcXHRcXHRpZiAoIXRpbWVvKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0zMTAsMTMgKzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcXHUwMDI2dGltZW8pO1xcbiBcXHRcXHRpZiAoZGF0YSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0Y29waWVkID0gZGF0YTtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAyNlxcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4gXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIG91dDpcXG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiB7XFxuIFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuIFxcdGludCBjb3BpZWQsIHJldDtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMzcxLDE0ICszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0fVxcbiBcXHRsb2NrX3NvY2soc2spO1xcbitcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4rXFx0XFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcXG4rXFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0XFx0XFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG4rXFx0XFx0XFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuK1xcdFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XFxuK1xcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTk9UQ09OTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghdGltZW8pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHJldCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbkBAIC0zOTAsNiArNDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKCFkYXRhIFxcdTAwMjZcXHUwMDI2IHRpbWVvIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuIFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdH1cXG4gXFx0cmV0ID0gY29waWVkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uZDE4ZmFmNDZmYWMwYzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuQEAgLTEzNzMsNiArMTM3MywxMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpXFxuIFxcdHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkICp0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCh2b2lkICphcmcpXFxuK3tcXG4rXFx0aW50IGZkID0gKihpbnQgKilhcmc7XFxuK1xcdGNoYXIgYnVmWzEwMjRdO1xcbitcXHR2b2lkICpyZXN1bHQgPSBOVUxMO1xcbitcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRcXHRpZiAobGVuID09IC0xKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHJlc3VsdCA9ICh2b2lkICopMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghbGVuIHx8IGJ1ZltsZW4gLSAxXSA9PSAnZScpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzZW5kKGZkLCBcXFwidGVzdFxcXCIsIDQsIE1TR19OT1NJR05BTCk7XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGJvb2wgd2l0aF92ZXJkaWN0KVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nICpza2VsID0gTlVMTDtcXG4rXFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gTlVMTDtcXG4rXFx0c2l6ZV90IGJ1ZmxlbiA9IDEwMjQgKiAxMDI0ICogMjU7XFxuK1xcdGNoYXIgKmJ1ZiA9IE5VTEw7XFxuK1xcdGludCBtYXAsIGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtYXAgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnNvY2tfbWFwX21zZyk7XFxuK1xcbitcXHRpZiAod2l0aF92ZXJkaWN0KSB7XFxuK1xcdFxcdHByb2cgPSBza2VsLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xcbitcXHRcXHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfcHJvZ19hdHRhY2ggdmVyZGljdFxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1ZiA9IG1hbGxvYyhidWZsZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcXFwibWFsbG9jIGJ1ZlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XFxuK1xcdGJ1ZltidWZsZW4gLSAxXSA9ICdlJztcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgMjAwOyArK2kpIHtcXG4rXFx0XFx0c3NpemVfdCBzZW50O1xcbitcXHRcXHRjaGFyIGlnbm9yZWRbMTI4XTtcXG4rXFx0XFx0cHRocmVhZF90IHRocmVhZDtcXG4rXFx0XFx0Ym9vbCB0aHJlYWRfY3JlYXRlZCA9IGZhbHNlO1xcbitcXHRcXHRzaXplX3QgcmVtID0gYnVmbGVuO1xcbitcXHRcXHRpbnQgYyA9IC0xLCBwID0gLTEsIHplcm8gPSAwO1xcbitcXHRcXHRib29sIHN1Y2Nlc3MgPSBmYWxzZTtcXG4rXFxuK1xcdFxcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcXHUwMDI2YywgXFx1MDAyNnApO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJjcmVhdGVfcGFpclxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGVuZF9hdHRlbXB0O1xcbitcXG4rXFx0XFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgXFx1MDAyNnRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW5fdGhyZWFkLCBcXHUwMDI2cCk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInB0aHJlYWRfY3JlYXRlXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcdFxcdHRocmVhZF9jcmVhdGVkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcXHUwMDI2emVybywgXFx1MDAyNmMsIEJQRl9BTlkpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX3VwZGF0ZV9lbGVtXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcbitcXHRcXHR3aGlsZSAocmVtKSB7XFxuK1xcdFxcdFxcdHNlbnQgPSB4c2VuZChjLCBidWYgKyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcXG4rXFx0XFx0XFx0aWYgKHNlbnQgPT0gLTEpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcdFxcdFxcdHJlbSAtPSBzZW50O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiB3ZSBjYW5ub3QgdXNlIHJlY3ZfdGltZW91dCgpLCBvdGhlcndpc2UgRUFHQUlOIHdvdWxkIGJlIGFuIGV4cGVjdGVkIGVycm5vLiAqL1xcbitcXHRcXHRlcnIgPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogd2UgYXJlIGNoZWNraW5nIGZvciB0aGUgaW52YWxpZCByZXR1cm4gb2YgRUFHQUlOLCBhbnkgb3RoZXIgcmV0dXJuIGlzIGNvbnNpZGVyZWRcXG4rXFx0XFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2ICFBU1NFUlRfTkVRKGVycm5vLCBFQUdBSU4sIFxcXCJyZWN2ZnJvbSBlYWdhaW5cXFwiKSlcXG4rXFx0XFx0XFx0Z290byBlbmRfYXR0ZW1wdDtcXG4rXFxuK1xcdFxcdHN1Y2Nlc3MgPSB0cnVlO1xcbitcXG4rZW5kX2F0dGVtcHQ6XFxuK1xcdFxcdGlmIChjIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKGMpO1xcbitcXG4rXFx0XFx0aWYgKHRocmVhZF9jcmVhdGVkKSB7XFxuK1xcdFxcdFxcdHZvaWQgKnJldHZhbCA9IE5VTEw7XFxuK1xcbitcXHRcXHRcXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBcXHUwMDI2cmV0dmFsKTtcXG4rXFx0XFx0XFx0aWYgKCFBU1NFUlRfTlVMTChyZXR2YWwsIFxcXCJyZXR2YWxcXFwiKSlcXG4rXFx0XFx0XFx0XFx0c3VjY2VzcyA9IGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXRocmVhZF9jcmVhdGVkIFxcdTAwMjZcXHUwMDI2IHAgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0Y2xvc2UocCk7XFxuK1xcdFxcdGlmICghc3VjY2VzcylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChidWYpXFxuK1xcdFxcdGZyZWUoYnVmKTtcXG4rXFxuK1xcdHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXFxuIHtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXFxcIikpXFxuQEAgLTE0NTEsNCArMTU3MSw4IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX1NUUkVBTSk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHVkcCBtdWx0aSBjaGFubmVsc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19ER1JBTSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpblxcXCIpKVxcbitcXHRcXHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGZhbHNlKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgcmVjdmZyb20gZWFnYWluIHdpdGggdmVyZGljdFxcXCIpKVxcbitcXHRcXHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjAzLjkyMzM3MzMwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxMzE5NjAzMTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmUzMTk0ZjA4MWZjODY5NTA0NmY0ZjNkMDdhNTg0MDY5YWZmOTZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjA4OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi1cdFx0XHQgICAgIGxvbmcgdGltZW8pXG4rXHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXRpbWVvKVxuK1x0aWYgKCEqdGltZW8pXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFx1MDAyNndhaXQpO1xuIFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbi1cdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIFx1MDAyNnRpbWVvLFxuK1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdGludCBjb3BpZWRfZnJvbV9zZWxmID0gMDtcbiBcdGludCBjb3BpZWQgPSAwO1xuIFx0dTMyIHNlcTtcbitcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbitcbiBtc2dfYnl0ZXNfcmVhZHk6XG4gXHRjb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCBcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcbiBcdC8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5XG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuQEAgLTI5OSw3ICszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gXHRcdGlmICghdGltZW8pIHtcbiBcdFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTMxMCwxMyArMzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0Y29waWVkID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiBcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbitcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIHtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRpbnQgY29waWVkLCByZXQ7XG4rXHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMzcxLDE0ICszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4rXG4rXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuK1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4rXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbitcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4rXHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4rXHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4rXHRcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkge1xuK1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbitcdFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuK1x0XHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuK1x0XHRcdH1cbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbitcdFx0XHRyZXQgPSAtRU5PVENPTk47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKCF0aW1lbykge1xuK1x0XHRcdHJldCA9IC1FQUdBSU47XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiArNDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0XHR9XG4rXHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4rXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uZDE4ZmFmNDZmYWMwYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTEzNzMsNiArMTM3MywxMjYgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpXG4gXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxuK3tcbitcdGludCBmZCA9ICooaW50ICopYXJnO1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHR2b2lkICpyZXN1bHQgPSBOVUxMO1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4rXG4rXHRcdGlmIChsZW4gPT0gLTEpIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXN1bHQgPSAodm9pZCAqKTE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFsZW4gfHwgYnVmW2xlbiAtIDFdID09ICdlJylcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHNlbmQoZmQsIFwidGVzdFwiLCA0LCBNU0dfTk9TSUdOQUwpO1xuK1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHJlc3VsdDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMO1xuK1x0c2l6ZV90IGJ1ZmxlbiA9IDEwMjQgKiAxMDI0ICogMjU7XG4rXHRjaGFyICpidWYgPSBOVUxMO1xuK1x0aW50IG1hcCwgZXJyO1xuK1xuK1x0c2tlbCA9IHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdG1hcCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5zb2NrX21hcF9tc2cpO1xuK1xuK1x0aWYgKHdpdGhfdmVyZGljdCkge1xuK1x0XHRwcm9nID0gc2tlbC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xuK1x0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfYXR0YWNoIHZlcmRpY3RcIikpXG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YnVmID0gbWFsbG9jKGJ1Zmxlbik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcIm1hbGxvYyBidWZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XG4rXHRidWZbYnVmbGVuIC0gMV0gPSAnZSc7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgMjAwOyArK2kpIHtcbitcdFx0c3NpemVfdCBzZW50O1xuK1x0XHRjaGFyIGlnbm9yZWRbMTI4XTtcbitcdFx0cHRocmVhZF90IHRocmVhZDtcbitcdFx0Ym9vbCB0aHJlYWRfY3JlYXRlZCA9IGZhbHNlO1xuK1x0XHRzaXplX3QgcmVtID0gYnVmbGVuO1xuK1x0XHRpbnQgYyA9IC0xLCBwID0gLTEsIHplcm8gPSAwO1xuK1x0XHRib29sIHN1Y2Nlc3MgPSBmYWxzZTtcbitcbitcdFx0ZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFx1MDAyNmMsIFx1MDAyNnApO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiY3JlYXRlX3BhaXJcIikpXG4rXHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbitcbitcdFx0ZXJyID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCBcdTAwMjZ0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCwgXHUwMDI2cCk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJwdGhyZWFkX2NyZWF0ZVwiKSlcbitcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuK1x0XHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XG4rXG4rXHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCBcdTAwMjZ6ZXJvLCBcdTAwMjZjLCBCUEZfQU5ZKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9tYXBfdXBkYXRlX2VsZW1cIikpXG4rXHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbitcbitcdFx0d2hpbGUgKHJlbSkge1xuK1x0XHRcdHNlbnQgPSB4c2VuZChjLCBidWYgKyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcbitcdFx0XHRpZiAoc2VudCA9PSAtMSlcbitcdFx0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXHRcdFx0cmVtIC09IHNlbnQ7XG4rXHRcdH1cbitcbitcdFx0Lyogd2UgY2Fubm90IHVzZSByZWN2X3RpbWVvdXQoKSwgb3RoZXJ3aXNlIEVBR0FJTiB3b3VsZCBiZSBhbiBleHBlY3RlZCBlcnJuby4gKi9cbitcdFx0ZXJyID0gcmVjdmZyb20oYywgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0LypcbitcdFx0ICogd2UgYXJlIGNoZWNraW5nIGZvciB0aGUgaW52YWxpZCByZXR1cm4gb2YgRUFHQUlOLCBhbnkgb3RoZXIgcmV0dXJuIGlzIGNvbnNpZGVyZWRcbitcdFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cbitcdFx0ICovXG4rXHRcdGlmIChlcnIgXHUwMDNjIDAgXHUwMDI2XHUwMDI2ICFBU1NFUlRfTkVRKGVycm5vLCBFQUdBSU4sIFwicmVjdmZyb20gZWFnYWluXCIpKVxuK1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXG4rXHRcdHN1Y2Nlc3MgPSB0cnVlO1xuK1xuK2VuZF9hdHRlbXB0OlxuK1x0XHRpZiAoYyBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UoYyk7XG4rXG4rXHRcdGlmICh0aHJlYWRfY3JlYXRlZCkge1xuK1x0XHRcdHZvaWQgKnJldHZhbCA9IE5VTEw7XG4rXG4rXHRcdFx0cHRocmVhZF9qb2luKHRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbitcdFx0XHRpZiAoIUFTU0VSVF9OVUxMKHJldHZhbCwgXCJyZXR2YWxcIikpXG4rXHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG4rXHRcdH1cbitcbitcdFx0aWYgKCF0aHJlYWRfY3JlYXRlZCBcdTAwMjZcdTAwMjYgcCBcdTAwM2U9IDApXG4rXHRcdFx0Y2xvc2UocCk7XG4rXHRcdGlmICghc3VjY2VzcylcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitjbGVhbnVwOlxuK1x0aWYgKGJ1ZilcbitcdFx0ZnJlZShidWYpO1xuK1xuK1x0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbit9XG4rXG4gdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXCIpKVxuQEAgLTE0NTEsNCArMTU3MSw4IEBAIHZvaWQgdGVzdF9zb2NrbWFwX2Jhc2ljKHZvaWQpXG4gXHRcdHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX1NUUkVBTSk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzXCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19ER1JBTSk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgcmVjdmZyb20gZWFnYWluXCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGZhbHNlKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCByZWN2ZnJvbSBlYWdhaW4gd2l0aCB2ZXJkaWN0XCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjAzLjkyMzM3NjQ3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDQ3MDk5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGEgcmVsYXRlZCB0ZXN0IHVwZGF0ZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIHRoZSBrZXJuZWwncyBUQ1AgQlBGL3NvY2ttYXAgYXJlYS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gaG93IHRoZSB0aW1lb3V0IGlzIGhhbmRsZWQgd2l0aGluIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIFByZXZpb3VzbHkgaXQgdG9vayBhIGBsb25nIHRpbWVvYCwgYnV0IHRoaXMgcGF0Y2ggY2hhbmdlcyBpdCB0byB0YWtlIGEgYGxvbmcgKnRpbWVvYCDigJMgYSBwb2ludGVyLiBUaGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQsIG5hbWVseSBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLCB3aGVyZSB0aGV5IG5vdyBwYXNzIHRoZSBhZGRyZXNzIG9mIHRoZSB0aW1lb3V0IHZhcmlhYmxlIChgXHUwMDI2dGltZW9gKSBpbnN0ZWFkIG9mIHRoZSB2YWx1ZSBpdHNlbGYuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoaXMgc3VnZ2VzdHMgYSBkZXNpcmUgdG8gbW9kaWZ5IHRoZSB0aW1lb3V0IHZhbHVlICp3aXRoaW4qIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGV5IGFyZSB0cnlpbmcgdG8gcHJvdmlkZSBmaW5lci1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgdGltZW91dCBoYW5kbGluZy4gUGVyaGFwcywgdG8gcmVzb2x2ZSBhbiBpc3N1ZSB3aGVyZSBgcmVjdmZyb21gIG1pZ2h0IGluY29ycmVjdGx5IHJldHVybiBgRUFHQUlOYCB3aGVuIGl0IHNob3VsZG4ndCDigJMgYXMgdGhleSBtZW50aW9uZWQuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGludG8gdGhlIGNvZGUncyBtaW51dGlhZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgdGhpcyBtb2R1bGUuIEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBgdGNwX2JwZi5jYC4gVGltZSB0byBzZWUgd2hhdCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgY29udHJvbCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEknbGwgc2VhcmNoIHRocm91Z2ggYG5ldC9pcHY0L01ha2VmaWxlYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBLbm93aW5nIHRob3NlIG9wdGlvbnMgd2lsbCBoZWxwIG1lIGludGVycHJldCB0aGlzIGNoYW5nZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODowOS4yNjgwODg3OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDM5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSArPSB0Y3BfaWxsaW5vaXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjA5LjQ5MjEzMzcxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTgyMTMxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBleHByZXNzZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIHRoZSBmaXJzdCB0aGluZyBJJ20gbm90aW5nIGlzIHRoYXQgYENPTkZJR19ORVRfU09DS19NU0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gTm8gc3VycHJpc2VzIHRoZXJlOyB3ZSBuZWVkIHRoYXQgZm91bmRhdGlvbmFsIHNvY2tldCBtZXNzYWdpbmcgc3VwcG9ydCwgb2J2aW91c2x5LiBUaGVuLCBmb3IgbGV2ZXJhZ2luZyBCUEYsIHdoaWNoIEknbSBhc3N1bWluZyBpcyB0aGUgZ29hbCBoZXJlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyAqZGVmaW5pdGVseSogZ29pbmcgdG8gYmUgbmVlZGVkLiBUaGF0J3MgYSBnaXZlbi4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgc2hvdWxkIHF1aWNrbHkgZG8gYSBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIGB0Y3BfYnBmLmNgIGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBCZXR0ZXIgdG8gaGF2ZSB0aGVtIGFsbCBpbiBvbmUgcGxhY2UgYW5kIG5vdCBmaW5kIG91dCBsYXRlciBJIG5lZWQgdG8gcmVjb21waWxlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGZvY3VzIG9uIHRjcCBhbmQgYnBmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MTIuNTkwMzQ5NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NzE4Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxODA6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzEzPXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzIzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI0LWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ni19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz04MDM9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTgwOS19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMDojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjEyLjc3OTA3Mzk0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTI0ODMxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQlBGLUVuYWJsZWQgVENQIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBUaGUgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGluZGljYXRlcyB0aGVzZSBhcmUgcmVsYXRlZCB0byB0aGUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBpbnRlZ3JhdGlvbiwgYW5kIHNwZWNpZmljYWxseSwgQlBGIHN5c2NhbGwgZW5oYW5jZW1lbnRzLiBUaGF0J3MgZ29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYnVpbGRpbmcgb24gdGhlIGV4aXN0aW5nIFRDUCByZWNlaXZlIHBhdGggdG8gc3VwcG9ydCBCUEYgZmlsdGVyaW5nIGFuZCBwcm9jZXNzaW5nIGR1cmluZyBgcmVjdm1zZ2AgY2FsbHMuXG5cblRoZSBjb3JlIG9mIHRoaXMgaGFzIHRvIGJlIGluIHRoZSBwYXJzaW5nIGFuZCBgcmVjdm1zZ2AgZnVuY3Rpb25zLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIGxvZ2ljIGlzIGludGVncmF0ZWQgaW50byB0aGUgdHlwaWNhbCBgcmVjdm1zZ2AgZmxvdyBoZXJlLiBBcmUgdGhleSB1c2luZyB0aGUgQlBGIHByb2dyYW0gdG8gdmFsaWRhdGUgb3IgbW9kaWZ5IHRoZSBpbmNvbWluZyBkYXRhLCBjb250cm9sIGJ1ZmZlciBhbGxvY2F0aW9uLCBvciBzb21ldGhpbmcgbW9yZT8gVGhlIHBhcnNlciBmdW5jdGlvbiB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBCUEYgcHJvZ3JhbSBpbnRlcnByZXRzIHRoZSBpbmNvbWluZyBkYXRhLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBCUEYgcHJvZ3JhbSBpcyByZXRyaWV2ZWQsIGFuZCBob3cgZGF0YSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgVENQIHN0YWNrIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgdGhlIGByZWN2bXNnYCBvcGVyYXRpb24gd2l0aCBCUEYgcHJvZ3JhbXMgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoxNi40MzE1NTk5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDMyODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVxcdFxcdFxcdCAgIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02NzQ9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzktXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXFx0XFx0PSBzb2NrX21hcF9jbG9zZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjgwOlxcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4MS1cXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVxcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4Ny1cXHRwcm90W1RDUF9CUEZfUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4ODpcXHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdHByb3RbVENQX0JQRl9UWFJYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjkxOlxcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyND1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDctXFx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XFx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQ5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoxNi42MTM1OTkzMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM2Njk1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBSZWN2bXNnIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gVGhleSBhcmUgY2FsbGVkIHZpYSBgcmVjdm1zZ2Agb24gYSBUQ1Agc29ja2V0IHRoYXQgaGFzIGJlZW4gYWRkZWQgdG8gYSBzb2NrbWFwLiBUaGlzIG1lYW5zIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIGRlZmluaXRlbHkga2V5IGhlcmUuIE5vdywgSSB3YW50IHRvIGJlIHRob3JvdWdoLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBpcyBzZWxlY3RlZCBieSBlaXRoZXIgYENPTkZJR19DR1JPVVBfQlBGYCBvciBwb3NzaWJseSBieSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbG9uZyB3aXRoIGBDT05GSUdfSU5FVGAgaW4gc29tZSBzY2VuYXJpb3MuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGBuZXQvS2NvbmZpZ2AgYW5kIHBvdGVudGlhbGx5IGBuZXQvaXB2NC9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWcgb3B0aW9ucyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBCUEYgaW50ZWdyYXRpb24gd2l0aCBUQ1Agc29ja2V0cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIwLjU1MDI5Nzc0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDEyMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIwLjc3NjcxNTk5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA2ODE4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBORVRfU09DS19NU0dgIFNlbGVjdG9yKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBwaW5wb2ludCB3aGVyZSBgTkVUX1NPQ0tfTVNHYCBpcyBiZWluZyB1dGlsaXplZC4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGV4ZXJjaXNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBob3cgaXQgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrIEknbSB3b3JraW5nIHdpdGguIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRocm91Z2ggdGhlIGNvZGUsIHN0YXJ0aW5nIHdpdGggdGhlIGltbWVkaWF0ZSBjb250ZXh0IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdGhlbiBicmFuY2hpbmcgb3V0IHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBmbG93IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlbGVjdG9yIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBlcnJvciBoYW5kbGluZy4gRXNzZW50aWFsbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgcm9sZSBgTkVUX1NPQ0tfTVNHYCBwbGF5cyBpbiB0aGUgbmV0d29yayBzb2NrZXQgbWVzc2FnaW5nIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIzLjU4MzUzNzgxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDczMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjIzLjc2OTYxNjAzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMzODU4MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gQlBGIFN0cmVhbSBQYXJzaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGEgc3BlY2lmaWMgZGV0YWlsOiB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBzZWVtcyB0byBiZSBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB3aXRoIGBORVRfU09DS19NU0dgLiBUaGF0IHJlbGF0aW9uc2hpcCBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEkgbmVlZCB0byBlc3RhYmxpc2ggYSBjbGVhcmVyIHBpY3R1cmUuIFdoYXQncyB0aGUga2V5IHRoYXQgdW5sb2NrcyB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCB0aGVuPyBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgbG9naWNhbCBmbG93IGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29tcG9uZW50IG9yIG1lY2hhbmlzbSBpcyByZXNwb25zaWJsZSBmb3IgKnNlbGVjdGluZyogb3IgKnRyaWdnZXJpbmcqIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6MjYuODAzNDc4NzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTcyMTE1OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoyNy4xMDA2OTg2OTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzODgwNzAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZywgYW5kIHRoZSBrZXJuZWwgY29uZmlnIGlzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgQlBGX1NUUkVBTV9QQVJTRVJgLiBJIGV4cGVjdCB0aGF0IHRoaXMgd2lsbCBnaXZlIG1lIHNvbWUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCByZWxhdGUgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4uIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIG1hcCB0aGUgcHJvYmxlbSBJIGhhdmUgdG8gdGhlIHJlbGV2YW50IGtlcm5lbCBmZWF0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODoyOS43Mzk1MDg3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MjQxMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjI5Ljk0Njc1ODA3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA3MTk4MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb250ZXh0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcyBhIHVzZXItY29uZmlndXJhYmxlIG9wdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBgQ0dST1VQX0JQRmAgYXMgYSBwb3RlbnRpYWwgY28tZGVwZW5kZW50IG9yIHJlbGF0ZWQgZmVhdHVyZS4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYW5kIHVuZGVyc3RhbmQgaXRzIHBsYWNlIGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGRlZmluaXRpdmUgc291cmNlcy4gSSdsbCBoZWFkIHN0cmFpZ2h0IHRvIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSBnaXZlbiB0aGUgQlBGIGZvY3VzLCBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhlc2Ugc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBicm9hZGVyIGNvbnRleHQgZm9yIGJvdGggb3B0aW9ucywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kIHdoZW4gaW50ZWdyYXRpbmcgdGhlbSwgb3IgY29uc2lkZXJpbmcgdGhlbSBpbiBhbiBleGlzdGluZyBwcm9qZWN0LiBJJ20gYWZ0ZXIgdGhlIGZ1bGwgcGljdHVyZSAtIHdoYXQgdGhlc2UgZG8sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBrZXJuZWwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjMzLjA1Mzk1ODY4OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NzEzNDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjM3LjMyMTEwNDQ0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA4MjQ3OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBUQ1AgU29ja21hcCBhbmQgcmVjdm1zZyoqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGVhZGluZyBtZSB0byBmb2N1cyBvbiBgTkVUX1NPQ0tfTVNHYCBiZWNhdXNlIGBCUEZfU1lTQ0FMTGAgKHN0YW5kYXJkIGZvciBmdXp6aW5nLCByaWdodD8pIHNlZW1zIHRvIGVuYWJsZSBpdCB3aGVuIGBORVRgIGlzIGFsc28gZW5hYmxlZC4gVGhhdCBtZWFucyBJJ2xsIGJlIGxvb2tpbmcgYXQgY29kZSB0aGF0IGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCwgd2hpY2gsIGFjY29yZGluZyB0byB0aGUgYnVpbGQgc3lzdGVtIChgbmV0L2lwdjQvTWFrZWZpbGVgKSwgaW5jbHVkZXMgYHRjcF9icGYub2AuIE1ha2VzIHNlbnNlLCBzbyBpdCdzIGNvbXBpbGVkIGluLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQ/IExldCdzIHNlZS4uLiBJIGhhdmUgYHRjcF9tc2dfd2FpdF9kYXRhYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AuIEFoYSEgVGhlc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gYSBUQ1Agc29ja2V0IGdldHMgYWRkZWQgdG8gYSBzb2NrbWFwIGFuZCB0aGVuIGByZWN2bXNnYCBpcyBjYWxsZWQuIEJpbmdvISBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggdGFyZ2V0aW5nIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgIOKAkyB0aGVzZSBhcmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuIEkgc2hvdWxkIGFsc28gaW5jbHVkZSBgdGNwX21zZ193YWl0X2RhdGFgLCBzaW5jZSBpdCdzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbi5cblxuT2theSwgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRvIGJ1aWxkIHRoaXMuIEkga25vdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRfU09DS19NU0dgIGFyZSBuZWNlc3NhcnkuIE9idmlvdXNseSwgYENPTkZJR19JTkVUYCBpcyB0b28uIFdoYXQgYWJvdXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmA/IFRoYXQgbWlnaHQgYmUgbmVlZGVkIGZvciBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIExldCdzIGRpZyBpbiBhIGJpdCBtb3JlIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6NDMuMTI5MzU1MDIxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE4ODkzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njc0PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg3LVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njg4OlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg5LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTAtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTE6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY5Mi19XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI0PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ny1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc0ODpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDktXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjA4OjQzLjMzMTI0OTc4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk4MjU4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGLXJlbGF0ZWQgYHJlY3Ztc2dgIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHJlY3Ztc2dgIGlzIGhhbmRsZWQgaW4gdGhpcyBjb250ZXh0LiBJdCBhcHBlYXJzIHRoaXMgY29kZSBzcGVjaWZpY2FsbHkgdGllcyBpbnRvIGBwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dgIGFuZCBgcHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dgLiBSaWdodCwgdGhlc2UgYXJlIHRoZSBob29rcyB1c2VkIHdoZW4gYSBCUEYgcHJvZ3JhbSBpcyBhY3RpdmUgb24gYSBzb2NrbWFwLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSBwcm9ncmFtIGxpa2UgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIG9yIGBCUEZfU0tfU0tCX1NUUkVBTV9QQVJTRVJgIGhhcyBiZWVuIGF0dGFjaGVkLiBUaGUgdGVzdCBjYXNlIGB0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluYCBzZWVtcyB0byBiZSBhdHRhY2hpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgLiBUaGVyZWZvcmUsIHRoZSBtaW5pbWFsIHJlcXVpcmVtZW50cyBzaG91bGQgYmUgaGF2aW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVF9TT0NLX01TR2AgZW5hYmxlZC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZzogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGlzbid0IHNvbWVob3cgbmVjZXNzYXJ5IGZvciBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIHRyaXZpYWwsIGJ1dCBpdCBuZXZlciBodXJ0cyB0byBiZSB0aG9yb3VnaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTExMjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6NDguODI5NTEwODI4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NDk2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9NzEzPXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcyMi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzIzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI0LWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ni19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6MDg6NDguOTYyMjY2NjQ1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDMzMzU2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0bWFwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBsaXZlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBkZWZpbml0ZWx5IG5vdCBiZWhpbmQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilgLCBhcyBJIGluaXRpYWxseSB0aG91Z2h0OyBpdCdzIGd1YXJkZWQgYnkgdGhlIG1vcmUgZ2VuZXJhbCBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHdoaWNoLCBvZiBjb3Vyc2UsIGNvdmVycyB0aGUgbWFqb3JpdHkgb2YgdGhhdCBmaWxlLiBHb29kIHRvIG1ha2Ugc3VyZSBJJ20gcHJlY2lzZSBhYm91dCB0aG9zZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuTGV0IG1lIGp1c3QgbGlzdCB0aG9zZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgbXkgb3duIGNsYXJpdHk6IGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfU09DS19NU0dgLiBHb3QgaXQuXG5cbk5vdywgZm9jdXNpbmcgaW4gb24gdGhlIGtleSBzeW1ib2xzLCBJJ20gdGhpbmtpbmcgYWJvdXQ6IGB0Y3BfYnBmX3JlY3Ztc2dgLCB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoaWNoIHNlZW1zIGNlbnRyYWwgdG8gdGhpcywgYW5kIGFsc28gYHRjcF9tc2dfd2FpdF9kYXRhYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRpbWVvdXQgaGFuZGxpbmcgaXMgbWFuYWdlZCBpbiBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgaXRzIHBhcnNlciB3aGVuIHdlJ3JlIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IHdpdGhpbiBhIHNvY2ttYXAgY29udGV4dC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSBgcmVjdmZyb21gIGNvdWxkIGluY29ycmVjdGx5IHJldHVybiBgRUFHQUlOYCDigJMgd2hpY2ggd291bGQgYmUgYSBwcmV0dHkgbmFzdHkgcmVncmVzc2lvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgY29kZSBiZWhhdmVzIGFzIGV4cGVjdGVkIGFuZCB0byBndWFyZCBhZ2FpbnN0IGludHJvZHVjaW5nIGFueSByZWdyZXNzaW9ucy4gSSBuZWVkIHRvIGZsYWcgdGhhdCBmb3IgY29uc2lkZXJhdGlvbi5cblxuT2theSwgSSB0aGluayBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGlzLiBJJ2xsIG1ha2UgYSBjYWxsIG9uIHRoaXMgdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzk5LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDowODo1NC45NjU2MDU2NzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzczNjcxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgaGFuZGxpbmcgaW4gYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEgb24gYSBUQ1Agc29ja2V0IGluIGEgc29ja21hcC4gSXQgZml4ZXMgYSBidWcgd2hlcmUgYHJlY3Zmcm9tYCBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYEVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nL0JQRiBzdWJzeXN0ZW0gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoZW4gd2FpdGluZyBmb3IgZGF0YSBvbiBhIFRDUCBzb2NrZXQgaW4gYSBzb2NrbWFwLiBJdCBmaXhlcyBhIGJ1ZyB3aGVyZSBgcmVjdmZyb21gIGNvdWxkIGluY29ycmVjdGx5IHJldHVybiBgRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvciBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[1] Phase: Succeeded StartedAt: 2026-07-21 00:09:06 +0000 UTC FinishedAt: 2026-07-21 00:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 00:09:06 +0000 UTC FinishedAt: 2026-07-21 00:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2] Phase: Succeeded StartedAt: 2026-07-21 00:09:06 +0000 UTC FinishedAt: 2026-07-21 04:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 00:09:06 +0000 UTC FinishedAt: 2026-07-21 04:34:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 00:09:07 +0000 UTC FinishedAt: 2026-07-21 00:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 00:09:07 +0000 UTC FinishedAt: 2026-07-21 00:09:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowddvqn/series-workflowddvqn-convert-artifact-3263362553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 00:09:44 +0000 UTC FinishedAt: 2026-07-21 00:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 00:09:44 +0000 UTC FinishedAt: 2026-07-21 00:45:33 +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:*9598e607-cd49-42db-baa2-846eeb0256e2,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-workflowddvqn/series-workflowddvqn-convert-artifact-3263362553/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": "b684da7c-df8f-479d-a305-0d263b80c0b7", "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-workflowddvqn/series-workflowddvqn-build-action-1620807447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 00:09:44 +0000 UTC FinishedAt: 2026-07-21 00:45:24 +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:*9598e607-cd49-42db-baa2-846eeb0256e2,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-workflowddvqn/series-workflowddvqn-convert-artifact-3263362553/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": "b684da7c-df8f-479d-a305-0d263b80c0b7", "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-workflowddvqn/series-workflowddvqn-build-action-1620807447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 00:45:33 +0000 UTC FinishedAt: 2026-07-21 00:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 00:45:33 +0000 UTC FinishedAt: 2026-07-21 00:45:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 00:45:33 +0000 UTC FinishedAt: 2026-07-21 00:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 00:45:33 +0000 UTC FinishedAt: 2026-07-21 00:45:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowddvqn/series-workflowddvqn-convert-artifact-3568961996/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 00:45:44 +0000 UTC FinishedAt: 2026-07-21 00:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 00:45:44 +0000 UTC FinishedAt: 2026-07-21 00:47:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b684da7c-df8f-479d-a305-0d263b80c0b7,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-workflowddvqn/series-workflowddvqn-build-action-1620807447/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-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 00:47:43 +0000 UTC FinishedAt: 2026-07-21 00:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 00:47:43 +0000 UTC FinishedAt: 2026-07-21 00:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 00:47:43 +0000 UTC FinishedAt: 2026-07-21 01:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 00:47:43 +0000 UTC FinishedAt: 2026-07-21 01:24:46 +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:*9598e607-cd49-42db-baa2-846eeb0256e2,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-workflowddvqn/series-workflowddvqn-convert-artifact-3568961996/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": "1084cc2d-b3d6-428b-b879-9f7be6ce08ab", "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-workflowddvqn/series-workflowddvqn-build-action-3071563752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 00:47:43 +0000 UTC FinishedAt: 2026-07-21 01:24:36 +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:*9598e607-cd49-42db-baa2-846eeb0256e2,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-workflowddvqn/series-workflowddvqn-convert-artifact-3568961996/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": "1084cc2d-b3d6-428b-b879-9f7be6ce08ab", "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-workflowddvqn/series-workflowddvqn-build-action-3071563752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 01:24:46 +0000 UTC FinishedAt: 2026-07-21 01:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 01:24:46 +0000 UTC FinishedAt: 2026-07-21 01:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 01:24:46 +0000 UTC FinishedAt: 2026-07-21 01:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 01:24:46 +0000 UTC FinishedAt: 2026-07-21 01:26:43 +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:*1084cc2d-b3d6-428b-b879-9f7be6ce08ab,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-workflowddvqn/series-workflowddvqn-build-action-3071563752/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-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 01:26:52 +0000 UTC FinishedAt: 2026-07-21 04:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 01:26:52 +0000 UTC FinishedAt: 2026-07-21 04:34:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"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:*b684da7c-df8f-479d-a305-0d263b80c0b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1084cc2d-b3d6-428b-b879-9f7be6ce08ab,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-workflowddvqn/series-workflowddvqn-build-action-1620807447/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-workflowddvqn/series-workflowddvqn-build-action-3071563752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 01:26:52 +0000 UTC FinishedAt: 2026-07-21 01:27:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 01:26:52 +0000 UTC FinishedAt: 2026-07-21 01:26:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"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-workflowddvqn/series-workflowddvqn-convert-artifact-464172085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 01:26:52 +0000 UTC FinishedAt: 2026-07-21 01:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 01:26:52 +0000 UTC FinishedAt: 2026-07-21 01:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 01:26:52 +0000 UTC FinishedAt: 2026-07-21 01:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 01:27:02 +0000 UTC FinishedAt: 2026-07-21 04:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowddvqn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fc574321e59a2484063b2e75016772815038608","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"5f0096f7-90ec-4621-b3c3-5c7ded839535","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 01:27:02 +0000 UTC FinishedAt: 2026-07-21 04:34:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b684da7c-df8f-479d-a305-0d263b80c0b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1084cc2d-b3d6-428b-b879-9f7be6ce08ab,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-workflowddvqn/series-workflowddvqn-build-action-1620807447/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-workflowddvqn/series-workflowddvqn-build-action-3071563752/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-workflowddvqn/series-workflowddvqn-convert-artifact-464172085/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,}