Name: series-workflowsn5jc Phase: Succeeded StartedAt: 2026-07-06 18:25:54 +0000 UTC FinishedAt: 2026-07-06 23:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[0] Phase: Succeeded StartedAt: 2026-07-06 18:25:54 +0000 UTC FinishedAt: 2026-07-06 18:54:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 18:25:54 +0000 UTC FinishedAt: 2026-07-06 18:54:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "05fd5fdf-a674-4bd8-bf21-86ec014221ce" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "prepare_scan_control", "shrink_inactive_list", "shrink_active_list", "workingset_refault", "lru_reparent_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJlcGFyZV9zY2FuX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICAgJiMzNDtscnVfcmVwYXJlbnRfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSByZWNsYWltIGNvc3QgdHJhY2tpbmcgbWVjaGFuaXNtIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbm9kZSBzdGF0IGl0ZW1zIGFuZCBjaGFuZ2VzIGhvdyB0aGUga2VybmVsIGJhbGFuY2VzIHNjYW5uaW5nIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIExSVXMgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkyOGI0MjMwYjRmNzBkNTQ5ZDlhNDNjYWU5ZmFkNmJhMDU1YWM5NThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE4OjUxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uMDYyNzYyMmE1MTg0YzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgJiM0MzszMjMsMTAgQEAgZW51bSBub2RlX3N0YXRfaXRlbSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbiYjNDM7XHRQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OLFxuJiM0MztcdFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsXG4mIzQzO1x0UEdST1RBVEVfQU5PTixcbiYjNDM7XHRQR1JPVEFURV9GSUxFLFxuIFx0UEdSRUZJTEwsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdE5SX0hVR0VUTEIsXG5AQCAtNzYzLDkgJiM0Mzs3NjcsMTIgQEAgc3RydWN0IGxydXZlYyB7XG4gXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxuIFx0ICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVVxuIFx0ICogaW5jcmVhc2VzLCB0aGUgcmVjbGFpbSBzY2FuIGJhbGFuY2UgdGlwcyB0b3dhcmQgdGhlIG90aGVyLlxuJiM0MztcdCAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2tcbiYjNDM7XHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxuIFx0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0YW5vbl9jb3N0O1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZpbGVfY29zdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdFx0cHJldl9jb3N0W0FOT05fQU5EX0ZJTEVdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb3N0X2FjY3VtW0FOT05fQU5EX0ZJTEVdO1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0XHRjb3N0X2xvY2s7XG4gXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXG4gXHRhdG9taWNfbG9uZ190XHRcdFx0bm9ucmVzaWRlbnRfYWdlO1xuIFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDkgJiM0MzszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcbmluZGV4IDc2NTA2OTIxMTU2NzhjLi5jN2E1MmJiNjhmNGM3ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5jXG5AQCAtMTk4OCw4ICYjNDM7MTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gXHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuIFx0XHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gXG4tXHRcdFx0YW5vbl9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xuLVx0XHRcdGZpbGVfY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmZpbGVfY29zdDtcbiYjNDM7XHRcdFx0YW5vbl9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dO1xuJiM0MztcdFx0XHRmaWxlX2Nvc3QgJiM0Mzs9IG16LVx1MDAzZWxydXZlYy5jb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV07XG4gXHRcdH1cbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7YW5vbl9jb3N0ICVsdVxcblwmIzM0OywgYW5vbl9jb3N0KTtcbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7ZmlsZV9jb3N0ICVsdVxcblwmIzM0OywgZmlsZV9jb3N0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi4wNDljODYwMjE4N2VjNiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNDE5LDYgJiM0Mzs0MTksMTAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdFBHU0NBTl9QUk9BQ1RJVkUsXG4gXHRQR1NDQU5fQU5PTixcbiBcdFBHU0NBTl9GSUxFLFxuJiM0MztcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXG4mIzQzO1x0UEdSRUNMQUlNX1BBR0VPVVRfRklMRSxcbiYjNDM7XHRQR1JPVEFURV9BTk9OLFxuJiM0MztcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICYjNDM7NzgsNyBAQCB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdG1lbXNldChscnV2ZWMsIDAsIHNpemVvZihzdHJ1Y3QgbHJ1dmVjKSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuY1xuQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXG4tXHQgKiBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0IGNvbXBhcmFibGVcbi1cdCAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseVxuLVx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXG4tXHQgKi9cbi1cdGNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDtcbi1cdGlmICghY29zdCkge1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuLVxuLVx0XHQvKiBSZWNvcmQgY29zdCBldmVudCAqL1xuLVx0XHRpZiAoZmlsZSlcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICYjNDM7PSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAmIzQzOz0gY29zdDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogRGVjYXkgcHJldmlvdXMgZXZlbnRzXG4tXHRcdCAqXG4tXHRcdCAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZFxuLVx0XHQgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmdcbi1cdFx0ICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHNcbi1cdFx0ICogbW9yZSB0aGFuIG9sZCBvbmVzLlxuLVx0XHQgKi9cbi1cdFx0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbi1cbi1cdFx0aWYgKGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLVx1MDAzZWFub25fY29zdCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0IC89IDI7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAvPSAyO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XG4tXHRcdGlmICghbHJ1dmVjKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0fVxuLX1cbi1cbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbi1cbi1cdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksXG4tXHRcdFx0XHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMTE2NCw4ICYjNDM7MTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjgwZDJiMWQ3OWYxOTM0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMjAzOCwxMCAmIzQzOzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4mIzQzO1x0aWYgKHN0YXQubnJfcGFnZW91dClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICYjNDM7IGZpbGUsXG4mIzQzO1x0XHRcdFx0IHN0YXQubnJfcGFnZW91dCk7XG4mIzQzO1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsXG4mIzQzO1x0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsXG4tXHRcdFx0XHRcdG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiBcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbkBAIC0yMTQ3LDkgJiM0MzsyMTUwLDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0Y291bnRfbWVtY2dfZXZlbnRzKGxydXZlY19tZW1jZyhscnV2ZWMpLCBQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pO1xuJiM0MztcdGlmIChucl9yb3RhdGVkKVxuJiM0MztcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyOTgsMTIgJiM0MzsyMzAxLDU2IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCk7XG4gXG4gXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXG4mIzQzO1x0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMgZnJvbSBwZXItTFJVXG4mIzQzO1x0ICogdm1zdGF0IGNvdW50ZXJzLiBUaGUgcmF3IGNvc3QgcGVyIHNpZGUgaXM6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKlx0UEdST1RBVEVcdCAgIC0gcmVjbGFpbS1kcml2ZW4gcm90YXRpb25zLCBidW1wZWQgZnJvbSBib3RoXG4mIzQzO1x0ICpcdFx0XHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3RcbiYjNDM7XHQgKlx0XHRcdCAgICAgKENQVSB3b3JrKS5cbiYjNDM7XHQgKlx0UEdSRUNMQUlNX1BBR0VPVVQgIC0gcmVjbGFpbS1kcml2ZW4gcGFnZW91dCBJTy5cbiYjNDM7XHQgKlx0V09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIHR3byBJTyB0ZXJtcyBhcmUgd2VpZ2h0ZWQgYnkgU1dBUF9DTFVTVEVSX01BWCB0byByZWZsZWN0IHRoZVxuJiM0MztcdCAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJlYWRzIGFyZSBsb2NrLWZyZWUgcGVyLWNwdSBzdW0gY29sbGF0aW9ucywgcnN0YXQtYWdncmVnYXRlZCB1cFxuJiM0MztcdCAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGRlbHRhIGFnYWluc3QgcHJldl9jb3N0IGlzIGZvbGRlZCBpbnRvIGNvc3RfYWNjdW0sIHdoaWNoIGlzXG4mIzQzO1x0ICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuXG4mIzQzO1x0ICogY29zdF9sb2NrIHNlcmlhbGlzZXMgY29uY3VycmVudCByZWNsYWltZXJzIGluIHRoZSBzYW1lIG1lbWNnJiM0Mztub2RlLlxuIFx0ICovXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0c2MtXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuJiM0MztcdGZvciAoaW50IGYgPSAwOyBmIFx1MDAzYz0gMTsgZiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbm93LCBkZWx0YTtcbiYjNDM7XG4mIzQzO1x0XHRub3cgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGYpICYjNDM7XG4mIzQzO1x0XHQgICAgICAobHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdCBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICYjNDM7IGYpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKSkgKlxuJiM0MztcdFx0XHRcdFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1x0XHRkZWx0YSA9IG5vdyAtIHRhcmdldF9scnV2ZWMtXHUwMDNlcHJldl9jb3N0W2ZdO1xuJiM0MztcdFx0dGFyZ2V0X2xydXZlYy1cdTAwM2VwcmV2X2Nvc3RbZl0gPSBub3c7XG4mIzQzO1x0XHR0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bZl0gJiM0Mzs9IGRlbHRhO1xuJiM0MztcdH1cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxydXNpemUgPVxuJiM0MztcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MztcbiYjNDM7XHRcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MztcbiYjNDM7XHRcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNvc3RfbGltaXQgPSBscnVzaXplIC8gNDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dIFx1MDAzZSBjb3N0X2xpbWl0IHx8XG4mIzQzO1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0IHx8XG4mIzQzO1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dICYjNDM7XG4mIzQzO1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0KSB7XG4mIzQzO1x0XHR0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXSAvPSAyO1xuJiM0MztcdFx0dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV0gLz0gMjtcbiYjNDM7XHR9XG4mIzQzO1x0c2MtXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl07XG4mIzQzO1x0c2MtXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV07XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRhcmdldCBkZXNpcmFibGUgaW5hY3RpdmU6YWN0aXZlIGxpc3QgcmF0aW9zIGZvciB0aGUgYW5vblxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi4yZGZlZDVlOWI2NGQ1NSAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuY1xuQEAgLTEyODksNiAmIzQzOzEyODksMTAgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9wcm9hY3RpdmVcJiMzNDssXG4gXHRbSShQR1NDQU5fQU5PTildXHRcdFx0PSBcJiMzNDtwZ3NjYW5fYW5vblwmIzM0OyxcbiBcdFtJKFBHU0NBTl9GSUxFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9maWxlXCYjMzQ7LFxuJiM0MztcdFtJKFBHUkVDTEFJTV9QQUdFT1VUX0FOT04pXVx0XHQ9IFwmIzM0O3BncmVjbGFpbV9wYWdlb3V0X2Fub25cJiMzNDssXG4mIzQzO1x0W0koUEdSRUNMQUlNX1BBR0VPVVRfRklMRSldXHRcdD0gXCYjMzQ7cGdyZWNsYWltX3BhZ2VvdXRfZmlsZVwmIzM0OyxcbiYjNDM7XHRbSShQR1JPVEFURV9BTk9OKV1cdFx0XHQ9IFwmIzM0O3Bncm90YXRlX2Fub25cJiMzNDssXG4mIzQzO1x0W0koUEdST1RBVEVfRklMRSldXHRcdFx0PSBcJiMzNDtwZ3JvdGF0ZV9maWxlXCYjMzQ7LFxuIFx0W0koUEdSRUZJTEwpXVx0XHRcdFx0PSBcJiMzNDtwZ3JlZmlsbFwmIzM0OyxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwmIzM0O25yX2h1Z2V0bGJcJiMzNDssXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjZC4uN2FjMmI4OGM4MGFlNTYgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTU4NCwxMSAmIzQzOzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdC8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi9cbiBcdGlmICh3b3JraW5nc2V0KSB7XG4gXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbi1cdFx0Lypcbi1cdFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xuLVx0XHQgKiBwdXRiYWNrXG4tXHRcdCAqL1xuLVx0XHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgJiM0MzsgZmlsZSwgbnIpO1xuIFx0fVxuIG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkyOGI0MjMwYjRmNzBkNTQ5ZDlhNDNjYWU5ZmFkNmJhMDU1YWM5NTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE4OjUxOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjA2Mjc2MjJhNTE4NGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTMyMyw2ICYjNDM7MzIzLDEwIEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0FOT04sCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCkBAIC03NjMsOSAmIzQzOzc2NywxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHsKIAkgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLQogCSAqIG92ZXIgdGhlIG90aGVyLiBBcyB0aGUgb2JzZXJ2ZWQgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUKIAkgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuCiYjNDM7CSAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2sKJiM0MzsJICogc2VyaWFsaXNlcyB0aGF0IHVwZGF0ZS4KIAkgKi8KLQl1bnNpZ25lZCBsb25nCQkJYW5vbl9jb3N0OwotCXVuc2lnbmVkIGxvbmcJCQlmaWxlX2Nvc3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwcmV2X2Nvc3RbQU5PTl9BTkRfRklMRV07CiYjNDM7CXVuc2lnbmVkIGxvbmcJCQljb3N0X2FjY3VtW0FOT05fQU5EX0ZJTEVdOwomIzQzOwlzcGlubG9ja190CQkJY29zdF9sb2NrOwogCS8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi8KIAlhdG9taWNfbG9uZ190CQkJbm9ucmVzaWRlbnRfYWdlOwogCS8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zMDksOSAmIzQzOzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLAotCQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTsKIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7CiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuYwppbmRleCA3NjUwNjkyMTE1Njc4Yy4uYzdhNTJiYjY4ZjRjN2QgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE5ODgsOCAmIzQzOzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKQogCQlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHsKIAkJCW16ID0gbWVtY2ctJmd0O25vZGVpbmZvW3BnZGF0LSZndDtub2RlX2lkXTsKIAotCQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmFub25fY29zdDsKLQkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5maWxlX2Nvc3Q7CiYjNDM7CQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTsKJiM0MzsJCQlmaWxlX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdOwogCQl9CiAJCXNlcV9idWZfcHJpbnRmKHMsICYjMzQ7YW5vbl9jb3N0ICVsdVxuJiMzNDssIGFub25fY29zdCk7CiAJCXNlcV9idWZfcHJpbnRmKHMsICYjMzQ7ZmlsZV9jb3N0ICVsdVxuJiMzNDssIGZpbGVfY29zdCk7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZmQuLjA0OWM4NjAyMTg3ZWM2IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MTksNiAmIzQzOzQxOSwxMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0FOT04sCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jCmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDQKLS0tIGEvbW0vbW16b25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmMKQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJbWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKIAl6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpOwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmMKQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJZm9saW9fYmF0Y2hfYWRkX2FuZF9tb3ZlKGZvbGlvLCBscnVfbW92ZV90YWlsKTsKIH0KIAotdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCi0JCXVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpCi0JCV9fcmVsZWFzZXMobHJ1dmVjLSZndDtscnVfbG9jaykKLQkJX19yZWxlYXNlcyhyY3UpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3N0OwotCi0JLyoKLQkgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVCi0JICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZQotCSAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZQotCSAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseQotCSAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLgotCSAqLwotCWNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDsKLQlpZiAoIWNvc3QpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yICg7OykgewotCQl1bnNpZ25lZCBsb25nIGxydXNpemU7Ci0KLQkJLyogUmVjb3JkIGNvc3QgZXZlbnQgKi8KLQkJaWYgKGZpbGUpCi0JCQlscnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOz0gY29zdDsKLQkJZWxzZQotCQkJbHJ1dmVjLSZndDthbm9uX2Nvc3QgJiM0Mzs9IGNvc3Q7Ci0KLQkJLyoKLQkJICogRGVjYXkgcHJldmlvdXMgZXZlbnRzCi0JCSAqCi0JCSAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZAotCQkgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmcKLQkJICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHMKLQkJICogbW9yZSB0aGFuIG9sZCBvbmVzLgotCQkgKi8KLQkJbHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTsKLQotCQlpZiAobHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLSZndDthbm9uX2Nvc3QgJmd0OyBscnVzaXplIC8gNCkgewotCQkJbHJ1dmVjLSZndDtmaWxlX2Nvc3QgLz0gMjsKLQkJCWxydXZlYy0mZ3Q7YW5vbl9jb3N0IC89IDI7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQkJbHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpOwotCQlpZiAoIWxydXZlYykgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlicmVhazsKLQkJfQotCQlzcGluX2xvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JfQotfQotCi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQotewotCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKLQotCWxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLAotCQkJCWZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGxydV9hY3RpdmF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTExNjQsOCAmIzQzOzEwOTcsNiBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludAogCiAJY2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTsKIAlwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7Ci0JcGFyZW50X2xydXZlYy0mZ3Q7YW5vbl9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlwYXJlbnRfbHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKIAkJbHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzVjM2JiMTVhZTk2YTMuLjgwZDJiMWQ3OWYxOTM0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMjAzOCwxMCAmIzQzOzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCWl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7CiYjNDM7CWlmIChzdGF0Lm5yX3BhZ2VvdXQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUNMQUlNX1BBR0VPVVRfQU5PTiAmIzQzOyBmaWxlLAomIzQzOwkJCQkgc3RhdC5ucl9wYWdlb3V0KTsKJiM0MzsJaWYgKG5yX3NjYW5uZWQgJmd0OyBucl9yZWNsYWltZWQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyBmaWxlLAomIzQzOwkJCQkgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiAKLQlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsCi0JCQkJCW5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpOwogCWhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCAmYW1wO3N0YXQpOwogCXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAogCQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CkBAIC0yMTQ3LDkgJiM0MzsyMTUwLDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAljb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTsKIAljb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7CiAJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwomIzQzOwlpZiAobnJfcm90YXRlZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsIG5yX3JvdGF0ZWQpOwogCi0JbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgMCwgbnJfcm90YXRlZCk7CiAJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsCiAJCQlucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwogfQpAQCAtMjI5OCwxMiAmIzQzOzIzMDEsNTYgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy0mZ3Q7dGFyZ2V0X21lbV9jZ3JvdXApOwogCiAJLyoKLQkgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy4KJiM0MzsJICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMgZnJvbSBwZXItTFJVCiYjNDM7CSAqIHZtc3RhdCBjb3VudGVycy4gVGhlIHJhdyBjb3N0IHBlciBzaWRlIGlzOgomIzQzOwkgKgomIzQzOwkgKglQR1JPVEFURQkgICAtIHJlY2xhaW0tZHJpdmVuIHJvdGF0aW9ucywgYnVtcGVkIGZyb20gYm90aAomIzQzOwkgKgkJCSAgICAgc2hyaW5rX2luYWN0aXZlX2xpc3QgYW5kIHNocmlua19hY3RpdmVfbGlzdAomIzQzOwkgKgkJCSAgICAgKENQVSB3b3JrKS4KJiM0MzsJICoJUEdSRUNMQUlNX1BBR0VPVVQgIC0gcmVjbGFpbS1kcml2ZW4gcGFnZW91dCBJTy4KJiM0MzsJICoJV09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgdHdvIElPIHRlcm1zIGFyZSB3ZWlnaHRlZCBieSBTV0FQX0NMVVNURVJfTUFYIHRvIHJlZmxlY3QgdGhlCiYjNDM7CSAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogUmVhZHMgYXJlIGxvY2stZnJlZSBwZXItY3B1IHN1bSBjb2xsYXRpb25zLCByc3RhdC1hZ2dyZWdhdGVkIHVwCiYjNDM7CSAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZGVsdGEgYWdhaW5zdCBwcmV2X2Nvc3QgaXMgZm9sZGVkIGludG8gY29zdF9hY2N1bSwgd2hpY2ggaXMKJiM0MzsJICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuCiYjNDM7CSAqIGNvc3RfbG9jayBzZXJpYWxpc2VzIGNvbmN1cnJlbnQgcmVjbGFpbWVycyBpbiB0aGUgc2FtZSBtZW1jZyYjNDM7bm9kZS4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwotCXNjLSZndDthbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLSZndDthbm9uX2Nvc3Q7Ci0Jc2MtJmd0O2ZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2ZpbGVfY29zdDsKLQlzcGluX3VubG9ja19pcnEoJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtscnVfbG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2Nvc3RfbG9jayk7CiYjNDM7CWZvciAoaW50IGYgPSAwOyBmICZsdDs9IDE7IGYmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5vdywgZGVsdGE7CiYjNDM7CiYjNDM7CQlub3cgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGYpICYjNDM7CiYjNDM7CQkgICAgICAobHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywKJiM0MzsJCQkJCSBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICYjNDM7IGYpICYjNDM7CiYjNDM7CQkgICAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywKJiM0MzsJCQkJCSBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKSkgKgomIzQzOwkJCQlTV0FQX0NMVVNURVJfTUFYOwomIzQzOwkJZGVsdGEgPSBub3cgLSB0YXJnZXRfbHJ1dmVjLSZndDtwcmV2X2Nvc3RbZl07CiYjNDM7CQl0YXJnZXRfbHJ1dmVjLSZndDtwcmV2X2Nvc3RbZl0gPSBub3c7CiYjNDM7CQl0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW2ZdICYjNDM7PSBkZWx0YTsKJiM0MzsJfQomIzQzOwl1bnNpZ25lZCBsb25nIGxydXNpemUgPQomIzQzOwkJbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCWxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MzsKJiM0MzsJCWxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9GSUxFKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3N0X2xpbWl0ID0gbHJ1c2l6ZSAvIDQ7CiYjNDM7CiYjNDM7CXdoaWxlICh0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gJmd0OyBjb3N0X2xpbWl0IHx8CiYjNDM7CSAgICAgICB0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV0gJmd0OyBjb3N0X2xpbWl0IHx8CiYjNDM7CSAgICAgICB0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gJiM0MzsKJiM0MzsJICAgICAgIHRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9GSUxFXSAmZ3Q7IGNvc3RfbGltaXQpIHsKJiM0MzsJCXRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXSAvPSAyOwomIzQzOwkJdGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIC89IDI7CiYjNDM7CX0KJiM0MzsJc2MtJmd0O2Fub25fY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTsKJiM0MzsJc2MtJmd0O2ZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9GSUxFXTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2xvY2spOwogCiAJLyoKIAkgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub24KZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggZjUzNDk3MmY1MTdkZTAuLjJkZmVkNWU5YjY0ZDU1IDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuYwpAQCAtMTI4OSw2ICYjNDM7MTI4OSwxMCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHsKIAlbSShQR1NDQU5fUFJPQUNUSVZFKV0JCQk9ICYjMzQ7cGdzY2FuX3Byb2FjdGl2ZSYjMzQ7LAogCVtJKFBHU0NBTl9BTk9OKV0JCQk9ICYjMzQ7cGdzY2FuX2Fub24mIzM0OywKIAlbSShQR1NDQU5fRklMRSldCQkJPSAmIzM0O3Bnc2Nhbl9maWxlJiMzNDssCiYjNDM7CVtJKFBHUkVDTEFJTV9QQUdFT1VUX0FOT04pXQkJPSAmIzM0O3BncmVjbGFpbV9wYWdlb3V0X2Fub24mIzM0OywKJiM0MzsJW0koUEdSRUNMQUlNX1BBR0VPVVRfRklMRSldCQk9ICYjMzQ7cGdyZWNsYWltX3BhZ2VvdXRfZmlsZSYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9BTk9OKV0JCQk9ICYjMzQ7cGdyb3RhdGVfYW5vbiYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9GSUxFKV0JCQk9ICYjMzQ7cGdyb3RhdGVfZmlsZSYjMzQ7LAogCVtJKFBHUkVGSUxMKV0JCQkJPSAmIzM0O3BncmVmaWxsJiMzNDssCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCVtJKE5SX0hVR0VUTEIpXQkJCQk9ICYjMzQ7bnJfaHVnZXRsYiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNTg0LDExICYjNDM7NTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCS8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi8KIAlpZiAod29ya2luZ3NldCkgewogCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7Ci0JCS8qCi0JCSAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnMKLQkJICogcHV0YmFjawotCQkgKi8KLQkJbHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTsKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIAl9CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVIFJlY2xhaW0gQ29zdCBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IGZ1bmRhbWVudGFsbHkgdHdlYWtzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgYXMgaXQgdG91Y2hlcyB0aGUgY29yZSBsb2dpYyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSBhbmQgcGFnZXMuIFNlZWluZyBhcyBpdCYjMzk7cyBhIGNoYW5nZSB0byBwYWdlIHJlY2xhaW0sIGl0JiMzOTtzIGRlZmluaXRlbHkgaGlnaCBvbiBteSBsaXN0IGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O3JlIG1vdmluZyBzb21lIGxvZ2ljIGFyb3VuZDsgc3BlY2lmaWNhbGx5LCByZW1vdmluZyBgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxYCBhbmQgYGxydV9ub3RlX2Nvc3RfcmVmYXVsdGAgZnJvbSBgbW0vc3dhcC5jYC4gVGhlc2UgYXJlIHRoZW4gcmVwbGFjZWQgYnkgYSBuZXcgc3lzdGVtIGludHJvZHVjZWQgaW4gYG1tL3Ztc2Nhbi5jYCB3aXRoaW4gdGhlIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgZnVuY3Rpb24uIE5ldyBub2RlIHN0YXQgaXRlbXMsIGxpa2UgYFBHUkVDTEFJTV9QQUdFT1VUX0FOT05gLCBgUEdSRUNMQUlNX1BBR0VPVVRfRklMRWAsIGBQR1JPVEFURV9BTk9OYCwgYW5kIGBQR1JPVEFURV9GSUxFYCwgaGF2ZSBhbHNvIGJlZW4gYWRkZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgdGhlIGBzdHJ1Y3QgbHJ1dmVjYCB0byByZXBsYWNlIHRoZSBvbGQgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIHdpdGggYHByZXZfY29zdGAsIGBjb3N0X2FjY3VtYCwgYW5kIGBjb3N0X2xvY2tgLgoKSSYjMzk7bSBtYWtpbmcgYSBxdWljayBtZW50YWwgbm90ZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGVzZSBhcmU6IGBtZW1jZzFfc3RhdF9mb3JtYXRgLCBgbHJ1dmVjX2luaXRgLCBgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlYCAoYWx0aG91Z2ggdGhhdCYjMzk7cyBqdXN0IGEgY29udGV4dCBjaGFuZ2UpLCBgbHJ1X3JlcGFyZW50X21lbWNnYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4KCkdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNvbWUga2V5IHN5bWJvbHMsIG5hbWVseSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgbHJ1X3JlcGFyZW50X21lbWNnYC4gV2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhhdCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS92bXNjYW4uY2AuIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGluIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgaW4gYG1tL3N3YXAuY2AuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvZGUgaW4gYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AsIG15IGludHVpdGlvbiBpcyB0aGF0IGBDT05GSUdfTUVNQ0dgIG1pZ2h0IGJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IGZvciBgbW0vbWVtY29udHJvbC5jYCBhbmQgcG90ZW50aWFsbHkgZm9yIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19NRU1DR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNzE9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkxLVx0XHR9IGVsc2Uge1xubW0vbWVtY29udHJvbC5jOjI5MjpcdFx0XHRscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcbm1tL21lbWNvbnRyb2wuYy0yOTMtXHRcdH1cbi0tXG5tbS9zd2FwLmM9MTA3Nj1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9zd2FwLmMtMTA5Mi1cbm1tL3N3YXAuYzoxMDkzOnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3N3YXAuYy0xMDk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhYnlyaW50aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IG1lbW9yeSBpcyBiZWluZyByZXBhcmVudGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBtZW1jZ2AgKG1lbW9yeSBjb250cm9sIGdyb3VwcykuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBgbW0vc3dhcC5jYCBmaWxlIG1pZ2h0IGJlIHRoZSBwbGFjZSB0byBzdGFydC4gSXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgY29yZSBzd2FwcGluZyBsb2dpYywgYW5kIHJlcGFyZW50aW5nLCBhdCBsZWFzdCBjb25jZXB0dWFsbHksIGZlZWxzIHJlbGF0ZWQgdG8gbW92aW5nIG1lbW9yeSBhcm91bmQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHJlcGFyZW50aW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgdGhlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGZ1bmN0aW9uLCBpcyBjb25kaXRpb25hbC4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgaXQmIzM5O3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIEl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIGNvbnRleHQgZGVwZW5kZW5jaWVzLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb25kaXRpb25zIGl0IGFwcGxpZXMgdG8sIG1heSBjaGFuZ2UgaG93IG1lbW9yeSBvcGVyYXRpb25zIHdvcmsgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGggdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29udGV4dHMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuYz0xMDc2PXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxuLS1cbm1tL3N3YXAuYy0xMDkyLVxubW0vc3dhcC5jOjEwOTM6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vc3dhcC5jLTEwOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNZW1jZyBJbnRlcmFjdGlvbnMgd2l0aCBMUlUgUmVwYXJlbnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgbW0vc3dhcC5jYCBoYW5kbGVzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgbWVtb3J5IGNncm91cHMgKG1lbWNncykgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIOKAkyBhIHByZXByb2Nlc3NvciBgI2lmZGVmIENPTkZJR19NRU1DR2Ag4oCTIHN1cnJvdW5kaW5nIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgbWVtY2dzIHByb2ZvdW5kbHkgYWx0ZXIgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGFuZCBob3cgb2JqZWN0cyBhcmUgcmVwYXJlbnRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSBleHBlY3QgdGhhdCBpZiBtZW1jZ3MgYXJlIGFjdGl2ZSwgdGhlIGhhbmRsaW5nIG9mIHRoZSBMUlUgcmVwYXJlbnRpbmcgbG9naWMgbGlrZWx5IG5lZWRzIHNwZWNpYWwgY29uc2lkZXJhdGlvbiB0byBjb3JyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGUgY2dyb3VwLWJhc2VkIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGxpbWl0YXRpb25zLiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdvdWxkIGJlIHRoZSB0ZWxsLiBJdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IGRpZmZlcmVudCBzdHJhdGVnaWVzIGFyZSBlbXBsb3llZCBvciB0aGF0IGNlcnRhaW4gZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIHRoZSBtZW1jZyBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgTFJVIHJlcGFyZW50aW5nIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgdW5kZXIgYSBtZW1jZyBlbnZpcm9ubWVudCwgYW5kIHRoZSBpZmRlZiBpcyB0aGUgZGlyZWN0IHdheSB0byBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5jPTEwNjM9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL3N3YXAuYy0xMDc0LVxubW0vc3dhcC5jOjEwNzU6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc3dhcC5jLTEwNzYtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgbG9jYXRpb25zIGluIHRoZSBrZXJuZWwgc291cmNlLiBSaWdodCwgYGxydV9yZXBhcmVudF9tZW1jZ2AuLi4gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBDb25maXJtZWQuIE5vdywgbGV0JiMzOTtzIHNlZSwgYHByZXBhcmVfc2Nhbl9jb250cm9sYC4uLiB5ZXAsIHRoYXQmIzM5O3MgdHVja2VkIGF3YXkgaW4gYG1tL3Ztc2Nhbi5jYC4gQW5kIHRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIGl0cyByb2xlLiBXaGlsZSBJJiMzOTttIGhlcmUsIEkgbWlnaHQgYXMgd2VsbCBub3RlIHRoYXQgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlICphbHNvKiBpbiBgbW0vdm1zY2FuLmNgLCB3aGljaCBmZWVscyByaWdodCwgb2YgY291cnNlLiBGaW5hbGx5LCBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBpbiBgbW0vd29ya2luZ3NldC5jYC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgZGlnIGludG8gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiAqdGhhdCogZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc2Nhbm5pbmcgYW5kIHJlY2xhbWF0aW9uIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIyNzk9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODUtXG5tbS92bXNjYW4uYzoyMjg2OnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Ny17XG4tLVxubW0vdm1zY2FuLmM9NjE5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjE1LVxubW0vdm1zY2FuLmM6NjIxNjpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBwcmVwYXJlX3NjYW5fY29udHJvbGAmIzM5O3MgQ29uZmlndXJlZCBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHByZXBhcmVfc2Nhbl9jb250cm9sYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgY29uZmlndXJlZCwgaWYgYXQgYWxsLiBJcyBpdCBvcGVyYXRpbmcgd2l0aCBzb21lIHNwZWNpZmljLCBpbmhlcml0ZWQgY29udGV4dD8gRG9lcyBpdCByZWx5IG9uIGEgY29uZmlndXJhdGlvbiBzZXQgYXQgYSBoaWdoZXIgbGV2ZWwsIG1heWJlIGEgZ2xvYmFsLCBtb2R1bGUsIG9yIGV2ZW4gYW4gYXBwbGljYXRpb24td2lkZSBzZXR0aW5nPyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hldGhlciB0aGlzIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGd1aWRlZCwgY29udHJvbGxlZCBvciBjdXN0b21pemVkIGJ5IGEgY29uZmlndXJhdGlvbiBpdGVtLCBwb3NzaWJseSB3aXRoaW4gYW4gb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzeXN0ZW0uIElmIGl0IGlzLCBrbm93aW5nIHRoZSBzY29wZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gKGdsb2JhbCwgbW9kdWxlLWxldmVsLCBldGMuKSB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBkZWJ1Z2dpbmcgaXRzIGJlaGF2aW9yLiBUaGUgbGV2ZWwgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGluZmx1ZW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGltcG9ydGFudC4gQW5kIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhhdCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjI3OT1lbnVtIHNjYW5fYmFsYW5jZSB7XG4tLVxubW0vdm1zY2FuLmMtMjI4NS1cbm1tL3Ztc2Nhbi5jOjIyODY6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yMjg3LXtcbi0tXG5tbS92bXNjYW4uYz02MTkzPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMTUtXG5tbS92bXNjYW4uYzo2MjE2Olx0cHJlcGFyZV9zY2FuX2NvbnRyb2wocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0IGNvbGxlYWd1ZToKCioqQ29yZSB2bXNjYW4gRGl2ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYmFzZSB2bXNjYW4gY29kZSBoZXJlLCBub3RoaW5nIGZhbmN5LiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgaW1tZWRpYXRlIGZvY3VzIGhhcyB0byBiZSBvbiBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gVGhvc2UgYXJlIHRoZSB3b3JraG9yc2VzOyB0aGV5IGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBUaGV5IGFyZSB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGRpc3NlY3RpbmcgdGhpcyBpc3N1ZSBhbmQgdHJhY2tpbmcgZG93biB0aGUgcm9vdCBjYXVzZS4gRXZlcnl0aGluZyBlbHNlIGhpbmdlcyBvbiB1bmRlcnN0YW5kaW5nIHRob3NlIHR3byByb3V0aW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2FjdGl2ZV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MTk4Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjA1NC0vKlxubW0vdm1zY2FuLmM6MjA1NTogKiBzaHJpbmtfYWN0aXZlX2xpc3QoKSBtb3ZlcyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlIExSVSB0byB0aGUgaW5hY3RpdmUgTFJVLlxubW0vdm1zY2FuLmMtMjA1Ni0gKlxuLS1cbm1tL3Ztc2Nhbi5jLTIwNzAtICovXG5tbS92bXNjYW4uYzoyMDcxOnN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDcyLVx0XHRcdCAgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmM9MjIxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyMjItXHRcdGlmIChzYy1cdTAwM2VtYXlfZGVhY3RpdmF0ZSBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGlzX2ZpbGVfbHJ1KGxydSkpKVxubW0vdm1zY2FuLmM6MjIyMzpcdFx0XHRzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcbm1tL3Ztc2Nhbi5jLTIyMjQtXHRcdGVsc2Vcbi0tXG5tbS92bXNjYW4uYz0yMjg2PXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzMDctXHQgKlx0UEdST1RBVEVcdCAgIC0gcmVjbGFpbS1kcml2ZW4gcm90YXRpb25zLCBidW1wZWQgZnJvbSBib3RoXG5tbS92bXNjYW4uYzoyMzA4Olx0ICpcdFx0XHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3Rcbm1tL3Ztc2Nhbi5jLTIzMDktXHQgKlx0XHRcdCAgICAgKENQVSB3b3JrKS5cbi0tXG5tbS92bXNjYW4uYz01OTIzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDM5LVx0ICAgIGluYWN0aXZlX2lzX2xvdyhscnV2ZWMsIExSVV9JTkFDVElWRV9BTk9OKSlcbm1tL3Ztc2Nhbi5jOjYwNDA6XHRcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXG5tbS92bXNjYW4uYy02MDQxLVx0XHRcdFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XG4tLVxubW0vdm1zY2FuLmM9Njg2MD1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjg4Mi1cdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjY4ODM6XHRcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXG5tbS92bXNjYW4uYy02ODg0LVx0XHRcdFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzU0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2F0ZWdvcml6ZSB0aGVtLiBIbW0sIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBrbm93IFN5emthbGxlciBpcyBjb3ZlcmFnZS1mb2N1c2VkLiBMaXN0aW5nIHN0YXRpYyBmdW5jdGlvbnMgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0sIHNpbmNlIFN5emthbGxlciB1c2VzIHRoZWlyIGFkZHJlc3Nlcy4gVGhhdCBvcGVucyB1cCBhIHdob2xlIHNldCBvZiBwb3NzaWJpbGl0aWVzLCBkb2VzbiYjMzk7dCBpdD8gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBJIHRoaW5rIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBjYW5kaWRhdGUuCgpOb3csIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBBaCwgdGhpcyBvbmUgaXMgZXhwb3J0ZWQsIGl0JiMzOTtzIGdsb2JhbC4gSSBzaG91bGQgY2hlY2sgaWYgdGhhdCYjMzk7cyBhY3R1YWxseSB0cnVlLCBqdXN0IHRvIGJlIHN1cmUuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aGF0IGdsb2JhbCBzdGF0dXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbi0tXG5tbS93b3JraW5nc2V0LmMtNTM5LS8qKlxubW0vd29ya2luZ3NldC5jOjU0MDogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbm1tL3dvcmtpbmdzZXQuYy01NDEtICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tLVxubW0vd29ya2luZ3NldC5jLTU0Ny0gKi9cbm1tL3dvcmtpbmdzZXQuYzo1NDg6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxubW0vd29ya2luZ3NldC5jLTU0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uY2VybiBpcyB3aGV0aGVyIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBZZXAsIGNvbmZpcm1lZCwgaXQgaXMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLi4uIGNsZWFybHksIG1lbW9yeSBjb250cm9sIGlzIGludm9sdmVkLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGxydV9yZXBhcmVudF9tZW1jZ2AuIFRoYXQmIzM5O3MgKmRlZmluaXRlbHkqIGdhdGVkIHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBUaGUgY29kZSBhbHNvIHVzZXMgYHByZXBhcmVfc2Nhbl9jb250cm9sYCB3aGljaCwgaW4gdHVybiwgbWFrZXMgdXNlIG9mIGB0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtYCDigJMgYW5kIHRoYXQgbGl2ZXMgaW4gYHN0cnVjdCBscnV2ZWNgLiBIbW0sIGBzdHJ1Y3QgbHJ1dmVjYCBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBIb3dldmVyLCBtZW1jZyBpcyB0aGUgcHJpbWFyeSBjb25zdW1lciBvZiB0aGUgbXVsdGktTFJVIHZlY3RvciBmdW5jdGlvbmFsaXR5LiBTbywgaXQgaXMgbW9zdCBsaWtlbHkgc2FmZSB0byBpbmNsdWRlIGBDT05GSUdfTUVNQ0dgLgoKTmV4dCB1cCwgYENPTkZJR19TV0FQYC4gVGhlIHBhdGNoIGRvZXMgc29tZSB3b3JrIHRvIGBtbS9zd2FwLmNgLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBtbS9zd2FwLmNgIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19TV0FQYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQgYnkgbG9va2luZyBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBjb25kaXRpb25hbCBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbm1tL01ha2VmaWxlOjUzOlx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbm1tL01ha2VmaWxlLTU0LVx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbi0tXG5tbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgc3dhcC5vYCBhbmQgYENPTkZJR19NRU1DR2AgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgc3dhcC5vYCBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbjsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGV2ZW4gaWYgc3dhcHBpbmcgaXMgZGlzYWJsZWQgYXQgcnVudGltZS4gSXTigJlzIHRoZSBmb3VuZGF0aW9uYWwgY29tcG9uZW50LiBCdXQsIHdoYXQmIzM5O3MgZ290IG1lIHRoaW5raW5nIGlzIHRoZSBpbnRlcnBsYXkgd2l0aCBgQ09ORklHX01FTUNHYC4gSWYgSSByZW1lbWJlciBjb3JyZWN0bHksIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgc3dhcCBoYXZlIHNvbWUgc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGNvbmRpdGlvbmFsaXRpZXMuIElzIHRoZXJlIGEgZGVwZW5kZW5jeSBwYXRoIEkmIzM5O20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXJlIHRoZXJlIGFueSBmZWF0dXJlcyBpbiBgc3dhcC5vYCB0aGF0IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgPyBUaGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgYmVoYXZpb3IsIGFuZCBzZWN1cml0eS4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgc2VlIGlmIHRoaXMgaW1wYWN0cyB0aGUgc2VjdXJpdHkgb2YgdGhlIGtlcm5lbC4gSSBtYXkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIGFuZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBzbmlwcGV0cyB0byBiZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHByb3Blcmx5LiBJIHN1c3BlY3QgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJldmlld2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE1lbWNnIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgbWVtY29udHJvbC5vYCBhbmQgYG1lbWNvbnRyb2wtdjEub2AgZGVmaW5pdGVseSBuZWVkIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIG5vdCBzdXJwcmlzaW5nLiBDb250cm9sIGdyb3Vwcywgc3BlY2lmaWNhbGx5IG1lbW9yeSBjb250cm9sLCBhcmUgY29yZSB0byBhIGxvdCBvZiBtb2Rlcm4gcmVzb3VyY2UgbWFuYWdlbWVudC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aGF0JiMzOTtzIGJlZW4gb24gbXkgbWluZC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdHVhbGx5IGEgdmFsaWQgYW5kIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBkb24mIzM5O3Qgd2FudCB0byBjaGFzZSBteSB0YWlsIGlmIHRoYXQmIzM5O3MgYmVlbiBkZXByZWNhdGVkIG9yIHJlbmFtZWQgaW4gYSByZWNlbnQga2VybmVsIHVwZGF0ZSwgb3IgaXNuJiMzOTt0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBjYXVzaW5nIHVuZXhwZWN0ZWQgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgZG9jdW1lbnRhdGlvbiBvciB0aGUgYnVpbGQgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB2ZXJpZnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR19WMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBNRU1DR19WMWAgS2NvbmZpZyBvcHRpb24gaXMgZGVmaW5lZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2Yga2VybmVsIGZlYXR1cmVzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb3B0aW9ucy4gYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBvZnRlbiBoYW5kbGVzIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb25zLiBCdXQsIGdpdmVuIHRoYXQgYE1FTUNHX1YxYCBzY3JlYW1zIG1lbW9yeSBtYW5hZ2VtZW50LCBJJiMzOTttIGxlYW5pbmcgbW9yZSB0b3dhcmRzIGBtbS9LY29uZmlnYCByaWdodCBhd2F5LiBJdCYjMzk7cyB0aGUgbW9yZSBsb2dpY2FsIGhvbWUgZm9yIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBpdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gZmlsZXMsIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwODk9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwOTUtXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDk3LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgcmVjb2duaXplIHRob3NlIGFzIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMg4oCTIGZsYWdzIHdlIHVzZSB0byBidWlsZCB0aGUga2VybmVsIHdpdGggb3Igd2l0aG91dCBzcGVjaWZpYyBmZWF0dXJlcyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzLgoKTm93LCBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFYCBpcyBjb25zaXN0ZW50bHkgZGVmaW5lZCBhY3Jvc3MgZGlmZmVyZW50IGJ1aWxkcyBvciBzY2VuYXJpb3MuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyBJJiMzOTtsbCBzZWUgaWYgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkLiBJZiBpdCBpc24mIzM5O3QgZGVmaW5lZCBldmVyeXdoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IGFuZCBpZiBpdCBoYXMgYW55IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V09SS0lOR1NFVF9SRVNUT1JFX0JBU0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MjM2PWVudW0gbm9kZV9zdGF0X2l0ZW0ge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjUzLVx0V09SS0lOR1NFVF9BQ1RJVkFURV9GSUxFLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoyNTQ6XHRXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MjU1Olx0V09SS0lOR1NFVF9SRVNUT1JFX0FOT04gPSBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjU2LVx0V09SS0lOR1NFVF9SRVNUT1JFX0ZJTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA5CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgcmVjbGFpbSBsb2dpYywgc28gdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0d2Vha2luZyBob3cgdGhlIGtlcm5lbCBwcmlvcml0aXplcyBzY2FubmluZyB0aGUgYW5vbnltb3VzIHZlcnN1cyBmaWxlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgbGlzdHMuIFRoaXMga2luZCBvZiBiYWxhbmNlIGNoYW5nZSBjYW4gaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCwgb2YgY291cnNlLCBzdGFiaWxpdHkuIFRoZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBmbGFnIGNvbmZpcm1zIG15IGluaXRpYWwgaW1wcmVzc2lvbiAtIHRoaXMgaXMgZ29pbmcgdG8gYmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCB3aGljaCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4KCkkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB0byBjb25zaWRlcjogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AuIEkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBlYWNoIG9mIHRoZW0gdG8gbWFrZSBzdXJlIHRoZSBuYW1lcyBhcmUgYWNjdXJhdGUsIGFuZCB0aGV5IGFyZS4gVGhlIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCwgd2hpY2ggc3VnZ2VzdHMgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBjZ3JvdXBzLgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGNvc3QgdHJhY2tpbmcgZm9yIExSVSByZWNsYWltLCBpbnRyb2R1Y2luZyBuZXcgbm9kZSBzdGF0cyBhbmQgbW9kaWZ5aW5nIHRoZSBiYWxhbmNlIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIExSVSBzY2Fucy4gVGhhdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBhbmQgaXQgY291bGQgdmVyeSB3ZWxsIGltcGFjdCBwZXJmb3JtYW5jZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZGlmZmljdWx0IHRvIHByZWRpY3QgdGhlIGVmZmVjdHMuIExldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIHJlY2xhaW0gY29zdCB0cmFja2luZyBtZWNoYW5pc20gaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBub2RlIHN0YXQgaXRlbXMgYW5kIGNoYW5nZXMgaG93IHRoZSBrZXJuZWwgYmFsYW5jZXMgc2Nhbm5pbmcgYmV0d2VlbiBhbm9ueW1vdXMgYW5kIGZpbGUgTFJVcyBkdXJpbmcgcGFnZSByZWNsYWltLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MTo1My41NjcxNTEzODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc5MTAxMjU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmVwYXJlX3NjYW5fY29udHJvbFwiLFxuICAgIFwic2hyaW5rX2luYWN0aXZlX2xpc3RcIixcbiAgICBcInNocmlua19hY3RpdmVfbGlzdFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJscnVfcmVwYXJlbnRfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIHJlY2xhaW0gY29zdCB0cmFja2luZyBtZWNoYW5pc20gaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBub2RlIHN0YXQgaXRlbXMgYW5kIGNoYW5nZXMgaG93IHRoZSBrZXJuZWwgYmFsYW5jZXMgc2Nhbm5pbmcgYmV0d2VlbiBhbm9ueW1vdXMgYW5kIGZpbGUgTFJVcyBkdXJpbmcgcGFnZSByZWNsYWltLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MTo1My41NjcxNTU5MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTI1MjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkyOGI0MjMwYjRmNzBkNTQ5ZDlhNDNjYWU5ZmFkNmJhMDU1YWM5NThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAxODo1MTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi4wNjI3NjIyYTUxODRjMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC0zMjMsNiArMzIzLDEwIEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0ge1xcbiBcXHRQR1NDQU5fUFJPQUNUSVZFLFxcbiBcXHRQR1NDQU5fQU5PTixcXG4gXFx0UEdTQ0FOX0ZJTEUsXFxuK1xcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXFxuK1xcdFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsXFxuK1xcdFBHUk9UQVRFX0FOT04sXFxuK1xcdFBHUk9UQVRFX0ZJTEUsXFxuIFxcdFBHUkVGSUxMLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHROUl9IVUdFVExCLFxcbkBAIC03NjMsOSArNzY3LDEyIEBAIHN0cnVjdCBscnV2ZWMge1xcbiBcXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxcbiBcXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXFxuIFxcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cXG4rXFx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xcbitcXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGFub25fY29zdDtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZpbGVfY29zdDtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHByZXZfY29zdFtBTk9OX0FORF9GSUxFXTtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGNvc3RfYWNjdW1bQU5PTl9BTkRfRklMRV07XFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRcXHRjb3N0X2xvY2s7XFxuIFxcdC8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi9cXG4gXFx0YXRvbWljX2xvbmdfdFxcdFxcdFxcdG5vbnJlc2lkZW50X2FnZTtcXG4gXFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0zMDksOSArMzA5LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xcbiBcXG4gXFxuIC8qIGxpbnV4L21tL3N3YXAuYyAqL1xcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcXG4tXFx0XFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZCk7XFxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcXG4gdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcXG4gdm9pZCBmb2xpb19hZGRfbHJ1X3ZtYShzdHJ1Y3QgZm9saW8gKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggNzY1MDY5MjExNTY3OGMuLmM3YTUyYmI2OGY0YzdkIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbkBAIC0xOTg4LDggKzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiBcXHRcXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcXG4gXFx0XFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiBcXG4tXFx0XFx0XFx0YW5vbl9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xcbi1cXHRcXHRcXHRmaWxlX2Nvc3QgKz0gbXotXFx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XFxuK1xcdFxcdFxcdGFub25fY29zdCArPSBtei1cXHUwMDNlbHJ1dmVjLmNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTtcXG4rXFx0XFx0XFx0ZmlsZV9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNlcV9idWZfcHJpbnRmKHMsIFxcXCJhbm9uX2Nvc3QgJWx1XFxcXG5cXFwiLCBhbm9uX2Nvc3QpO1xcbiBcXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiZmlsZV9jb3N0ICVsdVxcXFxuXFxcIiwgZmlsZV9jb3N0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjA0OWM4NjAyMTg3ZWM2IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC00MTksNiArNDE5LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuIFxcdFBHU0NBTl9QUk9BQ1RJVkUsXFxuIFxcdFBHU0NBTl9BTk9OLFxcbiBcXHRQR1NDQU5fRklMRSxcXG4rXFx0UEdSRUNMQUlNX1BBR0VPVVRfQU5PTixcXG4rXFx0UEdSRUNMQUlNX1BBR0VPVVRfRklMRSxcXG4rXFx0UEdST1RBVEVfQU5PTixcXG4rXFx0UEdST1RBVEVfRklMRSxcXG4gXFx0UEdSRUZJTEwsXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIFxcdE5SX0hVR0VUTEIsXFxuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XFxuLS0tIGEvbW0vbW16b25lLmNcXG4rKysgYi9tbS9tbXpvbmUuY1xcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbiBcXHR6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXFxuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuY1xcbisrKyBiL21tL3N3YXAuY1xcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XFxuIH1cXG4gXFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxcbi1cXHRcXHRfX3JlbGVhc2VzKGxydXZlYy1cXHUwMDNlbHJ1X2xvY2spXFxuLVxcdFxcdF9fcmVsZWFzZXMocmN1KVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgY29zdDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcXG4tXFx0ICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24ndCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXFxuLVxcdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxcbi1cXHQgKiBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUgb3ZlcndoZWxtaW5nbHlcXG4tXFx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXFxuLVxcdCAqL1xcbi1cXHRjb3N0ID0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcXG4tXFx0aWYgKCFjb3N0KSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xcbi1cXG4tXFx0XFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cXG4tXFx0XFx0aWYgKGZpbGUpXFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNvc3Q7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgKz0gY29zdDtcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIERlY2F5IHByZXZpb3VzIGV2ZW50c1xcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBCZWNhdXNlIHdvcmtsb2FkcyBjaGFuZ2Ugb3ZlciB0aW1lIChhbmQgdG8gYXZvaWRcXG4tXFx0XFx0ICogb3ZlcmZsb3cpIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nXFxuLVxcdFxcdCAqIGF2ZXJhZ2UsIHdoaWNoIGVuZHMgdXAgd2VpZ2hpbmcgcmVjZW50IHJlZmF1bHRzXFxuLVxcdFxcdCAqIG1vcmUgdGhhbiBvbGQgb25lcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4tXFx0XFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XFxuLVxcbi1cXHRcXHRpZiAobHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3QgKyBscnV2ZWMtXFx1MDAzZWFub25fY29zdCBcXHUwMDNlIGxydXNpemUgLyA0KSB7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0IC89IDI7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlYW5vbl9jb3N0IC89IDI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdGxydXZlYyA9IHBhcmVudF9scnV2ZWMobHJ1dmVjKTtcXG4tXFx0XFx0aWYgKCFscnV2ZWMpIHtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHR9XFxuLX1cXG4tXFxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbi1cXG4tXFx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxcbi1cXHRcXHRcXHRcXHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XFxuIFxcbiBcXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xcbiBcXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XFxuLVxcdHBhcmVudF9scnV2ZWMtXFx1MDAzZWFub25fY29zdCArPSBjaGlsZF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG4tXFx0cGFyZW50X2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0O1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG4gXFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi44MGQyYjFkNzlmMTkzNCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTIwMzgsMTAgKzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xcbitcXHRpZiAoc3RhdC5ucl9wYWdlb3V0KVxcbitcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUNMQUlNX1BBR0VPVVRfQU5PTiArIGZpbGUsXFxuK1xcdFxcdFxcdFxcdCBzdGF0Lm5yX3BhZ2VvdXQpO1xcbitcXHRpZiAobnJfc2Nhbm5lZCBcXHUwMDNlIG5yX3JlY2xhaW1lZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxcbitcXHRcXHRcXHRcXHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuIFxcbi1cXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgc3RhdC5ucl9wYWdlb3V0LFxcbi1cXHRcXHRcXHRcXHRcXHRucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcXG4gXFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXFx1MDAzZW5vZGVfaWQsXFxuIFxcdFxcdFxcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXFx1MDAyNnN0YXQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuQEAgLTIxNDcsOSArMjE1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xcbiBcXHRjb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XFxuIFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbitcXHRpZiAobnJfcm90YXRlZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLCBucl9yb3RhdGVkKTtcXG4gXFxuLVxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbi1cXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXFxuIFxcdFxcdFxcdG5yX2RlYWN0aXZhdGUsIG5yX3JvdGF0ZWQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuIH1cXG5AQCAtMjI5OCwxMiArMjMwMSw1NiBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXApO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXFxuK1xcdCAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzIGZyb20gcGVyLUxSVVxcbitcXHQgKiB2bXN0YXQgY291bnRlcnMuIFRoZSByYXcgY29zdCBwZXIgc2lkZSBpczpcXG4rXFx0ICpcXG4rXFx0ICpcXHRQR1JPVEFURVxcdCAgIC0gcmVjbGFpbS1kcml2ZW4gcm90YXRpb25zLCBidW1wZWQgZnJvbSBib3RoXFxuK1xcdCAqXFx0XFx0XFx0ICAgICBzaHJpbmtfaW5hY3RpdmVfbGlzdCBhbmQgc2hyaW5rX2FjdGl2ZV9saXN0XFxuK1xcdCAqXFx0XFx0XFx0ICAgICAoQ1BVIHdvcmspLlxcbitcXHQgKlxcdFBHUkVDTEFJTV9QQUdFT1VUICAtIHJlY2xhaW0tZHJpdmVuIHBhZ2VvdXQgSU8uXFxuK1xcdCAqXFx0V09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgdHdvIElPIHRlcm1zIGFyZSB3ZWlnaHRlZCBieSBTV0FQX0NMVVNURVJfTUFYIHRvIHJlZmxlY3QgdGhlXFxuK1xcdCAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi5cXG4rXFx0ICpcXG4rXFx0ICogUmVhZHMgYXJlIGxvY2stZnJlZSBwZXItY3B1IHN1bSBjb2xsYXRpb25zLCByc3RhdC1hZ2dyZWdhdGVkIHVwXFxuK1xcdCAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgZGVsdGEgYWdhaW5zdCBwcmV2X2Nvc3QgaXMgZm9sZGVkIGludG8gY29zdF9hY2N1bSwgd2hpY2ggaXNcXG4rXFx0ICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuXFxuK1xcdCAqIGNvc3RfbG9jayBzZXJpYWxpc2VzIGNvbmN1cnJlbnQgcmVjbGFpbWVycyBpbiB0aGUgc2FtZSBtZW1jZytub2RlLlxcbiBcXHQgKi9cXG4tXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHRzYy1cXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cXHUwMDNlYW5vbl9jb3N0O1xcbi1cXHRzYy1cXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0O1xcbi1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbitcXHRmb3IgKGludCBmID0gMDsgZiBcXHUwMDNjPSAxOyBmKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBub3csIGRlbHRhO1xcbitcXG4rXFx0XFx0bm93ID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgUEdST1RBVEVfQU5PTiArIGYpICtcXG4rXFx0XFx0ICAgICAgKGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICsgZikgK1xcbitcXHRcXHQgICAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0IFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZikpICpcXG4rXFx0XFx0XFx0XFx0U1dBUF9DTFVTVEVSX01BWDtcXG4rXFx0XFx0ZGVsdGEgPSBub3cgLSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VwcmV2X2Nvc3RbZl07XFxuK1xcdFxcdHRhcmdldF9scnV2ZWMtXFx1MDAzZXByZXZfY29zdFtmXSA9IG5vdztcXG4rXFx0XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9hY2N1bVtmXSArPSBkZWx0YTtcXG4rXFx0fVxcbitcXHR1bnNpZ25lZCBsb25nIGxydXNpemUgPVxcbitcXHRcXHRscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXFxuK1xcdFxcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXFxuK1xcdFxcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG4rXFx0XFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvc3RfbGltaXQgPSBscnVzaXplIC8gNDtcXG4rXFxuK1xcdHdoaWxlICh0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gXFx1MDAzZSBjb3N0X2xpbWl0IHx8XFxuK1xcdCAgICAgICB0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV0gXFx1MDAzZSBjb3N0X2xpbWl0IHx8XFxuK1xcdCAgICAgICB0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gK1xcbitcXHQgICAgICAgdGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFxcdTAwM2UgY29zdF9saW1pdCkge1xcbitcXHRcXHR0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gLz0gMjtcXG4rXFx0XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIC89IDI7XFxuK1xcdH1cXG4rXFx0c2MtXFx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTtcXG4rXFx0c2MtXFx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9GSUxFXTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfbG9jayk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuY1xcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi4yZGZlZDVlOWI2NGQ1NSAxMDA2NDRcXG4tLS0gYS9tbS92bXN0YXQuY1xcbisrKyBiL21tL3Ztc3RhdC5jXFxuQEAgLTEyODksNiArMTI4OSwxMCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4gXFx0W0koUEdTQ0FOX1BST0FDVElWRSldXFx0XFx0XFx0PSBcXFwicGdzY2FuX3Byb2FjdGl2ZVxcXCIsXFxuIFxcdFtJKFBHU0NBTl9BTk9OKV1cXHRcXHRcXHQ9IFxcXCJwZ3NjYW5fYW5vblxcXCIsXFxuIFxcdFtJKFBHU0NBTl9GSUxFKV1cXHRcXHRcXHQ9IFxcXCJwZ3NjYW5fZmlsZVxcXCIsXFxuK1xcdFtJKFBHUkVDTEFJTV9QQUdFT1VUX0FOT04pXVxcdFxcdD0gXFxcInBncmVjbGFpbV9wYWdlb3V0X2Fub25cXFwiLFxcbitcXHRbSShQR1JFQ0xBSU1fUEFHRU9VVF9GSUxFKV1cXHRcXHQ9IFxcXCJwZ3JlY2xhaW1fcGFnZW91dF9maWxlXFxcIixcXG4rXFx0W0koUEdST1RBVEVfQU5PTildXFx0XFx0XFx0PSBcXFwicGdyb3RhdGVfYW5vblxcXCIsXFxuK1xcdFtJKFBHUk9UQVRFX0ZJTEUpXVxcdFxcdFxcdD0gXFxcInBncm90YXRlX2ZpbGVcXFwiLFxcbiBcXHRbSShQR1JFRklMTCldXFx0XFx0XFx0XFx0PSBcXFwicGdyZWZpbGxcXFwiLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHRbSShOUl9IVUdFVExCKV1cXHRcXHRcXHRcXHQ9IFxcXCJucl9odWdldGxiXFxcIixcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0LyogRm9saW8gd2FzIGFjdGl2ZSBwcmlvciB0byBldmljdGlvbiAqL1xcbiBcXHRpZiAod29ya2luZ3NldCkge1xcbiBcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcXG4tXFx0XFx0ICogcHV0YmFja1xcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcXG4gXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZmlsZSwgbnIpO1xcbiBcXHR9XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTE6NTQuMTQ3MDk5ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjExMDU1MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTI4YjQyMzBiNGY3MGQ1NDlkOWE0M2NhZTlmYWQ2YmEwNTVhYzk1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTg6NTE6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjA2Mjc2MjJhNTE4NGMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTMyMyw2ICszMjMsMTAgQEAgZW51bSBub2RlX3N0YXRfaXRlbSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXG4rXHRQR1JFQ0xBSU1fUEFHRU9VVF9GSUxFLFxuK1x0UEdST1RBVEVfQU5PTixcbitcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbkBAIC03NjMsOSArNzY3LDEyIEBAIHN0cnVjdCBscnV2ZWMge1xuIFx0ICogVGhlc2UgdHJhY2sgdGhlIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVIC0gZmlsZSBvciBhbm9uIC1cbiBcdCAqIG92ZXIgdGhlIG90aGVyLiBBcyB0aGUgb2JzZXJ2ZWQgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlVcbiBcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cbitcdCAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2tcbitcdCAqIHNlcmlhbGlzZXMgdGhhdCB1cGRhdGUuXG4gXHQgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRhbm9uX2Nvc3Q7XG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0ZmlsZV9jb3N0O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRcdHByZXZfY29zdFtBTk9OX0FORF9GSUxFXTtcbitcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb3N0X2FjY3VtW0FOT05fQU5EX0ZJTEVdO1xuK1x0c3BpbmxvY2tfdFx0XHRcdGNvc3RfbG9jaztcbiBcdC8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi9cbiBcdGF0b21pY19sb25nX3RcdFx0XHRub25yZXNpZGVudF9hZ2U7XG4gXHQvKiBSZWZhdWx0cyBhdCB0aGUgdGltZSBvZiBsYXN0IHJlY2xhaW0gY3ljbGUgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zMDksOSArMzA5LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xuIFxuIFxuIC8qIGxpbnV4L21tL3N3YXAuYyAqL1xuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XG4gdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uYzdhNTJiYjY4ZjRjN2QgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCArMTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gXHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuIFx0XHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gXG4tXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5hbm9uX2Nvc3Q7XG4tXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4rXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl07XG4rXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV07XG4gXHRcdH1cbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCJhbm9uX2Nvc3QgJWx1XFxuXCIsIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwiZmlsZV9jb3N0ICVsdVxcblwiLCBmaWxlX2Nvc3QpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjA0OWM4NjAyMTg3ZWM2IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MTksNiArNDE5LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXG4rXHRQR1JFQ0xBSU1fUEFHRU9VVF9GSUxFLFxuK1x0UEdST1RBVEVfQU5PTixcbitcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuKysrIGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcdHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KGxydXZlYyk7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuY1xuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5jXG4rKysgYi9tbS9zd2FwLmNcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2Vzbid0IGF0dGVtcHQgdG8gbWFrZSBhIHByZWNpc2Vcbi1cdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxuLVx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XG4tXHQgKiBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhbiBiYWxhbmNlIGZvciBDUFUgd29yay5cbi1cdCAqL1xuLVx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCArIG5yX3JvdGF0ZWQ7XG4tXHRpZiAoIWNvc3QpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbi1cbi1cdFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cbi1cdFx0aWYgKGZpbGUpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArPSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCArPSBjb3N0O1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcbi1cdFx0ICpcbi1cdFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXG4tXHRcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xuLVx0XHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xuLVx0XHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXG4tXHRcdCAqL1xuLVx0XHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuLVxuLVx0XHRpZiAobHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArIGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgXHUwMDNlIGxydXNpemUgLyA0KSB7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAvPSAyO1xuLVx0XHRcdGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgLz0gMjtcbi1cdFx0fVxuLVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0bHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpO1xuLVx0XHRpZiAoIWxydXZlYykge1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdH1cbi19XG4tXG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4tXG4tXHRscnV2ZWMgPSBmb2xpb19scnV2ZWNfbG9ja19pcnEoZm9saW8pO1xuLVx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxuLVx0XHRcdFx0Zm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuIFx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi44MGQyYjFkNzlmMTkzNCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTIwMzgsMTAgKzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xuK1x0aWYgKHN0YXQubnJfcGFnZW91dClcbitcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVDTEFJTV9QQUdFT1VUX0FOT04gKyBmaWxlLFxuK1x0XHRcdFx0IHN0YXQubnJfcGFnZW91dCk7XG4rXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgbnJfcmVjbGFpbWVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsXG4rXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCxcbi1cdFx0XHRcdFx0bnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuIFx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuQEAgLTIxNDcsOSArMjE1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuK1x0aWYgKG5yX3JvdGF0ZWQpXG4rXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyOTgsMTIgKzIzMDEsNTYgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwKTtcbiBcbiBcdC8qXG4tXHQgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy5cbitcdCAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzIGZyb20gcGVyLUxSVVxuK1x0ICogdm1zdGF0IGNvdW50ZXJzLiBUaGUgcmF3IGNvc3QgcGVyIHNpZGUgaXM6XG4rXHQgKlxuK1x0ICpcdFBHUk9UQVRFXHQgICAtIHJlY2xhaW0tZHJpdmVuIHJvdGF0aW9ucywgYnVtcGVkIGZyb20gYm90aFxuK1x0ICpcdFx0XHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3RcbitcdCAqXHRcdFx0ICAgICAoQ1BVIHdvcmspLlxuK1x0ICpcdFBHUkVDTEFJTV9QQUdFT1VUICAtIHJlY2xhaW0tZHJpdmVuIHBhZ2VvdXQgSU8uXG4rXHQgKlx0V09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLlxuK1x0ICpcbitcdCAqIFRoZSB0d28gSU8gdGVybXMgYXJlIHdlaWdodGVkIGJ5IFNXQVBfQ0xVU1RFUl9NQVggdG8gcmVmbGVjdCB0aGVcbitcdCAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi5cbitcdCAqXG4rXHQgKiBSZWFkcyBhcmUgbG9jay1mcmVlIHBlci1jcHUgc3VtIGNvbGxhdGlvbnMsIHJzdGF0LWFnZ3JlZ2F0ZWQgdXBcbitcdCAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLlxuK1x0ICpcbitcdCAqIFRoZSBkZWx0YSBhZ2FpbnN0IHByZXZfY29zdCBpcyBmb2xkZWQgaW50byBjb3N0X2FjY3VtLCB3aGljaCBpc1xuK1x0ICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuXG4rXHQgKiBjb3N0X2xvY2sgc2VyaWFsaXNlcyBjb25jdXJyZW50IHJlY2xhaW1lcnMgaW4gdGhlIHNhbWUgbWVtY2crbm9kZS5cbiBcdCAqL1xuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdHNjLVx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0O1xuLVx0c2MtXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuK1x0Zm9yIChpbnQgZiA9IDA7IGYgXHUwMDNjPSAxOyBmKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBub3csIGRlbHRhO1xuK1xuK1x0XHRub3cgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZikgK1xuK1x0XHQgICAgICAobHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0IFBHUkVDTEFJTV9QQUdFT1VUX0FOT04gKyBmKSArXG4rXHRcdCAgICAgICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxuK1x0XHRcdFx0XHQgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmKSkgKlxuK1x0XHRcdFx0U1dBUF9DTFVTVEVSX01BWDtcbitcdFx0ZGVsdGEgPSBub3cgLSB0YXJnZXRfbHJ1dmVjLVx1MDAzZXByZXZfY29zdFtmXTtcbitcdFx0dGFyZ2V0X2xydXZlYy1cdTAwM2VwcmV2X2Nvc3RbZl0gPSBub3c7XG4rXHRcdHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtmXSArPSBkZWx0YTtcbitcdH1cbitcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZSA9XG4rXHRcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcbitcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0FOT04pICtcbitcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xuK1x0XHRscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XG4rXHR1bnNpZ25lZCBsb25nIGNvc3RfbGltaXQgPSBscnVzaXplIC8gNDtcbitcbitcdHdoaWxlICh0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXSBcdTAwM2UgY29zdF9saW1pdCB8fFxuK1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0IHx8XG4rXHQgICAgICAgdGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gK1xuK1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0KSB7XG4rXHRcdHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dIC89IDI7XG4rXHRcdHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIC89IDI7XG4rXHR9XG4rXHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTtcbitcdHNjLVx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRhcmdldCBkZXNpcmFibGUgaW5hY3RpdmU6YWN0aXZlIGxpc3QgcmF0aW9zIGZvciB0aGUgYW5vblxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi4yZGZlZDVlOWI2NGQ1NSAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4rKysgYi9tbS92bXN0YXQuY1xuQEAgLTEyODksNiArMTI4OSwxMCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbiBcdFtJKFBHU0NBTl9QUk9BQ1RJVkUpXVx0XHRcdD0gXCJwZ3NjYW5fcHJvYWN0aXZlXCIsXG4gXHRbSShQR1NDQU5fQU5PTildXHRcdFx0PSBcInBnc2Nhbl9hbm9uXCIsXG4gXHRbSShQR1NDQU5fRklMRSldXHRcdFx0PSBcInBnc2Nhbl9maWxlXCIsXG4rXHRbSShQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OKV1cdFx0PSBcInBncmVjbGFpbV9wYWdlb3V0X2Fub25cIixcbitcdFtJKFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUpXVx0XHQ9IFwicGdyZWNsYWltX3BhZ2VvdXRfZmlsZVwiLFxuK1x0W0koUEdST1RBVEVfQU5PTildXHRcdFx0PSBcInBncm90YXRlX2Fub25cIixcbitcdFtJKFBHUk9UQVRFX0ZJTEUpXVx0XHRcdD0gXCJwZ3JvdGF0ZV9maWxlXCIsXG4gXHRbSShQR1JFRklMTCldXHRcdFx0XHQ9IFwicGdyZWZpbGxcIixcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwibnJfaHVnZXRsYlwiLFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdC8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi9cbiBcdGlmICh3b3JraW5nc2V0KSB7XG4gXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbi1cdFx0Lypcbi1cdFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xuLVx0XHQgKiBwdXRiYWNrXG4tXHRcdCAqL1xuLVx0XHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmaWxlLCBucik7XG4gXHR9XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTE6NTQuMTQ3MTAxMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM2OTY2NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIExSVSBSZWNsYWltIENvc3QgVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQgZnVuZGFtZW50YWxseSB0d2Vha3MgdGhlIExSVSByZWNsYWltIGNvc3QgdHJhY2tpbmcgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhcyBpdCB0b3VjaGVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5IGFuZCBwYWdlcy4gU2VlaW5nIGFzIGl0J3MgYSBjaGFuZ2UgdG8gcGFnZSByZWNsYWltLCBpdCdzIGRlZmluaXRlbHkgaGlnaCBvbiBteSBsaXN0IGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSdyZSBtb3Zpbmcgc29tZSBsb2dpYyBhcm91bmQ7IHNwZWNpZmljYWxseSwgcmVtb3ZpbmcgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIGZyb20gYG1tL3N3YXAuY2AuIFRoZXNlIGFyZSB0aGVuIHJlcGxhY2VkIGJ5IGEgbmV3IHN5c3RlbSBpbnRyb2R1Y2VkIGluIGBtbS92bXNjYW4uY2Agd2l0aGluIHRoZSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGZ1bmN0aW9uLiBOZXcgbm9kZSBzdGF0IGl0ZW1zLCBsaWtlIGBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OYCwgYFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEVgLCBgUEdST1RBVEVfQU5PTmAsIGFuZCBgUEdST1RBVEVfRklMRWAsIGhhdmUgYWxzbyBiZWVuIGFkZGVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHRoZSBgc3RydWN0IGxydXZlY2AgdG8gcmVwbGFjZSB0aGUgb2xkIGBhbm9uX2Nvc3RgIGFuZCBgZmlsZV9jb3N0YCB3aXRoIGBwcmV2X2Nvc3RgLCBgY29zdF9hY2N1bWAsIGFuZCBgY29zdF9sb2NrYC5cblxuSSdtIG1ha2luZyBhIHF1aWNrIG1lbnRhbCBub3RlIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXNlIGFyZTogYG1lbWNnMV9zdGF0X2Zvcm1hdGAsIGBscnV2ZWNfaW5pdGAsIGBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGVgIChhbHRob3VnaCB0aGF0J3MganVzdCBhIGNvbnRleHQgY2hhbmdlKSwgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuXG5cbkdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gc29tZSBrZXkgc3ltYm9scywgbmFtZWx5IGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIGFuZCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBpbiBgbW0vc3dhcC5jYC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGNvZGUgaW4gYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AsIG15IGludHVpdGlvbiBpcyB0aGF0IGBDT05GSUdfTUVNQ0dgIG1pZ2h0IGJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IGZvciBgbW0vbWVtY29udHJvbC5jYCBhbmQgcG90ZW50aWFsbHkgZm9yIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX01FTUNHYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI0MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjAzLjA4NDA2OTM3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg5NDc5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjcxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjkxLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtY29udHJvbC5jOjI5MjpcXHRcXHRcXHRscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcXG5tbS9tZW1jb250cm9sLmMtMjkzLVxcdFxcdH1cXG4tLVxcbm1tL3N3YXAuYz0xMDc2PXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vc3dhcC5jLTEwOTItXFxubW0vc3dhcC5jOjEwOTM6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3N3YXAuYy0xMDk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MDMuMzYzMDIxNzUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMTc1OTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIHJlcGFyZW50ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYG1lbWNnYCAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIGBtbS9zd2FwLmNgIGZpbGUgbWlnaHQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJdCdzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIGNvcmUgc3dhcHBpbmcgbG9naWMsIGFuZCByZXBhcmVudGluZywgYXQgbGVhc3QgY29uY2VwdHVhbGx5LCBmZWVscyByZWxhdGVkIHRvIG1vdmluZyBtZW1vcnkgYXJvdW5kLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSByZXBhcmVudGluZyBsb2dpYywgcGFydGljdWxhcmx5IHRoZSBgbHJ1X3JlcGFyZW50X21lbWNnYCBmdW5jdGlvbiwgaXMgY29uZGl0aW9uYWwuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGl0J3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIEl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIGNvbnRleHQgZGVwZW5kZW5jaWVzLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb25kaXRpb25zIGl0IGFwcGxpZXMgdG8sIG1heSBjaGFuZ2UgaG93IG1lbW9yeSBvcGVyYXRpb25zIHdvcmsgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBpdCdzIGEgY3JpdGljYWwgcGF0aCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb250ZXh0cyBhcmUgaGFuZGxlZC4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MDYuODc0NzgyNzA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODA4Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmM9MTA3Nj1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL3N3YXAuYy0xMDkyLVxcbm1tL3N3YXAuYzoxMDkzOnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS9zd2FwLmMtMTA5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjA2LjkzMDU5NzEyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTA1Njk4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE1lbWNnIEludGVyYWN0aW9ucyB3aXRoIExSVSBSZXBhcmVudGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgbW0vc3dhcC5jYCBoYW5kbGVzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgbWVtb3J5IGNncm91cHMgKG1lbWNncykgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2sg4oCTIGEgcHJlcHJvY2Vzc29yIGAjaWZkZWYgQ09ORklHX01FTUNHYCDigJMgc3Vycm91bmRpbmcgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBtZW1jZ3MgcHJvZm91bmRseSBhbHRlciBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGhvdyBvYmplY3RzIGFyZSByZXBhcmVudGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0aGF0IGlmIG1lbWNncyBhcmUgYWN0aXZlLCB0aGUgaGFuZGxpbmcgb2YgdGhlIExSVSByZXBhcmVudGluZyBsb2dpYyBsaWtlbHkgbmVlZHMgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIGNvcnJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBjZ3JvdXAtYmFzZWQgcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgbGltaXRhdGlvbnMuIFRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd291bGQgYmUgdGhlIHRlbGwuIEl0IGNvdWxkIGluZGljYXRlIHRoYXQgZGlmZmVyZW50IHN0cmF0ZWdpZXMgYXJlIGVtcGxveWVkIG9yIHRoYXQgY2VydGFpbiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkZXBlbmRpbmcgb24gdGhlIG1lbWNnIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIExSVSByZXBhcmVudGluZyBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IHVuZGVyIGEgbWVtY2cgZW52aXJvbm1lbnQsIGFuZCB0aGUgaWZkZWYgaXMgdGhlIGRpcmVjdCB3YXkgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoxMC42ODExNjg1MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MDU5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmM9MTA2Mz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9zd2FwLmMtMTA3NC1cXG5tbS9zd2FwLmM6MTA3NTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc3dhcC5jLTEwNzYtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjEwLjczNjU3OTA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjE2OTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZWlyIGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHNvdXJjZS4gUmlnaHQsIGBscnVfcmVwYXJlbnRfbWVtY2dgLi4uIHRoYXQncyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBDb25maXJtZWQuIE5vdywgbGV0J3Mgc2VlLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLi4uIHllcCwgdGhhdCdzIHR1Y2tlZCBhd2F5IGluIGBtbS92bXNjYW4uY2AuIEFuZCB0aGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBpdHMgcm9sZS4gV2hpbGUgSSdtIGhlcmUsIEkgbWlnaHQgYXMgd2VsbCBub3RlIHRoYXQgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlICphbHNvKiBpbiBgbW0vdm1zY2FuLmNgLCB3aGljaCBmZWVscyByaWdodCwgb2YgY291cnNlLiBGaW5hbGx5LCBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBpbiBgbW0vd29ya2luZ3NldC5jYC4gR290IGl0LlxuXG5Ob3csIGxldCdzIGFjdHVhbGx5IGRpZyBpbnRvIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgKnRoYXQqIGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc2Nhbm5pbmcgYW5kIHJlY2xhbWF0aW9uIHByb2Nlc3MuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoxNC40MTI3NTA2NzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDA4MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIyNzk9ZW51bSBzY2FuX2JhbGFuY2Uge1xcbi0tXFxubW0vdm1zY2FuLmMtMjI4NS1cXG5tbS92bXNjYW4uYzoyMjg2OnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTIyODcte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMTUtXFxubW0vdm1zY2FuLmM6NjIxNjpcXHRwcmVwYXJlX3NjYW5fY29udHJvbChwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjE0LjQ2Nzc2MzYyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg4MjI4Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCdzIENvbmZpZ3VyZWQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjb25maWd1cmVkLCBpZiBhdCBhbGwuIElzIGl0IG9wZXJhdGluZyB3aXRoIHNvbWUgc3BlY2lmaWMsIGluaGVyaXRlZCBjb250ZXh0PyBEb2VzIGl0IHJlbHkgb24gYSBjb25maWd1cmF0aW9uIHNldCBhdCBhIGhpZ2hlciBsZXZlbCwgbWF5YmUgYSBnbG9iYWwsIG1vZHVsZSwgb3IgZXZlbiBhbiBhcHBsaWNhdGlvbi13aWRlIHNldHRpbmc/IEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHdoZXRoZXIgdGhpcyBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGd1aWRlZCwgY29udHJvbGxlZCBvciBjdXN0b21pemVkIGJ5IGEgY29uZmlndXJhdGlvbiBpdGVtLCBwb3NzaWJseSB3aXRoaW4gYW4gb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzeXN0ZW0uIElmIGl0IGlzLCBrbm93aW5nIHRoZSBzY29wZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gKGdsb2JhbCwgbW9kdWxlLWxldmVsLCBldGMuKSB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBkZWJ1Z2dpbmcgaXRzIGJlaGF2aW9yLiBUaGUgbGV2ZWwgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGluZmx1ZW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGltcG9ydGFudC4gQW5kIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhhdCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoxNy40NTU5OTQ0MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzcwNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIyNzk9ZW51bSBzY2FuX2JhbGFuY2Uge1xcbi0tXFxubW0vdm1zY2FuLmMtMjI4NS1cXG5tbS92bXNjYW4uYzoyMjg2OnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTIyODcte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMTUtXFxubW0vdm1zY2FuLmM6NjIxNjpcXHRwcmVwYXJlX3NjYW5fY29udHJvbChwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjE3LjUxMDc2ODg4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwMjM3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydCBjb2xsZWFndWU6XG5cbioqQ29yZSB2bXNjYW4gRGl2ZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGJhc2Ugdm1zY2FuIGNvZGUgaGVyZSwgbm90aGluZyBmYW5jeS4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGltbWVkaWF0ZSBmb2N1cyBoYXMgdG8gYmUgb24gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIFRob3NlIGFyZSB0aGUgd29ya2hvcnNlczsgdGhleSBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gVGhleSBhcmUgd2hlcmUgd2UgbmVlZCB0byBzdGFydCBkaXNzZWN0aW5nIHRoaXMgaXNzdWUgYW5kIHRyYWNraW5nIGRvd24gdGhlIHJvb3QgY2F1c2UuIEV2ZXJ5dGhpbmcgZWxzZSBoaW5nZXMgb24gdW5kZXJzdGFuZGluZyB0aG9zZSB0d28gcm91dGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoyMC45MTEwMDgyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODAzNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19hY3RpdmVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0xOTg2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNTQtLypcXG5tbS92bXNjYW4uYzoyMDU1OiAqIHNocmlua19hY3RpdmVfbGlzdCgpIG1vdmVzIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUgTFJVIHRvIHRoZSBpbmFjdGl2ZSBMUlUuXFxubW0vdm1zY2FuLmMtMjA1Ni0gKlxcbi0tXFxubW0vdm1zY2FuLmMtMjA3MC0gKi9cXG5tbS92bXNjYW4uYzoyMDcxOnN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjA3Mi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmM9MjIxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjIyMi1cXHRcXHRpZiAoc2MtXFx1MDAzZW1heV9kZWFjdGl2YXRlIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaXNfZmlsZV9scnUobHJ1KSkpXFxubW0vdm1zY2FuLmM6MjIyMzpcXHRcXHRcXHRzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcXG5tbS92bXNjYW4uYy0yMjI0LVxcdFxcdGVsc2VcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODY9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yMzA3LVxcdCAqXFx0UEdST1RBVEVcXHQgICAtIHJlY2xhaW0tZHJpdmVuIHJvdGF0aW9ucywgYnVtcGVkIGZyb20gYm90aFxcbm1tL3Ztc2Nhbi5jOjIzMDg6XFx0ICpcXHRcXHRcXHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3RcXG5tbS92bXNjYW4uYy0yMzA5LVxcdCAqXFx0XFx0XFx0ICAgICAoQ1BVIHdvcmspLlxcbi0tXFxubW0vdm1zY2FuLmM9NTkyMz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDM5LVxcdCAgICBpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXFxubW0vdm1zY2FuLmM6NjA0MDpcXHRcXHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTYwNDEtXFx0XFx0XFx0XFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XFxuLS1cXG5tbS92bXNjYW4uYz02ODYwPXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODItXFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG5tbS92bXNjYW4uYzo2ODgzOlxcdFxcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXFxubW0vdm1zY2FuLmMtNjg4NC1cXHRcXHRcXHRcXHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MjAuOTY5ODE2ODU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjA2ODg0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2F0ZWdvcml6ZSB0aGVtLiBIbW0sIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgU3l6a2FsbGVyIGlzIGNvdmVyYWdlLWZvY3VzZWQuIExpc3Rpbmcgc3RhdGljIGZ1bmN0aW9ucyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLCBzaW5jZSBTeXprYWxsZXIgdXNlcyB0aGVpciBhZGRyZXNzZXMuIFRoYXQgb3BlbnMgdXAgYSB3aG9sZSBzZXQgb2YgcG9zc2liaWxpdGllcywgZG9lc24ndCBpdD8gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBJIHRoaW5rIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBjYW5kaWRhdGUuXG5cbk5vdywgYHdvcmtpbmdzZXRfcmVmYXVsdGAuIEFoLCB0aGlzIG9uZSBpcyBleHBvcnRlZCwgaXQncyBnbG9iYWwuIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQncyBhY3R1YWxseSB0cnVlLCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGdvb2QgdG8gdmVyaWZ5IHRoYXQgZ2xvYmFsIHN0YXR1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MjUuNjkwNTA3MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjQzMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS93b3JraW5nc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTM5LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo1NDA6ICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01NDctICovXFxubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTU0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjI1Ljc0Nzc1NDQ0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzczMjg3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgYSBnbG9iYWwgdmFyaWFibGUuIFllcCwgY29uZmlybWVkLCBpdCBpcy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGF0Y2guIExldCdzIHNlZS4uLiBpdCB0b3VjaGVzIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vbWVtY29udHJvbC12MS5jYC4uLiBjbGVhcmx5LCBtZW1vcnkgY29udHJvbCBpcyBpbnZvbHZlZC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBUaGF0J3MgKmRlZmluaXRlbHkqIGdhdGVkIHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBUaGUgY29kZSBhbHNvIHVzZXMgYHByZXBhcmVfc2Nhbl9jb250cm9sYCB3aGljaCwgaW4gdHVybiwgbWFrZXMgdXNlIG9mIGB0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1gIOKAkyBhbmQgdGhhdCBsaXZlcyBpbiBgc3RydWN0IGxydXZlY2AuIEhtbSwgYHN0cnVjdCBscnV2ZWNgIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0J3MgZGVmaW5lZCBhbmQgdXNlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gSG93ZXZlciwgbWVtY2cgaXMgdGhlIHByaW1hcnkgY29uc3VtZXIgb2YgdGhlIG11bHRpLUxSVSB2ZWN0b3IgZnVuY3Rpb25hbGl0eS4gU28sIGl0IGlzIG1vc3QgbGlrZWx5IHNhZmUgdG8gaW5jbHVkZSBgQ09ORklHX01FTUNHYC5cblxuTmV4dCB1cCwgYENPTkZJR19TV0FQYC4gVGhlIHBhdGNoIGRvZXMgc29tZSB3b3JrIHRvIGBtbS9zd2FwLmNgLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBtbS9zd2FwLmNgIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19TV0FQYCBpcyBlbmFibGVkLiBMZXQncyBkb3VibGUgY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGNvbmRpdGlvbmFsIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MzMuMTIxMDQzNzgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE4NDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxubW0vTWFrZWZpbGU6NTM6XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxcXFxubW0vTWFrZWZpbGUtNTQtXFx0XFx0XFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjozMy4xNzYyMzI0NThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNTgyMzQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgc3dhcC5vYCBhbmQgYENPTkZJR19NRU1DR2AgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBzd2FwLm9gIGlzIGFsd2F5cyBjb21waWxlZC4gVGhhdCdzIGEgZ2l2ZW47IGl0J3MgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGV2ZW4gaWYgc3dhcHBpbmcgaXMgZGlzYWJsZWQgYXQgcnVudGltZS4gSXTigJlzIHRoZSBmb3VuZGF0aW9uYWwgY29tcG9uZW50LiBCdXQsIHdoYXQncyBnb3QgbWUgdGhpbmtpbmcgaXMgdGhlIGludGVycGxheSB3aXRoIGBDT05GSUdfTUVNQ0dgLiBJZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFuZCBzd2FwIGhhdmUgc29tZSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBjb25kaXRpb25hbGl0aWVzLiBJcyB0aGVyZSBhIGRlcGVuZGVuY3kgcGF0aCBJJ20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXJlIHRoZXJlIGFueSBmZWF0dXJlcyBpbiBgc3dhcC5vYCB0aGF0IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgPyBUaGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgYmVoYXZpb3IsIGFuZCBzZWN1cml0eS4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgc2VlIGlmIHRoaXMgaW1wYWN0cyB0aGUgc2VjdXJpdHkgb2YgdGhlIGtlcm5lbC4gSSBtYXkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIGFuZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBzbmlwcGV0cyB0byBiZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHByb3Blcmx5LiBJIHN1c3BlY3QgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJldmlld2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjM3LjUxMjA1NzgwMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NTg5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MzcuNTY2NzIxOTY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTkxODQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIE1lbWNnIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbi4gSSBjYW4gc2VlIHRoYXQgYG1lbWNvbnRyb2wub2AgYW5kIGBtZW1jb250cm9sLXYxLm9gIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLiBDb250cm9sIGdyb3Vwcywgc3BlY2lmaWNhbGx5IG1lbW9yeSBjb250cm9sLCBhcmUgY29yZSB0byBhIGxvdCBvZiBtb2Rlcm4gcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcgdGhhdCdzIGJlZW4gb24gbXkgbWluZC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdHVhbGx5IGEgdmFsaWQgYW5kIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBkb24ndCB3YW50IHRvIGNoYXNlIG15IHRhaWwgaWYgdGhhdCdzIGJlZW4gZGVwcmVjYXRlZCBvciByZW5hbWVkIGluIGEgcmVjZW50IGtlcm5lbCB1cGRhdGUsIG9yIGlzbid0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBjYXVzaW5nIHVuZXhwZWN0ZWQgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIG9yIHRoZSBidWlsZCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1Mjo0Mi4yMjU5MDc2NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDY5NDk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dfVjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6NDIuMjc5OTgzMzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjcwNjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgTUVNQ0dfVjFgIEtjb25maWcgb3B0aW9uIGlzIGRlZmluZWQuIFRoYXQncyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBrZXJuZWwgZmVhdHVyZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBvcHRpb25zLiBgaW5pdC9LY29uZmlnYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0IG9mdGVuIGhhbmRsZXMgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbnMuIEJ1dCwgZ2l2ZW4gdGhhdCBgTUVNQ0dfVjFgIHNjcmVhbXMgbWVtb3J5IG1hbmFnZW1lbnQsIEknbSBsZWFuaW5nIG1vcmUgdG93YXJkcyBgbW0vS2NvbmZpZ2AgcmlnaHQgYXdheS4gSXQncyB0aGUgbW9yZSBsb2dpY2FsIGhvbWUgZm9yIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBpdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQuIEknbGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gZmlsZXMsIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjQ2LjYxMjY5MjI4NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMTI3NjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dfVjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDg5PWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTUtXFxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwOTctXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6NDkuMTIzOTczNzIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDUxMDk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSByZWNvZ25pemUgdGhvc2UgYXMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgZmxhZ3Mgd2UgdXNlIHRvIGJ1aWxkIHRoZSBrZXJuZWwgd2l0aCBvciB3aXRob3V0IHNwZWNpZmljIGZlYXR1cmVzIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMuXG5cbk5vdywgSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRWAgaXMgY29uc2lzdGVudGx5IGRlZmluZWQgYWNyb3NzIGRpZmZlcmVudCBidWlsZHMgb3Igc2NlbmFyaW9zLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSdsbCBzZWUgaWYgaXQncyBhbHdheXMgaW5jbHVkZWQuIElmIGl0IGlzbid0IGRlZmluZWQgZXZlcnl3aGVyZSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IGFuZCBpZiBpdCBoYXMgYW55IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1Mjo1My44MjkwODYzNjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTkyODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MjM2PWVudW0gbm9kZV9zdGF0X2l0ZW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yNTMtXFx0V09SS0lOR1NFVF9BQ1RJVkFURV9GSUxFLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MjU0OlxcdFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MjU1OlxcdFdPUktJTkdTRVRfUkVTVE9SRV9BTk9OID0gV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yNTYtXFx0V09SS0lOR1NFVF9SRVNUT1JFX0ZJTEUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjU0LjA1NTAxOTk5NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjI1Mzg0NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgcmVjbGFpbSBsb2dpYywgc28gdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIHByaW9yaXRpemVzIHNjYW5uaW5nIHRoZSBhbm9ueW1vdXMgdmVyc3VzIGZpbGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBsaXN0cy4gVGhpcyBraW5kIG9mIGJhbGFuY2UgY2hhbmdlIGNhbiBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBvZiBjb3Vyc2UsIHN0YWJpbGl0eS4gVGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uIC0gdGhpcyBpcyBnb2luZyB0byBiZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB0byBjb25zaWRlcjogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AuIEkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBlYWNoIG9mIHRoZW0gdG8gbWFrZSBzdXJlIHRoZSBuYW1lcyBhcmUgYWNjdXJhdGUsIGFuZCB0aGV5IGFyZS4gVGhlIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCwgd2hpY2ggc3VnZ2VzdHMgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBjZ3JvdXBzLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29zdCB0cmFja2luZyBmb3IgTFJVIHJlY2xhaW0sIGludHJvZHVjaW5nIG5ldyBub2RlIHN0YXRzIGFuZCBtb2RpZnlpbmcgdGhlIGJhbGFuY2UgYmV0d2VlbiBhbm9ueW1vdXMgYW5kIGZpbGUgTFJVIHNjYW5zLiBUaGF0J3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSwgYW5kIGl0IGNvdWxkIHZlcnkgd2VsbCBpbXBhY3QgcGVyZm9ybWFuY2UgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHRoZSBlZmZlY3RzLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIwOSwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTM6MDIuMjgwNDA3MDE0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3NDQzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICAgIFwibHJ1X3JlcGFyZW50X21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSByZWNsYWltIGNvc3QgdHJhY2tpbmcgbWVjaGFuaXNtIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbm9kZSBzdGF0IGl0ZW1zIGFuZCBjaGFuZ2VzIGhvdyB0aGUga2VybmVsIGJhbGFuY2VzIHNjYW5uaW5nIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIExSVXMgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsn5jc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 18:25:54 +0000 UTC FinishedAt: 2026-07-06 18:53:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "05fd5fdf-a674-4bd8-bf21-86ec014221ce" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "prepare_scan_control", "shrink_inactive_list", "shrink_active_list", "workingset_refault", "lru_reparent_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJlcGFyZV9zY2FuX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7c2hyaW5rX2FjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICAgJiMzNDtscnVfcmVwYXJlbnRfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSByZWNsYWltIGNvc3QgdHJhY2tpbmcgbWVjaGFuaXNtIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbm9kZSBzdGF0IGl0ZW1zIGFuZCBjaGFuZ2VzIGhvdyB0aGUga2VybmVsIGJhbGFuY2VzIHNjYW5uaW5nIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIExSVXMgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkyOGI0MjMwYjRmNzBkNTQ5ZDlhNDNjYWU5ZmFkNmJhMDU1YWM5NThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE4OjUxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uMDYyNzYyMmE1MTg0YzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMzIzLDYgJiM0MzszMjMsMTAgQEAgZW51bSBub2RlX3N0YXRfaXRlbSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbiYjNDM7XHRQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OLFxuJiM0MztcdFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsXG4mIzQzO1x0UEdST1RBVEVfQU5PTixcbiYjNDM7XHRQR1JPVEFURV9GSUxFLFxuIFx0UEdSRUZJTEwsXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcdE5SX0hVR0VUTEIsXG5AQCAtNzYzLDkgJiM0Mzs3NjcsMTIgQEAgc3RydWN0IGxydXZlYyB7XG4gXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxuIFx0ICogb3ZlciB0aGUgb3RoZXIuIEFzIHRoZSBvYnNlcnZlZCBjb3N0IG9mIHJlY2xhaW1pbmcgb25lIExSVVxuIFx0ICogaW5jcmVhc2VzLCB0aGUgcmVjbGFpbSBzY2FuIGJhbGFuY2UgdGlwcyB0b3dhcmQgdGhlIG90aGVyLlxuJiM0MztcdCAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2tcbiYjNDM7XHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxuIFx0ICovXG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0YW5vbl9jb3N0O1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZpbGVfY29zdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdFx0cHJldl9jb3N0W0FOT05fQU5EX0ZJTEVdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb3N0X2FjY3VtW0FOT05fQU5EX0ZJTEVdO1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0XHRjb3N0X2xvY2s7XG4gXHQvKiBOb24tcmVzaWRlbnQgYWdlLCBkcml2ZW4gYnkgTFJVIG1vdmVtZW50ICovXG4gXHRhdG9taWNfbG9uZ190XHRcdFx0bm9ucmVzaWRlbnRfYWdlO1xuIFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLmI4ZTJlMWFmMmIxNDI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzA5LDkgJiM0MzszMDksNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gXG4gLyogbGludXgvbW0vc3dhcC5jICovXG4tdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4tXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xuIHZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTtcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcbmluZGV4IDc2NTA2OTIxMTU2NzhjLi5jN2E1MmJiNjhmNGM3ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC12MS5jXG5AQCAtMTk4OCw4ICYjNDM7MTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gXHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuIFx0XHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gXG4tXHRcdFx0YW5vbl9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xuLVx0XHRcdGZpbGVfY29zdCAmIzQzOz0gbXotXHUwMDNlbHJ1dmVjLmZpbGVfY29zdDtcbiYjNDM7XHRcdFx0YW5vbl9jb3N0ICYjNDM7PSBtei1cdTAwM2VscnV2ZWMuY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dO1xuJiM0MztcdFx0XHRmaWxlX2Nvc3QgJiM0Mzs9IG16LVx1MDAzZWxydXZlYy5jb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV07XG4gXHRcdH1cbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7YW5vbl9jb3N0ICVsdVxcblwmIzM0OywgYW5vbl9jb3N0KTtcbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7ZmlsZV9jb3N0ICVsdVxcblwmIzM0OywgZmlsZV9jb3N0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi4wNDljODYwMjE4N2VjNiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNDE5LDYgJiM0Mzs0MTksMTAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbiBcdFBHU0NBTl9QUk9BQ1RJVkUsXG4gXHRQR1NDQU5fQU5PTixcbiBcdFBHU0NBTl9GSUxFLFxuJiM0MztcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXG4mIzQzO1x0UEdSRUNMQUlNX1BBR0VPVVRfRklMRSxcbiYjNDM7XHRQR1JPVEFURV9BTk9OLFxuJiM0MztcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICYjNDM7NzgsNyBAQCB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdG1lbXNldChscnV2ZWMsIDAsIHNpemVvZihzdHJ1Y3QgbHJ1dmVjKSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFx0enN3YXBfbHJ1dmVjX3N0YXRlX2luaXQobHJ1dmVjKTtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuY1xuQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2VzbiYjMzk7dCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXG4tXHQgKiBjb21wYXJpc29uLCBpdCBqdXN0IHNheXM6IGlmIHJlbG9hZHMgYXJlIGFib3V0IGNvbXBhcmFibGVcbi1cdCAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseVxuLVx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXG4tXHQgKi9cbi1cdGNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDtcbi1cdGlmICghY29zdCkge1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xuLVxuLVx0XHQvKiBSZWNvcmQgY29zdCBldmVudCAqL1xuLVx0XHRpZiAoZmlsZSlcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICYjNDM7PSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAmIzQzOz0gY29zdDtcbi1cbi1cdFx0Lypcbi1cdFx0ICogRGVjYXkgcHJldmlvdXMgZXZlbnRzXG4tXHRcdCAqXG4tXHRcdCAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZFxuLVx0XHQgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmdcbi1cdFx0ICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHNcbi1cdFx0ICogbW9yZSB0aGFuIG9sZCBvbmVzLlxuLVx0XHQgKi9cbi1cdFx0bHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0Mztcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0FOT04pICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICYjNDM7XG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbi1cbi1cdFx0aWYgKGxydXZlYy1cdTAwM2VmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLVx1MDAzZWFub25fY29zdCBcdTAwM2UgbHJ1c2l6ZSAvIDQpIHtcbi1cdFx0XHRscnV2ZWMtXHUwMDNlZmlsZV9jb3N0IC89IDI7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCAvPSAyO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0XHRscnV2ZWMgPSBwYXJlbnRfbHJ1dmVjKGxydXZlYyk7XG4tXHRcdGlmICghbHJ1dmVjKSB7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0fVxuLX1cbi1cbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbi1cbi1cdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmb2xpb19pc19maWxlX2xydShmb2xpbyksXG4tXHRcdFx0XHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMTE2NCw4ICYjNDM7MTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRwYXJlbnRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAmIzQzOz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbiBcbiBcdGZvcl9lYWNoX2xydShscnUpXG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjgwZDJiMWQ3OWYxOTM0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMjAzOCwxMCAmIzQzOzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4mIzQzO1x0aWYgKHN0YXQubnJfcGFnZW91dClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICYjNDM7IGZpbGUsXG4mIzQzO1x0XHRcdFx0IHN0YXQubnJfcGFnZW91dCk7XG4mIzQzO1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbiYjNDM7XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsXG4mIzQzO1x0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFxuLVx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4tXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsXG4tXHRcdFx0XHRcdG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuIFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiBcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbkBAIC0yMTQ3LDkgJiM0MzsyMTUwLDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0Y291bnRfbWVtY2dfZXZlbnRzKGxydXZlY19tZW1jZyhscnV2ZWMpLCBQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xuIFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pO1xuJiM0MztcdGlmIChucl9yb3RhdGVkKVxuJiM0MztcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyOTgsMTIgJiM0MzsyMzAxLDU2IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCk7XG4gXG4gXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXG4mIzQzO1x0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMgZnJvbSBwZXItTFJVXG4mIzQzO1x0ICogdm1zdGF0IGNvdW50ZXJzLiBUaGUgcmF3IGNvc3QgcGVyIHNpZGUgaXM6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKlx0UEdST1RBVEVcdCAgIC0gcmVjbGFpbS1kcml2ZW4gcm90YXRpb25zLCBidW1wZWQgZnJvbSBib3RoXG4mIzQzO1x0ICpcdFx0XHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3RcbiYjNDM7XHQgKlx0XHRcdCAgICAgKENQVSB3b3JrKS5cbiYjNDM7XHQgKlx0UEdSRUNMQUlNX1BBR0VPVVQgIC0gcmVjbGFpbS1kcml2ZW4gcGFnZW91dCBJTy5cbiYjNDM7XHQgKlx0V09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIHR3byBJTyB0ZXJtcyBhcmUgd2VpZ2h0ZWQgYnkgU1dBUF9DTFVTVEVSX01BWCB0byByZWZsZWN0IHRoZVxuJiM0MztcdCAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJlYWRzIGFyZSBsb2NrLWZyZWUgcGVyLWNwdSBzdW0gY29sbGF0aW9ucywgcnN0YXQtYWdncmVnYXRlZCB1cFxuJiM0MztcdCAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGRlbHRhIGFnYWluc3QgcHJldl9jb3N0IGlzIGZvbGRlZCBpbnRvIGNvc3RfYWNjdW0sIHdoaWNoIGlzXG4mIzQzO1x0ICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuXG4mIzQzO1x0ICogY29zdF9sb2NrIHNlcmlhbGlzZXMgY29uY3VycmVudCByZWNsYWltZXJzIGluIHRoZSBzYW1lIG1lbWNnJiM0Mztub2RlLlxuIFx0ICovXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlbHJ1X2xvY2spO1xuLVx0c2MtXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3Q7XG4tXHRzYy1cdTAwM2VmaWxlX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWZpbGVfY29zdDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuJiM0MztcdGZvciAoaW50IGYgPSAwOyBmIFx1MDAzYz0gMTsgZiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbm93LCBkZWx0YTtcbiYjNDM7XG4mIzQzO1x0XHRub3cgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGYpICYjNDM7XG4mIzQzO1x0XHQgICAgICAobHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdCBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICYjNDM7IGYpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcbiYjNDM7XHRcdFx0XHRcdCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKSkgKlxuJiM0MztcdFx0XHRcdFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1x0XHRkZWx0YSA9IG5vdyAtIHRhcmdldF9scnV2ZWMtXHUwMDNlcHJldl9jb3N0W2ZdO1xuJiM0MztcdFx0dGFyZ2V0X2xydXZlYy1cdTAwM2VwcmV2X2Nvc3RbZl0gPSBub3c7XG4mIzQzO1x0XHR0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bZl0gJiM0Mzs9IGRlbHRhO1xuJiM0MztcdH1cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxydXNpemUgPVxuJiM0MztcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MztcbiYjNDM7XHRcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzO1xuJiM0MztcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MztcbiYjNDM7XHRcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9GSUxFKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNvc3RfbGltaXQgPSBscnVzaXplIC8gNDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dIFx1MDAzZSBjb3N0X2xpbWl0IHx8XG4mIzQzO1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0IHx8XG4mIzQzO1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dICYjNDM7XG4mIzQzO1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0KSB7XG4mIzQzO1x0XHR0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXSAvPSAyO1xuJiM0MztcdFx0dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV0gLz0gMjtcbiYjNDM7XHR9XG4mIzQzO1x0c2MtXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl07XG4mIzQzO1x0c2MtXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV07XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRhcmdldCBkZXNpcmFibGUgaW5hY3RpdmU6YWN0aXZlIGxpc3QgcmF0aW9zIGZvciB0aGUgYW5vblxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi4yZGZlZDVlOWI2NGQ1NSAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuY1xuQEAgLTEyODksNiAmIzQzOzEyODksMTAgQEAgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4gXHRbSShQR1NDQU5fUFJPQUNUSVZFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9wcm9hY3RpdmVcJiMzNDssXG4gXHRbSShQR1NDQU5fQU5PTildXHRcdFx0PSBcJiMzNDtwZ3NjYW5fYW5vblwmIzM0OyxcbiBcdFtJKFBHU0NBTl9GSUxFKV1cdFx0XHQ9IFwmIzM0O3Bnc2Nhbl9maWxlXCYjMzQ7LFxuJiM0MztcdFtJKFBHUkVDTEFJTV9QQUdFT1VUX0FOT04pXVx0XHQ9IFwmIzM0O3BncmVjbGFpbV9wYWdlb3V0X2Fub25cJiMzNDssXG4mIzQzO1x0W0koUEdSRUNMQUlNX1BBR0VPVVRfRklMRSldXHRcdD0gXCYjMzQ7cGdyZWNsYWltX3BhZ2VvdXRfZmlsZVwmIzM0OyxcbiYjNDM7XHRbSShQR1JPVEFURV9BTk9OKV1cdFx0XHQ9IFwmIzM0O3Bncm90YXRlX2Fub25cJiMzNDssXG4mIzQzO1x0W0koUEdST1RBVEVfRklMRSldXHRcdFx0PSBcJiMzNDtwZ3JvdGF0ZV9maWxlXCYjMzQ7LFxuIFx0W0koUEdSRUZJTEwpXVx0XHRcdFx0PSBcJiMzNDtwZ3JlZmlsbFwmIzM0OyxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwmIzM0O25yX2h1Z2V0bGJcJiMzNDssXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjZC4uN2FjMmI4OGM4MGFlNTYgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTU4NCwxMSAmIzQzOzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdC8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi9cbiBcdGlmICh3b3JraW5nc2V0KSB7XG4gXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbi1cdFx0Lypcbi1cdFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xuLVx0XHQgKiBwdXRiYWNrXG4tXHRcdCAqL1xuLVx0XHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgJiM0MzsgZmlsZSwgbnIpO1xuIFx0fVxuIG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkyOGI0MjMwYjRmNzBkNTQ5ZDlhNDNjYWU5ZmFkNmJhMDU1YWM5NTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE4OjUxOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjA2Mjc2MjJhNTE4NGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTMyMyw2ICYjNDM7MzIzLDEwIEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0FOT04sCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCkBAIC03NjMsOSAmIzQzOzc2NywxMiBAQCBzdHJ1Y3QgbHJ1dmVjIHsKIAkgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLQogCSAqIG92ZXIgdGhlIG90aGVyLiBBcyB0aGUgb2JzZXJ2ZWQgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUKIAkgKiBpbmNyZWFzZXMsIHRoZSByZWNsYWltIHNjYW4gYmFsYW5jZSB0aXBzIHRvd2FyZCB0aGUgb3RoZXIuCiYjNDM7CSAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2sKJiM0MzsJICogc2VyaWFsaXNlcyB0aGF0IHVwZGF0ZS4KIAkgKi8KLQl1bnNpZ25lZCBsb25nCQkJYW5vbl9jb3N0OwotCXVuc2lnbmVkIGxvbmcJCQlmaWxlX2Nvc3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwcmV2X2Nvc3RbQU5PTl9BTkRfRklMRV07CiYjNDM7CXVuc2lnbmVkIGxvbmcJCQljb3N0X2FjY3VtW0FOT05fQU5EX0ZJTEVdOwomIzQzOwlzcGlubG9ja190CQkJY29zdF9sb2NrOwogCS8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi8KIAlhdG9taWNfbG9uZ190CQkJbm9ucmVzaWRlbnRfYWdlOwogCS8qIFJlZmF1bHRzIGF0IHRoZSB0aW1lIG9mIGxhc3QgcmVjbGFpbSBjeWNsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zMDksOSAmIzQzOzMwOSw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFscmVzZXJ2ZV9wYWdlczsKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLAotCQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTsKIHZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7CiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuYwppbmRleCA3NjUwNjkyMTE1Njc4Yy4uYzdhNTJiYjY4ZjRjN2QgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE5ODgsOCAmIzQzOzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKQogCQlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHsKIAkJCW16ID0gbWVtY2ctJmd0O25vZGVpbmZvW3BnZGF0LSZndDtub2RlX2lkXTsKIAotCQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmFub25fY29zdDsKLQkJCWZpbGVfY29zdCAmIzQzOz0gbXotJmd0O2xydXZlYy5maWxlX2Nvc3Q7CiYjNDM7CQkJYW5vbl9jb3N0ICYjNDM7PSBtei0mZ3Q7bHJ1dmVjLmNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTsKJiM0MzsJCQlmaWxlX2Nvc3QgJiM0Mzs9IG16LSZndDtscnV2ZWMuY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdOwogCQl9CiAJCXNlcV9idWZfcHJpbnRmKHMsICYjMzQ7YW5vbl9jb3N0ICVsdVxuJiMzNDssIGFub25fY29zdCk7CiAJCXNlcV9idWZfcHJpbnRmKHMsICYjMzQ7ZmlsZV9jb3N0ICVsdVxuJiMzNDssIGZpbGVfY29zdCk7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZmQuLjA0OWM4NjAyMTg3ZWM2IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MTksNiAmIzQzOzQxOSwxMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0gewogCVBHU0NBTl9QUk9BQ1RJVkUsCiAJUEdTQ0FOX0FOT04sCiAJUEdTQ0FOX0ZJTEUsCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0FOT04sCiYjNDM7CVBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsCiYjNDM7CVBHUk9UQVRFX0FOT04sCiYjNDM7CVBHUk9UQVRFX0ZJTEUsCiAJUEdSRUZJTEwsCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCU5SX0hVR0VUTEIsCmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jCmluZGV4IDBjOGYxODFkOWQ1MDA2Li4xNzEzOWRiNGQyOTFjZSAxMDA2NDQKLS0tIGEvbW0vbW16b25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW16b25lLmMKQEAgLTc4LDYgJiM0Mzs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJbWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2xydXZlYy0mZ3Q7Y29zdF9sb2NrKTsKIAl6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpOwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA1ODhmNTBkOGYxYThjOS4uNzRiMjgxNzc4Y2JjOTIgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmMKQEAgLTI3Miw3MyAmIzQzOzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJZm9saW9fYmF0Y2hfYWRkX2FuZF9tb3ZlKGZvbGlvLCBscnVfbW92ZV90YWlsKTsKIH0KIAotdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCi0JCXVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpCi0JCV9fcmVsZWFzZXMobHJ1dmVjLSZndDtscnVfbG9jaykKLQkJX19yZWxlYXNlcyhyY3UpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3N0OwotCi0JLyoKLQkgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVCi0JICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBtYWtlIGEgcHJlY2lzZQotCSAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZQotCSAqIGJldHdlZW4gdGhlIExSVSBsaXN0cywgb3Igcm90YXRpb25zIGFyZSBvdmVyd2hlbG1pbmdseQotCSAqIGRpZmZlcmVudCBiZXR3ZWVuIHRoZW0sIGFkanVzdCBzY2FuIGJhbGFuY2UgZm9yIENQVSB3b3JrLgotCSAqLwotCWNvc3QgPSBucl9pbyAqIFNXQVBfQ0xVU1RFUl9NQVggJiM0MzsgbnJfcm90YXRlZDsKLQlpZiAoIWNvc3QpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yICg7OykgewotCQl1bnNpZ25lZCBsb25nIGxydXNpemU7Ci0KLQkJLyogUmVjb3JkIGNvc3QgZXZlbnQgKi8KLQkJaWYgKGZpbGUpCi0JCQlscnV2ZWMtJmd0O2ZpbGVfY29zdCAmIzQzOz0gY29zdDsKLQkJZWxzZQotCQkJbHJ1dmVjLSZndDthbm9uX2Nvc3QgJiM0Mzs9IGNvc3Q7Ci0KLQkJLyoKLQkJICogRGVjYXkgcHJldmlvdXMgZXZlbnRzCi0JCSAqCi0JCSAqIEJlY2F1c2Ugd29ya2xvYWRzIGNoYW5nZSBvdmVyIHRpbWUgKGFuZCB0byBhdm9pZAotCQkgKiBvdmVyZmxvdykgd2Uga2VlcCB0aGVzZSBzdGF0aXN0aWNzIGFzIGEgZmxvYXRpbmcKLQkJICogYXZlcmFnZSwgd2hpY2ggZW5kcyB1cCB3ZWlnaGluZyByZWNlbnQgcmVmYXVsdHMKLQkJICogbW9yZSB0aGFuIG9sZCBvbmVzLgotCQkgKi8KLQkJbHJ1c2l6ZSA9IGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfQU5PTikgJiM0MzsKLQkJCSAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSAmIzQzOwotCQkJICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9GSUxFKTsKLQotCQlpZiAobHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0MzsgbHJ1dmVjLSZndDthbm9uX2Nvc3QgJmd0OyBscnVzaXplIC8gNCkgewotCQkJbHJ1dmVjLSZndDtmaWxlX2Nvc3QgLz0gMjsKLQkJCWxydXZlYy0mZ3Q7YW5vbl9jb3N0IC89IDI7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtscnV2ZWMtJmd0O2xydV9sb2NrKTsKLQkJbHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpOwotCQlpZiAoIWxydXZlYykgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlicmVhazsKLQkJfQotCQlzcGluX2xvY2tfaXJxKCZhbXA7bHJ1dmVjLSZndDtscnVfbG9jayk7Ci0JfQotfQotCi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQotewotCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKLQotCWxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrX2lycShmb2xpbyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLAotCQkJCWZvbGlvX25yX3BhZ2VzKGZvbGlvKSwgMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGxydV9hY3RpdmF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTExNjQsOCAmIzQzOzEwOTcsNiBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludAogCiAJY2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTsKIAlwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7Ci0JcGFyZW50X2xydXZlYy0mZ3Q7YW5vbl9jb3N0ICYjNDM7PSBjaGlsZF9scnV2ZWMtJmd0O2Fub25fY29zdDsKLQlwYXJlbnRfbHJ1dmVjLSZndDtmaWxlX2Nvc3QgJiM0Mzs9IGNoaWxkX2xydXZlYy0mZ3Q7ZmlsZV9jb3N0OwogCiAJZm9yX2VhY2hfbHJ1KGxydSkKIAkJbHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzVjM2JiMTVhZTk2YTMuLjgwZDJiMWQ3OWYxOTM0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMjAzOCwxMCAmIzQzOzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCWl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7CiYjNDM7CWlmIChzdGF0Lm5yX3BhZ2VvdXQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUNMQUlNX1BBR0VPVVRfQU5PTiAmIzQzOyBmaWxlLAomIzQzOwkJCQkgc3RhdC5ucl9wYWdlb3V0KTsKJiM0MzsJaWYgKG5yX3NjYW5uZWQgJmd0OyBucl9yZWNsYWltZWQpCiYjNDM7CQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyBmaWxlLAomIzQzOwkJCQkgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiAKLQlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKLQlscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCBzdGF0Lm5yX3BhZ2VvdXQsCi0JCQkJCW5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpOwogCWhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCAmYW1wO3N0YXQpOwogCXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAogCQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CkBAIC0yMTQ3LDkgJiM0MzsyMTUwLDkgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAljb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTsKIAljb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7CiAJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwomIzQzOwlpZiAobnJfcm90YXRlZCkKJiM0MzsJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsIG5yX3JvdGF0ZWQpOwogCi0JbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7Ci0JbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgMCwgbnJfcm90YXRlZCk7CiAJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsCiAJCQlucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwogfQpAQCAtMjI5OCwxMiAmIzQzOzIzMDEsNTYgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy0mZ3Q7dGFyZ2V0X21lbV9jZ3JvdXApOwogCiAJLyoKLQkgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy4KJiM0MzsJICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMgZnJvbSBwZXItTFJVCiYjNDM7CSAqIHZtc3RhdCBjb3VudGVycy4gVGhlIHJhdyBjb3N0IHBlciBzaWRlIGlzOgomIzQzOwkgKgomIzQzOwkgKglQR1JPVEFURQkgICAtIHJlY2xhaW0tZHJpdmVuIHJvdGF0aW9ucywgYnVtcGVkIGZyb20gYm90aAomIzQzOwkgKgkJCSAgICAgc2hyaW5rX2luYWN0aXZlX2xpc3QgYW5kIHNocmlua19hY3RpdmVfbGlzdAomIzQzOwkgKgkJCSAgICAgKENQVSB3b3JrKS4KJiM0MzsJICoJUEdSRUNMQUlNX1BBR0VPVVQgIC0gcmVjbGFpbS1kcml2ZW4gcGFnZW91dCBJTy4KJiM0MzsJICoJV09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgdHdvIElPIHRlcm1zIGFyZSB3ZWlnaHRlZCBieSBTV0FQX0NMVVNURVJfTUFYIHRvIHJlZmxlY3QgdGhlCiYjNDM7CSAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogUmVhZHMgYXJlIGxvY2stZnJlZSBwZXItY3B1IHN1bSBjb2xsYXRpb25zLCByc3RhdC1hZ2dyZWdhdGVkIHVwCiYjNDM7CSAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZGVsdGEgYWdhaW5zdCBwcmV2X2Nvc3QgaXMgZm9sZGVkIGludG8gY29zdF9hY2N1bSwgd2hpY2ggaXMKJiM0MzsJICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuCiYjNDM7CSAqIGNvc3RfbG9jayBzZXJpYWxpc2VzIGNvbmN1cnJlbnQgcmVjbGFpbWVycyBpbiB0aGUgc2FtZSBtZW1jZyYjNDM7bm9kZS4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKCZhbXA7dGFyZ2V0X2xydXZlYy0mZ3Q7bHJ1X2xvY2spOwotCXNjLSZndDthbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLSZndDthbm9uX2Nvc3Q7Ci0Jc2MtJmd0O2ZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2ZpbGVfY29zdDsKLQlzcGluX3VubG9ja19pcnEoJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtscnVfbG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3RhcmdldF9scnV2ZWMtJmd0O2Nvc3RfbG9jayk7CiYjNDM7CWZvciAoaW50IGYgPSAwOyBmICZsdDs9IDE7IGYmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5vdywgZGVsdGE7CiYjNDM7CiYjNDM7CQlub3cgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGYpICYjNDM7CiYjNDM7CQkgICAgICAobHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywKJiM0MzsJCQkJCSBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICYjNDM7IGYpICYjNDM7CiYjNDM7CQkgICAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywKJiM0MzsJCQkJCSBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSAmIzQzOyBmKSkgKgomIzQzOwkJCQlTV0FQX0NMVVNURVJfTUFYOwomIzQzOwkJZGVsdGEgPSBub3cgLSB0YXJnZXRfbHJ1dmVjLSZndDtwcmV2X2Nvc3RbZl07CiYjNDM7CQl0YXJnZXRfbHJ1dmVjLSZndDtwcmV2X2Nvc3RbZl0gPSBub3c7CiYjNDM7CQl0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW2ZdICYjNDM7PSBkZWx0YTsKJiM0MzsJfQomIzQzOwl1bnNpZ25lZCBsb25nIGxydXNpemUgPQomIzQzOwkJbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfQU5PTikgJiM0MzsKJiM0MzsJCWxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSAmIzQzOwomIzQzOwkJbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgJiM0MzsKJiM0MzsJCWxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9GSUxFKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3N0X2xpbWl0ID0gbHJ1c2l6ZSAvIDQ7CiYjNDM7CiYjNDM7CXdoaWxlICh0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gJmd0OyBjb3N0X2xpbWl0IHx8CiYjNDM7CSAgICAgICB0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV0gJmd0OyBjb3N0X2xpbWl0IHx8CiYjNDM7CSAgICAgICB0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gJiM0MzsKJiM0MzsJICAgICAgIHRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9GSUxFXSAmZ3Q7IGNvc3RfbGltaXQpIHsKJiM0MzsJCXRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXSAvPSAyOwomIzQzOwkJdGFyZ2V0X2xydXZlYy0mZ3Q7Y29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIC89IDI7CiYjNDM7CX0KJiM0MzsJc2MtJmd0O2Fub25fY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTsKJiM0MzsJc2MtJmd0O2ZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtJmd0O2Nvc3RfYWNjdW1bV09SS0lOR1NFVF9GSUxFXTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2xvY2spOwogCiAJLyoKIAkgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub24KZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggZjUzNDk3MmY1MTdkZTAuLjJkZmVkNWU5YjY0ZDU1IDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXN0YXQuYwpAQCAtMTI4OSw2ICYjNDM7MTI4OSwxMCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHsKIAlbSShQR1NDQU5fUFJPQUNUSVZFKV0JCQk9ICYjMzQ7cGdzY2FuX3Byb2FjdGl2ZSYjMzQ7LAogCVtJKFBHU0NBTl9BTk9OKV0JCQk9ICYjMzQ7cGdzY2FuX2Fub24mIzM0OywKIAlbSShQR1NDQU5fRklMRSldCQkJPSAmIzM0O3Bnc2Nhbl9maWxlJiMzNDssCiYjNDM7CVtJKFBHUkVDTEFJTV9QQUdFT1VUX0FOT04pXQkJPSAmIzM0O3BncmVjbGFpbV9wYWdlb3V0X2Fub24mIzM0OywKJiM0MzsJW0koUEdSRUNMQUlNX1BBR0VPVVRfRklMRSldCQk9ICYjMzQ7cGdyZWNsYWltX3BhZ2VvdXRfZmlsZSYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9BTk9OKV0JCQk9ICYjMzQ7cGdyb3RhdGVfYW5vbiYjMzQ7LAomIzQzOwlbSShQR1JPVEFURV9GSUxFKV0JCQk9ICYjMzQ7cGdyb3RhdGVfZmlsZSYjMzQ7LAogCVtJKFBHUkVGSUxMKV0JCQkJPSAmIzM0O3BncmVmaWxsJiMzNDssCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCVtJKE5SX0hVR0VUTEIpXQkJCQk9ICYjMzQ7bnJfaHVnZXRsYiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IGYzNTE3OThlNzIzYWNkLi43YWMyYjg4YzgwYWU1NiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNTg0LDExICYjNDM7NTg0LDYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCS8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi8KIAlpZiAod29ya2luZ3NldCkgewogCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7Ci0JCS8qCi0JCSAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnMKLQkJICogcHV0YmFjawotCQkgKi8KLQkJbHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTsKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIAl9CiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVIFJlY2xhaW0gQ29zdCBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IGZ1bmRhbWVudGFsbHkgdHdlYWtzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgYXMgaXQgdG91Y2hlcyB0aGUgY29yZSBsb2dpYyBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSBhbmQgcGFnZXMuIFNlZWluZyBhcyBpdCYjMzk7cyBhIGNoYW5nZSB0byBwYWdlIHJlY2xhaW0sIGl0JiMzOTtzIGRlZmluaXRlbHkgaGlnaCBvbiBteSBsaXN0IGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O3JlIG1vdmluZyBzb21lIGxvZ2ljIGFyb3VuZDsgc3BlY2lmaWNhbGx5LCByZW1vdmluZyBgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxYCBhbmQgYGxydV9ub3RlX2Nvc3RfcmVmYXVsdGAgZnJvbSBgbW0vc3dhcC5jYC4gVGhlc2UgYXJlIHRoZW4gcmVwbGFjZWQgYnkgYSBuZXcgc3lzdGVtIGludHJvZHVjZWQgaW4gYG1tL3Ztc2Nhbi5jYCB3aXRoaW4gdGhlIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgZnVuY3Rpb24uIE5ldyBub2RlIHN0YXQgaXRlbXMsIGxpa2UgYFBHUkVDTEFJTV9QQUdFT1VUX0FOT05gLCBgUEdSRUNMQUlNX1BBR0VPVVRfRklMRWAsIGBQR1JPVEFURV9BTk9OYCwgYW5kIGBQR1JPVEFURV9GSUxFYCwgaGF2ZSBhbHNvIGJlZW4gYWRkZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgdGhlIGBzdHJ1Y3QgbHJ1dmVjYCB0byByZXBsYWNlIHRoZSBvbGQgYGFub25fY29zdGAgYW5kIGBmaWxlX2Nvc3RgIHdpdGggYHByZXZfY29zdGAsIGBjb3N0X2FjY3VtYCwgYW5kIGBjb3N0X2xvY2tgLgoKSSYjMzk7bSBtYWtpbmcgYSBxdWljayBtZW50YWwgbm90ZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGVzZSBhcmU6IGBtZW1jZzFfc3RhdF9mb3JtYXRgLCBgbHJ1dmVjX2luaXRgLCBgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlYCAoYWx0aG91Z2ggdGhhdCYjMzk7cyBqdXN0IGEgY29udGV4dCBjaGFuZ2UpLCBgbHJ1X3JlcGFyZW50X21lbWNnYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4KCkdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNvbWUga2V5IHN5bWJvbHMsIG5hbWVseSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgbHJ1X3JlcGFyZW50X21lbWNnYC4gV2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhhdCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS92bXNjYW4uY2AuIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGluIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgaW4gYG1tL3N3YXAuY2AuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvZGUgaW4gYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AsIG15IGludHVpdGlvbiBpcyB0aGF0IGBDT05GSUdfTUVNQ0dgIG1pZ2h0IGJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IGZvciBgbW0vbWVtY29udHJvbC5jYCBhbmQgcG90ZW50aWFsbHkgZm9yIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19NRU1DR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNzE9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkxLVx0XHR9IGVsc2Uge1xubW0vbWVtY29udHJvbC5jOjI5MjpcdFx0XHRscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcbm1tL21lbWNvbnRyb2wuYy0yOTMtXHRcdH1cbi0tXG5tbS9zd2FwLmM9MTA3Nj1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9zd2FwLmMtMTA5Mi1cbm1tL3N3YXAuYzoxMDkzOnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3N3YXAuYy0xMDk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhYnlyaW50aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gaG93IG1lbW9yeSBpcyBiZWluZyByZXBhcmVudGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBtZW1jZ2AgKG1lbW9yeSBjb250cm9sIGdyb3VwcykuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBgbW0vc3dhcC5jYCBmaWxlIG1pZ2h0IGJlIHRoZSBwbGFjZSB0byBzdGFydC4gSXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgY29yZSBzd2FwcGluZyBsb2dpYywgYW5kIHJlcGFyZW50aW5nLCBhdCBsZWFzdCBjb25jZXB0dWFsbHksIGZlZWxzIHJlbGF0ZWQgdG8gbW92aW5nIG1lbW9yeSBhcm91bmQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIHJlcGFyZW50aW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgdGhlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGZ1bmN0aW9uLCBpcyBjb25kaXRpb25hbC4gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgaXQmIzM5O3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIEl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIGNvbnRleHQgZGVwZW5kZW5jaWVzLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb25kaXRpb25zIGl0IGFwcGxpZXMgdG8sIG1heSBjaGFuZ2UgaG93IG1lbW9yeSBvcGVyYXRpb25zIHdvcmsgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGggdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29udGV4dHMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgbHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuYz0xMDc2PXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxuLS1cbm1tL3N3YXAuYy0xMDkyLVxubW0vc3dhcC5jOjEwOTM6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vc3dhcC5jLTEwOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNZW1jZyBJbnRlcmFjdGlvbnMgd2l0aCBMUlUgUmVwYXJlbnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgbW0vc3dhcC5jYCBoYW5kbGVzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgbWVtb3J5IGNncm91cHMgKG1lbWNncykgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIOKAkyBhIHByZXByb2Nlc3NvciBgI2lmZGVmIENPTkZJR19NRU1DR2Ag4oCTIHN1cnJvdW5kaW5nIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgbWVtY2dzIHByb2ZvdW5kbHkgYWx0ZXIgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGFuZCBob3cgb2JqZWN0cyBhcmUgcmVwYXJlbnRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSBleHBlY3QgdGhhdCBpZiBtZW1jZ3MgYXJlIGFjdGl2ZSwgdGhlIGhhbmRsaW5nIG9mIHRoZSBMUlUgcmVwYXJlbnRpbmcgbG9naWMgbGlrZWx5IG5lZWRzIHNwZWNpYWwgY29uc2lkZXJhdGlvbiB0byBjb3JyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGUgY2dyb3VwLWJhc2VkIHJlc291cmNlIGFjY291bnRpbmcgYW5kIGxpbWl0YXRpb25zLiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdvdWxkIGJlIHRoZSB0ZWxsLiBJdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IGRpZmZlcmVudCBzdHJhdGVnaWVzIGFyZSBlbXBsb3llZCBvciB0aGF0IGNlcnRhaW4gZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIHRoZSBtZW1jZyBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgTFJVIHJlcGFyZW50aW5nIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgdW5kZXIgYSBtZW1jZyBlbnZpcm9ubWVudCwgYW5kIHRoZSBpZmRlZiBpcyB0aGUgZGlyZWN0IHdheSB0byBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5jPTEwNjM9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL3N3YXAuYy0xMDc0LVxubW0vc3dhcC5jOjEwNzU6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc3dhcC5jLTEwNzYtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgbG9jYXRpb25zIGluIHRoZSBrZXJuZWwgc291cmNlLiBSaWdodCwgYGxydV9yZXBhcmVudF9tZW1jZ2AuLi4gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBDb25maXJtZWQuIE5vdywgbGV0JiMzOTtzIHNlZSwgYHByZXBhcmVfc2Nhbl9jb250cm9sYC4uLiB5ZXAsIHRoYXQmIzM5O3MgdHVja2VkIGF3YXkgaW4gYG1tL3Ztc2Nhbi5jYC4gQW5kIHRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIGl0cyByb2xlLiBXaGlsZSBJJiMzOTttIGhlcmUsIEkgbWlnaHQgYXMgd2VsbCBub3RlIHRoYXQgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlICphbHNvKiBpbiBgbW0vdm1zY2FuLmNgLCB3aGljaCBmZWVscyByaWdodCwgb2YgY291cnNlLiBGaW5hbGx5LCBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBpbiBgbW0vd29ya2luZ3NldC5jYC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgZGlnIGludG8gYHByZXBhcmVfc2Nhbl9jb250cm9sYCBpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiAqdGhhdCogZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc2Nhbm5pbmcgYW5kIHJlY2xhbWF0aW9uIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIyNzk9ZW51bSBzY2FuX2JhbGFuY2Uge1xuLS1cbm1tL3Ztc2Nhbi5jLTIyODUtXG5tbS92bXNjYW4uYzoyMjg2OnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtMjI4Ny17XG4tLVxubW0vdm1zY2FuLmM9NjE5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjE1LVxubW0vdm1zY2FuLmM6NjIxNjpcdHByZXBhcmVfc2Nhbl9jb250cm9sKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MjE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBwcmVwYXJlX3NjYW5fY29udHJvbGAmIzM5O3MgQ29uZmlndXJlZCBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHByZXBhcmVfc2Nhbl9jb250cm9sYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaXMgY29uZmlndXJlZCwgaWYgYXQgYWxsLiBJcyBpdCBvcGVyYXRpbmcgd2l0aCBzb21lIHNwZWNpZmljLCBpbmhlcml0ZWQgY29udGV4dD8gRG9lcyBpdCByZWx5IG9uIGEgY29uZmlndXJhdGlvbiBzZXQgYXQgYSBoaWdoZXIgbGV2ZWwsIG1heWJlIGEgZ2xvYmFsLCBtb2R1bGUsIG9yIGV2ZW4gYW4gYXBwbGljYXRpb24td2lkZSBzZXR0aW5nPyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hldGhlciB0aGlzIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGd1aWRlZCwgY29udHJvbGxlZCBvciBjdXN0b21pemVkIGJ5IGEgY29uZmlndXJhdGlvbiBpdGVtLCBwb3NzaWJseSB3aXRoaW4gYW4gb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzeXN0ZW0uIElmIGl0IGlzLCBrbm93aW5nIHRoZSBzY29wZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gKGdsb2JhbCwgbW9kdWxlLWxldmVsLCBldGMuKSB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBkZWJ1Z2dpbmcgaXRzIGJlaGF2aW9yLiBUaGUgbGV2ZWwgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGluZmx1ZW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGltcG9ydGFudC4gQW5kIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhhdCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjI3OT1lbnVtIHNjYW5fYmFsYW5jZSB7XG4tLVxubW0vdm1zY2FuLmMtMjI4NS1cbm1tL3Ztc2Nhbi5jOjIyODY6c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy0yMjg3LXtcbi0tXG5tbS92bXNjYW4uYz02MTkzPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMTUtXG5tbS92bXNjYW4uYzo2MjE2Olx0cHJlcGFyZV9zY2FuX2NvbnRyb2wocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTYyMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2Ugc3VtbWFyeSBmb3IgYW4gZXhwZXJ0IGNvbGxlYWd1ZToKCioqQ29yZSB2bXNjYW4gRGl2ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYmFzZSB2bXNjYW4gY29kZSBoZXJlLCBub3RoaW5nIGZhbmN5LiBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgaW1tZWRpYXRlIGZvY3VzIGhhcyB0byBiZSBvbiBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gVGhvc2UgYXJlIHRoZSB3b3JraG9yc2VzOyB0aGV5IGFyZSB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBUaGV5IGFyZSB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0IGRpc3NlY3RpbmcgdGhpcyBpc3N1ZSBhbmQgdHJhY2tpbmcgZG93biB0aGUgcm9vdCBjYXVzZS4gRXZlcnl0aGluZyBlbHNlIGhpbmdlcyBvbiB1bmRlcnN0YW5kaW5nIHRob3NlIHR3byByb3V0aW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2FjdGl2ZV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MTk4Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjA1NC0vKlxubW0vdm1zY2FuLmM6MjA1NTogKiBzaHJpbmtfYWN0aXZlX2xpc3QoKSBtb3ZlcyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlIExSVSB0byB0aGUgaW5hY3RpdmUgTFJVLlxubW0vdm1zY2FuLmMtMjA1Ni0gKlxuLS1cbm1tL3Ztc2Nhbi5jLTIwNzAtICovXG5tbS92bXNjYW4uYzoyMDcxOnN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDcyLVx0XHRcdCAgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmM9MjIxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyMjItXHRcdGlmIChzYy1cdTAwM2VtYXlfZGVhY3RpdmF0ZSBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGlzX2ZpbGVfbHJ1KGxydSkpKVxubW0vdm1zY2FuLmM6MjIyMzpcdFx0XHRzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcbm1tL3Ztc2Nhbi5jLTIyMjQtXHRcdGVsc2Vcbi0tXG5tbS92bXNjYW4uYz0yMjg2PXN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzMDctXHQgKlx0UEdST1RBVEVcdCAgIC0gcmVjbGFpbS1kcml2ZW4gcm90YXRpb25zLCBidW1wZWQgZnJvbSBib3RoXG5tbS92bXNjYW4uYzoyMzA4Olx0ICpcdFx0XHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3Rcbm1tL3Ztc2Nhbi5jLTIzMDktXHQgKlx0XHRcdCAgICAgKENQVSB3b3JrKS5cbi0tXG5tbS92bXNjYW4uYz01OTIzPXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDM5LVx0ICAgIGluYWN0aXZlX2lzX2xvdyhscnV2ZWMsIExSVV9JTkFDVElWRV9BTk9OKSlcbm1tL3Ztc2Nhbi5jOjYwNDA6XHRcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXG5tbS92bXNjYW4uYy02MDQxLVx0XHRcdFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XG4tLVxubW0vdm1zY2FuLmM9Njg2MD1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjg4Mi1cdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbm1tL3Ztc2Nhbi5jOjY4ODM6XHRcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXG5tbS92bXNjYW4uYy02ODg0LVx0XHRcdFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzU0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2F0ZWdvcml6ZSB0aGVtLiBIbW0sIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBrbm93IFN5emthbGxlciBpcyBjb3ZlcmFnZS1mb2N1c2VkLiBMaXN0aW5nIHN0YXRpYyBmdW5jdGlvbnMgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0sIHNpbmNlIFN5emthbGxlciB1c2VzIHRoZWlyIGFkZHJlc3Nlcy4gVGhhdCBvcGVucyB1cCBhIHdob2xlIHNldCBvZiBwb3NzaWJpbGl0aWVzLCBkb2VzbiYjMzk7dCBpdD8gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBJIHRoaW5rIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBjYW5kaWRhdGUuCgpOb3csIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBBaCwgdGhpcyBvbmUgaXMgZXhwb3J0ZWQsIGl0JiMzOTtzIGdsb2JhbC4gSSBzaG91bGQgY2hlY2sgaWYgdGhhdCYjMzk7cyBhY3R1YWxseSB0cnVlLCBqdXN0IHRvIGJlIHN1cmUuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aGF0IGdsb2JhbCBzdGF0dXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbi0tXG5tbS93b3JraW5nc2V0LmMtNTM5LS8qKlxubW0vd29ya2luZ3NldC5jOjU0MDogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbm1tL3dvcmtpbmdzZXQuYy01NDEtICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tLVxubW0vd29ya2luZ3NldC5jLTU0Ny0gKi9cbm1tL3dvcmtpbmdzZXQuYzo1NDg6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxubW0vd29ya2luZ3NldC5jLTU0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTI1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uY2VybiBpcyB3aGV0aGVyIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBZZXAsIGNvbmZpcm1lZCwgaXQgaXMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc2VlLi4uIGl0IHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLi4uIGNsZWFybHksIG1lbW9yeSBjb250cm9sIGlzIGludm9sdmVkLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGxydV9yZXBhcmVudF9tZW1jZ2AuIFRoYXQmIzM5O3MgKmRlZmluaXRlbHkqIGdhdGVkIHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBUaGUgY29kZSBhbHNvIHVzZXMgYHByZXBhcmVfc2Nhbl9jb250cm9sYCB3aGljaCwgaW4gdHVybiwgbWFrZXMgdXNlIG9mIGB0YXJnZXRfbHJ1dmVjLSZndDtjb3N0X2FjY3VtYCDigJMgYW5kIHRoYXQgbGl2ZXMgaW4gYHN0cnVjdCBscnV2ZWNgLiBIbW0sIGBzdHJ1Y3QgbHJ1dmVjYCBpcyBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBIb3dldmVyLCBtZW1jZyBpcyB0aGUgcHJpbWFyeSBjb25zdW1lciBvZiB0aGUgbXVsdGktTFJVIHZlY3RvciBmdW5jdGlvbmFsaXR5LiBTbywgaXQgaXMgbW9zdCBsaWtlbHkgc2FmZSB0byBpbmNsdWRlIGBDT05GSUdfTUVNQ0dgLgoKTmV4dCB1cCwgYENPTkZJR19TV0FQYC4gVGhlIHBhdGNoIGRvZXMgc29tZSB3b3JrIHRvIGBtbS9zd2FwLmNgLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBtbS9zd2FwLmNgIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19TV0FQYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQgYnkgbG9va2luZyBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBjb25kaXRpb25hbCBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbm1tL01ha2VmaWxlOjUzOlx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbm1tL01ha2VmaWxlLTU0LVx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbi0tXG5tbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgc3dhcC5vYCBhbmQgYENPTkZJR19NRU1DR2AgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgc3dhcC5vYCBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQmIzM5O3MgYSBnaXZlbjsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGV2ZW4gaWYgc3dhcHBpbmcgaXMgZGlzYWJsZWQgYXQgcnVudGltZS4gSXTigJlzIHRoZSBmb3VuZGF0aW9uYWwgY29tcG9uZW50LiBCdXQsIHdoYXQmIzM5O3MgZ290IG1lIHRoaW5raW5nIGlzIHRoZSBpbnRlcnBsYXkgd2l0aCBgQ09ORklHX01FTUNHYC4gSWYgSSByZW1lbWJlciBjb3JyZWN0bHksIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhbmQgc3dhcCBoYXZlIHNvbWUgc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGNvbmRpdGlvbmFsaXRpZXMuIElzIHRoZXJlIGEgZGVwZW5kZW5jeSBwYXRoIEkmIzM5O20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXJlIHRoZXJlIGFueSBmZWF0dXJlcyBpbiBgc3dhcC5vYCB0aGF0IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgPyBUaGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgYmVoYXZpb3IsIGFuZCBzZWN1cml0eS4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgc2VlIGlmIHRoaXMgaW1wYWN0cyB0aGUgc2VjdXJpdHkgb2YgdGhlIGtlcm5lbC4gSSBtYXkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIGFuZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBzbmlwcGV0cyB0byBiZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHByb3Blcmx5LiBJIHN1c3BlY3QgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJldmlld2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjE0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE1lbWNnIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgbWVtY29udHJvbC5vYCBhbmQgYG1lbWNvbnRyb2wtdjEub2AgZGVmaW5pdGVseSBuZWVkIGJvdGggYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIG5vdCBzdXJwcmlzaW5nLiBDb250cm9sIGdyb3Vwcywgc3BlY2lmaWNhbGx5IG1lbW9yeSBjb250cm9sLCBhcmUgY29yZSB0byBhIGxvdCBvZiBtb2Rlcm4gcmVzb3VyY2UgbWFuYWdlbWVudC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aGF0JiMzOTtzIGJlZW4gb24gbXkgbWluZC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdHVhbGx5IGEgdmFsaWQgYW5kIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBkb24mIzM5O3Qgd2FudCB0byBjaGFzZSBteSB0YWlsIGlmIHRoYXQmIzM5O3MgYmVlbiBkZXByZWNhdGVkIG9yIHJlbmFtZWQgaW4gYSByZWNlbnQga2VybmVsIHVwZGF0ZSwgb3IgaXNuJiMzOTt0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBjYXVzaW5nIHVuZXhwZWN0ZWQgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgZG9jdW1lbnRhdGlvbiBvciB0aGUgYnVpbGQgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB2ZXJpZnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3R1YWxseSBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR19WMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBNRU1DR19WMWAgS2NvbmZpZyBvcHRpb24gaXMgZGVmaW5lZC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2Yga2VybmVsIGZlYXR1cmVzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgb3B0aW9ucy4gYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBvZnRlbiBoYW5kbGVzIGNvcmUgaW5pdGlhbGl6YXRpb24gYW5kIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb25zLiBCdXQsIGdpdmVuIHRoYXQgYE1FTUNHX1YxYCBzY3JlYW1zIG1lbW9yeSBtYW5hZ2VtZW50LCBJJiMzOTttIGxlYW5pbmcgbW9yZSB0b3dhcmRzIGBtbS9LY29uZmlnYCByaWdodCBhd2F5LiBJdCYjMzk7cyB0aGUgbW9yZSBsb2dpY2FsIGhvbWUgZm9yIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBpdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gZmlsZXMsIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwODk9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwOTUtXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDk3LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgcmVjb2duaXplIHRob3NlIGFzIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMg4oCTIGZsYWdzIHdlIHVzZSB0byBidWlsZCB0aGUga2VybmVsIHdpdGggb3Igd2l0aG91dCBzcGVjaWZpYyBmZWF0dXJlcyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzLgoKTm93LCBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgYFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFYCBpcyBjb25zaXN0ZW50bHkgZGVmaW5lZCBhY3Jvc3MgZGlmZmVyZW50IGJ1aWxkcyBvciBzY2VuYXJpb3MuIFRoaXMgaXMgYSBjb21tb24gc2l0dWF0aW9uIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyBJJiMzOTtsbCBzZWUgaWYgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkLiBJZiBpdCBpc24mIzM5O3QgZGVmaW5lZCBldmVyeXdoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IGFuZCBpZiBpdCBoYXMgYW55IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V09SS0lOR1NFVF9SRVNUT1JFX0JBU0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MjM2PWVudW0gbm9kZV9zdGF0X2l0ZW0ge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjUzLVx0V09SS0lOR1NFVF9BQ1RJVkFURV9GSUxFLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoyNTQ6XHRXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MjU1Olx0V09SS0lOR1NFVF9SRVNUT1JFX0FOT04gPSBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMjU2LVx0V09SS0lOR1NFVF9SRVNUT1JFX0ZJTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA5CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgcmVjbGFpbSBsb2dpYywgc28gdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0d2Vha2luZyBob3cgdGhlIGtlcm5lbCBwcmlvcml0aXplcyBzY2FubmluZyB0aGUgYW5vbnltb3VzIHZlcnN1cyBmaWxlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgbGlzdHMuIFRoaXMga2luZCBvZiBiYWxhbmNlIGNoYW5nZSBjYW4gaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCwgb2YgY291cnNlLCBzdGFiaWxpdHkuIFRoZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBmbGFnIGNvbmZpcm1zIG15IGluaXRpYWwgaW1wcmVzc2lvbiAtIHRoaXMgaXMgZ29pbmcgdG8gYmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCB3aGljaCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4KCkkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB0byBjb25zaWRlcjogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AuIEkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBlYWNoIG9mIHRoZW0gdG8gbWFrZSBzdXJlIHRoZSBuYW1lcyBhcmUgYWNjdXJhdGUsIGFuZCB0aGV5IGFyZS4gVGhlIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCwgd2hpY2ggc3VnZ2VzdHMgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBjZ3JvdXBzLgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGNvc3QgdHJhY2tpbmcgZm9yIExSVSByZWNsYWltLCBpbnRyb2R1Y2luZyBuZXcgbm9kZSBzdGF0cyBhbmQgbW9kaWZ5aW5nIHRoZSBiYWxhbmNlIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIExSVSBzY2Fucy4gVGhhdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCBhbmQgaXQgY291bGQgdmVyeSB3ZWxsIGltcGFjdCBwZXJmb3JtYW5jZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZGlmZmljdWx0IHRvIHByZWRpY3QgdGhlIGVmZmVjdHMuIExldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmVwYXJlX3NjYW5fY29udHJvbCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIHJlY2xhaW0gY29zdCB0cmFja2luZyBtZWNoYW5pc20gaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBub2RlIHN0YXQgaXRlbXMgYW5kIGNoYW5nZXMgaG93IHRoZSBrZXJuZWwgYmFsYW5jZXMgc2Nhbm5pbmcgYmV0d2VlbiBhbm9ueW1vdXMgYW5kIGZpbGUgTFJVcyBkdXJpbmcgcGFnZSByZWNsYWltLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ByZXBhcmVfc2Nhbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MTo1My41NjcxNTEzODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc5MTAxMjU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmVwYXJlX3NjYW5fY29udHJvbFwiLFxuICAgIFwic2hyaW5rX2luYWN0aXZlX2xpc3RcIixcbiAgICBcInNocmlua19hY3RpdmVfbGlzdFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJscnVfcmVwYXJlbnRfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTFJVIHJlY2xhaW0gY29zdCB0cmFja2luZyBtZWNoYW5pc20gaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIG5ldyBub2RlIHN0YXQgaXRlbXMgYW5kIGNoYW5nZXMgaG93IHRoZSBrZXJuZWwgYmFsYW5jZXMgc2Nhbm5pbmcgYmV0d2VlbiBhbm9ueW1vdXMgYW5kIGZpbGUgTFJVcyBkdXJpbmcgcGFnZSByZWNsYWltLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MTo1My41NjcxNTU5MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTI1MjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkyOGI0MjMwYjRmNzBkNTQ5ZDlhNDNjYWU5ZmFkNmJhMDU1YWM5NThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAxODo1MTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi4wNjI3NjIyYTUxODRjMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC0zMjMsNiArMzIzLDEwIEBAIGVudW0gbm9kZV9zdGF0X2l0ZW0ge1xcbiBcXHRQR1NDQU5fUFJPQUNUSVZFLFxcbiBcXHRQR1NDQU5fQU5PTixcXG4gXFx0UEdTQ0FOX0ZJTEUsXFxuK1xcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXFxuK1xcdFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUsXFxuK1xcdFBHUk9UQVRFX0FOT04sXFxuK1xcdFBHUk9UQVRFX0ZJTEUsXFxuIFxcdFBHUkVGSUxMLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHROUl9IVUdFVExCLFxcbkBAIC03NjMsOSArNzY3LDEyIEBAIHN0cnVjdCBscnV2ZWMge1xcbiBcXHQgKiBUaGVzZSB0cmFjayB0aGUgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlUgLSBmaWxlIG9yIGFub24gLVxcbiBcXHQgKiBvdmVyIHRoZSBvdGhlci4gQXMgdGhlIG9ic2VydmVkIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVXFxuIFxcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cXG4rXFx0ICogVXBkYXRlZCBhbmQgZGVjYXllZCBhdCBwcmVwYXJlX3NjYW5fY29udHJvbCgpIHRpbWU7IGNvc3RfbG9ja1xcbitcXHQgKiBzZXJpYWxpc2VzIHRoYXQgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGFub25fY29zdDtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZpbGVfY29zdDtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHByZXZfY29zdFtBTk9OX0FORF9GSUxFXTtcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGNvc3RfYWNjdW1bQU5PTl9BTkRfRklMRV07XFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRcXHRjb3N0X2xvY2s7XFxuIFxcdC8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi9cXG4gXFx0YXRvbWljX2xvbmdfdFxcdFxcdFxcdG5vbnJlc2lkZW50X2FnZTtcXG4gXFx0LyogUmVmYXVsdHMgYXQgdGhlIHRpbWUgb2YgbGFzdCByZWNsYWltIGN5Y2xlICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0zMDksOSArMzA5LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xcbiBcXG4gXFxuIC8qIGxpbnV4L21tL3N3YXAuYyAqL1xcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcXG4tXFx0XFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZCk7XFxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqKTtcXG4gdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcXG4gdm9pZCBmb2xpb19hZGRfbHJ1X3ZtYShzdHJ1Y3QgZm9saW8gKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xcbiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggNzY1MDY5MjExNTY3OGMuLmM3YTUyYmI2OGY0YzdkIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xcbkBAIC0xOTg4LDggKzE5ODgsOCBAQCB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiBcXHRcXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHtcXG4gXFx0XFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbiBcXG4tXFx0XFx0XFx0YW5vbl9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuYW5vbl9jb3N0O1xcbi1cXHRcXHRcXHRmaWxlX2Nvc3QgKz0gbXotXFx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XFxuK1xcdFxcdFxcdGFub25fY29zdCArPSBtei1cXHUwMDNlbHJ1dmVjLmNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTtcXG4rXFx0XFx0XFx0ZmlsZV9jb3N0ICs9IG16LVxcdTAwM2VscnV2ZWMuY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNlcV9idWZfcHJpbnRmKHMsIFxcXCJhbm9uX2Nvc3QgJWx1XFxcXG5cXFwiLCBhbm9uX2Nvc3QpO1xcbiBcXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiZmlsZV9jb3N0ICVsdVxcXFxuXFxcIiwgZmlsZV9jb3N0KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjA0OWM4NjAyMTg3ZWM2IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC00MTksNiArNDE5LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuIFxcdFBHU0NBTl9QUk9BQ1RJVkUsXFxuIFxcdFBHU0NBTl9BTk9OLFxcbiBcXHRQR1NDQU5fRklMRSxcXG4rXFx0UEdSRUNMQUlNX1BBR0VPVVRfQU5PTixcXG4rXFx0UEdSRUNMQUlNX1BBR0VPVVRfRklMRSxcXG4rXFx0UEdST1RBVEVfQU5PTixcXG4rXFx0UEdST1RBVEVfRklMRSxcXG4gXFx0UEdSRUZJTEwsXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIFxcdE5SX0hVR0VUTEIsXFxuZGlmZiAtLWdpdCBhL21tL21tem9uZS5jIGIvbW0vbW16b25lLmNcXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XFxuLS0tIGEvbW0vbW16b25lLmNcXG4rKysgYi9tbS9tbXpvbmUuY1xcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbiBcXHR6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChscnV2ZWMpO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXFxuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuY1xcbisrKyBiL21tL3N3YXAuY1xcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGZvbGlvX2JhdGNoX2FkZF9hbmRfbW92ZShmb2xpbywgbHJ1X21vdmVfdGFpbCk7XFxuIH1cXG4gXFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKVxcbi1cXHRcXHRfX3JlbGVhc2VzKGxydXZlYy1cXHUwMDNlbHJ1X2xvY2spXFxuLVxcdFxcdF9fcmVsZWFzZXMocmN1KVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgY29zdDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFJlZmxlY3QgdGhlIHJlbGF0aXZlIGNvc3Qgb2YgaW5jdXJyaW5nIElPIGFuZCBzcGVuZGluZyBDUFVcXG4tXFx0ICogdGltZSBvbiByb3RhdGlvbnMuIFRoaXMgZG9lc24ndCBhdHRlbXB0IHRvIG1ha2UgYSBwcmVjaXNlXFxuLVxcdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxcbi1cXHQgKiBiZXR3ZWVuIHRoZSBMUlUgbGlzdHMsIG9yIHJvdGF0aW9ucyBhcmUgb3ZlcndoZWxtaW5nbHlcXG4tXFx0ICogZGlmZmVyZW50IGJldHdlZW4gdGhlbSwgYWRqdXN0IHNjYW4gYmFsYW5jZSBmb3IgQ1BVIHdvcmsuXFxuLVxcdCAqL1xcbi1cXHRjb3N0ID0gbnJfaW8gKiBTV0FQX0NMVVNURVJfTUFYICsgbnJfcm90YXRlZDtcXG4tXFx0aWYgKCFjb3N0KSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBscnVzaXplO1xcbi1cXG4tXFx0XFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cXG4tXFx0XFx0aWYgKGZpbGUpXFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNvc3Q7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bHJ1dmVjLVxcdTAwM2Vhbm9uX2Nvc3QgKz0gY29zdDtcXG4tXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIERlY2F5IHByZXZpb3VzIGV2ZW50c1xcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBCZWNhdXNlIHdvcmtsb2FkcyBjaGFuZ2Ugb3ZlciB0aW1lIChhbmQgdG8gYXZvaWRcXG4tXFx0XFx0ICogb3ZlcmZsb3cpIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nXFxuLVxcdFxcdCAqIGF2ZXJhZ2UsIHdoaWNoIGVuZHMgdXAgd2VpZ2hpbmcgcmVjZW50IHJlZmF1bHRzXFxuLVxcdFxcdCAqIG1vcmUgdGhhbiBvbGQgb25lcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxydXNpemUgPSBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcXG4tXFx0XFx0XFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9GSUxFKSArXFxuLVxcdFxcdFxcdCAgbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XFxuLVxcbi1cXHRcXHRpZiAobHJ1dmVjLVxcdTAwM2VmaWxlX2Nvc3QgKyBscnV2ZWMtXFx1MDAzZWFub25fY29zdCBcXHUwMDNlIGxydXNpemUgLyA0KSB7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlZmlsZV9jb3N0IC89IDI7XFxuLVxcdFxcdFxcdGxydXZlYy1cXHUwMDNlYW5vbl9jb3N0IC89IDI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVfbG9jayk7XFxuLVxcdFxcdGxydXZlYyA9IHBhcmVudF9scnV2ZWMobHJ1dmVjKTtcXG4tXFx0XFx0aWYgKCFscnV2ZWMpIHtcXG4tXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHR9XFxuLX1cXG4tXFxuLXZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbi1cXG4tXFx0bHJ1dmVjID0gZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGZvbGlvKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxcbi1cXHRcXHRcXHRcXHRmb2xpb19ucl9wYWdlcyhmb2xpbyksIDApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBscnVfYWN0aXZhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XFxuIFxcbiBcXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xcbiBcXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XFxuLVxcdHBhcmVudF9scnV2ZWMtXFx1MDAzZWFub25fY29zdCArPSBjaGlsZF9scnV2ZWMtXFx1MDAzZWFub25fY29zdDtcXG4tXFx0cGFyZW50X2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0O1xcbiBcXG4gXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG4gXFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi44MGQyYjFkNzlmMTkzNCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTIwMzgsMTAgKzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xcbitcXHRpZiAoc3RhdC5ucl9wYWdlb3V0KVxcbitcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdSRUNMQUlNX1BBR0VPVVRfQU5PTiArIGZpbGUsXFxuK1xcdFxcdFxcdFxcdCBzdGF0Lm5yX3BhZ2VvdXQpO1xcbitcXHRpZiAobnJfc2Nhbm5lZCBcXHUwMDNlIG5yX3JlY2xhaW1lZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxcbitcXHRcXHRcXHRcXHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuIFxcbi1cXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4tXFx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZmlsZSwgc3RhdC5ucl9wYWdlb3V0LFxcbi1cXHRcXHRcXHRcXHRcXHRucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcXG4gXFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXFx1MDAzZW5vZGVfaWQsXFxuIFxcdFxcdFxcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXFx1MDAyNnN0YXQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuQEAgLTIxNDcsOSArMjE1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdGNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2RlYWN0aXZhdGUpO1xcbiBcXHRjb3VudF9tZW1jZ19ldmVudHMobHJ1dmVjX21lbWNnKGxydXZlYyksIFBHREVBQ1RJVkFURSwgbnJfZGVhY3RpdmF0ZSk7XFxuIFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbitcXHRpZiAobnJfcm90YXRlZClcXG4rXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLCBucl9yb3RhdGVkKTtcXG4gXFxuLVxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbi1cXHRscnVfbm90ZV9jb3N0X3VubG9ja19pcnEobHJ1dmVjLCBmaWxlLCAwLCBucl9yb3RhdGVkKTtcXG4gXFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBucl90YWtlbiwgbnJfYWN0aXZhdGUsXFxuIFxcdFxcdFxcdG5yX2RlYWN0aXZhdGUsIG5yX3JvdGF0ZWQsIHNjLVxcdTAwM2Vwcmlvcml0eSwgZmlsZSk7XFxuIH1cXG5AQCAtMjI5OCwxMiArMjMwMSw1NiBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXApO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHRoZSBzY2FuIGJhbGFuY2UgYmV0d2VlbiBhbm9uIGFuZCBmaWxlIExSVXMuXFxuK1xcdCAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzIGZyb20gcGVyLUxSVVxcbitcXHQgKiB2bXN0YXQgY291bnRlcnMuIFRoZSByYXcgY29zdCBwZXIgc2lkZSBpczpcXG4rXFx0ICpcXG4rXFx0ICpcXHRQR1JPVEFURVxcdCAgIC0gcmVjbGFpbS1kcml2ZW4gcm90YXRpb25zLCBidW1wZWQgZnJvbSBib3RoXFxuK1xcdCAqXFx0XFx0XFx0ICAgICBzaHJpbmtfaW5hY3RpdmVfbGlzdCBhbmQgc2hyaW5rX2FjdGl2ZV9saXN0XFxuK1xcdCAqXFx0XFx0XFx0ICAgICAoQ1BVIHdvcmspLlxcbitcXHQgKlxcdFBHUkVDTEFJTV9QQUdFT1VUICAtIHJlY2xhaW0tZHJpdmVuIHBhZ2VvdXQgSU8uXFxuK1xcdCAqXFx0V09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgdHdvIElPIHRlcm1zIGFyZSB3ZWlnaHRlZCBieSBTV0FQX0NMVVNURVJfTUFYIHRvIHJlZmxlY3QgdGhlXFxuK1xcdCAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi5cXG4rXFx0ICpcXG4rXFx0ICogUmVhZHMgYXJlIGxvY2stZnJlZSBwZXItY3B1IHN1bSBjb2xsYXRpb25zLCByc3RhdC1hZ2dyZWdhdGVkIHVwXFxuK1xcdCAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgZGVsdGEgYWdhaW5zdCBwcmV2X2Nvc3QgaXMgZm9sZGVkIGludG8gY29zdF9hY2N1bSwgd2hpY2ggaXNcXG4rXFx0ICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuXFxuK1xcdCAqIGNvc3RfbG9jayBzZXJpYWxpc2VzIGNvbmN1cnJlbnQgcmVjbGFpbWVycyBpbiB0aGUgc2FtZSBtZW1jZytub2RlLlxcbiBcXHQgKi9cXG4tXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlbHJ1X2xvY2spO1xcbi1cXHRzYy1cXHUwMDNlYW5vbl9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cXHUwMDNlYW5vbl9jb3N0O1xcbi1cXHRzYy1cXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cXHUwMDNlZmlsZV9jb3N0O1xcbi1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWxydV9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2xvY2spO1xcbitcXHRmb3IgKGludCBmID0gMDsgZiBcXHUwMDNjPSAxOyBmKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBub3csIGRlbHRhO1xcbitcXG4rXFx0XFx0bm93ID0gbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgUEdST1RBVEVfQU5PTiArIGYpICtcXG4rXFx0XFx0ICAgICAgKGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsXFxuK1xcdFxcdFxcdFxcdFxcdCBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OICsgZikgK1xcbitcXHRcXHQgICAgICAgbHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0IFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZikpICpcXG4rXFx0XFx0XFx0XFx0U1dBUF9DTFVTVEVSX01BWDtcXG4rXFx0XFx0ZGVsdGEgPSBub3cgLSB0YXJnZXRfbHJ1dmVjLVxcdTAwM2VwcmV2X2Nvc3RbZl07XFxuK1xcdFxcdHRhcmdldF9scnV2ZWMtXFx1MDAzZXByZXZfY29zdFtmXSA9IG5vdztcXG4rXFx0XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9hY2N1bVtmXSArPSBkZWx0YTtcXG4rXFx0fVxcbitcXHR1bnNpZ25lZCBsb25nIGxydXNpemUgPVxcbitcXHRcXHRscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXFxuK1xcdFxcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXFxuK1xcdFxcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG4rXFx0XFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvc3RfbGltaXQgPSBscnVzaXplIC8gNDtcXG4rXFxuK1xcdHdoaWxlICh0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gXFx1MDAzZSBjb3N0X2xpbWl0IHx8XFxuK1xcdCAgICAgICB0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV0gXFx1MDAzZSBjb3N0X2xpbWl0IHx8XFxuK1xcdCAgICAgICB0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gK1xcbitcXHQgICAgICAgdGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFxcdTAwM2UgY29zdF9saW1pdCkge1xcbitcXHRcXHR0YXJnZXRfbHJ1dmVjLVxcdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gLz0gMjtcXG4rXFx0XFx0dGFyZ2V0X2xydXZlYy1cXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIC89IDI7XFxuK1xcdH1cXG4rXFx0c2MtXFx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTtcXG4rXFx0c2MtXFx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9GSUxFXTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRhcmdldF9scnV2ZWMtXFx1MDAzZWNvc3RfbG9jayk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUYXJnZXQgZGVzaXJhYmxlIGluYWN0aXZlOmFjdGl2ZSBsaXN0IHJhdGlvcyBmb3IgdGhlIGFub25cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuY1xcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi4yZGZlZDVlOWI2NGQ1NSAxMDA2NDRcXG4tLS0gYS9tbS92bXN0YXQuY1xcbisrKyBiL21tL3Ztc3RhdC5jXFxuQEAgLTEyODksNiArMTI4OSwxMCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4gXFx0W0koUEdTQ0FOX1BST0FDVElWRSldXFx0XFx0XFx0PSBcXFwicGdzY2FuX3Byb2FjdGl2ZVxcXCIsXFxuIFxcdFtJKFBHU0NBTl9BTk9OKV1cXHRcXHRcXHQ9IFxcXCJwZ3NjYW5fYW5vblxcXCIsXFxuIFxcdFtJKFBHU0NBTl9GSUxFKV1cXHRcXHRcXHQ9IFxcXCJwZ3NjYW5fZmlsZVxcXCIsXFxuK1xcdFtJKFBHUkVDTEFJTV9QQUdFT1VUX0FOT04pXVxcdFxcdD0gXFxcInBncmVjbGFpbV9wYWdlb3V0X2Fub25cXFwiLFxcbitcXHRbSShQR1JFQ0xBSU1fUEFHRU9VVF9GSUxFKV1cXHRcXHQ9IFxcXCJwZ3JlY2xhaW1fcGFnZW91dF9maWxlXFxcIixcXG4rXFx0W0koUEdST1RBVEVfQU5PTildXFx0XFx0XFx0PSBcXFwicGdyb3RhdGVfYW5vblxcXCIsXFxuK1xcdFtJKFBHUk9UQVRFX0ZJTEUpXVxcdFxcdFxcdD0gXFxcInBncm90YXRlX2ZpbGVcXFwiLFxcbiBcXHRbSShQR1JFRklMTCldXFx0XFx0XFx0XFx0PSBcXFwicGdyZWZpbGxcXFwiLFxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbiBcXHRbSShOUl9IVUdFVExCKV1cXHRcXHRcXHRcXHQ9IFxcXCJucl9odWdldGxiXFxcIixcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0LyogRm9saW8gd2FzIGFjdGl2ZSBwcmlvciB0byBldmljdGlvbiAqL1xcbiBcXHRpZiAod29ya2luZ3NldCkge1xcbiBcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFhYWDogTW92ZSB0byBmb2xpb19hZGRfbHJ1KCkgd2hlbiBpdCBzdXBwb3J0cyBuZXcgdnNcXG4tXFx0XFx0ICogcHV0YmFja1xcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bHJ1X25vdGVfY29zdF9yZWZhdWx0KGZvbGlvKTtcXG4gXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgZmlsZSwgbnIpO1xcbiBcXHR9XFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTE6NTQuMTQ3MDk5ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjExMDU1MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTI4YjQyMzBiNGY3MGQ1NDlkOWE0M2NhZTlmYWQ2YmEwNTVhYzk1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTg6NTE6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLjA2Mjc2MjJhNTE4NGMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTMyMyw2ICszMjMsMTAgQEAgZW51bSBub2RlX3N0YXRfaXRlbSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXG4rXHRQR1JFQ0xBSU1fUEFHRU9VVF9GSUxFLFxuK1x0UEdST1RBVEVfQU5PTixcbitcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbkBAIC03NjMsOSArNzY3LDEyIEBAIHN0cnVjdCBscnV2ZWMge1xuIFx0ICogVGhlc2UgdHJhY2sgdGhlIGNvc3Qgb2YgcmVjbGFpbWluZyBvbmUgTFJVIC0gZmlsZSBvciBhbm9uIC1cbiBcdCAqIG92ZXIgdGhlIG90aGVyLiBBcyB0aGUgb2JzZXJ2ZWQgY29zdCBvZiByZWNsYWltaW5nIG9uZSBMUlVcbiBcdCAqIGluY3JlYXNlcywgdGhlIHJlY2xhaW0gc2NhbiBiYWxhbmNlIHRpcHMgdG93YXJkIHRoZSBvdGhlci5cbitcdCAqIFVwZGF0ZWQgYW5kIGRlY2F5ZWQgYXQgcHJlcGFyZV9zY2FuX2NvbnRyb2woKSB0aW1lOyBjb3N0X2xvY2tcbitcdCAqIHNlcmlhbGlzZXMgdGhhdCB1cGRhdGUuXG4gXHQgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0XHRhbm9uX2Nvc3Q7XG4tXHR1bnNpZ25lZCBsb25nXHRcdFx0ZmlsZV9jb3N0O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRcdHByZXZfY29zdFtBTk9OX0FORF9GSUxFXTtcbitcdHVuc2lnbmVkIGxvbmdcdFx0XHRjb3N0X2FjY3VtW0FOT05fQU5EX0ZJTEVdO1xuK1x0c3BpbmxvY2tfdFx0XHRcdGNvc3RfbG9jaztcbiBcdC8qIE5vbi1yZXNpZGVudCBhZ2UsIGRyaXZlbiBieSBMUlUgbW92ZW1lbnQgKi9cbiBcdGF0b21pY19sb25nX3RcdFx0XHRub25yZXNpZGVudF9hZ2U7XG4gXHQvKiBSZWZhdWx0cyBhdCB0aGUgdGltZSBvZiBsYXN0IHJlY2xhaW0gY3ljbGUgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uYjhlMmUxYWYyYjE0MjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zMDksOSArMzA5LDYgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xuIFxuIFxuIC8qIGxpbnV4L21tL3N3YXAuYyAqL1xuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XG4gdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcbiB2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uYzdhNTJiYjY4ZjRjN2QgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuY1xuQEAgLTE5ODgsOCArMTk4OCw4IEBAIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gXHRcdGZvcl9lYWNoX29ubGluZV9wZ2RhdChwZ2RhdCkge1xuIFx0XHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4gXG4tXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5hbm9uX2Nvc3Q7XG4tXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5maWxlX2Nvc3Q7XG4rXHRcdFx0YW5vbl9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl07XG4rXHRcdFx0ZmlsZV9jb3N0ICs9IG16LVx1MDAzZWxydXZlYy5jb3N0X2FjY3VtW1dPUktJTkdTRVRfRklMRV07XG4gXHRcdH1cbiBcdFx0c2VxX2J1Zl9wcmludGYocywgXCJhbm9uX2Nvc3QgJWx1XFxuXCIsIGFub25fY29zdCk7XG4gXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwiZmlsZV9jb3N0ICVsdVxcblwiLCBmaWxlX2Nvc3QpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZmQuLjA0OWM4NjAyMTg3ZWM2IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MTksNiArNDE5LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XG4gXHRQR1NDQU5fUFJPQUNUSVZFLFxuIFx0UEdTQ0FOX0FOT04sXG4gXHRQR1NDQU5fRklMRSxcbitcdFBHUkVDTEFJTV9QQUdFT1VUX0FOT04sXG4rXHRQR1JFQ0xBSU1fUEFHRU9VVF9GSUxFLFxuK1x0UEdST1RBVEVfQU5PTixcbitcdFBHUk9UQVRFX0ZJTEUsXG4gXHRQR1JFRklMTCxcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0TlJfSFVHRVRMQixcbmRpZmYgLS1naXQgYS9tbS9tbXpvbmUuYyBiL21tL21tem9uZS5jXG5pbmRleCAwYzhmMTgxZDlkNTAwNi4uMTcxMzlkYjRkMjkxY2UgMTAwNjQ0XG4tLS0gYS9tbS9tbXpvbmUuY1xuKysrIGIvbW0vbW16b25lLmNcbkBAIC03OCw2ICs3OCw3IEBAIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0bWVtc2V0KGxydXZlYywgMCwgc2l6ZW9mKHN0cnVjdCBscnV2ZWMpKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZscnV2ZWMtXHUwMDNlY29zdF9sb2NrKTtcbiBcdHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KGxydXZlYyk7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuY1xuaW5kZXggNTg4ZjUwZDhmMWE4YzkuLjc0YjI4MTc3OGNiYzkyIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5jXG4rKysgYi9tbS9zd2FwLmNcbkBAIC0yNzIsNzMgKzI3Miw2IEBAIHZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19iYXRjaF9hZGRfYW5kX21vdmUoZm9saW8sIGxydV9tb3ZlX3RhaWwpO1xuIH1cbiBcbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZClcbi1cdFx0X19yZWxlYXNlcyhscnV2ZWMtXHUwMDNlbHJ1X2xvY2spXG4tXHRcdF9fcmVsZWFzZXMocmN1KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgY29zdDtcbi1cbi1cdC8qXG4tXHQgKiBSZWZsZWN0IHRoZSByZWxhdGl2ZSBjb3N0IG9mIGluY3VycmluZyBJTyBhbmQgc3BlbmRpbmcgQ1BVXG4tXHQgKiB0aW1lIG9uIHJvdGF0aW9ucy4gVGhpcyBkb2Vzbid0IGF0dGVtcHQgdG8gbWFrZSBhIHByZWNpc2Vcbi1cdCAqIGNvbXBhcmlzb24sIGl0IGp1c3Qgc2F5czogaWYgcmVsb2FkcyBhcmUgYWJvdXQgY29tcGFyYWJsZVxuLVx0ICogYmV0d2VlbiB0aGUgTFJVIGxpc3RzLCBvciByb3RhdGlvbnMgYXJlIG92ZXJ3aGVsbWluZ2x5XG4tXHQgKiBkaWZmZXJlbnQgYmV0d2VlbiB0aGVtLCBhZGp1c3Qgc2NhbiBiYWxhbmNlIGZvciBDUFUgd29yay5cbi1cdCAqL1xuLVx0Y29zdCA9IG5yX2lvICogU1dBUF9DTFVTVEVSX01BWCArIG5yX3JvdGF0ZWQ7XG4tXHRpZiAoIWNvc3QpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxydXZlYy1cdTAwM2VscnVfbG9jayk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZTtcbi1cbi1cdFx0LyogUmVjb3JkIGNvc3QgZXZlbnQgKi9cbi1cdFx0aWYgKGZpbGUpXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArPSBjb3N0O1xuLVx0XHRlbHNlXG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWFub25fY29zdCArPSBjb3N0O1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBEZWNheSBwcmV2aW91cyBldmVudHNcbi1cdFx0ICpcbi1cdFx0ICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkXG4tXHRcdCAqIG92ZXJmbG93KSB3ZSBrZWVwIHRoZXNlIHN0YXRpc3RpY3MgYXMgYSBmbG9hdGluZ1xuLVx0XHQgKiBhdmVyYWdlLCB3aGljaCBlbmRzIHVwIHdlaWdoaW5nIHJlY2VudCByZWZhdWx0c1xuLVx0XHQgKiBtb3JlIHRoYW4gb2xkIG9uZXMuXG4tXHRcdCAqL1xuLVx0XHRscnVzaXplID0gbHJ1dmVjX3BhZ2Vfc3RhdGUobHJ1dmVjLCBOUl9JTkFDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0FDVElWRV9BTk9OKSArXG4tXHRcdFx0ICBscnV2ZWNfcGFnZV9zdGF0ZShscnV2ZWMsIE5SX0lOQUNUSVZFX0ZJTEUpICtcbi1cdFx0XHQgIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgTlJfQUNUSVZFX0ZJTEUpO1xuLVxuLVx0XHRpZiAobHJ1dmVjLVx1MDAzZWZpbGVfY29zdCArIGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgXHUwMDNlIGxydXNpemUgLyA0KSB7XG4tXHRcdFx0bHJ1dmVjLVx1MDAzZWZpbGVfY29zdCAvPSAyO1xuLVx0XHRcdGxydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgLz0gMjtcbi1cdFx0fVxuLVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdFx0bHJ1dmVjID0gcGFyZW50X2xydXZlYyhscnV2ZWMpO1xuLVx0XHRpZiAoIWxydXZlYykge1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdH1cbi19XG4tXG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4tXG4tXHRscnV2ZWMgPSBmb2xpb19scnV2ZWNfbG9ja19pcnEoZm9saW8pO1xuLVx0bHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKGxydXZlYywgZm9saW9faXNfZmlsZV9scnUoZm9saW8pLFxuLVx0XHRcdFx0Zm9saW9fbnJfcGFnZXMoZm9saW8pLCAwKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgbHJ1X2FjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTExNjQsOCArMTA5Nyw2IEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXG4gXHRjaGlsZF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgTk9ERV9EQVRBKG5pZCkpO1xuIFx0cGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xuLVx0cGFyZW50X2xydXZlYy1cdTAwM2Vhbm9uX2Nvc3QgKz0gY2hpbGRfbHJ1dmVjLVx1MDAzZWFub25fY29zdDtcbi1cdHBhcmVudF9scnV2ZWMtXHUwMDNlZmlsZV9jb3N0ICs9IGNoaWxkX2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4gXG4gXHRmb3JfZWFjaF9scnUobHJ1KVxuIFx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi44MGQyYjFkNzlmMTkzNCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTIwMzgsMTAgKzIwMzgsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xuK1x0aWYgKHN0YXQubnJfcGFnZW91dClcbitcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUkVDTEFJTV9QQUdFT1VUX0FOT04gKyBmaWxlLFxuK1x0XHRcdFx0IHN0YXQubnJfcGFnZW91dCk7XG4rXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgbnJfcmVjbGFpbWVkKVxuK1x0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsXG4rXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIHN0YXQubnJfcGFnZW91dCxcbi1cdFx0XHRcdFx0bnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4gXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4gXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuIFx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuQEAgLTIxNDcsOSArMjE1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRjb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhscnV2ZWNfbWVtY2cobHJ1dmVjKSwgUEdERUFDVElWQVRFLCBucl9kZWFjdGl2YXRlKTtcbiBcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuK1x0aWYgKG5yX3JvdGF0ZWQpXG4rXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZmlsZSwgbnJfcm90YXRlZCk7XG4gXG4tXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbi1cdGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShscnV2ZWMsIGZpbGUsIDAsIG5yX3JvdGF0ZWQpO1xuIFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG5yX3Rha2VuLCBucl9hY3RpdmF0ZSxcbiBcdFx0XHRucl9kZWFjdGl2YXRlLCBucl9yb3RhdGVkLCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4gfVxuQEAgLTIyOTgsMTIgKzIzMDEsNTYgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwKTtcbiBcbiBcdC8qXG4tXHQgKiBEZXRlcm1pbmUgdGhlIHNjYW4gYmFsYW5jZSBiZXR3ZWVuIGFub24gYW5kIGZpbGUgTFJVcy5cbitcdCAqIERldGVybWluZSB0aGUgc2NhbiBiYWxhbmNlIGJldHdlZW4gYW5vbiBhbmQgZmlsZSBMUlVzIGZyb20gcGVyLUxSVVxuK1x0ICogdm1zdGF0IGNvdW50ZXJzLiBUaGUgcmF3IGNvc3QgcGVyIHNpZGUgaXM6XG4rXHQgKlxuK1x0ICpcdFBHUk9UQVRFXHQgICAtIHJlY2xhaW0tZHJpdmVuIHJvdGF0aW9ucywgYnVtcGVkIGZyb20gYm90aFxuK1x0ICpcdFx0XHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3RcbitcdCAqXHRcdFx0ICAgICAoQ1BVIHdvcmspLlxuK1x0ICpcdFBHUkVDTEFJTV9QQUdFT1VUICAtIHJlY2xhaW0tZHJpdmVuIHBhZ2VvdXQgSU8uXG4rXHQgKlx0V09SS0lOR1NFVF9SRVNUT1JFIC0gcmVmYXVsdHMgb2YgcHJldmlvdXNseS13b3JraW5nc2V0IHBhZ2VzLlxuK1x0ICpcbitcdCAqIFRoZSB0d28gSU8gdGVybXMgYXJlIHdlaWdodGVkIGJ5IFNXQVBfQ0xVU1RFUl9NQVggdG8gcmVmbGVjdCB0aGVcbitcdCAqIGhpZ2hlciBjb3N0IG9mIGFuIElPIG92ZXIgYSByb3RhdGlvbi5cbitcdCAqXG4rXHQgKiBSZWFkcyBhcmUgbG9jay1mcmVlIHBlci1jcHUgc3VtIGNvbGxhdGlvbnMsIHJzdGF0LWFnZ3JlZ2F0ZWQgdXBcbitcdCAqIHRoZSBtZW1jZyBoaWVyYXJjaHkgYnkgbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZCgpIGFib3ZlLlxuK1x0ICpcbitcdCAqIFRoZSBkZWx0YSBhZ2FpbnN0IHByZXZfY29zdCBpcyBmb2xkZWQgaW50byBjb3N0X2FjY3VtLCB3aGljaCBpc1xuK1x0ICogaGFsdmVkIG9uIGJvdGggc2lkZXMgdW50aWwgdGhlaXIgc3VtIGlzIHdpdGhpbiBscnVzaXplLzQuXG4rXHQgKiBjb3N0X2xvY2sgc2VyaWFsaXNlcyBjb25jdXJyZW50IHJlY2xhaW1lcnMgaW4gdGhlIHNhbWUgbWVtY2crbm9kZS5cbiBcdCAqL1xuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0YXJnZXRfbHJ1dmVjLVx1MDAzZWxydV9sb2NrKTtcbi1cdHNjLVx1MDAzZWFub25fY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlYW5vbl9jb3N0O1xuLVx0c2MtXHUwMDNlZmlsZV9jb3N0ID0gdGFyZ2V0X2xydXZlYy1cdTAwM2VmaWxlX2Nvc3Q7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2VscnVfbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuK1x0Zm9yIChpbnQgZiA9IDA7IGYgXHUwMDNjPSAxOyBmKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBub3csIGRlbHRhO1xuK1xuK1x0XHRub3cgPSBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgZikgK1xuK1x0XHQgICAgICAobHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYyxcbitcdFx0XHRcdFx0IFBHUkVDTEFJTV9QQUdFT1VUX0FOT04gKyBmKSArXG4rXHRcdCAgICAgICBscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLFxuK1x0XHRcdFx0XHQgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmKSkgKlxuK1x0XHRcdFx0U1dBUF9DTFVTVEVSX01BWDtcbitcdFx0ZGVsdGEgPSBub3cgLSB0YXJnZXRfbHJ1dmVjLVx1MDAzZXByZXZfY29zdFtmXTtcbitcdFx0dGFyZ2V0X2xydXZlYy1cdTAwM2VwcmV2X2Nvc3RbZl0gPSBub3c7XG4rXHRcdHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtmXSArPSBkZWx0YTtcbitcdH1cbitcdHVuc2lnbmVkIGxvbmcgbHJ1c2l6ZSA9XG4rXHRcdGxydXZlY19wYWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIE5SX0lOQUNUSVZFX0FOT04pICtcbitcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfQUNUSVZFX0FOT04pICtcbitcdFx0bHJ1dmVjX3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgTlJfSU5BQ1RJVkVfRklMRSkgK1xuK1x0XHRscnV2ZWNfcGFnZV9zdGF0ZSh0YXJnZXRfbHJ1dmVjLCBOUl9BQ1RJVkVfRklMRSk7XG4rXHR1bnNpZ25lZCBsb25nIGNvc3RfbGltaXQgPSBscnVzaXplIC8gNDtcbitcbitcdHdoaWxlICh0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXSBcdTAwM2UgY29zdF9saW1pdCB8fFxuK1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0IHx8XG4rXHQgICAgICAgdGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2FjY3VtW1dPUktJTkdTRVRfQU5PTl0gK1xuK1x0ICAgICAgIHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIFx1MDAzZSBjb3N0X2xpbWl0KSB7XG4rXHRcdHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0FOT05dIC89IDI7XG4rXHRcdHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdIC89IDI7XG4rXHR9XG4rXHRzYy1cdTAwM2Vhbm9uX2Nvc3QgPSB0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1bV09SS0lOR1NFVF9BTk9OXTtcbitcdHNjLVx1MDAzZWZpbGVfY29zdCA9IHRhcmdldF9scnV2ZWMtXHUwMDNlY29zdF9hY2N1bVtXT1JLSU5HU0VUX0ZJTEVdO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGFyZ2V0X2xydXZlYy1cdTAwM2Vjb3N0X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRhcmdldCBkZXNpcmFibGUgaW5hY3RpdmU6YWN0aXZlIGxpc3QgcmF0aW9zIGZvciB0aGUgYW5vblxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IGY1MzQ5NzJmNTE3ZGUwLi4yZGZlZDVlOWI2NGQ1NSAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4rKysgYi9tbS92bXN0YXQuY1xuQEAgLTEyODksNiArMTI4OSwxMCBAQCBjb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbiBcdFtJKFBHU0NBTl9QUk9BQ1RJVkUpXVx0XHRcdD0gXCJwZ3NjYW5fcHJvYWN0aXZlXCIsXG4gXHRbSShQR1NDQU5fQU5PTildXHRcdFx0PSBcInBnc2Nhbl9hbm9uXCIsXG4gXHRbSShQR1NDQU5fRklMRSldXHRcdFx0PSBcInBnc2Nhbl9maWxlXCIsXG4rXHRbSShQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OKV1cdFx0PSBcInBncmVjbGFpbV9wYWdlb3V0X2Fub25cIixcbitcdFtJKFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEUpXVx0XHQ9IFwicGdyZWNsYWltX3BhZ2VvdXRfZmlsZVwiLFxuK1x0W0koUEdST1RBVEVfQU5PTildXHRcdFx0PSBcInBncm90YXRlX2Fub25cIixcbitcdFtJKFBHUk9UQVRFX0ZJTEUpXVx0XHRcdD0gXCJwZ3JvdGF0ZV9maWxlXCIsXG4gXHRbSShQR1JFRklMTCldXHRcdFx0XHQ9IFwicGdyZWZpbGxcIixcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFx0W0koTlJfSFVHRVRMQildXHRcdFx0XHQ9IFwibnJfaHVnZXRsYlwiLFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhY2QuLjdhYzJiODhjODBhZTU2IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01ODQsMTEgKzU4NCw2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdC8qIEZvbGlvIHdhcyBhY3RpdmUgcHJpb3IgdG8gZXZpY3Rpb24gKi9cbiBcdGlmICh3b3JraW5nc2V0KSB7XG4gXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbi1cdFx0Lypcbi1cdFx0ICogWFhYOiBNb3ZlIHRvIGZvbGlvX2FkZF9scnUoKSB3aGVuIGl0IHN1cHBvcnRzIG5ldyB2c1xuLVx0XHQgKiBwdXRiYWNrXG4tXHRcdCAqL1xuLVx0XHRscnVfbm90ZV9jb3N0X3JlZmF1bHQoZm9saW8pO1xuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UgKyBmaWxlLCBucik7XG4gXHR9XG4gb3V0OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTE6NTQuMTQ3MTAxMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM2OTY2NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIExSVSBSZWNsYWltIENvc3QgVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQgZnVuZGFtZW50YWxseSB0d2Vha3MgdGhlIExSVSByZWNsYWltIGNvc3QgdHJhY2tpbmcgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBhcyBpdCB0b3VjaGVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5IGFuZCBwYWdlcy4gU2VlaW5nIGFzIGl0J3MgYSBjaGFuZ2UgdG8gcGFnZSByZWNsYWltLCBpdCdzIGRlZmluaXRlbHkgaGlnaCBvbiBteSBsaXN0IGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSdyZSBtb3Zpbmcgc29tZSBsb2dpYyBhcm91bmQ7IHNwZWNpZmljYWxseSwgcmVtb3ZpbmcgYGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycWAgYW5kIGBscnVfbm90ZV9jb3N0X3JlZmF1bHRgIGZyb20gYG1tL3N3YXAuY2AuIFRoZXNlIGFyZSB0aGVuIHJlcGxhY2VkIGJ5IGEgbmV3IHN5c3RlbSBpbnRyb2R1Y2VkIGluIGBtbS92bXNjYW4uY2Agd2l0aGluIHRoZSBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgIGZ1bmN0aW9uLiBOZXcgbm9kZSBzdGF0IGl0ZW1zLCBsaWtlIGBQR1JFQ0xBSU1fUEFHRU9VVF9BTk9OYCwgYFBHUkVDTEFJTV9QQUdFT1VUX0ZJTEVgLCBgUEdST1RBVEVfQU5PTmAsIGFuZCBgUEdST1RBVEVfRklMRWAsIGhhdmUgYWxzbyBiZWVuIGFkZGVkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHRoZSBgc3RydWN0IGxydXZlY2AgdG8gcmVwbGFjZSB0aGUgb2xkIGBhbm9uX2Nvc3RgIGFuZCBgZmlsZV9jb3N0YCB3aXRoIGBwcmV2X2Nvc3RgLCBgY29zdF9hY2N1bWAsIGFuZCBgY29zdF9sb2NrYC5cblxuSSdtIG1ha2luZyBhIHF1aWNrIG1lbnRhbCBub3RlIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoZXNlIGFyZTogYG1lbWNnMV9zdGF0X2Zvcm1hdGAsIGBscnV2ZWNfaW5pdGAsIGBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGVgIChhbHRob3VnaCB0aGF0J3MganVzdCBhIGNvbnRleHQgY2hhbmdlKSwgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuXG5cbkdpdmVuIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gc29tZSBrZXkgc3ltYm9scywgbmFtZWx5IGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBhbmQgYHByZXBhcmVfc2Nhbl9jb250cm9sYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIGFuZCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBpbiBgbW0vc3dhcC5jYC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGNvZGUgaW4gYG1tL3Ztc2Nhbi5jYCwgYG1tL3N3YXAuY2AsIGBtbS93b3JraW5nc2V0LmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AsIG15IGludHVpdGlvbiBpcyB0aGF0IGBDT05GSUdfTUVNQ0dgIG1pZ2h0IGJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IGZvciBgbW0vbWVtY29udHJvbC5jYCBhbmQgcG90ZW50aWFsbHkgZm9yIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX01FTUNHYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI0MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjAzLjA4NDA2OTM3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg5NDc5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjcxPXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjkxLVxcdFxcdH0gZWxzZSB7XFxubW0vbWVtY29udHJvbC5jOjI5MjpcXHRcXHRcXHRscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcXG5tbS9tZW1jb250cm9sLmMtMjkzLVxcdFxcdH1cXG4tLVxcbm1tL3N3YXAuYz0xMDc2PXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vc3dhcC5jLTEwOTItXFxubW0vc3dhcC5jOjEwOTM6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3N3YXAuYy0xMDk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MDMuMzYzMDIxNzUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMTc1OTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIHJlcGFyZW50ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYG1lbWNnYCAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIGBtbS9zd2FwLmNgIGZpbGUgbWlnaHQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJdCdzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIGNvcmUgc3dhcHBpbmcgbG9naWMsIGFuZCByZXBhcmVudGluZywgYXQgbGVhc3QgY29uY2VwdHVhbGx5LCBmZWVscyByZWxhdGVkIHRvIG1vdmluZyBtZW1vcnkgYXJvdW5kLiBUaGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSByZXBhcmVudGluZyBsb2dpYywgcGFydGljdWxhcmx5IHRoZSBgbHJ1X3JlcGFyZW50X21lbWNnYCBmdW5jdGlvbiwgaXMgY29uZGl0aW9uYWwuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGl0J3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIEl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIGNvbnRleHQgZGVwZW5kZW5jaWVzLCB3aGljaCwgZGVwZW5kaW5nIG9uIHRoZSBjb25kaXRpb25zIGl0IGFwcGxpZXMgdG8sIG1heSBjaGFuZ2UgaG93IG1lbW9yeSBvcGVyYXRpb25zIHdvcmsgaW4gdGhvc2UgY29udGV4dHMuIFNvLCBpdCdzIGEgY3JpdGljYWwgcGF0aCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb250ZXh0cyBhcmUgaGFuZGxlZC4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MDYuODc0NzgyNzA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODA4Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmM9MTA3Nj1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL3N3YXAuYy0xMDkyLVxcbm1tL3N3YXAuYzoxMDkzOnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS9zd2FwLmMtMTA5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjA2LjkzMDU5NzEyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTA1Njk4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE1lbWNnIEludGVyYWN0aW9ucyB3aXRoIExSVSBSZXBhcmVudGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgbW0vc3dhcC5jYCBoYW5kbGVzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgbWVtb3J5IGNncm91cHMgKG1lbWNncykgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2sg4oCTIGEgcHJlcHJvY2Vzc29yIGAjaWZkZWYgQ09ORklHX01FTUNHYCDigJMgc3Vycm91bmRpbmcgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBtZW1jZ3MgcHJvZm91bmRseSBhbHRlciBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGhvdyBvYmplY3RzIGFyZSByZXBhcmVudGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0aGF0IGlmIG1lbWNncyBhcmUgYWN0aXZlLCB0aGUgaGFuZGxpbmcgb2YgdGhlIExSVSByZXBhcmVudGluZyBsb2dpYyBsaWtlbHkgbmVlZHMgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIGNvcnJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBjZ3JvdXAtYmFzZWQgcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgbGltaXRhdGlvbnMuIFRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd291bGQgYmUgdGhlIHRlbGwuIEl0IGNvdWxkIGluZGljYXRlIHRoYXQgZGlmZmVyZW50IHN0cmF0ZWdpZXMgYXJlIGVtcGxveWVkIG9yIHRoYXQgY2VydGFpbiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkZXBlbmRpbmcgb24gdGhlIG1lbWNnIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIExSVSByZXBhcmVudGluZyBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IHVuZGVyIGEgbWVtY2cgZW52aXJvbm1lbnQsIGFuZCB0aGUgaWZkZWYgaXMgdGhlIGRpcmVjdCB3YXkgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoxMC42ODExNjg1MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MDU5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmM9MTA2Mz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9zd2FwLmMtMTA3NC1cXG5tbS9zd2FwLmM6MTA3NTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc3dhcC5jLTEwNzYtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjEwLjczNjU3OTA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjE2OTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZWlyIGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHNvdXJjZS4gUmlnaHQsIGBscnVfcmVwYXJlbnRfbWVtY2dgLi4uIHRoYXQncyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBDb25maXJtZWQuIE5vdywgbGV0J3Mgc2VlLCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLi4uIHllcCwgdGhhdCdzIHR1Y2tlZCBhd2F5IGluIGBtbS92bXNjYW4uY2AuIEFuZCB0aGF0IG1ha2VzIHNlbnNlLCBnaXZlbiBpdHMgcm9sZS4gV2hpbGUgSSdtIGhlcmUsIEkgbWlnaHQgYXMgd2VsbCBub3RlIHRoYXQgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlICphbHNvKiBpbiBgbW0vdm1zY2FuLmNgLCB3aGljaCBmZWVscyByaWdodCwgb2YgY291cnNlLiBGaW5hbGx5LCBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBpbiBgbW0vd29ya2luZ3NldC5jYC4gR290IGl0LlxuXG5Ob3csIGxldCdzIGFjdHVhbGx5IGRpZyBpbnRvIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgKnRoYXQqIGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc2Nhbm5pbmcgYW5kIHJlY2xhbWF0aW9uIHByb2Nlc3MuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoxNC40MTI3NTA2NzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDA4MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIyNzk9ZW51bSBzY2FuX2JhbGFuY2Uge1xcbi0tXFxubW0vdm1zY2FuLmMtMjI4NS1cXG5tbS92bXNjYW4uYzoyMjg2OnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTIyODcte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMTUtXFxubW0vdm1zY2FuLmM6NjIxNjpcXHRwcmVwYXJlX3NjYW5fY29udHJvbChwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjE0LjQ2Nzc2MzYyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg4MjI4Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHByZXBhcmVfc2Nhbl9jb250cm9sYCdzIENvbmZpZ3VyZWQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjb25maWd1cmVkLCBpZiBhdCBhbGwuIElzIGl0IG9wZXJhdGluZyB3aXRoIHNvbWUgc3BlY2lmaWMsIGluaGVyaXRlZCBjb250ZXh0PyBEb2VzIGl0IHJlbHkgb24gYSBjb25maWd1cmF0aW9uIHNldCBhdCBhIGhpZ2hlciBsZXZlbCwgbWF5YmUgYSBnbG9iYWwsIG1vZHVsZSwgb3IgZXZlbiBhbiBhcHBsaWNhdGlvbi13aWRlIHNldHRpbmc/IEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHdoZXRoZXIgdGhpcyBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGd1aWRlZCwgY29udHJvbGxlZCBvciBjdXN0b21pemVkIGJ5IGEgY29uZmlndXJhdGlvbiBpdGVtLCBwb3NzaWJseSB3aXRoaW4gYW4gb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzeXN0ZW0uIElmIGl0IGlzLCBrbm93aW5nIHRoZSBzY29wZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gKGdsb2JhbCwgbW9kdWxlLWxldmVsLCBldGMuKSB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGFuZCBkZWJ1Z2dpbmcgaXRzIGJlaGF2aW9yLiBUaGUgbGV2ZWwgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGluZmx1ZW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGltcG9ydGFudC4gQW5kIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhhdCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoxNy40NTU5OTQ0MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzcwNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIyNzk9ZW51bSBzY2FuX2JhbGFuY2Uge1xcbi0tXFxubW0vdm1zY2FuLmMtMjI4NS1cXG5tbS92bXNjYW4uYzoyMjg2OnN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb250cm9sKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTIyODcte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE5Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyMTUtXFxubW0vdm1zY2FuLmM6NjIxNjpcXHRwcmVwYXJlX3NjYW5fY29udHJvbChwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYyMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjE3LjUxMDc2ODg4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwMjM3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBjb25jaXNlIHN1bW1hcnkgZm9yIGFuIGV4cGVydCBjb2xsZWFndWU6XG5cbioqQ29yZSB2bXNjYW4gRGl2ZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGJhc2Ugdm1zY2FuIGNvZGUgaGVyZSwgbm90aGluZyBmYW5jeS4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGltbWVkaWF0ZSBmb2N1cyBoYXMgdG8gYmUgb24gYHNocmlua19hY3RpdmVfbGlzdGAgYW5kIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIFRob3NlIGFyZSB0aGUgd29ya2hvcnNlczsgdGhleSBhcmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gVGhleSBhcmUgd2hlcmUgd2UgbmVlZCB0byBzdGFydCBkaXNzZWN0aW5nIHRoaXMgaXNzdWUgYW5kIHRyYWNraW5nIGRvd24gdGhlIHJvb3QgY2F1c2UuIEV2ZXJ5dGhpbmcgZWxzZSBoaW5nZXMgb24gdW5kZXJzdGFuZGluZyB0aG9zZSB0d28gcm91dGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjoyMC45MTEwMDgyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODAzNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19hY3RpdmVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0xOTg2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNTQtLypcXG5tbS92bXNjYW4uYzoyMDU1OiAqIHNocmlua19hY3RpdmVfbGlzdCgpIG1vdmVzIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUgTFJVIHRvIHRoZSBpbmFjdGl2ZSBMUlUuXFxubW0vdm1zY2FuLmMtMjA1Ni0gKlxcbi0tXFxubW0vdm1zY2FuLmMtMjA3MC0gKi9cXG5tbS92bXNjYW4uYzoyMDcxOnN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjA3Mi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmM9MjIxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjIyMi1cXHRcXHRpZiAoc2MtXFx1MDAzZW1heV9kZWFjdGl2YXRlIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaXNfZmlsZV9scnUobHJ1KSkpXFxubW0vdm1zY2FuLmM6MjIyMzpcXHRcXHRcXHRzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcXG5tbS92bXNjYW4uYy0yMjI0LVxcdFxcdGVsc2VcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODY9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yMzA3LVxcdCAqXFx0UEdST1RBVEVcXHQgICAtIHJlY2xhaW0tZHJpdmVuIHJvdGF0aW9ucywgYnVtcGVkIGZyb20gYm90aFxcbm1tL3Ztc2Nhbi5jOjIzMDg6XFx0ICpcXHRcXHRcXHQgICAgIHNocmlua19pbmFjdGl2ZV9saXN0IGFuZCBzaHJpbmtfYWN0aXZlX2xpc3RcXG5tbS92bXNjYW4uYy0yMzA5LVxcdCAqXFx0XFx0XFx0ICAgICAoQ1BVIHdvcmspLlxcbi0tXFxubW0vdm1zY2FuLmM9NTkyMz1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDM5LVxcdCAgICBpbmFjdGl2ZV9pc19sb3cobHJ1dmVjLCBMUlVfSU5BQ1RJVkVfQU5PTikpXFxubW0vdm1zY2FuLmM6NjA0MDpcXHRcXHRzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgbHJ1dmVjLFxcbm1tL3Ztc2Nhbi5jLTYwNDEtXFx0XFx0XFx0XFx0ICAgc2MsIExSVV9BQ1RJVkVfQU5PTik7XFxuLS1cXG5tbS92bXNjYW4uYz02ODYwPXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4ODItXFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG5tbS92bXNjYW4uYzo2ODgzOlxcdFxcdHNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCBscnV2ZWMsXFxubW0vdm1zY2FuLmMtNjg4NC1cXHRcXHRcXHRcXHQgICBzYywgTFJVX0FDVElWRV9BTk9OKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MjAuOTY5ODE2ODU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MjA2ODg0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCB0YXJnZXRzIGZvciBmdXp6aW5nOiBgcHJlcGFyZV9zY2FuX2NvbnRyb2xgLCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2F0ZWdvcml6ZSB0aGVtLiBIbW0sIGBwcmVwYXJlX3NjYW5fY29udHJvbGAsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgU3l6a2FsbGVyIGlzIGNvdmVyYWdlLWZvY3VzZWQuIExpc3Rpbmcgc3RhdGljIGZ1bmN0aW9ucyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLCBzaW5jZSBTeXprYWxsZXIgdXNlcyB0aGVpciBhZGRyZXNzZXMuIFRoYXQgb3BlbnMgdXAgYSB3aG9sZSBzZXQgb2YgcG9zc2liaWxpdGllcywgZG9lc24ndCBpdD8gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBJIHRoaW5rIGBwcmVwYXJlX3NjYW5fY29udHJvbGAgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBjYW5kaWRhdGUuXG5cbk5vdywgYHdvcmtpbmdzZXRfcmVmYXVsdGAuIEFoLCB0aGlzIG9uZSBpcyBleHBvcnRlZCwgaXQncyBnbG9iYWwuIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQncyBhY3R1YWxseSB0cnVlLCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGdvb2QgdG8gdmVyaWZ5IHRoYXQgZ2xvYmFsIHN0YXR1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MjUuNjkwNTA3MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjQzMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS93b3JraW5nc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTM5LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo1NDA6ICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01NDctICovXFxubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTU0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjI1Ljc0Nzc1NDQ0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzczMjg3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgYSBnbG9iYWwgdmFyaWFibGUuIFllcCwgY29uZmlybWVkLCBpdCBpcy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGF0Y2guIExldCdzIHNlZS4uLiBpdCB0b3VjaGVzIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vbWVtY29udHJvbC12MS5jYC4uLiBjbGVhcmx5LCBtZW1vcnkgY29udHJvbCBpcyBpbnZvbHZlZC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgLiBUaGF0J3MgKmRlZmluaXRlbHkqIGdhdGVkIHVuZGVyIGBDT05GSUdfTUVNQ0dgLiBHb29kLiBUaGUgY29kZSBhbHNvIHVzZXMgYHByZXBhcmVfc2Nhbl9jb250cm9sYCB3aGljaCwgaW4gdHVybiwgbWFrZXMgdXNlIG9mIGB0YXJnZXRfbHJ1dmVjLVx1MDAzZWNvc3RfYWNjdW1gIOKAkyBhbmQgdGhhdCBsaXZlcyBpbiBgc3RydWN0IGxydXZlY2AuIEhtbSwgYHN0cnVjdCBscnV2ZWNgIGlzIHBhcnQgb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0J3MgZGVmaW5lZCBhbmQgdXNlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gSG93ZXZlciwgbWVtY2cgaXMgdGhlIHByaW1hcnkgY29uc3VtZXIgb2YgdGhlIG11bHRpLUxSVSB2ZWN0b3IgZnVuY3Rpb25hbGl0eS4gU28sIGl0IGlzIG1vc3QgbGlrZWx5IHNhZmUgdG8gaW5jbHVkZSBgQ09ORklHX01FTUNHYC5cblxuTmV4dCB1cCwgYENPTkZJR19TV0FQYC4gVGhlIHBhdGNoIGRvZXMgc29tZSB3b3JrIHRvIGBtbS9zd2FwLmNgLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGBtbS9zd2FwLmNgIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYENPTkZJR19TV0FQYCBpcyBlbmFibGVkLiBMZXQncyBkb3VibGUgY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IGBtbS9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGNvbmRpdGlvbmFsIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MzMuMTIxMDQzNzgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE4NDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxubW0vTWFrZWZpbGU6NTM6XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxcXFxubW0vTWFrZWZpbGUtNTQtXFx0XFx0XFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1MjozMy4xNzYyMzI0NThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNTgyMzQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgc3dhcC5vYCBhbmQgYENPTkZJR19NRU1DR2AgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBzd2FwLm9gIGlzIGFsd2F5cyBjb21waWxlZC4gVGhhdCdzIGEgZ2l2ZW47IGl0J3MgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGV2ZW4gaWYgc3dhcHBpbmcgaXMgZGlzYWJsZWQgYXQgcnVudGltZS4gSXTigJlzIHRoZSBmb3VuZGF0aW9uYWwgY29tcG9uZW50LiBCdXQsIHdoYXQncyBnb3QgbWUgdGhpbmtpbmcgaXMgdGhlIGludGVycGxheSB3aXRoIGBDT05GSUdfTUVNQ0dgLiBJZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFuZCBzd2FwIGhhdmUgc29tZSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBjb25kaXRpb25hbGl0aWVzLiBJcyB0aGVyZSBhIGRlcGVuZGVuY3kgcGF0aCBJJ20gbWlzc2luZz8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXJlIHRoZXJlIGFueSBmZWF0dXJlcyBpbiBgc3dhcC5vYCB0aGF0IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgPyBUaGlzIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSwgYmVoYXZpb3IsIGFuZCBzZWN1cml0eS4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgc2VlIGlmIHRoaXMgaW1wYWN0cyB0aGUgc2VjdXJpdHkgb2YgdGhlIGtlcm5lbC4gSSBtYXkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIGFuZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBzbmlwcGV0cyB0byBiZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHByb3Blcmx5LiBJIHN1c3BlY3QgdGhpcyBpcyBzb21ldGhpbmcgSSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJldmlld2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjM3LjUxMjA1NzgwMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NTg5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6MzcuNTY2NzIxOTY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTkxODQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIE1lbWNnIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbi4gSSBjYW4gc2VlIHRoYXQgYG1lbWNvbnRyb2wub2AgYW5kIGBtZW1jb250cm9sLXYxLm9gIGRlZmluaXRlbHkgbmVlZCBib3RoIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLiBDb250cm9sIGdyb3Vwcywgc3BlY2lmaWNhbGx5IG1lbW9yeSBjb250cm9sLCBhcmUgY29yZSB0byBhIGxvdCBvZiBtb2Rlcm4gcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcgdGhhdCdzIGJlZW4gb24gbXkgbWluZC4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdHVhbGx5IGEgdmFsaWQgYW5kIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBkb24ndCB3YW50IHRvIGNoYXNlIG15IHRhaWwgaWYgdGhhdCdzIGJlZW4gZGVwcmVjYXRlZCBvciByZW5hbWVkIGluIGEgcmVjZW50IGtlcm5lbCB1cGRhdGUsIG9yIGlzbid0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBjYXVzaW5nIHVuZXhwZWN0ZWQgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIG9yIHRoZSBidWlsZCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1Mjo0Mi4yMjU5MDc2NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDY5NDk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dfVjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6NDIuMjc5OTgzMzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjcwNjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgTUVNQ0dfVjFgIEtjb25maWcgb3B0aW9uIGlzIGRlZmluZWQuIFRoYXQncyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBrZXJuZWwgZmVhdHVyZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBvcHRpb25zLiBgaW5pdC9LY29uZmlnYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0IG9mdGVuIGhhbmRsZXMgY29yZSBpbml0aWFsaXphdGlvbiBhbmQgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbnMuIEJ1dCwgZ2l2ZW4gdGhhdCBgTUVNQ0dfVjFgIHNjcmVhbXMgbWVtb3J5IG1hbmFnZW1lbnQsIEknbSBsZWFuaW5nIG1vcmUgdG93YXJkcyBgbW0vS2NvbmZpZ2AgcmlnaHQgYXdheS4gSXQncyB0aGUgbW9yZSBsb2dpY2FsIGhvbWUgZm9yIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBpdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQuIEknbGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gZmlsZXMsIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjQ2LjYxMjY5MjI4NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMTI3NjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dfVjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDg5PWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTUtXFxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwOTctXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTI6NDkuMTIzOTczNzIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDUxMDk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSByZWNvZ25pemUgdGhvc2UgYXMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgZmxhZ3Mgd2UgdXNlIHRvIGJ1aWxkIHRoZSBrZXJuZWwgd2l0aCBvciB3aXRob3V0IHNwZWNpZmljIGZlYXR1cmVzIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMuXG5cbk5vdywgSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRWAgaXMgY29uc2lzdGVudGx5IGRlZmluZWQgYWNyb3NzIGRpZmZlcmVudCBidWlsZHMgb3Igc2NlbmFyaW9zLiBUaGlzIGlzIGEgY29tbW9uIHNpdHVhdGlvbiBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSdsbCBzZWUgaWYgaXQncyBhbHdheXMgaW5jbHVkZWQuIElmIGl0IGlzbid0IGRlZmluZWQgZXZlcnl3aGVyZSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IGFuZCBpZiBpdCBoYXMgYW55IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxODo1Mjo1My44MjkwODYzNjZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTkyODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MjM2PWVudW0gbm9kZV9zdGF0X2l0ZW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yNTMtXFx0V09SS0lOR1NFVF9BQ1RJVkFURV9GSUxFLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MjU0OlxcdFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFLFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MjU1OlxcdFdPUktJTkdTRVRfUkVTVE9SRV9BTk9OID0gV09SS0lOR1NFVF9SRVNUT1JFX0JBU0UsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0yNTYtXFx0V09SS0lOR1NFVF9SRVNUT1JFX0ZJTEUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE4OjUyOjU0LjA1NTAxOTk5NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjI1Mzg0NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgcmVjbGFpbSBsb2dpYywgc28gdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIHByaW9yaXRpemVzIHNjYW5uaW5nIHRoZSBhbm9ueW1vdXMgdmVyc3VzIGZpbGUgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBsaXN0cy4gVGhpcyBraW5kIG9mIGJhbGFuY2UgY2hhbmdlIGNhbiBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBvZiBjb3Vyc2UsIHN0YWJpbGl0eS4gVGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uIC0gdGhpcyBpcyBnb2luZyB0byBiZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB0byBjb25zaWRlcjogYHByZXBhcmVfc2Nhbl9jb250cm9sYCwgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AuIEkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCBlYWNoIG9mIHRoZW0gdG8gbWFrZSBzdXJlIHRoZSBuYW1lcyBhcmUgYWNjdXJhdGUsIGFuZCB0aGV5IGFyZS4gVGhlIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCwgd2hpY2ggc3VnZ2VzdHMgdGhpcyBwYXRjaCBtaWdodCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBjZ3JvdXBzLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29zdCB0cmFja2luZyBmb3IgTFJVIHJlY2xhaW0sIGludHJvZHVjaW5nIG5ldyBub2RlIHN0YXRzIGFuZCBtb2RpZnlpbmcgdGhlIGJhbGFuY2UgYmV0d2VlbiBhbm9ueW1vdXMgYW5kIGZpbGUgTFJVIHNjYW5zLiBUaGF0J3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSwgYW5kIGl0IGNvdWxkIHZlcnkgd2VsbCBpbXBhY3QgcGVyZm9ybWFuY2UgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB3aGljaCBtZWFucyBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHRoZSBlZmZlY3RzLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIwOSwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTg6NTM6MDIuMjgwNDA3MDE0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3NDQzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByZXBhcmVfc2Nhbl9jb250cm9sXCIsXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIixcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBMUlUgcmVjbGFpbSBjb3N0IHRyYWNraW5nIG1lY2hhbmlzbSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgbmV3IG5vZGUgc3RhdCBpdGVtcyBhbmQgY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBiYWxhbmNlcyBzY2FubmluZyBiZXR3ZWVuIGFub255bW91cyBhbmQgZmlsZSBMUlVzIGR1cmluZyBwYWdlIHJlY2xhaW0uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJlcGFyZV9zY2FuX2NvbnRyb2xcIixcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICAgIFwibHJ1X3JlcGFyZW50X21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIExSVSByZWNsYWltIGNvc3QgdHJhY2tpbmcgbWVjaGFuaXNtIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBuZXcgbm9kZSBzdGF0IGl0ZW1zIGFuZCBjaGFuZ2VzIGhvdyB0aGUga2VybmVsIGJhbGFuY2VzIHNjYW5uaW5nIGJldHdlZW4gYW5vbnltb3VzIGFuZCBmaWxlIExSVXMgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsn5jc[1] Phase: Succeeded StartedAt: 2026-07-06 18:54:48 +0000 UTC FinishedAt: 2026-07-06 18:54:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 18:54:48 +0000 UTC FinishedAt: 2026-07-06 18:54:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2] Phase: Succeeded StartedAt: 2026-07-06 18:54:48 +0000 UTC FinishedAt: 2026-07-06 23:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 18:54:48 +0000 UTC FinishedAt: 2026-07-06 23:04:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 18:54:48 +0000 UTC FinishedAt: 2026-07-06 18:55:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 18:54:48 +0000 UTC FinishedAt: 2026-07-06 18:55:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowsn5jc/series-workflowsn5jc-convert-artifact-1625936575/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 18:55:13 +0000 UTC FinishedAt: 2026-07-06 19:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 18:55:13 +0000 UTC FinishedAt: 2026-07-06 19:26:49 +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:*70f060d8-953f-40fe-a0f6-22b21229304d,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-workflowsn5jc/series-workflowsn5jc-convert-artifact-1625936575/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": "907567a1-9b4d-4fb7-9d4b-d34bfd66b916", "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-workflowsn5jc/series-workflowsn5jc-build-action-2675039557/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 18:55:13 +0000 UTC FinishedAt: 2026-07-06 19:26:39 +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:*70f060d8-953f-40fe-a0f6-22b21229304d,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-workflowsn5jc/series-workflowsn5jc-convert-artifact-1625936575/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": "907567a1-9b4d-4fb7-9d4b-d34bfd66b916", "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-workflowsn5jc/series-workflowsn5jc-build-action-2675039557/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 19:26:49 +0000 UTC FinishedAt: 2026-07-06 19:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 19:26:49 +0000 UTC FinishedAt: 2026-07-06 19:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 19:26:49 +0000 UTC FinishedAt: 2026-07-06 19:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 19:26:49 +0000 UTC FinishedAt: 2026-07-06 19:26:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowsn5jc/series-workflowsn5jc-convert-artifact-256094926/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 19:27:10 +0000 UTC FinishedAt: 2026-07-06 19:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 19:27:10 +0000 UTC FinishedAt: 2026-07-06 19:29:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*907567a1-9b4d-4fb7-9d4b-d34bfd66b916,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-workflowsn5jc/series-workflowsn5jc-build-action-2675039557/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-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 19:29:45 +0000 UTC FinishedAt: 2026-07-06 19:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 19:29:45 +0000 UTC FinishedAt: 2026-07-06 19:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 19:29:45 +0000 UTC FinishedAt: 2026-07-06 19:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 19:29:45 +0000 UTC FinishedAt: 2026-07-06 19:59:04 +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:*70f060d8-953f-40fe-a0f6-22b21229304d,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-workflowsn5jc/series-workflowsn5jc-convert-artifact-256094926/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": "dcab6e3b-dd69-41c7-8d97-4c4c22002dde", "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-workflowsn5jc/series-workflowsn5jc-build-action-578442338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 19:29:45 +0000 UTC FinishedAt: 2026-07-06 19:58:42 +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:*70f060d8-953f-40fe-a0f6-22b21229304d,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-workflowsn5jc/series-workflowsn5jc-convert-artifact-256094926/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": "dcab6e3b-dd69-41c7-8d97-4c4c22002dde", "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-workflowsn5jc/series-workflowsn5jc-build-action-578442338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 19:59:04 +0000 UTC FinishedAt: 2026-07-06 19:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 19:59:04 +0000 UTC FinishedAt: 2026-07-06 19:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 19:59:04 +0000 UTC FinishedAt: 2026-07-06 20:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 19:59:04 +0000 UTC FinishedAt: 2026-07-06 20:01:04 +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:*dcab6e3b-dd69-41c7-8d97-4c4c22002dde,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-workflowsn5jc/series-workflowsn5jc-build-action-578442338/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-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 20:01:14 +0000 UTC FinishedAt: 2026-07-06 23:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 20:01:14 +0000 UTC FinishedAt: 2026-07-06 23:04:24 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},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:*907567a1-9b4d-4fb7-9d4b-d34bfd66b916,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dcab6e3b-dd69-41c7-8d97-4c4c22002dde,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-workflowsn5jc/series-workflowsn5jc-build-action-2675039557/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-workflowsn5jc/series-workflowsn5jc-build-action-578442338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 20:01:14 +0000 UTC FinishedAt: 2026-07-06 20:01:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 20:01:14 +0000 UTC FinishedAt: 2026-07-06 20:01:20 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},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-workflowsn5jc/series-workflowsn5jc-convert-artifact-3790075379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 20:01:14 +0000 UTC FinishedAt: 2026-07-06 20:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 20:01:14 +0000 UTC FinishedAt: 2026-07-06 20:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 20:01:14 +0000 UTC FinishedAt: 2026-07-06 20:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 20:01:24 +0000 UTC FinishedAt: 2026-07-06 23:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsn5jc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["prepare_scan_control","shrink_inactive_list","shrink_active_list","workingset_refault","lru_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"05fd5fdf-a674-4bd8-bf21-86ec014221ce","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 20:01:24 +0000 UTC FinishedAt: 2026-07-06 23:04:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*907567a1-9b4d-4fb7-9d4b-d34bfd66b916,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dcab6e3b-dd69-41c7-8d97-4c4c22002dde,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-workflowsn5jc/series-workflowsn5jc-build-action-2675039557/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-workflowsn5jc/series-workflowsn5jc-build-action-578442338/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-workflowsn5jc/series-workflowsn5jc-convert-artifact-3790075379/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,}