Name: series-workflow4mcbz Phase: Succeeded StartedAt: 2026-07-20 10:55:44 +0000 UTC FinishedAt: 2026-07-20 13:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[0] Phase: Succeeded StartedAt: 2026-07-20 10:55:44 +0000 UTC FinishedAt: 2026-07-20 11:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 10:55:44 +0000 UTC FinishedAt: 2026-07-20 11:31:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "999f4cef-6328-4284-a036-c06f024eba95" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "do_secure_storage_access", "uv_alloc_stor_var", "uv_free_stor_var", "uv_alloc_range_cb", "uv_free_range_cb", "ex_handler_zeropad" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt1dl9hbGxvY19zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDt1dl9mcmVlX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2FsbG9jX3JhbmdlX2NiJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfcmFuZ2VfY2ImIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgRENBQ0hFX1dPUkRfQUNDRVNTIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgYW5kIGl0cyBleGNlcHRpb24gaGFuZGxlciBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gSXQgYWxzbyBtb2RpZmllcyBLVk0gUFYgdmFyaWFibGUgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIHVzZSBuZXcgYHV2X2FsbG9jX3N0b3JfdmFyYCBhbmQgYHV2X2ZyZWVfc3Rvcl92YXJgIGZ1bmN0aW9ucywgYW5kIHVwZGF0ZXMgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgdG8gaGFuZGxlIGtlcm5lbCBmYXVsdHMgY29ycmVjdGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZywgYXMgd2VsbCBhcyBLVk0sIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBWRlMgb3BlcmF0aW9ucyBhbmQgS1ZNIFZNIGxpZmVjeWNsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljMDQ1OTU1ZWM2MmY1MDM3YjViYmY4MTQ0MTg1NWUyZWQ0ZDU4ODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxMTozMDowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZmU4MWM1MzllZjJmZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNjMsNiAmIzQzOzE2Myw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxuIFx0c2VsZWN0IEJVSUxEVElNRV9UQUJMRV9TT1JUXG4gXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxuJiM0MztcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOXG4gXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4gXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzhCIGlmIENDX0lTX0dDQ1xuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXHQzXG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHXHQ1XG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUlx0NlxuJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRFx0XHQ3XG4gI2RlZmluZSBFWF9UWVBFX0ZQQ1x0XHQ4XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPXHQ5XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX0ZST01cdDEwXG5AQCAtNzksNiAmIzQzOzgwLDkgQEBcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApXG4gXG4mIzQzOyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcdFx0XFxcbiYjNDM7XHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9aRVJPUEFELCBfcmVnZGF0YSwgX3JlZ2FkZHIsIDApXG4mIzQzO1xuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcdFx0XHRcdFx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuQEAgLTYzNSw2ICYjNDM7NjM1LDggQEAgaW50IHMzOTBfd2lnZ2xlX3NwbGl0X2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKTtcbiBcbiB2b2lkIHNldHVwX3V2KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLWV4dGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9iaXRzcGVybG9uZy5oXHUwMDNlXG4gXG4gc3RydWN0IHdvcmRfYXRfYV90aW1lIHtcbkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuIFx0cmV0dXJuIH4xVUwgXHUwMDNjXHUwMDNjIGRhdGE7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBMb2FkIGFuIHVuYWxpZ25lZCB3b3JkIGZyb20ga2VybmVsIHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXJcbiYjNDM7ICogYW5kIHRoZSBuZXh0IHBhZ2Ugbm90IGJlaW5nIG1hcHBlZCwgdGFrZSB0aGUgZXhjZXB0aW9uIGFuZFxuJiM0MzsgKiByZXR1cm4gemVyb2VzIGluIHRoZSBub24tZXhpc3RpbmcgcGFydC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGNvbnN0IHZvaWQgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRhdGE7XG4mIzQzO1xuJiM0MztcdGFzbV9pbmxpbmUgdm9sYXRpbGUoXG4mIzQzO1x0XHRcJiMzNDswOlx0bGdcdCVbZGF0YV0sMCglW2FkZHJdKVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7MTpcdG5vcHJcdCUlcjdcXG5cJiMzNDtcbiYjNDM7XHRcdEVYX1RBQkxFX1pFUk9QQUQoMGIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuJiM0MztcdFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXG4mIzQzO1x0XHQ6IFtkYXRhXSBcJiMzNDs9ZFwmIzM0OyAoZGF0YSlcbiYjNDM7XHRcdDogW2FkZHJdIFwmIzM0O2FcJiMzNDsgKGFkZHIpLCBcJiMzNDttXCYjMzQ7ICgqKHVuc2lnbmVkIGxvbmcgKilhZGRyKSk7XG4mIzQzO1x0cmV0dXJuIGRhdGE7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhwZm5fZm9saW8ocHRlX3BmbihwdGUpKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHV2X2ZyZWVfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoXG4mIzQzO1x0ICogYWNjZXNzZXMgdGhlIG1lbW9yeSByYW5nZSwgYmVzaWRlcyBidWdzLiBUaGUgaW52YWxpZGF0aW9uIG9mIHB0ZXNcbiYjNDM7XHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX2ZyZWVfcGFnZShwdGVfcGFnZShwdGUpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyLCBzaXplO1xuJiM0MztcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XG4mIzQzO1xuJiM0MztcdGlmICghc3Rvcl92YXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYXJlYSB8fCAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1NQQVJTRSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xuJiM0MztcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4mIzQzO1x0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9mcmVlX3JhbmdlX2NiLCBOVUxMKTtcbiYjNDM7XHRmcmVlX3ZtX2FyZWEoYXJlYSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyh1dl9mcmVlX3N0b3JfdmFyLCBcJiMzNDtrdm1cJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0cHRlX3QgcHRlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4mIzQzO1x0YXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX1NQQVJTRSk7XG4mIzQzO1x0aWYgKCFhcmVhKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbiYjNDM7XHRpZiAoYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXR1cm4gYXJlYS1cdTAwM2VhZGRyO1xuJiM0MztvdXQ6XG4mIzQzO1x0dXZfZnJlZV9zdG9yX3ZhcihhcmVhLVx1MDAzZWFkZHIpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwmIzM0O2t2bVwmIzM0Oyk7XG4mIzQzO1xuIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCByZWZfY291bnQgZm9yIGEgZm9saW8gdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBub1xuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NTAuLmRjNWFjMjliNGMzMTE4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0zMzcsNyAmIzQzOzMzNyw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0dmZyZWUoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuIFx0ZnJlZV9wYWdlcyhrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4gXHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKGt2bSk7XG5AQCAtMzY5LDcgJiM0MzszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2FsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdC8qIEFsbG9jYXRlIHZhcmlhYmxlIHN0b3JhZ2UgKi9cbiBcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XG4gXHR2bGVuICYjNDM7PSB1dl9pbmZvLmd1ZXN0X3ZpcnRfYmFzZV9zdG9yX2xlbjtcbi1cdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDE0LDcgJiM0Mzs0MTQsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqL1xuIFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cdTAwM2VzdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlb2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpO1xuLVx0dmZyZWUobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuIGRvbmVfZmFzdDpcbiBcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZW1tLVx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5pbmRleCAwNjNiNDM0Njc0MmQ5Ni4uNzQ5OGU4NThjNDAxOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5AQCAtNTAsNiAmIzQzOzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGV4X2hhbmRsZXJfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmVnX2FkZHIgPSBGSUVMRF9HRVQoRVhfREFUQV9SRUdfQUREUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlZ19kYXRhID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0VSUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSByZWdzLVx1MDAzZWdwcnNbcmVnX2FkZHJdO1xuJiM0MztcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRhZGRyIFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRkYXRhID0gKih1bnNpZ25lZCBsb25nICopYWRkcjtcbiYjNDM7XHRkYXRhIFx1MDAzY1x1MDAzYz0gQklUU19QRVJfQllURSAqIG9mZnNldDtcbiYjNDM7XHRyZWdzLVx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcbiYjNDM7XHRyZWdzLVx1MDAzZXBzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZXhfaGFuZGxlcl9mcGMoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdGZwdV9zZnBjKDApO1xuQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XG4mIzQzO1x0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG4mIzQzO1x0XHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9GUEM6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTVZDT1NfVE86XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjY2NmZlOGU5OTQ4MDE5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDA5LDkgJiM0Mzs0MDksOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHR1bmlvbiB0ZWlkIHRlaWQgPSB7IC52YWwgPSByZWdzLVx1MDAzZWludF9wYXJtX2xvbmcgfTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgcmM7XG4gXG5AQCAtNDI3LDEwICYjNDM7NDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdCAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlXG4gXHRcdCAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC5cbiBcdFx0ICovXG4tXHRcdGlmICh1c2VyX21vZGUocmVncykpIHtcbi1cdFx0XHRzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbiYjNDM7XHRcdGlmICh1c2VyX21vZGUocmVncykpXG4mIzQzO1x0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfQUNDRVJSKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlIGtlcm5lbCBzaG91bGQgbmV2ZXIgcnVuIGludG8gdGhpcyBjYXNlIGFuZFxuIFx0XHQgKiB0aGVyZSBpcyBubyB3YXkgb3V0IG9mIHRoaXMgc2l0dWF0aW9uLlxuQEAgLTQzOCwxMyAmIzQzOzQzNiw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRwYW5pYyhcJiMzNDtVbmV4cGVjdGVkIFBHTSAweDNkIHdpdGggVEVJRCBiaXQgNjE9MFwmIzM0Oyk7XG4gXHR9XG4gXHRpZiAoaXNfa2VybmVsX2ZhdWx0KHJlZ3MpKSB7XG4tXHRcdGZvbGlvID0gdmlydF90b19mb2xpbygodm9pZCAqKWFkZHIpO1xuLVx0XHRpZiAodW5saWtlbHkoIWZvbGlvX3RyeV9nZXQoZm9saW8pKSlcbi1cdFx0XHRyZXR1cm47XG4tXHRcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShmb2xpb190b19waHlzKGZvbGlvKSk7XG4tXHRcdGlmICghcmMpXG4tXHRcdFx0Y2xlYXJfYml0KFBHX2FyY2hfMSwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xuJiM0MztcdFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGVyZSBhcmUgc29tZSB2YWxpZCBmaXh1cCB0eXBlcyBmb3Iga2VybmVsXG4gXHRcdCAqIGFjY2Vzc2VzIHRvIGRvbmF0ZWQgc2VjdXJlIG1lbW9yeS4gemVyb3BhZCBpcyBvbmVcbkBAIC00NTMsMjUgJiM0Mzs0NDcsMjIgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcbiYjNDM7XHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSB8fCAhbW0pXG4gXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4tXHRcdG1tID0gY3VycmVudC1cdTAwM2VtbTtcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4mIzQzO1x0XHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkciwgcmVncyk7XG4gXHRcdGlmICghdm1hKVxuLVx0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9NQVBFUlIpO1xuJiM0MztcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX01BUEVSUik7XG4gXHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKCFmb2xpbylcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHRcdC8qIGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKCkgbmVlZHMgYSByYWlzZWQgcmVmY291bnQuICovXG4gXHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdHJjID0gYXJjaF9tYWtlX2ZvbGlvX2FjY2Vzc2libGUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbiBcdFx0aWYgKHJjKVxuLVx0XHRcdHNlbmRfc2lnKFNJR1NFR1YsIGN1cnJlbnQsIDApO1xuJiM0MztcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfQUNDRVJSKTtcbiYjNDM7b3V0OlxuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdH1cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfYWxsb2NfcmFuZ2VfY2ImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9yYW5nZV9jYiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX3plcm9wYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzA0NTk1NWVjNjJmNTAzN2I1YmJmODE0NDE4NTVlMmVkNGQ1ODgyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMTE6MzA6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5mZTgxYzUzOWVmMmZmYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE2Myw2ICYjNDM7MTYzLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUAogCXNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVAogCXNlbGVjdCBDTE9ORV9CQUNLV0FSRFMyCiYjNDM7CXNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOCiAJc2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDCiAJc2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaAppbmRleCA5OTc0OGMyMGU3NjcxMy4uZDIzZWEwYzk0ZTRlYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUCTMKICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFRwk1CiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSCTYKJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRAkJNwogI2RlZmluZSBFWF9UWVBFX0ZQQwkJOAogI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPCTkKICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NCTEwCkBAIC03OSw2ICYjNDM7ODAsOSBAQAogI2RlZmluZSBFWF9UQUJMRV9VQV9MT0FEX1JFR1BBSVIoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZXJyLCBfcmVnemVybykJXAogCV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApCiAKJiM0MzsjZGVmaW5lIEVYX1RBQkxFX1pFUk9QQUQoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZGF0YSwgX3JlZ2FkZHIpCQlcCiYjNDM7CV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMCkKJiM0MzsKICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldCkJCQkJCVwKIAlfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9GUEMsIF9fc3RyaW5naWZ5KCUlcjApLCBfX3N0cmluZ2lmeSglJXIwKSwgMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaAppbmRleCBkOTE5ZTY5NjYyZjU4NC4uMTUzZmVkNjNhZGRhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCkBAIC02MzUsNiAmIzQzOzYzNSw4IEBAIGludCBzMzkwX3dpZ2dsZV9zcGxpdF9mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTsKIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIpOwogaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpOwogCiB2b2lkIHNldHVwX3V2KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oCmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2FzbS1leHRhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2JpdHNwZXJsb25nLmgmZ3Q7CiAKIHN0cnVjdCB3b3JkX2F0X2FfdGltZSB7CkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKQogCXJldHVybiB+MVVMICZsdDsmbHQ7IGRhdGE7CiB9CiAKJiM0MzsvKgomIzQzOyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXIKJiM0MzsgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kCiYjNDM7ICogcmV0dXJuIHplcm9lcyBpbiB0aGUgbm9uLWV4aXN0aW5nIHBhcnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGF0YTsKJiM0MzsKJiM0MzsJYXNtX2lubGluZSB2b2xhdGlsZSgKJiM0MzsJCSYjMzQ7MDoJbGcJJVtkYXRhXSwwKCVbYWRkcl0pXG4mIzM0OwomIzQzOwkJJiMzNDsxOglub3ByCSUlcjdcbiYjMzQ7CiYjNDM7CQlFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSkKJiM0MzsJCUVYX1RBQkxFX1pFUk9QQUQoMWIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKQomIzQzOwkJOiBbZGF0YV0gJiMzNDs9ZCYjMzQ7IChkYXRhKQomIzQzOwkJOiBbYWRkcl0gJiMzNDthJiMzNDsgKGFkZHIpLCAmIzM0O20mIzM0OyAoKih1bnNpZ25lZCBsb25nICopYWRkcikpOwomIzQzOwlyZXR1cm4gZGF0YTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX0FTTV9XT1JEX0FUX0FfVElNRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhY2tpbmctZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDthc20vZmFjaWxpdHkuaCZndDsKICNpbmNsdWRlICZsdDthc20vc2VjdGlvbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vdXYuaCZndDsKQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpCiAJcmV0dXJuIHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8ocGZuX2ZvbGlvKHB0ZV9wZm4ocHRlKSkpOwogfQogCiYjNDM7c3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChwdGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoCiYjNDM7CSAqIGFjY2Vzc2VzIHRoZSBtZW1vcnkgcmFuZ2UsIGJlc2lkZXMgYnVncy4gVGhlIGludmFsaWRhdGlvbiBvZiBwdGVzCiYjNDM7CSAqIGFuZCBUTEIgZmx1c2hpbmcgaXMgZGVmZXJyZWQgbGlrZSBmb3IgcmVndWxhciB2ZnJlZSgpIGNhbGxzLgomIzQzOwkgKi8KJiM0MzsJX19mcmVlX3BhZ2UocHRlX3BhZ2UocHRlKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CiYjNDM7CWlmICghc3Rvcl92YXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWFyZWEgPSBmaW5kX3ZtX2FyZWEoc3Rvcl92YXIpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFhcmVhIHx8ICEoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgVk1fU1BBUlNFKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpOwomIzQzOwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0mZ3Q7YWRkcjsKJiM0MzsJYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGFkZHIsIHNpemUsIHV2X2ZyZWVfcmFuZ2VfY2IsIE5VTEwpOwomIzQzOwlmcmVlX3ZtX2FyZWEoYXJlYSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfZnJlZV9zdG9yX3ZhciwgJiMzNDtrdm0mIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7CiYjNDM7CXNldF9wdGUocHRlcCwgcHRlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcjsKJiM0MzsKJiM0MzsJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiYjNDM7CWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9TUEFSU0UpOwomIzQzOwlpZiAoIWFyZWEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7CiYjNDM7CWlmIChhcHBseV90b19wYWdlX3JhbmdlKCZhbXA7aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfYWxsb2NfcmFuZ2VfY2IsIE5VTEwpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldHVybiBhcmVhLSZndDthZGRyOwomIzQzO291dDoKJiM0MzsJdXZfZnJlZV9zdG9yX3ZhcihhcmVhLSZndDthZGRyKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsICYjMzQ7a3ZtJiMzNDspOwomIzQzOwogLyoKICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgcmVmX2NvdW50IGZvciBhIGZvbGlvIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgbm8KICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpbgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUwLi5kYzVhYzI5YjRjMzExOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHYuYwpAQCAtMzM3LDcgJiM0MzszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovCiBzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQl2ZnJlZShrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpOwomIzQzOwl1dl9mcmVlX3N0b3JfdmFyKGt2bS0mZ3Q7YXJjaC5wdi5zdG9yX3Zhcik7CiAJZnJlZV9wYWdlcyhrdm0tJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAogCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJa3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTsKQEAgLTM2OSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pCiAJLyogQWxsb2NhdGUgdmFyaWFibGUgc3RvcmFnZSAqLwogCXZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7CiAJdmxlbiAmIzQzOz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47Ci0Ja3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTsKJiM0MzsJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7CiAJaWYgKCFrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpCiAJCWdvdG8gb3V0X2VycjsKIAlyZXR1cm4gMDsKQEAgLTQxNCw3ICYjNDM7NDE0LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcihzdHJ1Y3Qga3ZtICprdm0sCiAJICovCiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7c3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7b2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpOwotCXZmcmVlKGxlZnRvdmVyLSZndDtzdG9yX3Zhcik7CiYjNDM7CXV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItJmd0O3N0b3JfdmFyKTsKIGRvbmVfZmFzdDoKIAlhdG9taWNfZGVjKCZhbXA7a3ZtLSZndDttbS0mZ3Q7Y29udGV4dC5wcm90ZWN0ZWRfY291bnQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dGFibGUuYyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKQEAgLTUwLDYgJiM0Mzs1MCwyMiBAQCBzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC0mZ3Q7ZGF0YSk7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LSZndDtkYXRhKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7CiYjNDM7CiYjNDM7CWFkZHIgPSByZWdzLSZndDtncHJzW3JlZ19hZGRyXTsKJiM0MzsJb2Zmc2V0ID0gYWRkciAmYW1wOyAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWFkZHIgJmFtcDs9IH4oc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWRhdGEgPSAqKHVuc2lnbmVkIGxvbmcgKilhZGRyOwomIzQzOwlkYXRhICZsdDsmbHQ7PSBCSVRTX1BFUl9CWVRFICogb2Zmc2V0OwomIzQzOwlyZWdzLSZndDtncHJzW3JlZ19kYXRhXSA9IGRhdGE7CiYjNDM7CXJlZ3MtJmd0O3Bzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlmcHVfc2ZwYygwKTsKQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUjoKIAkJcmV0dXJuIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoZXgsIHRydWUsIHJlZ3MpOwomIzQzOwljYXNlIEVYX1RZUEVfWkVST1BBRDoKJiM0MzsJCXJldHVybiBleF9oYW5kbGVyX3plcm9wYWQoZXgsIHJlZ3MpOwogCWNhc2UgRVhfVFlQRV9GUEM6CiAJCXJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCAwMjhhZWI5YzQ4ZDZmZi4uNjY2ZmU4ZTk5NDgwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC00MDksOSAmIzQzOzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtJmd0O2ludF9wYXJtX2xvbmcgfTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LSZndDttbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApAQCAtNDI3LDEwICYjNDM7NDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCSAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlCiAJCSAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC4KIAkJICovCi0JCWlmICh1c2VyX21vZGUocmVncykpIHsKLQkJCXNlbmRfc2lnKFNJR1NFR1YsIGN1cnJlbnQsIDApOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAodXNlcl9tb2RlKHJlZ3MpKQomIzQzOwkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfQUNDRVJSKTsKIAkJLyoKIAkJICogVGhlIGtlcm5lbCBzaG91bGQgbmV2ZXIgcnVuIGludG8gdGhpcyBjYXNlIGFuZAogCQkgKiB0aGVyZSBpcyBubyB3YXkgb3V0IG9mIHRoaXMgc2l0dWF0aW9uLgpAQCAtNDM4LDEzICYjNDM7NDM2LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXBhbmljKCYjMzQ7VW5leHBlY3RlZCBQR00gMHgzZCB3aXRoIFRFSUQgYml0IDYxPTAmIzM0Oyk7CiAJfQogCWlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHsKLQkJZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7Ci0JCWlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKQotCQkJcmV0dXJuOwotCQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpOwotCQlpZiAoIXJjKQotCQkJY2xlYXJfYml0KFBHX2FyY2hfMSwgJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0JCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpCiYjNDM7CQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7CiYjNDM7CQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoX19wYShhZGRyKSk7CiAJCS8qCiAJCSAqIFRoZXJlIGFyZSBzb21lIHZhbGlkIGZpeHVwIHR5cGVzIGZvciBrZXJuZWwKIAkJICogYWNjZXNzZXMgdG8gZG9uYXRlZCBzZWN1cmUgbWVtb3J5LiB6ZXJvcGFkIGlzIG9uZQpAQCAtNDUzLDI1ICYjNDM7NDQ3LDIyIEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlpZiAocmMpCiAJCQlyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTsKIAl9IGVsc2UgewotCQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkpCiYjNDM7CQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkgfHwgIW1tKQogCQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7Ci0JCW1tID0gY3VycmVudC0mZ3Q7bW07Ci0JCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwomIzQzOwkJdm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpOwogCQlpZiAoIXZtYSkKLQkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9NQVBFUlIpOwomIzQzOwkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTsKIAkJZm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KCZhbXA7ZncsIHZtYSwgYWRkciwgMCk7Ci0JCWlmICghZm9saW8pIHsKLQkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAoIWZvbGlvKQomIzQzOwkJCWdvdG8gb3V0OwogCQkvKiBhcmNoX21ha2VfZm9saW9fYWNjZXNzaWJsZSgpIG5lZWRzIGEgcmFpc2VkIHJlZmNvdW50LiAqLwogCQlmb2xpb19nZXQoZm9saW8pOwogCQlyYyA9IGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJZm9saW9fd2Fsa19lbmQoJmFtcDtmdywgdm1hKTsKIAkJaWYgKHJjKQotCQkJc2VuZF9zaWcoU0lHU0VHViwgY3VycmVudCwgMCk7CiYjNDM7CQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcihyZWdzLCBTRUdWX0FDQ0VSUik7CiYjNDM7b3V0OgogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAl9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzMzkwIEFyY2hpdGVjdHVyZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRhcmdldGluZyB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgZmV3IGtleSBhZGRpdGlvbnM6IGBEQ0FDSEVfV09SRF9BQ0NFU1NgLCB3aGljaCBpcyBub3cgYmVpbmcgZW5hYmxlZCBmb3IgczM5MCB3aGVuIEtNU0FOIGlzbiYjMzk7dCBpbiBwbGF5LCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSB3aXRoIGBFWF9UWVBFX1pFUk9QQURgIGFuZCBgRVhfVEFCTEVfWkVST1BBRGAsIG5ldyBmdW5jdGlvbnMgZm9yIHZhcmlhYmxlIHN0b3JhZ2UgbWFuYWdlbWVudCAoYHV2X2FsbG9jX3N0b3JfdmFyYCBhbmQgYHV2X2ZyZWVfc3Rvcl92YXJgKSBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgZm9yIHdvcmQtYXQtYS10aW1lIGFjY2VzcyB3aXRoaW4gdGhlIGRjYWNoZS4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYSBmZXcgS1ZNIFBWLXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSB2aXJ0dWFsIG1hY2hpbmVzLCB0byB1c2UgdGhlc2UgbmV3IHN0b3JhZ2UgZnVuY3Rpb25zLiBXZSYjMzk7dmUgZ290IGNoYW5nZXMgaW4gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIChgZXhfaGFuZGxlcl96ZXJvcGFkYCkgYW5kIHRoZSBzZWN1cmUgc3RvcmFnZSBhY2Nlc3MgZnVuY3Rpb24gKGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgKSBhcyB3ZWxsLgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHByZXR0eSBjbGVhcjogdGhpcyBpcyBhYm91dCBLVk0gUFYgY29kZSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBzZWN1cmUgc3RvcmFnZSBhY2Nlc3Mgb24gczM5MC4gYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGlzIGtleSBoZXJlLCBkaXJlY3RseSBpbXBhY3RpbmcgYERDQUNIRV9XT1JEX0FDQ0VTU2AsIG1lYW5pbmcgdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciAqYWxsKiBWRlMgcGF0aCBsb29rdXBzIG9uIHMzOTB4IG5vdyB0aGF0IHRoZSB3b3JkLWF0LWEtdGltZSBmZWF0dXJlIGlzIHByZXNlbnQuIEl0JiMzOTtzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCByZWFkeSB0byBjYXVzZSBzb21lIGludGVyZXN0aW5nIHJlc3VsdHMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuIEdpdmVuIHRoYXQgUUVNVSBzdXBwb3J0cyBzMzkweCwgYW5kIHdlIGNhbiB0ZXN0IEtWTSBvbiBzMzkweCB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciwgd2FpdCwgd2FzbiYjMzk7dCBzeXprYWxsZXIgcnVubmluZyBvbiBzMzkweD8gWWVzISBUaGF0JiMzOTtzIHBlcmZlY3QuIFRoZSBjaGFuZ2VzIHRvIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGFuZCBgdXZfYWxsb2Nfc3Rvcl92YXJgIGNsZWFybHkgdGllIGludG8gS1ZNIFBWLiBBbmQgdGhlIGRjYWNoZSBjaGFuZ2VzIG1lYW4gKmV2ZXJ5KiBWRlMgbG9va3VwIG9uIHMzOTB4IGlzIGFmZmVjdGVkLgoKU28sIHdoZXJlIGRvIHdlIGZvY3VzPyBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zOiBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCwgYHV2X2FsbG9jX3N0b3JfdmFyYCwgYHV2X2ZyZWVfc3Rvcl92YXJgLCBhbmQgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIChldmVuIGlmIGl0JiMzOTtzIGlubGluZSwgaXQmIzM5O3MgdXNlZCBpbiB0aGUgVkZTISkuIGBleF9oYW5kbGVyX3plcm9wYWRgLCBpcyBhbHNvIGEgZ29vZCB0YXJnZXQgYmVpbmcgYW4gZXhjZXB0aW9uIGhhbmRsZXIuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgb2YgYERDQUNIRV9XT1JEX0FDQ0VTU2Agb24gYFMzOTBgIGFuZCB0aGUgZXhjbHVzaW9uIG9mIGBLTVNBTmAuIEFuZCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIEtWTSBjb25maWdzIGZvciBzMzkwLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYENPTkZJR19LVk1gIHRoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGUgcHYuYyBjb2RlLCBub3RoaW5nIGV4b3RpYy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgaWYgYHV2X2FsbG9jX3N0b3JfdmFyYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBtYWtlZmlsZXMgYW5kIEtjb25maWcgc2hvdWxkIGRvIHRoZSB0cmljay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU9NDU9b2JqLXlcdCYjNDM7PSBub3NwZWMtYnJhbmNoLm8gaXBsX3ZtcGFybS5vIG1hY2hpbmVfa2V4ZWNfcmVsb2MubyB1bndpbmRfYmMub1xuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZTo0NjpvYmoteVx0JiM0Mzs9IHNtcC5vIHRleHRfYW1vZGUzMS5vIHN0YWNrdHJhY2UubyBhYnNfbG93Y29yZS5vIGZhY2lsaXR5Lm8gdXYubyB3dGkub1xuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZS00Ny1vYmoteVx0JiM0Mzs9IGRpYWcvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBc3Nlc3NpbmcgQnVpbGQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgdXYub2AuLi4gdGhhdCYjMzk7cyBhbHdheXMgYnVpbHQgb24gczM5MCwgbm8gcXVlc3Rpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZW52aXJvbm1lbnQgdGhlcmUsIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZiB0aGF0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGF0IGFib3V0IGBwdi5jYD8gSXMgaXQgYWxzbyByaWdpZGx5IHRpZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgZmxleGliaWxpdHkgdGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyB0YXJnZXQgZW52aXJvbm1lbnQuIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBzMzkwIGludHJpbnNpY3MsIGFzc2VtYmx5IGxhbmd1YWdlLCBvciBwbGF0Zm9ybS1kZXBlbmRlbnQgbGlicmFyaWVzPyBPciBpcyBpdCB3cml0dGVuIGluIGEgd2F5IHRoYXQgYWxsb3dzIGZvciBicm9hZGVyIHBvcnRhYmlsaXR5IHdpdGggbWluaW1hbCBlZmZvcnQ/IEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBidWlsZCBwcm9jZXNzIGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLi4uIHRpbWUgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IG9uIHRoYXQgc3BlY2lmaWMgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGU9MTA9a3ZtLXkgJiM0Mzs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMTprdm0teSAmIzQzOz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTEyLWt2bS15ICYjNDM7PSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS1ZNLVJlbGF0ZWQgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIGBwdi5vYCBpcyBjbGVhcmx5IHRpZWQgaW50byBga3ZtLXlgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgaWYgYENPTkZJR19LVk1gIGlzIHNldC4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBncmFudWxhcml0eSBvZiB0aGUgaW5jbHVzaW9uLiBJcyBpdCBqdXN0IGVuYWJsZWQgKndoZW4qIGBDT05GSUdfS1ZNYCBpcyBvbiwgb3IgYXJlIHRoZXJlIG1vcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IHBlcnRhaW4gdG8gJiMzNDtQViYjMzQ7IG9yICYjMzQ7UHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uJiMzNDsgd2l0aGluIHRoZSBLVk0gY29uZmlndXJhdGlvbiBzcGFjZS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipQUk9URUNURUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipFeGFtaW5pbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHMzOTAgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBrZXkgS1ZNLXJlbGF0ZWQgb3B0aW9ucyBzcGVjaWZpYyB0byBTeXN0ZW0geiBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBmZWF0dXJlcyBhcmUgc3RydWN0dXJlZCwgd2hpY2ggb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQsIHNwZWNpZmljIGluc3RydWN0aW9uIGV4dGVuc2lvbnMgbGV2ZXJhZ2VkIGJ5IEtWTSwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGRpZmZlcmVudCBLVk0gYmFja2VuZHMgZGVmaW5lZCBvciBlbmFibGVkIGJhc2VkIG9uIGhhcmR3YXJlIGZlYXR1cmVzLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSB0byBpZGVudGlmeSB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHRoYXQgY291bGQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIG9yIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZy0yLSNcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzozOiMgS1ZNIGNvbmZpZ3VyYXRpb25cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00LSNcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo1OnNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo3Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy04LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVlcCBEaXZlIGludG8gS1ZNIGFuZCBTZWN1cmUgU3RvcmFnZSBvbiBzMzkwKioKCkFscmlnaHQsIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBDT05GSUdfS1ZNYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgdmlydHVhbGl6YXRpb24gcGllY2UsIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpbnRlcmFjdHMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIG9uIHMzOTAuCgpMZXQmIzM5O3MgZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgYW5kIGp1bXAgc3RyYWlnaHQgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgdGhlIGtleS4gSXQmIzM5O3Mgd2hlcmUgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBhcmNoaXRlY3R1cmUmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBzZWN1cml0eSBmZWF0dXJlcyBJJiMzOTttIGludGVyZXN0ZWQgaW4gcHJvYmFibHkgY29udmVyZ2UuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIGxvdy1kb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaD0yOT12b2lkIGRvX2RhdF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oOjMwOnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gvczM5MC9rZXJuZWwvZW50cnkuaC0zMS12b2lkIGRvX25vbl9zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYz00MDE9c3RhdGljIHZvaWQgKCpwZ21fY2hlY2tfdGFibGVbMTI4XSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpID0ge1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzctXHRbMHgzY11cdFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYzo0Mzg6XHRbMHgzZF1cdFx0PSBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MsXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMtNDM5LVx0WzB4M2VdXHRcdD0gZGVmYXVsdF90cmFwX2hhbmRsZXIsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQ0OS1cbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYzo0NTA6Q09ORF9UUkFQKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA0PU5PS1BST0JFX1NZTUJPTChkb19kYXRfZXhjZXB0aW9uKTtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDctXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDg6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ2OC19XG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0Njk6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNlY3VyZSBTdG9yYWdlIEFjY2VzcyBhbmQgS1ZNIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBwcm9ncmFtIGNoZWNrIDB4M2QsIHRoZSBzZWN1cmUgc3RvcmFnZSBhY2Nlc3MgZXhjZXB0aW9uLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIGhhbmRsaW5nIGtlcm5lbCBmYXVsdHMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGB6ZXJvcGFkYCB3aGljaCBpcyBjb3VwbGVkIHdpdGggYERDQUNIRV9XT1JEX0FDQ0VTU2AuIEkgZ2V0IGl0IOKAkyBgRENBQ0hFX1dPUkRfQUNDRVNTYCBlbmFibGVkIG1lYW5zIHRoZSBrZXJuZWwgY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiBhIHN0cmluZyBhbmQgaGl0IGFuIHVubWFwcGVkIG9yLCBjcnVjaWFsbHksIGEgKnNlY3VyZSogcGFnZS4gVGhhdCYjMzk7cyB3aGF0IHRyaWdnZXJzIHRoaXMgMHgzZC4KClRoZSBwYXRjaCYjMzk7cyBtb2RpZmljYXRpb24gb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2Agbm93IGNoZWNrcyBgaXNfa2VybmVsX2ZhdWx0KHJlZ3MpYC4gSWYgaXQgKmlzKiBhIGtlcm5lbCBmYXVsdCwgYW5kIGlmIGl0JiMzOTtzIG5vdCBhIHZtYWxsb2MgYWRkcmVzcywgaXQgdHJpZXMgdG8gY29udmVydCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHNlY3VyZSBzcGFjZSB3aXRoIGB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpYCwgb3RoZXJ3aXNlLCByZXR1cm5zIGBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApYC4KCk15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYW5kIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIGlmIHRoaXMgcGF0Y2ggaW1wYWN0cyB0aGUgS1ZNIGNoYW5nZXMuCgpOb3csIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIGlzbiYjMzk7dCBLVk0gc3BlY2lmaWMsIGl0IGlzIGEgZ2VuZXJpYyBmZWF0dXJlLiBCdXQgdGhlIHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBleGNlcHRpb24sIGlzIHRpZWQgdG8gVWx0cmF2aXNvciAoVVYpIGFuZCBLVk0gUFYuIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBhcmUgZXhwb3J0ZWQgZm9yIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZSBjb25maWdzIHRvIGVuYWJsZSwgdGhlcmVmb3JlLCB3aWxsIGJlIGBLVk1gIGZvciB0aGUgS1ZNIFBWIGNoYW5nZXMsIG9uIHRoaXMgczM5MCBhcmNoaXRlY3R1cmUuCgpTbywgZGlnZ2luZyBkZWVwZXIgaW50byB0aGVzZSBmdW5jdGlvbnM6IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCBub3QgYSBob3QtcGF0aCBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9uLiBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgYXJlIGNhbGxlZCBkdXJpbmcgVk0gY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiBgZXhfaGFuZGxlcl96ZXJvcGFkYCBpcyBjYWxsZWQgd2hlbiBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgaGFzIGEgcGFnZSBmYXVsdCwgYWxzbyBhbiBleGNlcHRpb24gcGF0aC4gVGhpcyBtZWFucyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgdG8gYWRkIHRvIGBGb2N1c1N5bWJvbHNgLgoKSSBhbHNvIG5vdGljZWQgYGt2bV9zMzkwX3B2X2FsbG9jX3ZtYCwgYGt2bV9zMzkwX3B2X2RlYWxsb2Nfdm1gLCBhbmQgYGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyYCBhcmUgbm93IHVzaW5nIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYC4gSSBjYW4gZWl0aGVyIGluY2x1ZGUgdGhlc2UgS1ZNIGZ1bmN0aW9ucyBhcyBmb2N1cyBwb2ludHMsIG9yIGp1c3QgcmVseSBvbiB0aGUgaW5jbHVzaW9uIG9mIHRoZSBgdXZfKmAgZnVuY3Rpb25zIHNpbmNlIHRoZXkgaGFuZGxlIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uCgpJIG5lZWQgdG8gcmV2aWV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgc3BlY2lmaWNhbGx5LCBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VjdXJlIHN0b3JhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz0yNDU9c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTctXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MjU4OnZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTkte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNzQtfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI3NTpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcJiMzNDtrdm1cJiMzNDspO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEV4Y2VwdGlvbiBIYW5kbGVyKioKClllcywgdGhlIHByb2JsZW0gKmlzKiBkZWZpbml0ZWx5IG1hbmlmZXN0aW5nLiBJJiMzOTttIHNlZWluZyBpdC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBleGNlcHRpb24gaGFuZGxlciByZXNwb25zaWJsZS4gVGhlIG1vc3QgbGlrZWx5IGN1bHByaXQgaW4gYSBTMzkwIGFyY2hpdGVjdHVyZSBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggemVyby1wYWRkaW5nIGlzc3VlcywgaXMgcHJvYmFibHkgdGhlIGV4dGVuZGVkIHRhYmxlIGhhbmRsZXIuIEkgdGhpbmsgSSB3aWxsIGNoZWNrIGBleF9oYW5kbGVyX3plcm9wYWRgIHdpdGhpbiBgYXJjaC9zMzkwL21tL2V4dGFibGUuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRob3NlIGV4Y2VwdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiB0aGUgZXhjZXB0aW9uLCBob3cgdGhlIGtlcm5lbCBpcyByZXNwb25kaW5nLCBhbmQgaWYgdGhlIHplcm8gcGFkZGluZyBiZWhhdmlvciBpcyBjYXVzaW5nIGFueSBpc3N1ZXMgd2l0aGluIHRoYXQgY29kZSBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL2V4dGFibGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZXh0YWJsZS5jPTM5PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4tLVxuYXJjaC9zMzkwL21tL2V4dGFibGUuYy01Mi1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM6NTM6c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM9MTE5PWJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtMTM3LVx0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcdFx0cmV0dXJuIGV4X2hhbmRsZXJfemVyb3BhZChleCwgcmVncyk7XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cdGNhc2UgRVhfVFlQRV9GUEM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzEwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBbGlnbm1lbnQgU3RyYXRlZ3kqKgoKQWxyaWdodCwgeWVwLCBJIHNlZSBpdC4gVGhlIGNvcmUgaXNzdWUgaXMgcmlnaHQgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gVGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGluZyB0aG9zZSBwb3RlbnRpYWxseSB1bmFsaWduZWQgYWNjZXNzZXMgYW5kIHRoZSB6ZXJvLXBhZGRpbmcgc3RyYXRlZ3kgYmVpbmcgZW1wbG95ZWQuIEl0JiMzOTtzIGNydWNpYWwgdG8gZXZhbHVhdGUgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGhhemFyZHMgaW50cm9kdWNlZCBieSB0aGlzIHNwZWNpZmljIG1ldGhvZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFMvMzkwJiMzOTtzIG1lbW9yeSBtb2RlbC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgb3B0aW1pemVkIGl0LCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgb3IgcGVyaGFwcyBhbnkgZWRnZSBjYXNlcyB0aGUgY3VycmVudCBjb2RlIG1pZ2h0IG92ZXJsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2FkX3VuYWxpZ25lZF96ZXJvcGFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmg9Mzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oLTUwLSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmg6NTE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oLTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqCgpIbW0sIHRoaXMgZnVuY3Rpb24mIzM5O3MgaW5saW5lLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBzeW1ib2wuIFRoZSBjb21waWxlciYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gZm9sZCBpdCBhd2F5IGluIG1hbnkgY2FzZXMsIG1ha2luZyBpdCBoYXJkIHRvIHRyYWNrIGluIHRoZSBkaXNhc3NlbWJseSBvciBkZWJ1ZyBvdXRwdXQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSBjb25jcmV0ZSB0byBsYXRjaCBvbnRvLgoKQWxyaWdodCwgbGV0JiMzOTtzIHBpdm90LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdXYuY2AgZmlsZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUuLi4gYHV2X2ZyZWVfcmFuZ2VfY2JgIGFuZCBgdXZfYWxsb2NfcmFuZ2VfY2JgIGFyZSBwcm9iYWJseSByZWxldmFudCBjYWxsYmFja3MgaW4gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIHRob3NlLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsICpjb3VsZCogcHJvdmlkZSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlIGlmIHRob3NlIGFyZSB3b3J0aCBteSB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9mcmVlX3JhbmdlX2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz0yMDc9aW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfcHRlKHB0ZV90IHB0ZSlcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjEyLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjIxMzpzdGF0aWMgaW50IHV2X2ZyZWVfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yMTQte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz0yMjg9dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yMzktXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cdTAwM2VhZGRyO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI0MDpcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjQxLVx0ZnJlZV92bV9hcmVhKGFyZWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxOQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiAzMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIFByb3Bvc2VkIENoYW5nZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc3RhdGljIGNhbGxiYWNrcywgYW5kIHllcywgd2UgY2FuIGRlZmluaXRlbHkgaW5jbHVkZSB0aG9zZS4gTGV0IG1lIHNlZS4uLiB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgaGVyZSBhcmU6IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgLCBgdXZfYWxsb2Nfc3Rvcl92YXJgLCBgdXZfZnJlZV9zdG9yX3ZhcmAsIGB1dl9hbGxvY19yYW5nZV9jYmAsIGB1dl9mcmVlX3JhbmdlX2NiYCwgYW5kIGBleF9oYW5kbGVyX3plcm9wYWRgLiBHb3QgaXQuCgpOb3csIHRoZSBjb25maWcgaXRlbSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaXMgYEtWTWAuIExldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBlbmFibGVzIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIHNwZWNpZmljYWxseSBmb3IgczM5MCwgYW5kIGl0IGFkZHMgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBoYW5kbGVyLCBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gRnVydGhlciwgaXQmIzM5O3MgbW9kaWZ5aW5nIEtWTSYjMzk7cyBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gbGV2ZXJhZ2UgdGhvc2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMuIEFuZCBvZiBjb3Vyc2UsIHRoZXJlJiMzOTtzIGFuIHVwZGF0ZSB0byBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cy4KCkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IG9uIHMzOTAsIGFuZCBvZiBjb3Vyc2Ugd2l0aCBLVk0uIFRoaXMgaGFzIHRvIGJlIGNvbnNpZGVyZWQgdG8gYWZmZWN0IFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgS1ZNYCBpcyB0aGUgKm9ubHkqIGNvbmZpZyB0aGF0JiMzOTtzIHJlcXVpcmVkLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0LiBJdCBsb29rcyBsaWtlIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIGlzIGltcGxpY2l0bHkgc2VsZWN0ZWQgYnkgYFMzOTBgIHdoZW4gYCFLTVNBTmAuIFNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGVuYWJsaW5nIHRoYXQgZXhwbGljaXRseS4gSXQmIzM5O3MgaGFuZGxlZCBieSBkZWZhdWx0IG9uIHMzOTAgdW5sZXNzIEtNU0FOIGlzIGFjdGl2ZS4gUGVyZmVjdC4KClRoZSBgS1ZNYCBjb25maWcgaXMgY2xlYXJseSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYGFyY2gvczM5MC9rdm0vcHYuY2AgZmlsZS4gU28gaXQgbG9va3MgbGlrZSBgS1ZNYCBpcyB0aGUgY3JpdGljYWwgaXRlbSB0byBlbnN1cmUgaXMgZW5hYmxlZC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfYWxsb2NfcmFuZ2VfY2ImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9yYW5nZV9jYiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX3plcm9wYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDt1dl9hbGxvY19yYW5nZV9jYiYjMzQ7LAogICAgJiMzNDt1dl9mcmVlX3JhbmdlX2NiJiMzNDssCiAgICAmIzM0O2V4X2hhbmRsZXJfemVyb3BhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIERDQUNIRV9XT1JEX0FDQ0VTUyBmb3IgczM5MCwgaW50cm9kdWNpbmcgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFuZCBpdHMgZXhjZXB0aW9uIGhhbmRsZXIgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEl0IGFsc28gbW9kaWZpZXMgS1ZNIFBWIHZhcmlhYmxlIHN0b3JhZ2UgYWxsb2NhdGlvbiB0byB1c2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFuZCB1cGRhdGVzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIHRvIGhhbmRsZSBrZXJuZWwgZmF1bHRzIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIGFzIHdlbGwgYXMgS1ZNLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDowMi4zNTQwMDEzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjY1NTczNjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICAgIFwidXZfYWxsb2Nfc3Rvcl92YXJcIixcbiAgICBcInV2X2ZyZWVfc3Rvcl92YXJcIixcbiAgICBcInV2X2FsbG9jX3JhbmdlX2NiXCIsXG4gICAgXCJ1dl9mcmVlX3JhbmdlX2NiXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIERDQUNIRV9XT1JEX0FDQ0VTUyBmb3IgczM5MCwgaW50cm9kdWNpbmcgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFuZCBpdHMgZXhjZXB0aW9uIGhhbmRsZXIgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEl0IGFsc28gbW9kaWZpZXMgS1ZNIFBWIHZhcmlhYmxlIHN0b3JhZ2UgYWxsb2NhdGlvbiB0byB1c2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFuZCB1cGRhdGVzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIHRvIGhhbmRsZSBrZXJuZWwgZmF1bHRzIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIGFzIHdlbGwgYXMgS1ZNLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjAyLjM1NDAxMjE1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2NzUxNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWMwNDU5NTVlYzYyZjUwMzdiNWJiZjgxNDQxODU1ZTJlZDRkNTg4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAxMTozMDowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXFxuaW5kZXggODQ0MDRlNjc3OGQ1MDQuLmZlODFjNTM5ZWYyZmZjIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXFxuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcXG5AQCAtMTYzLDYgKzE2Myw3IEBAIGNvbmZpZyBTMzkwXFxuIFxcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQXFxuIFxcdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxcbiBcXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxcbitcXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmICFLTVNBTlxcbiBcXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCIGlmICFDQ19JU19HQ0NcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXFx0M1xcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdcXHQ1XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVJcXHQ2XFxuKyNkZWZpbmUgRVhfVFlQRV9aRVJPUEFEXFx0XFx0N1xcbiAjZGVmaW5lIEVYX1RZUEVfRlBDXFx0XFx0OFxcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfVE9cXHQ5XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NXFx0MTBcXG5AQCAtNzksNiArODAsOSBAQFxcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVxcdFxcXFxcXG4gXFx0X19FWF9UQUJMRShfX2V4X3RhYmxlLCBfZmF1bHQsIF90YXJnZXQsIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSLCBfcmVnZXJyLCBfcmVnemVybywgMClcXG4gXFxuKyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcXHRcXHRcXFxcXFxuK1xcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMClcXG4rXFxuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBpbnQgczM5MF93aWdnbGVfc3BsaXRfZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcXG4gaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUodW5zaWduZWQgbG9uZyBwYWRkcik7XFxuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xcbit2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpO1xcbiBcXG4gdm9pZCBzZXR1cF91dih2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG5pbmRleCBlOTI4NzAzNjM5MmQwOC4uZWFhMTlkZWU3Njk5NDEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2JpdHNwZXJsb25nLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd29yZF9hdF9hX3RpbWUge1xcbkBAIC00MCw0ICs0MSwyNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemVyb19ieXRlbWFzayh1bnNpZ25lZCBsb25nIGRhdGEpXFxuIFxcdHJldHVybiB+MVVMIFxcdTAwM2NcXHUwMDNjIGRhdGE7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuXFxuKyAqXFxuKyAqIEluIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB0aGUgd29yZCBiZWluZyBhIHBhZ2UtY3Jvc3NlclxcbisgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kXFxuKyAqIHJldHVybiB6ZXJvZXMgaW4gdGhlIG5vbi1leGlzdGluZyBwYXJ0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRhdGE7XFxuK1xcbitcXHRhc21faW5saW5lIHZvbGF0aWxlKFxcbitcXHRcXHRcXFwiMDpcXHRsZ1xcdCVbZGF0YV0sMCglW2FkZHJdKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiMTpcXHRub3ByXFx0JSVyN1xcXFxuXFxcIlxcbitcXHRcXHRFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSlcXG4rXFx0XFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXFxuK1xcdFxcdDogW2RhdGFdIFxcXCI9ZFxcXCIgKGRhdGEpXFxuK1xcdFxcdDogW2FkZHJdIFxcXCJhXFxcIiAoYWRkciksIFxcXCJtXFxcIiAoKih1bnNpZ25lZCBsb25nICopYWRkcikpO1xcbitcXHRyZXR1cm4gZGF0YTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG5pbmRleCBhMjg0Zjk4ZDk3MTY4MC4uZDFjZGM1YWU1ZTI3MGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2ZhY2lsaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2VjdGlvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di5oXFx1MDAzZVxcbkBAIC0yMDksNiArMjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXFxuIFxcdHJldHVybiB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHBmbl9mb2xpbyhwdGVfcGZuKHB0ZSkpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XFxuK1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHQvKlxcbitcXHQgKiBOb3RlOiBkbyBub3QgdXBkYXRlIHRoZSBwdGUgaGVyZSwgc2luY2UgdGhlcmUgaXMgbm8gY29kZSB3aGljaFxcbitcXHQgKiBhY2Nlc3NlcyB0aGUgbWVtb3J5IHJhbmdlLCBiZXNpZGVzIGJ1Z3MuIFRoZSBpbnZhbGlkYXRpb24gb2YgcHRlc1xcbitcXHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cXG4rXFx0ICovXFxuK1xcdF9fZnJlZV9wYWdlKHB0ZV9wYWdlKHB0ZSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTtcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcXG4rXFxuK1xcdGlmICghc3Rvcl92YXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWFyZWEgfHwgIShhcmVhLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX1NQQVJTRSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xcbitcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4rXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XFxuK1xcdGZyZWVfdm1fYXJlYShhcmVhKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2ZyZWVfc3Rvcl92YXIsIFxcXCJrdm1cXFwiKTtcXG4rXFxuK3N0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0cHRlX3QgcHRlO1xcbitcXG4rXFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHB0ZSA9IF9fcHRlKHBhZ2VfdG9fcGh5cyhwYWdlKSB8IHBncHJvdF92YWwoUEFHRV9LRVJORUwpKTtcXG4rXFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fU1BBUlNFKTtcXG4rXFx0aWYgKCFhcmVhKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXFx1MDAzZWFkZHI7XFxuK1xcdGlmIChhcHBseV90b19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXR1cm4gYXJlYS1cXHUwMDNlYWRkcjtcXG4rb3V0OlxcbitcXHR1dl9mcmVlX3N0b3JfdmFyKGFyZWEtXFx1MDAzZWFkZHIpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcXFwia3ZtXFxcIik7XFxuK1xcbiAvKlxcbiAgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIHJlZl9jb3VudCBmb3IgYSBmb2xpbyB0aGF0IHdvdWxkIG90aGVyd2lzZSBoYXZlIG5vXFxuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1MC4uZGM1YWMyOWI0YzMxMTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuQEAgLTMzNyw3ICszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiAvKiBvbmx5IGZyZWUgcmVzb3VyY2VzIHdoZW4gdGhlIGRlc3Ryb3kgd2FzIHN1Y2Nlc3NmdWwgKi9cXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0dmZyZWUoa3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3Zhcihrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xcbiBcXHRmcmVlX3BhZ2VzKGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXFxuIFxcdFxcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTtcXG5AQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfYWxsb2Nfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHQvKiBBbGxvY2F0ZSB2YXJpYWJsZSBzdG9yYWdlICovXFxuIFxcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XFxuIFxcdHZsZW4gKz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHZ6YWxsb2Modmxlbik7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xcbiBcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfZGlzcG9zZV9vbmVfbGVmdG92ZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHQgKi9cXG4gXFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cXHUwMDNlc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XFxuIFxcdGZyZWVfcGFnZXMobGVmdG92ZXItXFx1MDAzZW9sZF9nbWFwX3RhYmxlLCBDUlNUX0FMTE9DX09SREVSKTtcXG4tXFx0dmZyZWUobGVmdG92ZXItXFx1MDAzZXN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3ZhcihsZWZ0b3Zlci1cXHUwMDNlc3Rvcl92YXIpO1xcbiBkb25lX2Zhc3Q6XFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmt2bS1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcXG4rKysgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuQEAgLTUwLDYgKzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC1cXHUwMDNlZGF0YSk7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LVxcdTAwM2VkYXRhKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XFxuK1xcbitcXHRhZGRyID0gcmVncy1cXHUwMDNlZ3Byc1tyZWdfYWRkcl07XFxuK1xcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7XFxuK1xcdGFkZHIgXFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcXG4rXFx0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyAqKWFkZHI7XFxuK1xcdGRhdGEgXFx1MDAzY1xcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBvZmZzZXQ7XFxuK1xcdHJlZ3MtXFx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcXG4rXFx0cmVncy1cXHUwMDNlcHN3LmFkZHIgPSBleHRhYmxlX2ZpeHVwKGV4KTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRmcHVfc2ZwYygwKTtcXG5AQCAtMTE4LDYgKzEzNCw4IEBAIGJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgZmFsc2UsIHJlZ3MpO1xcbiBcXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XFxuK1xcdGNhc2UgRVhfVFlQRV9aRVJPUEFEOlxcbitcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX0ZQQzpcXG4gXFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfZnBjKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOlxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjY2NmZlOGU5OTQ4MDE5IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5AQCAtNDA5LDkgKzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtXFx1MDAzZWludF9wYXJtX2xvbmcgfTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdGludCByYztcXG4gXFxuQEAgLTQyNywxMCArNDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdCAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlXFxuIFxcdFxcdCAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICh1c2VyX21vZGUocmVncykpIHtcXG4tXFx0XFx0XFx0c2VuZF9zaWcoU0lHU0VHViwgY3VycmVudCwgMCk7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAodXNlcl9tb2RlKHJlZ3MpKVxcbitcXHRcXHRcXHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX0FDQ0VSUik7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSBrZXJuZWwgc2hvdWxkIG5ldmVyIHJ1biBpbnRvIHRoaXMgY2FzZSBhbmRcXG4gXFx0XFx0ICogdGhlcmUgaXMgbm8gd2F5IG91dCBvZiB0aGlzIHNpdHVhdGlvbi5cXG5AQCAtNDM4LDEzICs0MzYsOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0cGFuaWMoXFxcIlVuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXFxcIik7XFxuIFxcdH1cXG4gXFx0aWYgKGlzX2tlcm5lbF9mYXVsdChyZWdzKSkge1xcbi1cXHRcXHRmb2xpbyA9IHZpcnRfdG9fZm9saW8oKHZvaWQgKilhZGRyKTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKGZvbGlvX3RvX3BoeXMoZm9saW8pKTtcXG4tXFx0XFx0aWYgKCFyYylcXG4tXFx0XFx0XFx0Y2xlYXJfYml0KFBHX2FyY2hfMSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0aWYgKGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKWFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcXG4rXFx0XFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGVyZSBhcmUgc29tZSB2YWxpZCBmaXh1cCB0eXBlcyBmb3Iga2VybmVsXFxuIFxcdFxcdCAqIGFjY2Vzc2VzIHRvIGRvbmF0ZWQgc2VjdXJlIG1lbW9yeS4gemVyb3BhZCBpcyBvbmVcXG5AQCAtNDUzLDI1ICs0NDcsMjIgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcXG4rXFx0XFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcXG4gXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XFxuLVxcdFxcdG1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xcbitcXHRcXHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkciwgcmVncyk7XFxuIFxcdFxcdGlmICghdm1hKVxcbi1cXHRcXHRcXHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgU0VHVl9NQVBFUlIpO1xcbiBcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xcbi1cXHRcXHRpZiAoIWZvbGlvKSB7XFxuLVxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdC8qIGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKCkgbmVlZHMgYSByYWlzZWQgcmVmY291bnQuICovXFxuIFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuIFxcdFxcdHJjID0gYXJjaF9tYWtlX2ZvbGlvX2FjY2Vzc2libGUoZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxuIFxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0c2VuZF9zaWcoU0lHU0VHViwgY3VycmVudCwgMCk7XFxuK1xcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9BQ0NFUlIpO1xcbitvdXQ6XFxuIFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MDMuMjQxNzAyNDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM3Nzg1MzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NcIixcbiAgICBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9mcmVlX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9hbGxvY19yYW5nZV9jYlwiLFxuICAgIFwidXZfZnJlZV9yYW5nZV9jYlwiLFxuICAgIFwiZXhfaGFuZGxlcl96ZXJvcGFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljMDQ1OTU1ZWM2MmY1MDM3YjViYmY4MTQ0MTg1NWUyZWQ0ZDU4ODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxMTozMDowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5mZTgxYzUzOWVmMmZmYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTE2Myw2ICsxNjMsNyBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcbiBcdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxuIFx0c2VsZWN0IENMT05FX0JBQ0tXQVJEUzJcbitcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOXG4gXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4gXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzhCIGlmIENDX0lTX0dDQ1xuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIEVYX1RZUEVfVUFfRkFVTFRcdDNcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdcdDVcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSXHQ2XG4rI2RlZmluZSBFWF9UWVBFX1pFUk9QQURcdFx0N1xuICNkZWZpbmUgRVhfVFlQRV9GUENcdFx0OFxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19UT1x0OVxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NXHQxMFxuQEAgLTc5LDYgKzgwLDkgQEBcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApXG4gXG4rI2RlZmluZSBFWF9UQUJMRV9aRVJPUEFEKF9mYXVsdCwgX3RhcmdldCwgX3JlZ2RhdGEsIF9yZWdhZGRyKVx0XHRcXFxuK1x0X19FWF9UQUJMRShfX2V4X3RhYmxlLCBfZmF1bHQsIF90YXJnZXQsIEVYX1RZUEVfWkVST1BBRCwgX3JlZ2RhdGEsIF9yZWdhZGRyLCAwKVxuK1xuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcdFx0XHRcdFx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBpbnQgczM5MF93aWdnbGVfc3BsaXRfZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBfX21ha2VfZm9saW9fc2VjdXJlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1dl9jYl9oZWFkZXIgKnV2Y2IpO1xuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIpO1xuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rdm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKTtcbiBcbiB2b2lkIHNldHVwX3V2KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2FzbS1leHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYml0c3BlcmxvbmcuaFx1MDAzZVxuIFxuIHN0cnVjdCB3b3JkX2F0X2FfdGltZSB7XG5AQCAtNDAsNCArNDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuIFx0cmV0dXJuIH4xVUwgXHUwMDNjXHUwMDNjIGRhdGE7XG4gfVxuIFxuKy8qXG4rICogTG9hZCBhbiB1bmFsaWduZWQgd29yZCBmcm9tIGtlcm5lbCBzcGFjZS5cbisgKlxuKyAqIEluIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB0aGUgd29yZCBiZWluZyBhIHBhZ2UtY3Jvc3NlclxuKyAqIGFuZCB0aGUgbmV4dCBwYWdlIG5vdCBiZWluZyBtYXBwZWQsIHRha2UgdGhlIGV4Y2VwdGlvbiBhbmRcbisgKiByZXR1cm4gemVyb2VzIGluIHRoZSBub24tZXhpc3RpbmcgcGFydC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCB2b2lkICphZGRyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZGF0YTtcbitcbitcdGFzbV9pbmxpbmUgdm9sYXRpbGUoXG4rXHRcdFwiMDpcdGxnXHQlW2RhdGFdLDAoJVthZGRyXSlcXG5cIlxuK1x0XHRcIjE6XHRub3ByXHQlJXI3XFxuXCJcbitcdFx0RVhfVEFCTEVfWkVST1BBRCgwYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXG4rXHRcdEVYX1RBQkxFX1pFUk9QQUQoMWIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuK1x0XHQ6IFtkYXRhXSBcIj1kXCIgKGRhdGEpXG4rXHRcdDogW2FkZHJdIFwiYVwiIChhZGRyKSwgXCJtXCIgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpKTtcbitcdHJldHVybiBkYXRhO1xuK31cbitcbiAjZW5kaWYgLyogX0FTTV9XT1JEX0FUX0FfVElNRV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5pbmRleCBhMjg0Zjk4ZDk3MTY4MC4uZDFjZGM1YWU1ZTI3MGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTE2LDYgKzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuQEAgLTIwOSw2ICsyMTAsNzAgQEAgaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfcHRlKHB0ZV90IHB0ZSlcbiBcdHJldHVybiB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHBmbl9mb2xpbyhwdGVfcGZuKHB0ZSkpKTtcbiB9XG4gXG4rc3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4re1xuK1x0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XG4rXG4rXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4rXHRcdHJldHVybiAwO1xuK1x0LypcbitcdCAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoXG4rXHQgKiBhY2Nlc3NlcyB0aGUgbWVtb3J5IHJhbmdlLCBiZXNpZGVzIGJ1Z3MuIFRoZSBpbnZhbGlkYXRpb24gb2YgcHRlc1xuK1x0ICogYW5kIFRMQiBmbHVzaGluZyBpcyBkZWZlcnJlZCBsaWtlIGZvciByZWd1bGFyIHZmcmVlKCkgY2FsbHMuXG4rXHQgKi9cbitcdF9fZnJlZV9wYWdlKHB0ZV9wYWdlKHB0ZSkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgdXZfZnJlZV9zdG9yX3Zhcih2b2lkICpzdG9yX3Zhcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7XG4rXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuK1xuK1x0aWYgKCFzdG9yX3ZhcilcbitcdFx0cmV0dXJuO1xuK1x0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmVhIHx8ICEoYXJlYS1cdTAwM2VmbGFncyBcdTAwMjYgVk1fU1BBUlNFKSkpXG4rXHRcdHJldHVybjtcbitcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xuK1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbitcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XG4rXHRmcmVlX3ZtX2FyZWEoYXJlYSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfZnJlZV9zdG9yX3ZhciwgXCJrdm1cIik7XG4rXG4rc3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0cHRlX3QgcHRlO1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cHRlID0gX19wdGUocGFnZV90b19waHlzKHBhZ2UpIHwgcGdwcm90X3ZhbChQQUdFX0tFUk5FTCkpO1xuK1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuK1xuK1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4rXHRhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fU1BBUlNFKTtcbitcdGlmICghYXJlYSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cdTAwM2VhZGRyO1xuK1x0aWYgKGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfYWxsb2NfcmFuZ2VfY2IsIE5VTEwpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldHVybiBhcmVhLVx1MDAzZWFkZHI7XG4rb3V0OlxuK1x0dXZfZnJlZV9zdG9yX3ZhcihhcmVhLVx1MDAzZWFkZHIpO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwia3ZtXCIpO1xuK1xuIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCByZWZfY291bnQgZm9yIGEgZm9saW8gdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBub1xuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NTAuLmRjNWFjMjliNGMzMTE4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0zMzcsNyArMzM3LDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiAvKiBvbmx5IGZyZWUgcmVzb3VyY2VzIHdoZW4gdGhlIGRlc3Ryb3kgd2FzIHN1Y2Nlc3NmdWwgKi9cbiBzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHR2ZnJlZShrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3Zhcik7XG4rXHR1dl9mcmVlX3N0b3JfdmFyKGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyKTtcbiBcdGZyZWVfcGFnZXMoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuIFx0XHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XG4gXHRrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShrdm0pO1xuQEAgLTM2OSw3ICszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2FsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdC8qIEFsbG9jYXRlIHZhcmlhYmxlIHN0b3JhZ2UgKi9cbiBcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XG4gXHR2bGVuICs9IHV2X2luZm8uZ3Vlc3RfdmlydF9iYXNlX3N0b3JfbGVuO1xuLVx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSB2emFsbG9jKHZsZW4pO1xuK1x0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSB1dl9hbGxvY19zdG9yX3Zhcih2bGVuKTtcbiBcdGlmICgha3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpXG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdHJldHVybiAwO1xuQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqL1xuIFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cdTAwM2VzdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlb2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpO1xuLVx0dmZyZWUobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuK1x0dXZfZnJlZV9zdG9yX3ZhcihsZWZ0b3Zlci1cdTAwM2VzdG9yX3Zhcik7XG4gZG9uZV9mYXN0OlxuIFx0YXRvbWljX2RlYyhcdTAwMjZrdm0tXHUwMDNlbW0tXHUwMDNlY29udGV4dC5wcm90ZWN0ZWRfY291bnQpO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dGFibGUuYyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcbmluZGV4IDA2M2I0MzQ2NzQyZDk2Li43NDk4ZTg1OGM0MDE5NSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcbisrKyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcbkBAIC01MCw2ICs1MCwyMiBAQCBzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGV4X2hhbmRsZXJfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4re1xuK1x0dW5zaWduZWQgaW50IHJlZ19hZGRyID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0FERFIsIGV4LVx1MDAzZWRhdGEpO1xuK1x0dW5zaWduZWQgaW50IHJlZ19kYXRhID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0VSUiwgZXgtXHUwMDNlZGF0YSk7XG4rXHR1bnNpZ25lZCBsb25nIGRhdGEsIGFkZHIsIG9mZnNldDtcbitcbitcdGFkZHIgPSByZWdzLVx1MDAzZWdwcnNbcmVnX2FkZHJdO1xuK1x0b2Zmc2V0ID0gYWRkciBcdTAwMjYgKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpO1xuK1x0YWRkciBcdTAwMjY9IH4oc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7XG4rXHRkYXRhID0gKih1bnNpZ25lZCBsb25nICopYWRkcjtcbitcdGRhdGEgXHUwMDNjXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogb2Zmc2V0O1xuK1x0cmVncy1cdTAwM2VncHJzW3JlZ19kYXRhXSA9IGRhdGE7XG4rXHRyZWdzLVx1MDAzZXBzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZXhfaGFuZGxlcl9mcGMoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdGZwdV9zZnBjKDApO1xuQEAgLTExOCw2ICsxMzQsOCBAQCBib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0cmV0dXJuIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoZXgsIGZhbHNlLCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVI6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCB0cnVlLCByZWdzKTtcbitcdGNhc2UgRVhfVFlQRV9aRVJPUEFEOlxuK1x0XHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9GUEM6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTVZDT1NfVE86XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjY2NmZlOGU5OTQ4MDE5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDA5LDkgKzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtXHUwMDNlaW50X3Bhcm1fbG9uZyB9O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IHJjO1xuIFxuQEAgLTQyNywxMCArNDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdCAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlXG4gXHRcdCAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC5cbiBcdFx0ICovXG4tXHRcdGlmICh1c2VyX21vZGUocmVncykpIHtcbi1cdFx0XHRzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKHVzZXJfbW9kZShyZWdzKSlcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX0FDQ0VSUik7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBrZXJuZWwgc2hvdWxkIG5ldmVyIHJ1biBpbnRvIHRoaXMgY2FzZSBhbmRcbiBcdFx0ICogdGhlcmUgaXMgbm8gd2F5IG91dCBvZiB0aGlzIHNpdHVhdGlvbi5cbkBAIC00MzgsMTMgKzQzNiw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRwYW5pYyhcIlVuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXCIpO1xuIFx0fVxuIFx0aWYgKGlzX2tlcm5lbF9mYXVsdChyZWdzKSkge1xuLVx0XHRmb2xpbyA9IHZpcnRfdG9fZm9saW8oKHZvaWQgKilhZGRyKTtcbi1cdFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpO1xuLVx0XHRpZiAoIXJjKVxuLVx0XHRcdGNsZWFyX2JpdChQR19hcmNoXzEsIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpXG4rXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4rXHRcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShfX3BhKGFkZHIpKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgYXJlIHNvbWUgdmFsaWQgZml4dXAgdHlwZXMgZm9yIGtlcm5lbFxuIFx0XHQgKiBhY2Nlc3NlcyB0byBkb25hdGVkIHNlY3VyZSBtZW1vcnkuIHplcm9wYWQgaXMgb25lXG5AQCAtNDUzLDI1ICs0NDcsMjIgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcbitcdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbi1cdFx0bW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbitcdFx0dm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpO1xuIFx0XHRpZiAoIXZtYSlcbi1cdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX01BUEVSUik7XG4gXHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRpZiAoIWZvbGlvKVxuK1x0XHRcdGdvdG8gb3V0O1xuIFx0XHQvKiBhcmNoX21ha2VfZm9saW9fYWNjZXNzaWJsZSgpIG5lZWRzIGEgcmFpc2VkIHJlZmNvdW50LiAqL1xuIFx0XHRmb2xpb19nZXQoZm9saW8pO1xuIFx0XHRyYyA9IGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG4gXHRcdGlmIChyYylcbi1cdFx0XHRzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTtcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfQUNDRVJSKTtcbitvdXQ6XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjAzLjI0MTcxNDc3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Nzc0ODg1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzMzkwIEFyY2hpdGVjdHVyZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0YXJnZXRpbmcgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIGZldyBrZXkgYWRkaXRpb25zOiBgRENBQ0hFX1dPUkRfQUNDRVNTYCwgd2hpY2ggaXMgbm93IGJlaW5nIGVuYWJsZWQgZm9yIHMzOTAgd2hlbiBLTVNBTiBpc24ndCBpbiBwbGF5LCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSB3aXRoIGBFWF9UWVBFX1pFUk9QQURgIGFuZCBgRVhfVEFCTEVfWkVST1BBRGAsIG5ldyBmdW5jdGlvbnMgZm9yIHZhcmlhYmxlIHN0b3JhZ2UgbWFuYWdlbWVudCAoYHV2X2FsbG9jX3N0b3JfdmFyYCBhbmQgYHV2X2ZyZWVfc3Rvcl92YXJgKSBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgZm9yIHdvcmQtYXQtYS10aW1lIGFjY2VzcyB3aXRoaW4gdGhlIGRjYWNoZS4gSXQncyBhbHNvIG1vZGlmeWluZyBhIGZldyBLVk0gUFYtcmVsYXRlZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlIHZpcnR1YWwgbWFjaGluZXMsIHRvIHVzZSB0aGVzZSBuZXcgc3RvcmFnZSBmdW5jdGlvbnMuIFdlJ3ZlIGdvdCBjaGFuZ2VzIGluIHRoZSBleGNlcHRpb24gaGFuZGxlciAoYGV4X2hhbmRsZXJfemVyb3BhZGApIGFuZCB0aGUgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGZ1bmN0aW9uIChgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCkgYXMgd2VsbC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHByZXR0eSBjbGVhcjogdGhpcyBpcyBhYm91dCBLVk0gUFYgY29kZSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBzZWN1cmUgc3RvcmFnZSBhY2Nlc3Mgb24gczM5MC4gYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGlzIGtleSBoZXJlLCBkaXJlY3RseSBpbXBhY3RpbmcgYERDQUNIRV9XT1JEX0FDQ0VTU2AsIG1lYW5pbmcgdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciAqYWxsKiBWRlMgcGF0aCBsb29rdXBzIG9uIHMzOTB4IG5vdyB0aGF0IHRoZSB3b3JkLWF0LWEtdGltZSBmZWF0dXJlIGlzIHByZXNlbnQuIEl0J3MgZGVmaW5pdGVseSBhY3RpdmUgYW5kIHJlYWR5IHRvIGNhdXNlIHNvbWUgaW50ZXJlc3RpbmcgcmVzdWx0cy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5LiBHaXZlbiB0aGF0IFFFTVUgc3VwcG9ydHMgczM5MHgsIGFuZCB3ZSBjYW4gdGVzdCBLVk0gb24gczM5MHggd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IsIHdhaXQsIHdhc24ndCBzeXprYWxsZXIgcnVubmluZyBvbiBzMzkweD8gWWVzISBUaGF0J3MgcGVyZmVjdC4gVGhlIGNoYW5nZXMgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgYW5kIGB1dl9hbGxvY19zdG9yX3ZhcmAgY2xlYXJseSB0aWUgaW50byBLVk0gUFYuIEFuZCB0aGUgZGNhY2hlIGNoYW5nZXMgbWVhbiAqZXZlcnkqIFZGUyBsb29rdXAgb24gczM5MHggaXMgYWZmZWN0ZWQuXG5cblNvLCB3aGVyZSBkbyB3ZSBmb2N1cz8gSSB0aGluayB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uczogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYW5kIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCAoZXZlbiBpZiBpdCdzIGlubGluZSwgaXQncyB1c2VkIGluIHRoZSBWRlMhKS4gYGV4X2hhbmRsZXJfemVyb3BhZGAsIGlzIGFsc28gYSBnb29kIHRhcmdldCBiZWluZyBhbiBleGNlcHRpb24gaGFuZGxlci5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBLY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IG9mIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIG9uIGBTMzkwYCBhbmQgdGhlIGV4Y2x1c2lvbiBvZiBgS01TQU5gLiBBbmQgSSdsbCBkb3VibGUtY2hlY2sgdGhlIEtWTSBjb25maWdzIGZvciBzMzkwLiBJdCBsb29rcyBsaWtlIGl0J3MganVzdCBgQ09ORklHX0tWTWAgdGhhdCdzIG5lZWRlZCBmb3IgdGhlIHB2LmMgY29kZSwgbm90aGluZyBleG90aWMuIEknbGwgbmVlZCB0byB2ZXJpZnkgaWYgYHV2X2FsbG9jX3N0b3JfdmFyYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBtYWtlZmlsZXMgYW5kIEtjb25maWcgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjEyLjkxOTIwNzI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDIzNjk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU9NDU9b2JqLXlcXHQrPSBub3NwZWMtYnJhbmNoLm8gaXBsX3ZtcGFybS5vIG1hY2hpbmVfa2V4ZWNfcmVsb2MubyB1bndpbmRfYmMub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDY6b2JqLXlcXHQrPSBzbXAubyB0ZXh0X2Ftb2RlMzEubyBzdGFja3RyYWNlLm8gYWJzX2xvd2NvcmUubyBmYWNpbGl0eS5vIHV2Lm8gd3RpLm9cXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlLTQ3LW9iai15XFx0Kz0gZGlhZy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MTMuMDYzNDUyNjk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4ODE2NDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQXNzZXNzaW5nIEJ1aWxkIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBgdXYub2AuLi4gdGhhdCdzIGFsd2F5cyBidWlsdCBvbiBzMzkwLCBubyBxdWVzdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGVudmlyb25tZW50IHRoZXJlLCBJJ20gYWxyZWFkeSBhd2FyZSBvZiB0aGF0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGF0IGFib3V0IGBwdi5jYD8gSXMgaXQgYWxzbyByaWdpZGx5IHRpZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgZmxleGliaWxpdHkgdGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyB0YXJnZXQgZW52aXJvbm1lbnQuIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBzMzkwIGludHJpbnNpY3MsIGFzc2VtYmx5IGxhbmd1YWdlLCBvciBwbGF0Zm9ybS1kZXBlbmRlbnQgbGlicmFyaWVzPyBPciBpcyBpdCB3cml0dGVuIGluIGEgd2F5IHRoYXQgYWxsb3dzIGZvciBicm9hZGVyIHBvcnRhYmlsaXR5IHdpdGggbWluaW1hbCBlZmZvcnQ/IEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBidWlsZCBwcm9jZXNzIGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLi4uIHRpbWUgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IG9uIHRoYXQgc3BlY2lmaWMgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcxMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjE1Ljk1MTYyMDA1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2NjMxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEwPWt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMi1rdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjE2LjA1MjI5MTI5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzA1NjYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNLVJlbGF0ZWQgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgc28gYHB2Lm9gIGlzIGNsZWFybHkgdGllZCBpbnRvIGBrdm0teWAuIFRoYXQgbWVhbnMgaXQncyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzIGlmIGBDT05GSUdfS1ZNYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluY2x1c2lvbi4gSXMgaXQganVzdCBlbmFibGVkICp3aGVuKiBgQ09ORklHX0tWTWAgaXMgb24sIG9yIGFyZSB0aGVyZSBtb3JlIHNwZWNpZmljIGRlcGVuZGVuY2llcz8gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IHBlcnRhaW4gdG8gXCJQVlwiIG9yIFwiUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uXCIgd2l0aGluIHRoZSBLVk0gY29uZmlndXJhdGlvbiBzcGFjZS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MTkuNDgyODYyMTE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTU4NDUwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipQUk9URUNURURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjE5LjU4ODQ1OTM2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzc2MDY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgdGhvdWdodCBwcm9jZXNzIGRlc2NyaWJlZDpcblxuKipFeGFtaW5pbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIEtWTSBjb25maWd1cmF0aW9uIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUga2V5IEtWTS1yZWxhdGVkIG9wdGlvbnMgc3BlY2lmaWMgdG8gU3lzdGVtIHogc2hvdWxkIGJlIGRlZmluZWQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBmZWF0dXJlcyBhcmUgc3RydWN0dXJlZCwgd2hpY2ggb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdmlydHVhbGl6YXRpb24gc3VwcG9ydCwgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZXh0ZW5zaW9ucyBsZXZlcmFnZWQgYnkgS1ZNLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgZGlmZmVyZW50IEtWTSBiYWNrZW5kcyBkZWZpbmVkIG9yIGVuYWJsZWQgYmFzZWQgb24gaGFyZHdhcmUgZmVhdHVyZXMuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHRvIGlkZW50aWZ5IHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgaG93IHRoZXkncmUgZW5hYmxlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBwZXJmb3JtYW5jZSBvciBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MjIuNjI2MDcxMjQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5NTM5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZy0yLSNcXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MzojIEtWTSBjb25maWd1cmF0aW9uXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQtI1xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo1OnNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDoyMi43NjIwMzQyNjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4ODc4NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIEtWTSBhbmQgU2VjdXJlIFN0b3JhZ2Ugb24gczM5MCoqXG5cbkFscmlnaHQsIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBDT05GSUdfS1ZNYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBwaWVjZSwgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGludGVyYWN0cyB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsgb24gczM5MC5cblxuTGV0J3MgZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgYW5kIGp1bXAgc3RyYWlnaHQgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhhdCBmdW5jdGlvbidzIGxpa2VseSB0aGUga2V5LiBJdCdzIHdoZXJlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgYXJjaGl0ZWN0dXJlJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBzZWN1cml0eSBmZWF0dXJlcyBJJ20gaW50ZXJlc3RlZCBpbiBwcm9iYWJseSBjb252ZXJnZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBsb3ctZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjI1Ljc1MDgyMTY0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjUzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvZW50cnkuaD0yOT12b2lkIGRvX2RhdF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmFyY2gvczM5MC9rZXJuZWwvZW50cnkuaDozMDp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oLTMxLXZvaWQgZG9fbm9uX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmM9NDAxPXN0YXRpYyB2b2lkICgqcGdtX2NoZWNrX3RhYmxlWzEyOF0pKHN0cnVjdCBwdF9yZWdzICpyZWdzKSA9IHtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzctXFx0WzB4M2NdXFx0XFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmM6NDM4OlxcdFsweDNkXVxcdFxcdD0gZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzLFxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzktXFx0WzB4M2VdXFx0XFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00NDktXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jOjQ1MDpDT05EX1RSQVAoZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jPTQwND1OT0tQUk9CRV9TWU1CT0woZG9fZGF0X2V4Y2VwdGlvbik7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDctXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDA4OnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwOS17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NjgtfVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ2OTpOT0tQUk9CRV9TWU1CT0woZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjI1Ljg3NDQ4MzA0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzY0MDIzMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTZWN1cmUgU3RvcmFnZSBBY2Nlc3MgYW5kIEtWTSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGEgcHJvZ3JhbSBjaGVjayAweDNkLCB0aGUgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGV4Y2VwdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGhvdyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBpcyBoYW5kbGluZyBrZXJuZWwgZmF1bHRzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgemVyb3BhZGAgd2hpY2ggaXMgY291cGxlZCB3aXRoIGBEQ0FDSEVfV09SRF9BQ0NFU1NgLiBJIGdldCBpdCDigJMgYERDQUNIRV9XT1JEX0FDQ0VTU2AgZW5hYmxlZCBtZWFucyB0aGUga2VybmVsIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgYSBzdHJpbmcgYW5kIGhpdCBhbiB1bm1hcHBlZCBvciwgY3J1Y2lhbGx5LCBhICpzZWN1cmUqIHBhZ2UuIFRoYXQncyB3aGF0IHRyaWdnZXJzIHRoaXMgMHgzZC5cblxuVGhlIHBhdGNoJ3MgbW9kaWZpY2F0aW9uIG9mIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIG5vdyBjaGVja3MgYGlzX2tlcm5lbF9mYXVsdChyZWdzKWAuIElmIGl0ICppcyogYSBrZXJuZWwgZmF1bHQsIGFuZCBpZiBpdCdzIG5vdCBhIHZtYWxsb2MgYWRkcmVzcywgaXQgdHJpZXMgdG8gY29udmVydCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHNlY3VyZSBzcGFjZSB3aXRoIGB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpYCwgb3RoZXJ3aXNlLCByZXR1cm5zIGBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApYC5cblxuTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCwgYHV2X2FsbG9jX3N0b3JfdmFyYCwgYHV2X2ZyZWVfc3Rvcl92YXJgLCBhbmQgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGludGVyYWN0LCBhbmQgaWYgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSBLVk0gY2hhbmdlcy5cblxuTm93LCBgRENBQ0hFX1dPUkRfQUNDRVNTYCBpc24ndCBLVk0gc3BlY2lmaWMsIGl0IGlzIGEgZ2VuZXJpYyBmZWF0dXJlLiBCdXQgdGhlIHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBleGNlcHRpb24sIGlzIHRpZWQgdG8gVWx0cmF2aXNvciAoVVYpIGFuZCBLVk0gUFYuIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBhcmUgZXhwb3J0ZWQgZm9yIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZSBjb25maWdzIHRvIGVuYWJsZSwgdGhlcmVmb3JlLCB3aWxsIGJlIGBLVk1gIGZvciB0aGUgS1ZNIFBWIGNoYW5nZXMsIG9uIHRoaXMgczM5MCBhcmNoaXRlY3R1cmUuXG5cblNvLCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZXNlIGZ1bmN0aW9uczogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgaXMgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIG5vdCBhIGhvdC1wYXRoIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24uIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBhcmUgY2FsbGVkIGR1cmluZyBWTSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIGBleF9oYW5kbGVyX3plcm9wYWRgIGlzIGNhbGxlZCB3aGVuIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBoYXMgYSBwYWdlIGZhdWx0LCBhbHNvIGFuIGV4Y2VwdGlvbiBwYXRoLiBUaGlzIG1lYW5zIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBhZGQgdG8gYEZvY3VzU3ltYm9sc2AuXG5cbkkgYWxzbyBub3RpY2VkIGBrdm1fczM5MF9wdl9hbGxvY192bWAsIGBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtYCwgYW5kIGBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcmAgYXJlIG5vdyB1c2luZyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAuIEkgY2FuIGVpdGhlciBpbmNsdWRlIHRoZXNlIEtWTSBmdW5jdGlvbnMgYXMgZm9jdXMgcG9pbnRzLCBvciBqdXN0IHJlbHkgb24gdGhlIGluY2x1c2lvbiBvZiB0aGUgYHV2XypgIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLlxuXG5JIG5lZWQgdG8gcmV2aWV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgc3BlY2lmaWNhbGx5LCBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VjdXJlIHN0b3JhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MjUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MzUuNjM4NTA5ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTgzMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rZXJuZWwvdXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmM9MjQ1PXN0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTctXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI1ODp2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI1OS17XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjc0LX1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6Mjc1OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFxcXCJrdm1cXFwiKTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDozNS43Mzc3MDE2NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NjM3NjA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEV4Y2VwdGlvbiBIYW5kbGVyKipcblxuWWVzLCB0aGUgcHJvYmxlbSAqaXMqIGRlZmluaXRlbHkgbWFuaWZlc3RpbmcuIEknbSBzZWVpbmcgaXQuIE5vdywgbGV0J3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBleGNlcHRpb24gaGFuZGxlciByZXNwb25zaWJsZS4gVGhlIG1vc3QgbGlrZWx5IGN1bHByaXQgaW4gYSBTMzkwIGFyY2hpdGVjdHVyZSBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB6ZXJvLXBhZGRpbmcgaXNzdWVzLCBpcyBwcm9iYWJseSB0aGUgZXh0ZW5kZWQgdGFibGUgaGFuZGxlci4gSSB0aGluayBJIHdpbGwgY2hlY2sgYGV4X2hhbmRsZXJfemVyb3BhZGAgd2l0aGluIGBhcmNoL3MzOTAvbW0vZXh0YWJsZS5jYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyB0aG9zZSBleGNlcHRpb25zLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIHRoZSBleGNlcHRpb24sIGhvdyB0aGUga2VybmVsIGlzIHJlc3BvbmRpbmcsIGFuZCBpZiB0aGUgemVybyBwYWRkaW5nIGJlaGF2aW9yIGlzIGNhdXNpbmcgYW55IGlzc3VlcyB3aXRoaW4gdGhhdCBjb2RlIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjM4LjkwNDA4MjIzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjk1MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4X2hhbmRsZXJfemVyb3BhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vZXh0YWJsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9tbS9leHRhYmxlLmM9Mzk9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTItXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYzo1MzpzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYz0xMTk9Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzNy1cXHRjYXNlIEVYX1RZUEVfWkVST1BBRDpcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cXHRjYXNlIEVYX1RZUEVfRlBDOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDozOS4wNTQ3ODU5NDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMTAyNzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBbGlnbm1lbnQgU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCB5ZXAsIEkgc2VlIGl0LiBUaGUgY29yZSBpc3N1ZSBpcyByaWdodCB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGluZyB0aG9zZSBwb3RlbnRpYWxseSB1bmFsaWduZWQgYWNjZXNzZXMgYW5kIHRoZSB6ZXJvLXBhZGRpbmcgc3RyYXRlZ3kgYmVpbmcgZW1wbG95ZWQuIEl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgaGF6YXJkcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgc3BlY2lmaWMgbWV0aG9kIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgUy8zOTAncyBtZW1vcnkgbW9kZWwuIExldCdzIHNlZSBob3cgdGhleSd2ZSBvcHRpbWl6ZWQgaXQsIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBvciBwZXJoYXBzIGFueSBlZGdlIGNhc2VzIHRoZSBjdXJyZW50IGNvZGUgbWlnaHQgb3Zlcmxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzEwLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NDIuMzU1ODE2OTA1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3OTc4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9hZF91bmFsaWduZWRfemVyb3BhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaD0zOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemVyb19ieXRlbWFzayh1bnNpZ25lZCBsb25nIGRhdGEpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaC01MC0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaDo1MTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCB2b2lkICphZGRyKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oLTUyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NDIuNDU4NjI2MDM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTU0NjI3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5IbW0sIHRoaXMgZnVuY3Rpb24ncyBpbmxpbmUsIHNvIGl0J3MgcHJvYmFibHkgbm90IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgc3ltYm9sLiBUaGUgY29tcGlsZXIncyBsaWtlbHkgZ29pbmcgdG8gZm9sZCBpdCBhd2F5IGluIG1hbnkgY2FzZXMsIG1ha2luZyBpdCBoYXJkIHRvIHRyYWNrIGluIHRoZSBkaXNhc3NlbWJseSBvciBkZWJ1ZyBvdXRwdXQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSBjb25jcmV0ZSB0byBsYXRjaCBvbnRvLlxuXG5BbHJpZ2h0LCBsZXQncyBwaXZvdC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdXYuY2AgZmlsZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZS4uLiBgdXZfZnJlZV9yYW5nZV9jYmAgYW5kIGB1dl9hbGxvY19yYW5nZV9jYmAgYXJlIHByb2JhYmx5IHJlbGV2YW50IGNhbGxiYWNrcyBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYC4gSSdsbCBzdGFydCB0aGVyZS4gSSdtIGd1ZXNzaW5nIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIHRob3NlLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsICpjb3VsZCogcHJvdmlkZSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQncyBzZWUgaWYgdGhvc2UgYXJlIHdvcnRoIG15IHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NDUuODE0MDkyNzU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYyOTM3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfZnJlZV9yYW5nZV9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTIwNz1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9wdGUocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTIxMi1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MjEzOnN0YXRpYyBpbnQgdXZfZnJlZV9yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yMTQte1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTIyOD12b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjM5LVxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVxcdTAwM2VhZGRyO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNDA6XFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI0MS1cXHRmcmVlX3ZtX2FyZWEoYXJlYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjQ1Ljk2MDM5NjI0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDcwODQ3Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2VzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzdGF0aWMgY2FsbGJhY2tzLCBhbmQgeWVzLCB3ZSBjYW4gZGVmaW5pdGVseSBpbmNsdWRlIHRob3NlLiBMZXQgbWUgc2VlLi4uIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBoZXJlIGFyZTogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYHV2X2FsbG9jX3JhbmdlX2NiYCwgYHV2X2ZyZWVfcmFuZ2VfY2JgLCBhbmQgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEdvdCBpdC5cblxuTm93LCB0aGUgY29uZmlnIGl0ZW0gd2UncmUgZm9jdXNpbmcgb24gaXMgYEtWTWAuIExldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBlbmFibGVzIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIHNwZWNpZmljYWxseSBmb3IgczM5MCwgYW5kIGl0IGFkZHMgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBoYW5kbGVyLCBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gRnVydGhlciwgaXQncyBtb2RpZnlpbmcgS1ZNJ3MgUFYgdmFyaWFibGUgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGxldmVyYWdlIHRob3NlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLiBBbmQgb2YgY291cnNlLCB0aGVyZSdzIGFuIHVwZGF0ZSB0byBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cy5cblxuRXNzZW50aWFsbHksIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgb24gczM5MCwgYW5kIG9mIGNvdXJzZSB3aXRoIEtWTS4gVGhpcyBoYXMgdG8gYmUgY29uc2lkZXJlZCB0byBhZmZlY3QgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYEtWTWAgaXMgdGhlICpvbmx5KiBjb25maWcgdGhhdCdzIHJlcXVpcmVkLiBMZXQncyBkaWcgaW4gYSBiaXQuIEl0IGxvb2tzIGxpa2UgYERDQUNIRV9XT1JEX0FDQ0VTU2AgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgUzM5MGAgd2hlbiBgIUtNU0FOYC4gU28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBlbmFibGluZyB0aGF0IGV4cGxpY2l0bHkuIEl0J3MgaGFuZGxlZCBieSBkZWZhdWx0IG9uIHMzOTAgdW5sZXNzIEtNU0FOIGlzIGFjdGl2ZS4gUGVyZmVjdC5cblxuVGhlIGBLVk1gIGNvbmZpZyBpcyBjbGVhcmx5IG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgYXJjaC9zMzkwL2t2bS9wdi5jYCBmaWxlLiBTbyBpdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBjcml0aWNhbCBpdGVtIHRvIGVuc3VyZSBpcyBlbmFibGVkLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxOSwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NTMuNDMxMjQ3NTY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4Mjk3Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NcIixcbiAgICBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9mcmVlX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9hbGxvY19yYW5nZV9jYlwiLFxuICAgIFwidXZfZnJlZV9yYW5nZV9jYlwiLFxuICAgIFwiZXhfaGFuZGxlcl96ZXJvcGFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICAgIFwidXZfYWxsb2Nfc3Rvcl92YXJcIixcbiAgICBcInV2X2ZyZWVfc3Rvcl92YXJcIixcbiAgICBcInV2X2FsbG9jX3JhbmdlX2NiXCIsXG4gICAgXCJ1dl9mcmVlX3JhbmdlX2NiXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIERDQUNIRV9XT1JEX0FDQ0VTUyBmb3IgczM5MCwgaW50cm9kdWNpbmcgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFuZCBpdHMgZXhjZXB0aW9uIGhhbmRsZXIgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEl0IGFsc28gbW9kaWZpZXMgS1ZNIFBWIHZhcmlhYmxlIHN0b3JhZ2UgYWxsb2NhdGlvbiB0byB1c2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFuZCB1cGRhdGVzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIHRvIGhhbmRsZSBrZXJuZWwgZmF1bHRzIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIGFzIHdlbGwgYXMgS1ZNLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 10:55:44 +0000 UTC FinishedAt: 2026-07-20 11:30:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "25f744ffa0c8e799e06250ce2e618367b166b0d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "999f4cef-6328-4284-a036-c06f024eba95" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "do_secure_storage_access", "uv_alloc_stor_var", "uv_free_stor_var", "uv_alloc_range_cb", "uv_free_range_cb", "ex_handler_zeropad" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt1dl9hbGxvY19zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDt1dl9mcmVlX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2FsbG9jX3JhbmdlX2NiJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfcmFuZ2VfY2ImIzM0OywKICAgICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgRENBQ0hFX1dPUkRfQUNDRVNTIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgYW5kIGl0cyBleGNlcHRpb24gaGFuZGxlciBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gSXQgYWxzbyBtb2RpZmllcyBLVk0gUFYgdmFyaWFibGUgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIHVzZSBuZXcgYHV2X2FsbG9jX3N0b3JfdmFyYCBhbmQgYHV2X2ZyZWVfc3Rvcl92YXJgIGZ1bmN0aW9ucywgYW5kIHVwZGF0ZXMgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgdG8gaGFuZGxlIGtlcm5lbCBmYXVsdHMgY29ycmVjdGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZywgYXMgd2VsbCBhcyBLVk0sIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBWRlMgb3BlcmF0aW9ucyBhbmQgS1ZNIFZNIGxpZmVjeWNsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljMDQ1OTU1ZWM2MmY1MDM3YjViYmY4MTQ0MTg1NWUyZWQ0ZDU4ODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxMTozMDowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZmU4MWM1MzllZjJmZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNjMsNiAmIzQzOzE2Myw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUFxuIFx0c2VsZWN0IEJVSUxEVElNRV9UQUJMRV9TT1JUXG4gXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxuJiM0MztcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOXG4gXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4gXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzhCIGlmIENDX0lTX0dDQ1xuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXHQzXG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHXHQ1XG4gI2RlZmluZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUlx0NlxuJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRFx0XHQ3XG4gI2RlZmluZSBFWF9UWVBFX0ZQQ1x0XHQ4XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPXHQ5XG4gI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX0ZST01cdDEwXG5AQCAtNzksNiAmIzQzOzgwLDkgQEBcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApXG4gXG4mIzQzOyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcdFx0XFxcbiYjNDM7XHRfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9aRVJPUEFELCBfcmVnZGF0YSwgX3JlZ2FkZHIsIDApXG4mIzQzO1xuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcdFx0XHRcdFx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuQEAgLTYzNSw2ICYjNDM7NjM1LDggQEAgaW50IHMzOTBfd2lnZ2xlX3NwbGl0X2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbiBpbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKTtcbiBcbiB2b2lkIHNldHVwX3V2KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLWV4dGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9iaXRzcGVybG9uZy5oXHUwMDNlXG4gXG4gc3RydWN0IHdvcmRfYXRfYV90aW1lIHtcbkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuIFx0cmV0dXJuIH4xVUwgXHUwMDNjXHUwMDNjIGRhdGE7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBMb2FkIGFuIHVuYWxpZ25lZCB3b3JkIGZyb20ga2VybmVsIHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXJcbiYjNDM7ICogYW5kIHRoZSBuZXh0IHBhZ2Ugbm90IGJlaW5nIG1hcHBlZCwgdGFrZSB0aGUgZXhjZXB0aW9uIGFuZFxuJiM0MzsgKiByZXR1cm4gemVyb2VzIGluIHRoZSBub24tZXhpc3RpbmcgcGFydC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGNvbnN0IHZvaWQgKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRhdGE7XG4mIzQzO1xuJiM0MztcdGFzbV9pbmxpbmUgdm9sYXRpbGUoXG4mIzQzO1x0XHRcJiMzNDswOlx0bGdcdCVbZGF0YV0sMCglW2FkZHJdKVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7MTpcdG5vcHJcdCUlcjdcXG5cJiMzNDtcbiYjNDM7XHRcdEVYX1RBQkxFX1pFUk9QQUQoMGIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuJiM0MztcdFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXG4mIzQzO1x0XHQ6IFtkYXRhXSBcJiMzNDs9ZFwmIzM0OyAoZGF0YSlcbiYjNDM7XHRcdDogW2FkZHJdIFwmIzM0O2FcJiMzNDsgKGFkZHIpLCBcJiMzNDttXCYjMzQ7ICgqKHVuc2lnbmVkIGxvbmcgKilhZGRyKSk7XG4mIzQzO1x0cmV0dXJuIGRhdGE7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gdXZfY29udmVydF9mcm9tX3NlY3VyZV9mb2xpbyhwZm5fZm9saW8ocHRlX3BmbihwdGUpKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHV2X2ZyZWVfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHB0ZV90IHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoXG4mIzQzO1x0ICogYWNjZXNzZXMgdGhlIG1lbW9yeSByYW5nZSwgYmVzaWRlcyBidWdzLiBUaGUgaW52YWxpZGF0aW9uIG9mIHB0ZXNcbiYjNDM7XHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX2ZyZWVfcGFnZShwdGVfcGFnZShwdGUpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyLCBzaXplO1xuJiM0MztcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XG4mIzQzO1xuJiM0MztcdGlmICghc3Rvcl92YXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYXJlYSB8fCAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX1NQQVJTRSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xuJiM0MztcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVx1MDAzZWFkZHI7XG4mIzQzO1x0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9mcmVlX3JhbmdlX2NiLCBOVUxMKTtcbiYjNDM7XHRmcmVlX3ZtX2FyZWEoYXJlYSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyh1dl9mcmVlX3N0b3JfdmFyLCBcJiMzNDtrdm1cJiMzNDspO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0cHRlX3QgcHRlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4mIzQzO1x0YXJlYSA9IGdldF92bV9hcmVhKHNpemUsIFZNX1NQQVJTRSk7XG4mIzQzO1x0aWYgKCFhcmVhKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbiYjNDM7XHRpZiAoYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXR1cm4gYXJlYS1cdTAwM2VhZGRyO1xuJiM0MztvdXQ6XG4mIzQzO1x0dXZfZnJlZV9zdG9yX3ZhcihhcmVhLVx1MDAzZWFkZHIpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwmIzM0O2t2bVwmIzM0Oyk7XG4mIzQzO1xuIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCByZWZfY291bnQgZm9yIGEgZm9saW8gdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBub1xuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NTAuLmRjNWFjMjliNGMzMTE4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0zMzcsNyAmIzQzOzMzNyw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLVx0dmZyZWUoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xuIFx0ZnJlZV9wYWdlcyhrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4gXHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKGt2bSk7XG5AQCAtMzY5LDcgJiM0MzszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2FsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdC8qIEFsbG9jYXRlIHZhcmlhYmxlIHN0b3JhZ2UgKi9cbiBcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XG4gXHR2bGVuICYjNDM7PSB1dl9pbmZvLmd1ZXN0X3ZpcnRfYmFzZV9zdG9yX2xlbjtcbi1cdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xuIFx0aWYgKCFrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDE0LDcgJiM0Mzs0MTQsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqL1xuIFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cdTAwM2VzdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlb2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpO1xuLVx0dmZyZWUobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuJiM0MztcdHV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuIGRvbmVfZmFzdDpcbiBcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZW1tLVx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5pbmRleCAwNjNiNDM0Njc0MmQ5Ni4uNzQ5OGU4NThjNDAxOTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXG5AQCAtNTAsNiAmIzQzOzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGV4X2hhbmRsZXJfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmVnX2FkZHIgPSBGSUVMRF9HRVQoRVhfREFUQV9SRUdfQUREUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlZ19kYXRhID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0VSUiwgZXgtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSByZWdzLVx1MDAzZWdwcnNbcmVnX2FkZHJdO1xuJiM0MztcdG9mZnNldCA9IGFkZHIgXHUwMDI2IChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRhZGRyIFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcbiYjNDM7XHRkYXRhID0gKih1bnNpZ25lZCBsb25nICopYWRkcjtcbiYjNDM7XHRkYXRhIFx1MDAzY1x1MDAzYz0gQklUU19QRVJfQllURSAqIG9mZnNldDtcbiYjNDM7XHRyZWdzLVx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcbiYjNDM7XHRyZWdzLVx1MDAzZXBzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZXhfaGFuZGxlcl9mcGMoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdGZwdV9zZnBjKDApO1xuQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxuIFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XG4mIzQzO1x0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG4mIzQzO1x0XHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9GUEM6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTVZDT1NfVE86XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjY2NmZlOGU5OTQ4MDE5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDA5LDkgJiM0Mzs0MDksOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHR1bmlvbiB0ZWlkIHRlaWQgPSB7IC52YWwgPSByZWdzLVx1MDAzZWludF9wYXJtX2xvbmcgfTtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRpbnQgcmM7XG4gXG5AQCAtNDI3LDEwICYjNDM7NDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdCAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlXG4gXHRcdCAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC5cbiBcdFx0ICovXG4tXHRcdGlmICh1c2VyX21vZGUocmVncykpIHtcbi1cdFx0XHRzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbiYjNDM7XHRcdGlmICh1c2VyX21vZGUocmVncykpXG4mIzQzO1x0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfQUNDRVJSKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlIGtlcm5lbCBzaG91bGQgbmV2ZXIgcnVuIGludG8gdGhpcyBjYXNlIGFuZFxuIFx0XHQgKiB0aGVyZSBpcyBubyB3YXkgb3V0IG9mIHRoaXMgc2l0dWF0aW9uLlxuQEAgLTQzOCwxMyAmIzQzOzQzNiw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRwYW5pYyhcJiMzNDtVbmV4cGVjdGVkIFBHTSAweDNkIHdpdGggVEVJRCBiaXQgNjE9MFwmIzM0Oyk7XG4gXHR9XG4gXHRpZiAoaXNfa2VybmVsX2ZhdWx0KHJlZ3MpKSB7XG4tXHRcdGZvbGlvID0gdmlydF90b19mb2xpbygodm9pZCAqKWFkZHIpO1xuLVx0XHRpZiAodW5saWtlbHkoIWZvbGlvX3RyeV9nZXQoZm9saW8pKSlcbi1cdFx0XHRyZXR1cm47XG4tXHRcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShmb2xpb190b19waHlzKGZvbGlvKSk7XG4tXHRcdGlmICghcmMpXG4tXHRcdFx0Y2xlYXJfYml0KFBHX2FyY2hfMSwgXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApO1xuJiM0MztcdFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGVyZSBhcmUgc29tZSB2YWxpZCBmaXh1cCB0eXBlcyBmb3Iga2VybmVsXG4gXHRcdCAqIGFjY2Vzc2VzIHRvIGRvbmF0ZWQgc2VjdXJlIG1lbW9yeS4gemVyb3BhZCBpcyBvbmVcbkBAIC00NTMsMjUgJiM0Mzs0NDcsMjIgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcbiYjNDM7XHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSB8fCAhbW0pXG4gXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4tXHRcdG1tID0gY3VycmVudC1cdTAwM2VtbTtcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4mIzQzO1x0XHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkciwgcmVncyk7XG4gXHRcdGlmICghdm1hKVxuLVx0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9NQVBFUlIpO1xuJiM0MztcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX01BUEVSUik7XG4gXHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKCFmb2xpbylcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHRcdC8qIGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKCkgbmVlZHMgYSByYWlzZWQgcmVmY291bnQuICovXG4gXHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdHJjID0gYXJjaF9tYWtlX2ZvbGlvX2FjY2Vzc2libGUoZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbiBcdFx0aWYgKHJjKVxuLVx0XHRcdHNlbmRfc2lnKFNJR1NFR1YsIGN1cnJlbnQsIDApO1xuJiM0MztcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfQUNDRVJSKTtcbiYjNDM7b3V0OlxuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiBcdH1cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfYWxsb2NfcmFuZ2VfY2ImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9yYW5nZV9jYiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX3plcm9wYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzA0NTk1NWVjNjJmNTAzN2I1YmJmODE0NDE4NTVlMmVkNGQ1ODgyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjAgMTE6MzA6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5mZTgxYzUzOWVmMmZmYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE2Myw2ICYjNDM7MTYzLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9XQU5UU19USFBfU1dBUAogCXNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVAogCXNlbGVjdCBDTE9ORV9CQUNLV0FSRFMyCiYjNDM7CXNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOCiAJc2VsZWN0IERZTkFNSUNfRlRSQUNFIGlmIEZVTkNUSU9OX1RSQUNFUgogCXNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDCiAJc2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaAppbmRleCA5OTc0OGMyMGU3NjcxMy4uZDIzZWEwYzk0ZTRlYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUCTMKICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFRwk1CiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSCTYKJiM0MzsjZGVmaW5lIEVYX1RZUEVfWkVST1BBRAkJNwogI2RlZmluZSBFWF9UWVBFX0ZQQwkJOAogI2RlZmluZSBFWF9UWVBFX1VBX01WQ09TX1RPCTkKICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NCTEwCkBAIC03OSw2ICYjNDM7ODAsOSBAQAogI2RlZmluZSBFWF9UQUJMRV9VQV9MT0FEX1JFR1BBSVIoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZXJyLCBfcmVnemVybykJXAogCV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApCiAKJiM0MzsjZGVmaW5lIEVYX1RBQkxFX1pFUk9QQUQoX2ZhdWx0LCBfdGFyZ2V0LCBfcmVnZGF0YSwgX3JlZ2FkZHIpCQlcCiYjNDM7CV9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMCkKJiM0MzsKICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldCkJCQkJCVwKIAlfX0VYX1RBQkxFKF9fZXhfdGFibGUsIF9mYXVsdCwgX3RhcmdldCwgRVhfVFlQRV9GUEMsIF9fc3RyaW5naWZ5KCUlcjApLCBfX3N0cmluZ2lmeSglJXIwKSwgMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaAppbmRleCBkOTE5ZTY5NjYyZjU4NC4uMTUzZmVkNjNhZGRhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oCkBAIC02MzUsNiAmIzQzOzYzNSw4IEBAIGludCBzMzkwX3dpZ2dsZV9zcGxpdF9mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTsKIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIpOwogaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKTsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpOwogCiB2b2lkIHNldHVwX3V2KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oCmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2FzbS1leHRhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2JpdHNwZXJsb25nLmgmZ3Q7CiAKIHN0cnVjdCB3b3JkX2F0X2FfdGltZSB7CkBAIC00MCw0ICYjNDM7NDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKQogCXJldHVybiB+MVVMICZsdDsmbHQ7IGRhdGE7CiB9CiAKJiM0MzsvKgomIzQzOyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBJbiB0aGUgKHZlcnkgdW5saWtlbHkpIGNhc2Ugb2YgdGhlIHdvcmQgYmVpbmcgYSBwYWdlLWNyb3NzZXIKJiM0MzsgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kCiYjNDM7ICogcmV0dXJuIHplcm9lcyBpbiB0aGUgbm9uLWV4aXN0aW5nIHBhcnQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGF0YTsKJiM0MzsKJiM0MzsJYXNtX2lubGluZSB2b2xhdGlsZSgKJiM0MzsJCSYjMzQ7MDoJbGcJJVtkYXRhXSwwKCVbYWRkcl0pXG4mIzM0OwomIzQzOwkJJiMzNDsxOglub3ByCSUlcjdcbiYjMzQ7CiYjNDM7CQlFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSkKJiM0MzsJCUVYX1RBQkxFX1pFUk9QQUQoMWIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKQomIzQzOwkJOiBbZGF0YV0gJiMzNDs9ZCYjMzQ7IChkYXRhKQomIzQzOwkJOiBbYWRkcl0gJiMzNDthJiMzNDsgKGFkZHIpLCAmIzM0O20mIzM0OyAoKih1bnNpZ25lZCBsb25nICopYWRkcikpOwomIzQzOwlyZXR1cm4gZGF0YTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX0FTTV9XT1JEX0FUX0FfVElNRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2ODAuLmQxY2RjNWFlNWUyNzBjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3N3YXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JhY2tpbmctZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDthc20vZmFjaWxpdHkuaCZndDsKICNpbmNsdWRlICZsdDthc20vc2VjdGlvbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vdXYuaCZndDsKQEAgLTIwOSw2ICYjNDM7MjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpCiAJcmV0dXJuIHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfZm9saW8ocGZuX2ZvbGlvKHB0ZV9wZm4ocHRlKSkpOwogfQogCiYjNDM7c3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlwdGVfdCBwdGUgPSBwdGVwX2dldChwdGVwKTsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfcHJlc2VudChwdGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoCiYjNDM7CSAqIGFjY2Vzc2VzIHRoZSBtZW1vcnkgcmFuZ2UsIGJlc2lkZXMgYnVncy4gVGhlIGludmFsaWRhdGlvbiBvZiBwdGVzCiYjNDM7CSAqIGFuZCBUTEIgZmx1c2hpbmcgaXMgZGVmZXJyZWQgbGlrZSBmb3IgcmVndWxhciB2ZnJlZSgpIGNhbGxzLgomIzQzOwkgKi8KJiM0MzsJX19mcmVlX3BhZ2UocHRlX3BhZ2UocHRlKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CiYjNDM7CWlmICghc3Rvcl92YXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWFyZWEgPSBmaW5kX3ZtX2FyZWEoc3Rvcl92YXIpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFhcmVhIHx8ICEoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgVk1fU1BBUlNFKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpOwomIzQzOwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0mZ3Q7YWRkcjsKJiM0MzsJYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGFkZHIsIHNpemUsIHV2X2ZyZWVfcmFuZ2VfY2IsIE5VTEwpOwomIzQzOwlmcmVlX3ZtX2FyZWEoYXJlYSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfZnJlZV9zdG9yX3ZhciwgJiMzNDtrdm0mIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXB0ZV90IHB0ZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlwdGUgPSBfX3B0ZShwYWdlX3RvX3BoeXMocGFnZSkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSk7CiYjNDM7CXNldF9wdGUocHRlcCwgcHRlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcjsKJiM0MzsKJiM0MzsJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiYjNDM7CWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9TUEFSU0UpOwomIzQzOwlpZiAoIWFyZWEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7CiYjNDM7CWlmIChhcHBseV90b19wYWdlX3JhbmdlKCZhbXA7aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfYWxsb2NfcmFuZ2VfY2IsIE5VTEwpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldHVybiBhcmVhLSZndDthZGRyOwomIzQzO291dDoKJiM0MzsJdXZfZnJlZV9zdG9yX3ZhcihhcmVhLSZndDthZGRyKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsICYjMzQ7a3ZtJiMzNDspOwomIzQzOwogLyoKICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgcmVmX2NvdW50IGZvciBhIGZvbGlvIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgbm8KICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpbgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jCmluZGV4IDFiZWFjYzg0MWNhODUwLi5kYzVhYzI5YjRjMzExOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHYuYwpAQCAtMzM3LDcgJiM0MzszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogLyogb25seSBmcmVlIHJlc291cmNlcyB3aGVuIHRoZSBkZXN0cm95IHdhcyBzdWNjZXNzZnVsICovCiBzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQl2ZnJlZShrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpOwomIzQzOwl1dl9mcmVlX3N0b3JfdmFyKGt2bS0mZ3Q7YXJjaC5wdi5zdG9yX3Zhcik7CiAJZnJlZV9wYWdlcyhrdm0tJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAogCQkgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJa3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTsKQEAgLTM2OSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9hbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pCiAJLyogQWxsb2NhdGUgdmFyaWFibGUgc3RvcmFnZSAqLwogCXZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7CiAJdmxlbiAmIzQzOz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47Ci0Ja3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdnphbGxvYyh2bGVuKTsKJiM0MzsJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gdXZfYWxsb2Nfc3Rvcl92YXIodmxlbik7CiAJaWYgKCFrdm0tJmd0O2FyY2gucHYuc3Rvcl92YXIpCiAJCWdvdG8gb3V0X2VycjsKIAlyZXR1cm4gMDsKQEAgLTQxNCw3ICYjNDM7NDE0LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcihzdHJ1Y3Qga3ZtICprdm0sCiAJICovCiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7c3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7CiAJZnJlZV9wYWdlcyhsZWZ0b3Zlci0mZ3Q7b2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpOwotCXZmcmVlKGxlZnRvdmVyLSZndDtzdG9yX3Zhcik7CiYjNDM7CXV2X2ZyZWVfc3Rvcl92YXIobGVmdG92ZXItJmd0O3N0b3JfdmFyKTsKIGRvbmVfZmFzdDoKIAlhdG9taWNfZGVjKCZhbXA7a3ZtLSZndDttbS0mZ3Q7Y29udGV4dC5wcm90ZWN0ZWRfY291bnQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dGFibGUuYyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmMKQEAgLTUwLDYgJiM0Mzs1MCwyMiBAQCBzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC0mZ3Q7ZGF0YSk7CiYjNDM7CXVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LSZndDtkYXRhKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7CiYjNDM7CiYjNDM7CWFkZHIgPSByZWdzLSZndDtncHJzW3JlZ19hZGRyXTsKJiM0MzsJb2Zmc2V0ID0gYWRkciAmYW1wOyAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWFkZHIgJmFtcDs9IH4oc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7CiYjNDM7CWRhdGEgPSAqKHVuc2lnbmVkIGxvbmcgKilhZGRyOwomIzQzOwlkYXRhICZsdDsmbHQ7PSBCSVRTX1BFUl9CWVRFICogb2Zmc2V0OwomIzQzOwlyZWdzLSZndDtncHJzW3JlZ19kYXRhXSA9IGRhdGE7CiYjNDM7CXJlZ3MtJmd0O3Bzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlmcHVfc2ZwYygwKTsKQEAgLTExOCw2ICYjNDM7MTM0LDggQEAgYm9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCBmYWxzZSwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUjoKIAkJcmV0dXJuIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoZXgsIHRydWUsIHJlZ3MpOwomIzQzOwljYXNlIEVYX1RZUEVfWkVST1BBRDoKJiM0MzsJCXJldHVybiBleF9oYW5kbGVyX3plcm9wYWQoZXgsIHJlZ3MpOwogCWNhc2UgRVhfVFlQRV9GUEM6CiAJCXJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7CiAJY2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCAwMjhhZWI5YzQ4ZDZmZi4uNjY2ZmU4ZTk5NDgwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC00MDksOSAmIzQzOzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtJmd0O2ludF9wYXJtX2xvbmcgfTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LSZndDttbTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApAQCAtNDI3LDEwICYjNDM7NDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCSAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlCiAJCSAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC4KIAkJICovCi0JCWlmICh1c2VyX21vZGUocmVncykpIHsKLQkJCXNlbmRfc2lnKFNJR1NFR1YsIGN1cnJlbnQsIDApOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAodXNlcl9tb2RlKHJlZ3MpKQomIzQzOwkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfQUNDRVJSKTsKIAkJLyoKIAkJICogVGhlIGtlcm5lbCBzaG91bGQgbmV2ZXIgcnVuIGludG8gdGhpcyBjYXNlIGFuZAogCQkgKiB0aGVyZSBpcyBubyB3YXkgb3V0IG9mIHRoaXMgc2l0dWF0aW9uLgpAQCAtNDM4LDEzICYjNDM7NDM2LDkgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXBhbmljKCYjMzQ7VW5leHBlY3RlZCBQR00gMHgzZCB3aXRoIFRFSUQgYml0IDYxPTAmIzM0Oyk7CiAJfQogCWlmIChpc19rZXJuZWxfZmF1bHQocmVncykpIHsKLQkJZm9saW8gPSB2aXJ0X3RvX2ZvbGlvKCh2b2lkICopYWRkcik7Ci0JCWlmICh1bmxpa2VseSghZm9saW9fdHJ5X2dldChmb2xpbykpKQotCQkJcmV0dXJuOwotCQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpOwotCQlpZiAoIXJjKQotCQkJY2xlYXJfYml0KFBHX2FyY2hfMSwgJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0JCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQlpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpCiYjNDM7CQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7CiYjNDM7CQlyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoX19wYShhZGRyKSk7CiAJCS8qCiAJCSAqIFRoZXJlIGFyZSBzb21lIHZhbGlkIGZpeHVwIHR5cGVzIGZvciBrZXJuZWwKIAkJICogYWNjZXNzZXMgdG8gZG9uYXRlZCBzZWN1cmUgbWVtb3J5LiB6ZXJvcGFkIGlzIG9uZQpAQCAtNDUzLDI1ICYjNDM7NDQ3LDIyIEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlpZiAocmMpCiAJCQlyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTsKIAl9IGVsc2UgewotCQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkpCiYjNDM7CQlpZiAoZmF1bHRoYW5kbGVyX2Rpc2FibGVkKCkgfHwgIW1tKQogCQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7Ci0JCW1tID0gY3VycmVudC0mZ3Q7bW07Ci0JCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwomIzQzOwkJdm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpOwogCQlpZiAoIXZtYSkKLQkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9NQVBFUlIpOwomIzQzOwkJCXJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTsKIAkJZm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KCZhbXA7ZncsIHZtYSwgYWRkciwgMCk7Ci0JCWlmICghZm9saW8pIHsKLQkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAoIWZvbGlvKQomIzQzOwkJCWdvdG8gb3V0OwogCQkvKiBhcmNoX21ha2VfZm9saW9fYWNjZXNzaWJsZSgpIG5lZWRzIGEgcmFpc2VkIHJlZmNvdW50LiAqLwogCQlmb2xpb19nZXQoZm9saW8pOwogCQlyYyA9IGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKGZvbGlvKTsKIAkJZm9saW9fcHV0KGZvbGlvKTsKIAkJZm9saW9fd2Fsa19lbmQoJmFtcDtmdywgdm1hKTsKIAkJaWYgKHJjKQotCQkJc2VuZF9zaWcoU0lHU0VHViwgY3VycmVudCwgMCk7CiYjNDM7CQkJcmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcihyZWdzLCBTRUdWX0FDQ0VSUik7CiYjNDM7b3V0OgogCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKIAl9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzMzkwIEFyY2hpdGVjdHVyZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRhcmdldGluZyB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgZmV3IGtleSBhZGRpdGlvbnM6IGBEQ0FDSEVfV09SRF9BQ0NFU1NgLCB3aGljaCBpcyBub3cgYmVpbmcgZW5hYmxlZCBmb3IgczM5MCB3aGVuIEtNU0FOIGlzbiYjMzk7dCBpbiBwbGF5LCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSB3aXRoIGBFWF9UWVBFX1pFUk9QQURgIGFuZCBgRVhfVEFCTEVfWkVST1BBRGAsIG5ldyBmdW5jdGlvbnMgZm9yIHZhcmlhYmxlIHN0b3JhZ2UgbWFuYWdlbWVudCAoYHV2X2FsbG9jX3N0b3JfdmFyYCBhbmQgYHV2X2ZyZWVfc3Rvcl92YXJgKSBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgZm9yIHdvcmQtYXQtYS10aW1lIGFjY2VzcyB3aXRoaW4gdGhlIGRjYWNoZS4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYSBmZXcgS1ZNIFBWLXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSB2aXJ0dWFsIG1hY2hpbmVzLCB0byB1c2UgdGhlc2UgbmV3IHN0b3JhZ2UgZnVuY3Rpb25zLiBXZSYjMzk7dmUgZ290IGNoYW5nZXMgaW4gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIChgZXhfaGFuZGxlcl96ZXJvcGFkYCkgYW5kIHRoZSBzZWN1cmUgc3RvcmFnZSBhY2Nlc3MgZnVuY3Rpb24gKGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgKSBhcyB3ZWxsLgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHByZXR0eSBjbGVhcjogdGhpcyBpcyBhYm91dCBLVk0gUFYgY29kZSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBzZWN1cmUgc3RvcmFnZSBhY2Nlc3Mgb24gczM5MC4gYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGlzIGtleSBoZXJlLCBkaXJlY3RseSBpbXBhY3RpbmcgYERDQUNIRV9XT1JEX0FDQ0VTU2AsIG1lYW5pbmcgdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciAqYWxsKiBWRlMgcGF0aCBsb29rdXBzIG9uIHMzOTB4IG5vdyB0aGF0IHRoZSB3b3JkLWF0LWEtdGltZSBmZWF0dXJlIGlzIHByZXNlbnQuIEl0JiMzOTtzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCByZWFkeSB0byBjYXVzZSBzb21lIGludGVyZXN0aW5nIHJlc3VsdHMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHkuIEdpdmVuIHRoYXQgUUVNVSBzdXBwb3J0cyBzMzkweCwgYW5kIHdlIGNhbiB0ZXN0IEtWTSBvbiBzMzkweCB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciwgd2FpdCwgd2FzbiYjMzk7dCBzeXprYWxsZXIgcnVubmluZyBvbiBzMzkweD8gWWVzISBUaGF0JiMzOTtzIHBlcmZlY3QuIFRoZSBjaGFuZ2VzIHRvIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGFuZCBgdXZfYWxsb2Nfc3Rvcl92YXJgIGNsZWFybHkgdGllIGludG8gS1ZNIFBWLiBBbmQgdGhlIGRjYWNoZSBjaGFuZ2VzIG1lYW4gKmV2ZXJ5KiBWRlMgbG9va3VwIG9uIHMzOTB4IGlzIGFmZmVjdGVkLgoKU28sIHdoZXJlIGRvIHdlIGZvY3VzPyBJIHRoaW5rIHRoZXNlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zOiBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCwgYHV2X2FsbG9jX3N0b3JfdmFyYCwgYHV2X2ZyZWVfc3Rvcl92YXJgLCBhbmQgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIChldmVuIGlmIGl0JiMzOTtzIGlubGluZSwgaXQmIzM5O3MgdXNlZCBpbiB0aGUgVkZTISkuIGBleF9oYW5kbGVyX3plcm9wYWRgLCBpcyBhbHNvIGEgZ29vZCB0YXJnZXQgYmVpbmcgYW4gZXhjZXB0aW9uIGhhbmRsZXIuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYEtjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgb2YgYERDQUNIRV9XT1JEX0FDQ0VTU2Agb24gYFMzOTBgIGFuZCB0aGUgZXhjbHVzaW9uIG9mIGBLTVNBTmAuIEFuZCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIEtWTSBjb25maWdzIGZvciBzMzkwLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYENPTkZJR19LVk1gIHRoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGUgcHYuYyBjb2RlLCBub3RoaW5nIGV4b3RpYy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgaWYgYHV2X2FsbG9jX3N0b3JfdmFyYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBtYWtlZmlsZXMgYW5kIEtjb25maWcgc2hvdWxkIGRvIHRoZSB0cmljay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU9NDU9b2JqLXlcdCYjNDM7PSBub3NwZWMtYnJhbmNoLm8gaXBsX3ZtcGFybS5vIG1hY2hpbmVfa2V4ZWNfcmVsb2MubyB1bndpbmRfYmMub1xuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZTo0NjpvYmoteVx0JiM0Mzs9IHNtcC5vIHRleHRfYW1vZGUzMS5vIHN0YWNrdHJhY2UubyBhYnNfbG93Y29yZS5vIGZhY2lsaXR5Lm8gdXYubyB3dGkub1xuYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZS00Ny1vYmoteVx0JiM0Mzs9IGRpYWcvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBc3Nlc3NpbmcgQnVpbGQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgdXYub2AuLi4gdGhhdCYjMzk7cyBhbHdheXMgYnVpbHQgb24gczM5MCwgbm8gcXVlc3Rpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgZW52aXJvbm1lbnQgdGhlcmUsIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZiB0aGF0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGF0IGFib3V0IGBwdi5jYD8gSXMgaXQgYWxzbyByaWdpZGx5IHRpZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgZmxleGliaWxpdHkgdGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyB0YXJnZXQgZW52aXJvbm1lbnQuIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBzMzkwIGludHJpbnNpY3MsIGFzc2VtYmx5IGxhbmd1YWdlLCBvciBwbGF0Zm9ybS1kZXBlbmRlbnQgbGlicmFyaWVzPyBPciBpcyBpdCB3cml0dGVuIGluIGEgd2F5IHRoYXQgYWxsb3dzIGZvciBicm9hZGVyIHBvcnRhYmlsaXR5IHdpdGggbWluaW1hbCBlZmZvcnQ/IEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBidWlsZCBwcm9jZXNzIGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLi4uIHRpbWUgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IG9uIHRoYXQgc3BlY2lmaWMgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGU9MTA9a3ZtLXkgJiM0Mzs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMTprdm0teSAmIzQzOz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTEyLWt2bS15ICYjNDM7PSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS1ZNLVJlbGF0ZWQgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIGBwdi5vYCBpcyBjbGVhcmx5IHRpZWQgaW50byBga3ZtLXlgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgaWYgYENPTkZJR19LVk1gIGlzIHNldC4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBncmFudWxhcml0eSBvZiB0aGUgaW5jbHVzaW9uLiBJcyBpdCBqdXN0IGVuYWJsZWQgKndoZW4qIGBDT05GSUdfS1ZNYCBpcyBvbiwgb3IgYXJlIHRoZXJlIG1vcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IHBlcnRhaW4gdG8gJiMzNDtQViYjMzQ7IG9yICYjMzQ7UHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uJiMzNDsgd2l0aGluIHRoZSBLVk0gY29uZmlndXJhdGlvbiBzcGFjZS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipQUk9URUNURUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MgZGVzY3JpYmVkOgoKKipFeGFtaW5pbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHMzOTAgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBrZXkgS1ZNLXJlbGF0ZWQgb3B0aW9ucyBzcGVjaWZpYyB0byBTeXN0ZW0geiBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBmZWF0dXJlcyBhcmUgc3RydWN0dXJlZCwgd2hpY2ggb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQsIHNwZWNpZmljIGluc3RydWN0aW9uIGV4dGVuc2lvbnMgbGV2ZXJhZ2VkIGJ5IEtWTSwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGRpZmZlcmVudCBLVk0gYmFja2VuZHMgZGVmaW5lZCBvciBlbmFibGVkIGJhc2VkIG9uIGhhcmR3YXJlIGZlYXR1cmVzLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSB0byBpZGVudGlmeSB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIHRoYXQgY291bGQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlIG9yIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZy0yLSNcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzozOiMgS1ZNIGNvbmZpZ3VyYXRpb25cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00LSNcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo1OnNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo3Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy04LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVlcCBEaXZlIGludG8gS1ZNIGFuZCBTZWN1cmUgU3RvcmFnZSBvbiBzMzkwKioKCkFscmlnaHQsIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBDT05GSUdfS1ZNYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgdmlydHVhbGl6YXRpb24gcGllY2UsIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBpbnRlcmFjdHMgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrIG9uIHMzOTAuCgpMZXQmIzM5O3MgZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgYW5kIGp1bXAgc3RyYWlnaHQgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgdGhlIGtleS4gSXQmIzM5O3Mgd2hlcmUgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBhcmNoaXRlY3R1cmUmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBzZWN1cml0eSBmZWF0dXJlcyBJJiMzOTttIGludGVyZXN0ZWQgaW4gcHJvYmFibHkgY29udmVyZ2UuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIGxvdy1kb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaD0yOT12b2lkIGRvX2RhdF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oOjMwOnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcbmFyY2gvczM5MC9rZXJuZWwvZW50cnkuaC0zMS12b2lkIGRvX25vbl9zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYz00MDE9c3RhdGljIHZvaWQgKCpwZ21fY2hlY2tfdGFibGVbMTI4XSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpID0ge1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzctXHRbMHgzY11cdFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYzo0Mzg6XHRbMHgzZF1cdFx0PSBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MsXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMtNDM5LVx0WzB4M2VdXHRcdD0gZGVmYXVsdF90cmFwX2hhbmRsZXIsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jLTQ0OS1cbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYzo0NTA6Q09ORF9UUkFQKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA0PU5PS1BST0JFX1NZTUJPTChkb19kYXRfZXhjZXB0aW9uKTtcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDctXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDg6dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDkte1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ2OC19XG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0Njk6Tk9LUFJPQkVfU1lNQk9MKGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzcyk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNlY3VyZSBTdG9yYWdlIEFjY2VzcyBhbmQgS1ZNIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBwcm9ncmFtIGNoZWNrIDB4M2QsIHRoZSBzZWN1cmUgc3RvcmFnZSBhY2Nlc3MgZXhjZXB0aW9uLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIGhhbmRsaW5nIGtlcm5lbCBmYXVsdHMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGB6ZXJvcGFkYCB3aGljaCBpcyBjb3VwbGVkIHdpdGggYERDQUNIRV9XT1JEX0FDQ0VTU2AuIEkgZ2V0IGl0IOKAkyBgRENBQ0hFX1dPUkRfQUNDRVNTYCBlbmFibGVkIG1lYW5zIHRoZSBrZXJuZWwgY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiBhIHN0cmluZyBhbmQgaGl0IGFuIHVubWFwcGVkIG9yLCBjcnVjaWFsbHksIGEgKnNlY3VyZSogcGFnZS4gVGhhdCYjMzk7cyB3aGF0IHRyaWdnZXJzIHRoaXMgMHgzZC4KClRoZSBwYXRjaCYjMzk7cyBtb2RpZmljYXRpb24gb2YgYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2Agbm93IGNoZWNrcyBgaXNfa2VybmVsX2ZhdWx0KHJlZ3MpYC4gSWYgaXQgKmlzKiBhIGtlcm5lbCBmYXVsdCwgYW5kIGlmIGl0JiMzOTtzIG5vdCBhIHZtYWxsb2MgYWRkcmVzcywgaXQgdHJpZXMgdG8gY29udmVydCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHNlY3VyZSBzcGFjZSB3aXRoIGB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpYCwgb3RoZXJ3aXNlLCByZXR1cm5zIGBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApYC4KCk15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYW5kIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIGlmIHRoaXMgcGF0Y2ggaW1wYWN0cyB0aGUgS1ZNIGNoYW5nZXMuCgpOb3csIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIGlzbiYjMzk7dCBLVk0gc3BlY2lmaWMsIGl0IGlzIGEgZ2VuZXJpYyBmZWF0dXJlLiBCdXQgdGhlIHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBleGNlcHRpb24sIGlzIHRpZWQgdG8gVWx0cmF2aXNvciAoVVYpIGFuZCBLVk0gUFYuIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBhcmUgZXhwb3J0ZWQgZm9yIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZSBjb25maWdzIHRvIGVuYWJsZSwgdGhlcmVmb3JlLCB3aWxsIGJlIGBLVk1gIGZvciB0aGUgS1ZNIFBWIGNoYW5nZXMsIG9uIHRoaXMgczM5MCBhcmNoaXRlY3R1cmUuCgpTbywgZGlnZ2luZyBkZWVwZXIgaW50byB0aGVzZSBmdW5jdGlvbnM6IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIGlzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCBub3QgYSBob3QtcGF0aCBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9uLiBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgYXJlIGNhbGxlZCBkdXJpbmcgVk0gY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiBgZXhfaGFuZGxlcl96ZXJvcGFkYCBpcyBjYWxsZWQgd2hlbiBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgaGFzIGEgcGFnZSBmYXVsdCwgYWxzbyBhbiBleGNlcHRpb24gcGF0aC4gVGhpcyBtZWFucyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgdG8gYWRkIHRvIGBGb2N1c1N5bWJvbHNgLgoKSSBhbHNvIG5vdGljZWQgYGt2bV9zMzkwX3B2X2FsbG9jX3ZtYCwgYGt2bV9zMzkwX3B2X2RlYWxsb2Nfdm1gLCBhbmQgYGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyYCBhcmUgbm93IHVzaW5nIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYC4gSSBjYW4gZWl0aGVyIGluY2x1ZGUgdGhlc2UgS1ZNIGZ1bmN0aW9ucyBhcyBmb2N1cyBwb2ludHMsIG9yIGp1c3QgcmVseSBvbiB0aGUgaW5jbHVzaW9uIG9mIHRoZSBgdXZfKmAgZnVuY3Rpb25zIHNpbmNlIHRoZXkgaGFuZGxlIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uCgpJIG5lZWQgdG8gcmV2aWV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgc3BlY2lmaWNhbGx5LCBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VjdXJlIHN0b3JhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz0yNDU9c3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTctXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MjU4OnZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTkte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNzQtfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI3NTpFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcJiMzNDtrdm1cJiMzNDspO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExODgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEV4Y2VwdGlvbiBIYW5kbGVyKioKClllcywgdGhlIHByb2JsZW0gKmlzKiBkZWZpbml0ZWx5IG1hbmlmZXN0aW5nLiBJJiMzOTttIHNlZWluZyBpdC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBleGNlcHRpb24gaGFuZGxlciByZXNwb25zaWJsZS4gVGhlIG1vc3QgbGlrZWx5IGN1bHByaXQgaW4gYSBTMzkwIGFyY2hpdGVjdHVyZSBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggemVyby1wYWRkaW5nIGlzc3VlcywgaXMgcHJvYmFibHkgdGhlIGV4dGVuZGVkIHRhYmxlIGhhbmRsZXIuIEkgdGhpbmsgSSB3aWxsIGNoZWNrIGBleF9oYW5kbGVyX3plcm9wYWRgIHdpdGhpbiBgYXJjaC9zMzkwL21tL2V4dGFibGUuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRob3NlIGV4Y2VwdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiB0aGUgZXhjZXB0aW9uLCBob3cgdGhlIGtlcm5lbCBpcyByZXNwb25kaW5nLCBhbmQgaWYgdGhlIHplcm8gcGFkZGluZyBiZWhhdmlvciBpcyBjYXVzaW5nIGFueSBpc3N1ZXMgd2l0aGluIHRoYXQgY29kZSBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhfaGFuZGxlcl96ZXJvcGFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL21tL2V4dGFibGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZXh0YWJsZS5jPTM5PXN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4tLVxuYXJjaC9zMzkwL21tL2V4dGFibGUuYy01Mi1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM6NTM6c3RhdGljIGJvb2wgZXhfaGFuZGxlcl96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmM9MTE5PWJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtMTM3LVx0Y2FzZSBFWF9UWVBFX1pFUk9QQUQ6XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcdFx0cmV0dXJuIGV4X2hhbmRsZXJfemVyb3BhZChleCwgcmVncyk7XG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cdGNhc2UgRVhfVFlQRV9GUEM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzEwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBbGlnbm1lbnQgU3RyYXRlZ3kqKgoKQWxyaWdodCwgeWVwLCBJIHNlZSBpdC4gVGhlIGNvcmUgaXNzdWUgaXMgcmlnaHQgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gVGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGluZyB0aG9zZSBwb3RlbnRpYWxseSB1bmFsaWduZWQgYWNjZXNzZXMgYW5kIHRoZSB6ZXJvLXBhZGRpbmcgc3RyYXRlZ3kgYmVpbmcgZW1wbG95ZWQuIEl0JiMzOTtzIGNydWNpYWwgdG8gZXZhbHVhdGUgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGhhemFyZHMgaW50cm9kdWNlZCBieSB0aGlzIHNwZWNpZmljIG1ldGhvZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFMvMzkwJiMzOTtzIG1lbW9yeSBtb2RlbC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgb3B0aW1pemVkIGl0LCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgb3IgcGVyaGFwcyBhbnkgZWRnZSBjYXNlcyB0aGUgY3VycmVudCBjb2RlIG1pZ2h0IG92ZXJsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2FkX3VuYWxpZ25lZF96ZXJvcGFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmg9Mzk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oLTUwLSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmg6NTE6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oLTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqCgpIbW0sIHRoaXMgZnVuY3Rpb24mIzM5O3MgaW5saW5lLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBzeW1ib2wuIFRoZSBjb21waWxlciYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gZm9sZCBpdCBhd2F5IGluIG1hbnkgY2FzZXMsIG1ha2luZyBpdCBoYXJkIHRvIHRyYWNrIGluIHRoZSBkaXNhc3NlbWJseSBvciBkZWJ1ZyBvdXRwdXQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSBjb25jcmV0ZSB0byBsYXRjaCBvbnRvLgoKQWxyaWdodCwgbGV0JiMzOTtzIHBpdm90LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdXYuY2AgZmlsZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUuLi4gYHV2X2ZyZWVfcmFuZ2VfY2JgIGFuZCBgdXZfYWxsb2NfcmFuZ2VfY2JgIGFyZSBwcm9iYWJseSByZWxldmFudCBjYWxsYmFja3MgaW4gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIHRob3NlLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsICpjb3VsZCogcHJvdmlkZSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlIGlmIHRob3NlIGFyZSB3b3J0aCBteSB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9mcmVlX3JhbmdlX2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz0yMDc9aW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfcHRlKHB0ZV90IHB0ZSlcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjEyLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjIxMzpzdGF0aWMgaW50IHV2X2ZyZWVfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yMTQte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz0yMjg9dm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yMzktXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cdTAwM2VhZGRyO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI0MDpcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjQxLVx0ZnJlZV92bV9hcmVhKGFyZWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxOQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiAzMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIFByb3Bvc2VkIENoYW5nZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc3RhdGljIGNhbGxiYWNrcywgYW5kIHllcywgd2UgY2FuIGRlZmluaXRlbHkgaW5jbHVkZSB0aG9zZS4gTGV0IG1lIHNlZS4uLiB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgaGVyZSBhcmU6IGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgLCBgdXZfYWxsb2Nfc3Rvcl92YXJgLCBgdXZfZnJlZV9zdG9yX3ZhcmAsIGB1dl9hbGxvY19yYW5nZV9jYmAsIGB1dl9mcmVlX3JhbmdlX2NiYCwgYW5kIGBleF9oYW5kbGVyX3plcm9wYWRgLiBHb3QgaXQuCgpOb3csIHRoZSBjb25maWcgaXRlbSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaXMgYEtWTWAuIExldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBlbmFibGVzIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIHNwZWNpZmljYWxseSBmb3IgczM5MCwgYW5kIGl0IGFkZHMgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBoYW5kbGVyLCBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gRnVydGhlciwgaXQmIzM5O3MgbW9kaWZ5aW5nIEtWTSYjMzk7cyBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gbGV2ZXJhZ2UgdGhvc2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMuIEFuZCBvZiBjb3Vyc2UsIHRoZXJlJiMzOTtzIGFuIHVwZGF0ZSB0byBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cy4KCkVzc2VudGlhbGx5LCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBtZW1vcnkgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IG9uIHMzOTAsIGFuZCBvZiBjb3Vyc2Ugd2l0aCBLVk0uIFRoaXMgaGFzIHRvIGJlIGNvbnNpZGVyZWQgdG8gYWZmZWN0IFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgS1ZNYCBpcyB0aGUgKm9ubHkqIGNvbmZpZyB0aGF0JiMzOTtzIHJlcXVpcmVkLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0LiBJdCBsb29rcyBsaWtlIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIGlzIGltcGxpY2l0bHkgc2VsZWN0ZWQgYnkgYFMzOTBgIHdoZW4gYCFLTVNBTmAuIFNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGVuYWJsaW5nIHRoYXQgZXhwbGljaXRseS4gSXQmIzM5O3MgaGFuZGxlZCBieSBkZWZhdWx0IG9uIHMzOTAgdW5sZXNzIEtNU0FOIGlzIGFjdGl2ZS4gUGVyZmVjdC4KClRoZSBgS1ZNYCBjb25maWcgaXMgY2xlYXJseSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYGFyY2gvczM5MC9rdm0vcHYuY2AgZmlsZS4gU28gaXQgbG9va3MgbGlrZSBgS1ZNYCBpcyB0aGUgY3JpdGljYWwgaXRlbSB0byBlbnN1cmUgaXMgZW5hYmxlZC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzJiMzNDssCiAgICAmIzM0O3V2X2FsbG9jX3N0b3JfdmFyJiMzNDssCiAgICAmIzM0O3V2X2ZyZWVfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfYWxsb2NfcmFuZ2VfY2ImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9yYW5nZV9jYiYjMzQ7LAogICAgJiMzNDtleF9oYW5kbGVyX3plcm9wYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dXZfYWxsb2Nfc3Rvcl92YXImIzM0OywKICAgICYjMzQ7dXZfZnJlZV9zdG9yX3ZhciYjMzQ7LAogICAgJiMzNDt1dl9hbGxvY19yYW5nZV9jYiYjMzQ7LAogICAgJiMzNDt1dl9mcmVlX3JhbmdlX2NiJiMzNDssCiAgICAmIzM0O2V4X2hhbmRsZXJfemVyb3BhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIERDQUNIRV9XT1JEX0FDQ0VTUyBmb3IgczM5MCwgaW50cm9kdWNpbmcgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFuZCBpdHMgZXhjZXB0aW9uIGhhbmRsZXIgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEl0IGFsc28gbW9kaWZpZXMgS1ZNIFBWIHZhcmlhYmxlIHN0b3JhZ2UgYWxsb2NhdGlvbiB0byB1c2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFuZCB1cGRhdGVzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIHRvIGhhbmRsZSBrZXJuZWwgZmF1bHRzIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIGFzIHdlbGwgYXMgS1ZNLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDowMi4zNTQwMDEzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjY1NTczNjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICAgIFwidXZfYWxsb2Nfc3Rvcl92YXJcIixcbiAgICBcInV2X2ZyZWVfc3Rvcl92YXJcIixcbiAgICBcInV2X2FsbG9jX3JhbmdlX2NiXCIsXG4gICAgXCJ1dl9mcmVlX3JhbmdlX2NiXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIERDQUNIRV9XT1JEX0FDQ0VTUyBmb3IgczM5MCwgaW50cm9kdWNpbmcgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFuZCBpdHMgZXhjZXB0aW9uIGhhbmRsZXIgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEl0IGFsc28gbW9kaWZpZXMgS1ZNIFBWIHZhcmlhYmxlIHN0b3JhZ2UgYWxsb2NhdGlvbiB0byB1c2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFuZCB1cGRhdGVzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIHRvIGhhbmRsZSBrZXJuZWwgZmF1bHRzIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIGFzIHdlbGwgYXMgS1ZNLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjAyLjM1NDAxMjE1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2NzUxNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWMwNDU5NTVlYzYyZjUwMzdiNWJiZjgxNDQxODU1ZTJlZDRkNTg4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAxMTozMDowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXFxuaW5kZXggODQ0MDRlNjc3OGQ1MDQuLmZlODFjNTM5ZWYyZmZjIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXFxuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcXG5AQCAtMTYzLDYgKzE2Myw3IEBAIGNvbmZpZyBTMzkwXFxuIFxcdHNlbGVjdCBBUkNIX1dBTlRTX1RIUF9TV0FQXFxuIFxcdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxcbiBcXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTMlxcbitcXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmICFLTVNBTlxcbiBcXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfOEIgaWYgQ0NfSVNfR0NDXFxuIFxcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCIGlmICFDQ19JU19HQ0NcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBFWF9UWVBFX1VBX0ZBVUxUXFx0M1xcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdcXHQ1XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVJcXHQ2XFxuKyNkZWZpbmUgRVhfVFlQRV9aRVJPUEFEXFx0XFx0N1xcbiAjZGVmaW5lIEVYX1RZUEVfRlBDXFx0XFx0OFxcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTVZDT1NfVE9cXHQ5XFxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NXFx0MTBcXG5AQCAtNzksNiArODAsOSBAQFxcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVxcdFxcXFxcXG4gXFx0X19FWF9UQUJMRShfX2V4X3RhYmxlLCBfZmF1bHQsIF90YXJnZXQsIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSLCBfcmVnZXJyLCBfcmVnemVybywgMClcXG4gXFxuKyNkZWZpbmUgRVhfVEFCTEVfWkVST1BBRChfZmF1bHQsIF90YXJnZXQsIF9yZWdkYXRhLCBfcmVnYWRkcilcXHRcXHRcXFxcXFxuK1xcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1pFUk9QQUQsIF9yZWdkYXRhLCBfcmVnYWRkciwgMClcXG4rXFxuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBpbnQgczM5MF93aWdnbGVfc3BsaXRfZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBpbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKTtcXG4gaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUodW5zaWduZWQgbG9uZyBwYWRkcik7XFxuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpO1xcbit2b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpO1xcbiBcXG4gdm9pZCBzZXR1cF91dih2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG5pbmRleCBlOTI4NzAzNjM5MmQwOC4uZWFhMTlkZWU3Njk5NDEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2JpdHNwZXJsb25nLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd29yZF9hdF9hX3RpbWUge1xcbkBAIC00MCw0ICs0MSwyNSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemVyb19ieXRlbWFzayh1bnNpZ25lZCBsb25nIGRhdGEpXFxuIFxcdHJldHVybiB+MVVMIFxcdTAwM2NcXHUwMDNjIGRhdGE7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIExvYWQgYW4gdW5hbGlnbmVkIHdvcmQgZnJvbSBrZXJuZWwgc3BhY2UuXFxuKyAqXFxuKyAqIEluIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB0aGUgd29yZCBiZWluZyBhIHBhZ2UtY3Jvc3NlclxcbisgKiBhbmQgdGhlIG5leHQgcGFnZSBub3QgYmVpbmcgbWFwcGVkLCB0YWtlIHRoZSBleGNlcHRpb24gYW5kXFxuKyAqIHJldHVybiB6ZXJvZXMgaW4gdGhlIG5vbi1leGlzdGluZyBwYXJ0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgdm9pZCAqYWRkcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRhdGE7XFxuK1xcbitcXHRhc21faW5saW5lIHZvbGF0aWxlKFxcbitcXHRcXHRcXFwiMDpcXHRsZ1xcdCVbZGF0YV0sMCglW2FkZHJdKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiMTpcXHRub3ByXFx0JSVyN1xcXFxuXFxcIlxcbitcXHRcXHRFWF9UQUJMRV9aRVJPUEFEKDBiLCAxYiwgJVtkYXRhXSwgJVthZGRyXSlcXG4rXFx0XFx0RVhfVEFCTEVfWkVST1BBRCgxYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXFxuK1xcdFxcdDogW2RhdGFdIFxcXCI9ZFxcXCIgKGRhdGEpXFxuK1xcdFxcdDogW2FkZHJdIFxcXCJhXFxcIiAoYWRkciksIFxcXCJtXFxcIiAoKih1bnNpZ25lZCBsb25nICopYWRkcikpO1xcbitcXHRyZXR1cm4gZGF0YTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9BU01fV09SRF9BVF9BX1RJTUVfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG5pbmRleCBhMjg0Zjk4ZDk3MTY4MC4uZDFjZGM1YWU1ZTI3MGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2ZhY2lsaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2VjdGlvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di5oXFx1MDAzZVxcbkBAIC0yMDksNiArMjEwLDcwIEBAIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX3B0ZShwdGVfdCBwdGUpXFxuIFxcdHJldHVybiB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHBmbl9mb2xpbyhwdGVfcGZuKHB0ZSkpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XFxuK1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHQvKlxcbitcXHQgKiBOb3RlOiBkbyBub3QgdXBkYXRlIHRoZSBwdGUgaGVyZSwgc2luY2UgdGhlcmUgaXMgbm8gY29kZSB3aGljaFxcbitcXHQgKiBhY2Nlc3NlcyB0aGUgbWVtb3J5IHJhbmdlLCBiZXNpZGVzIGJ1Z3MuIFRoZSBpbnZhbGlkYXRpb24gb2YgcHRlc1xcbitcXHQgKiBhbmQgVExCIGZsdXNoaW5nIGlzIGRlZmVycmVkIGxpa2UgZm9yIHJlZ3VsYXIgdmZyZWUoKSBjYWxscy5cXG4rXFx0ICovXFxuK1xcdF9fZnJlZV9wYWdlKHB0ZV9wYWdlKHB0ZSkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTtcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqYXJlYTtcXG4rXFxuK1xcdGlmICghc3Rvcl92YXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWFyZWEgfHwgIShhcmVhLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX1NQQVJTRSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xcbitcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4rXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XFxuK1xcdGZyZWVfdm1fYXJlYShhcmVhKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2ZyZWVfc3Rvcl92YXIsIFxcXCJrdm1cXFwiKTtcXG4rXFxuK3N0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0cHRlX3QgcHRlO1xcbitcXG4rXFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHB0ZSA9IF9fcHRlKHBhZ2VfdG9fcGh5cyhwYWdlKSB8IHBncHJvdF92YWwoUEFHRV9LRVJORUwpKTtcXG4rXFx0c2V0X3B0ZShwdGVwLCBwdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCAqdXZfYWxsb2Nfc3Rvcl92YXIodW5zaWduZWQgbG9uZyBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4rXFxuK1xcdHNpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xcbitcXHRhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fU1BBUlNFKTtcXG4rXFx0aWYgKCFhcmVhKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXFx1MDAzZWFkZHI7XFxuK1xcdGlmIChhcHBseV90b19wYWdlX3JhbmdlKFxcdTAwMjZpbml0X21tLCBhZGRyLCBzaXplLCB1dl9hbGxvY19yYW5nZV9jYiwgTlVMTCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXR1cm4gYXJlYS1cXHUwMDNlYWRkcjtcXG4rb3V0OlxcbitcXHR1dl9mcmVlX3N0b3JfdmFyKGFyZWEtXFx1MDAzZWFkZHIpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHV2X2FsbG9jX3N0b3JfdmFyLCBcXFwia3ZtXFxcIik7XFxuK1xcbiAvKlxcbiAgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIHJlZl9jb3VudCBmb3IgYSBmb2xpbyB0aGF0IHdvdWxkIG90aGVyd2lzZSBoYXZlIG5vXFxuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1MC4uZGM1YWMyOWI0YzMxMTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuQEAgLTMzNyw3ICszMzcsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiAvKiBvbmx5IGZyZWUgcmVzb3VyY2VzIHdoZW4gdGhlIGRlc3Ryb3kgd2FzIHN1Y2Nlc3NmdWwgKi9cXG4gc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGVhbGxvY192bShzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0dmZyZWUoa3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3Zhcihrdm0tXFx1MDAzZWFyY2gucHYuc3Rvcl92YXIpO1xcbiBcXHRmcmVlX3BhZ2VzKGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXFxuIFxcdFxcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoa3ZtKTtcXG5AQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfYWxsb2Nfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHQvKiBBbGxvY2F0ZSB2YXJpYWJsZSBzdG9yYWdlICovXFxuIFxcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XFxuIFxcdHZsZW4gKz0gdXZfaW5mby5ndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuLVxcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHZ6YWxsb2Modmxlbik7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IHV2X2FsbG9jX3N0b3JfdmFyKHZsZW4pO1xcbiBcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhcilcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfcHZfZGlzcG9zZV9vbmVfbGVmdG92ZXIoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHQgKi9cXG4gXFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cXHUwMDNlc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XFxuIFxcdGZyZWVfcGFnZXMobGVmdG92ZXItXFx1MDAzZW9sZF9nbWFwX3RhYmxlLCBDUlNUX0FMTE9DX09SREVSKTtcXG4tXFx0dmZyZWUobGVmdG92ZXItXFx1MDAzZXN0b3JfdmFyKTtcXG4rXFx0dXZfZnJlZV9zdG9yX3ZhcihsZWZ0b3Zlci1cXHUwMDNlc3Rvcl92YXIpO1xcbiBkb25lX2Zhc3Q6XFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmt2bS1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQucHJvdGVjdGVkX2NvdW50KTtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmMgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuaW5kZXggMDYzYjQzNDY3NDJkOTYuLjc0OThlODU4YzQwMTk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcXG4rKysgYi9hcmNoL3MzOTAvbW0vZXh0YWJsZS5jXFxuQEAgLTUwLDYgKzUwLDIyIEBAIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfYWRkciA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19BRERSLCBleC1cXHUwMDNlZGF0YSk7XFxuK1xcdHVuc2lnbmVkIGludCByZWdfZGF0YSA9IEZJRUxEX0dFVChFWF9EQVRBX1JFR19FUlIsIGV4LVxcdTAwM2VkYXRhKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBkYXRhLCBhZGRyLCBvZmZzZXQ7XFxuK1xcbitcXHRhZGRyID0gcmVncy1cXHUwMDNlZ3Byc1tyZWdfYWRkcl07XFxuK1xcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7XFxuK1xcdGFkZHIgXFx1MDAyNj0gfihzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKTtcXG4rXFx0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyAqKWFkZHI7XFxuK1xcdGRhdGEgXFx1MDAzY1xcdTAwM2M9IEJJVFNfUEVSX0JZVEUgKiBvZmZzZXQ7XFxuK1xcdHJlZ3MtXFx1MDAzZWdwcnNbcmVnX2RhdGFdID0gZGF0YTtcXG4rXFx0cmVncy1cXHUwMDNlcHN3LmFkZHIgPSBleHRhYmxlX2ZpeHVwKGV4KTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGV4X2hhbmRsZXJfZnBjKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRmcHVfc2ZwYygwKTtcXG5AQCAtMTE4LDYgKzEzNCw4IEBAIGJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgZmFsc2UsIHJlZ3MpO1xcbiBcXHRjYXNlIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSOlxcbiBcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhleCwgdHJ1ZSwgcmVncyk7XFxuK1xcdGNhc2UgRVhfVFlQRV9aRVJPUEFEOlxcbitcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX0ZQQzpcXG4gXFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfZnBjKGV4LCByZWdzKTtcXG4gXFx0Y2FzZSBFWF9UWVBFX1VBX01WQ09TX1RPOlxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjY2NmZlOGU5OTQ4MDE5IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5AQCAtNDA5LDkgKzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtXFx1MDAzZWludF9wYXJtX2xvbmcgfTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdGludCByYztcXG4gXFxuQEAgLTQyNywxMCArNDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdCAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlXFxuIFxcdFxcdCAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICh1c2VyX21vZGUocmVncykpIHtcXG4tXFx0XFx0XFx0c2VuZF9zaWcoU0lHU0VHViwgY3VycmVudCwgMCk7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAodXNlcl9tb2RlKHJlZ3MpKVxcbitcXHRcXHRcXHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX0FDQ0VSUik7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSBrZXJuZWwgc2hvdWxkIG5ldmVyIHJ1biBpbnRvIHRoaXMgY2FzZSBhbmRcXG4gXFx0XFx0ICogdGhlcmUgaXMgbm8gd2F5IG91dCBvZiB0aGlzIHNpdHVhdGlvbi5cXG5AQCAtNDM4LDEzICs0MzYsOSBAQCB2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0cGFuaWMoXFxcIlVuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXFxcIik7XFxuIFxcdH1cXG4gXFx0aWYgKGlzX2tlcm5lbF9mYXVsdChyZWdzKSkge1xcbi1cXHRcXHRmb2xpbyA9IHZpcnRfdG9fZm9saW8oKHZvaWQgKilhZGRyKTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKGZvbGlvX3RvX3BoeXMoZm9saW8pKTtcXG4tXFx0XFx0aWYgKCFyYylcXG4tXFx0XFx0XFx0Y2xlYXJfYml0KFBHX2FyY2hfMSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0aWYgKGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKWFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcXG4rXFx0XFx0cmMgPSB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGVyZSBhcmUgc29tZSB2YWxpZCBmaXh1cCB0eXBlcyBmb3Iga2VybmVsXFxuIFxcdFxcdCAqIGFjY2Vzc2VzIHRvIGRvbmF0ZWQgc2VjdXJlIG1lbW9yeS4gemVyb3BhZCBpcyBvbmVcXG5AQCAtNDUzLDI1ICs0NDcsMjIgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcXG4rXFx0XFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcXG4gXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XFxuLVxcdFxcdG1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xcbitcXHRcXHR2bWEgPSBsb2NrX21tX2FuZF9maW5kX3ZtYShtbSwgYWRkciwgcmVncyk7XFxuIFxcdFxcdGlmICghdm1hKVxcbi1cXHRcXHRcXHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgU0VHVl9NQVBFUlIpO1xcbiBcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xcbi1cXHRcXHRpZiAoIWZvbGlvKSB7XFxuLVxcdFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKCFmb2xpbylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdC8qIGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKCkgbmVlZHMgYSByYWlzZWQgcmVmY291bnQuICovXFxuIFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuIFxcdFxcdHJjID0gYXJjaF9tYWtlX2ZvbGlvX2FjY2Vzc2libGUoZm9saW8pO1xcbiBcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxuIFxcdFxcdGlmIChyYylcXG4tXFx0XFx0XFx0c2VuZF9zaWcoU0lHU0VHViwgY3VycmVudCwgMCk7XFxuK1xcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3IocmVncywgU0VHVl9BQ0NFUlIpO1xcbitvdXQ6XFxuIFxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MDMuMjQxNzAyNDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM3Nzg1MzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NcIixcbiAgICBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9mcmVlX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9hbGxvY19yYW5nZV9jYlwiLFxuICAgIFwidXZfZnJlZV9yYW5nZV9jYlwiLFxuICAgIFwiZXhfaGFuZGxlcl96ZXJvcGFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljMDQ1OTU1ZWM2MmY1MDM3YjViYmY4MTQ0MTg1NWUyZWQ0ZDU4ODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxMTozMDowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5mZTgxYzUzOWVmMmZmYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTE2Myw2ICsxNjMsNyBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfV0FOVFNfVEhQX1NXQVBcbiBcdHNlbGVjdCBCVUlMRFRJTUVfVEFCTEVfU09SVFxuIFx0c2VsZWN0IENMT05FX0JBQ0tXQVJEUzJcbitcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgIUtNU0FOXG4gXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXG4gXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzhCIGlmIENDX0lTX0dDQ1xuIFx0c2VsZWN0IEZVTkNUSU9OX0FMSUdOTUVOVF8xNkIgaWYgIUNDX0lTX0dDQ1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FzbS1leHRhYmxlLmhcbmluZGV4IDk5NzQ4YzIwZTc2NzEzLi5kMjNlYTBjOTRlNGVhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hc20tZXh0YWJsZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXNtLWV4dGFibGUuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIEVYX1RZUEVfVUFfRkFVTFRcdDNcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdcdDVcbiAjZGVmaW5lIEVYX1RZUEVfVUFfTE9BRF9SRUdQQUlSXHQ2XG4rI2RlZmluZSBFWF9UWVBFX1pFUk9QQURcdFx0N1xuICNkZWZpbmUgRVhfVFlQRV9GUENcdFx0OFxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19UT1x0OVxuICNkZWZpbmUgRVhfVFlQRV9VQV9NVkNPU19GUk9NXHQxMFxuQEAgLTc5LDYgKzgwLDkgQEBcbiAjZGVmaW5lIEVYX1RBQkxFX1VBX0xPQURfUkVHUEFJUihfZmF1bHQsIF90YXJnZXQsIF9yZWdlcnIsIF9yZWd6ZXJvKVx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX1VBX0xPQURfUkVHUEFJUiwgX3JlZ2VyciwgX3JlZ3plcm8sIDApXG4gXG4rI2RlZmluZSBFWF9UQUJMRV9aRVJPUEFEKF9mYXVsdCwgX3RhcmdldCwgX3JlZ2RhdGEsIF9yZWdhZGRyKVx0XHRcXFxuK1x0X19FWF9UQUJMRShfX2V4X3RhYmxlLCBfZmF1bHQsIF90YXJnZXQsIEVYX1RZUEVfWkVST1BBRCwgX3JlZ2RhdGEsIF9yZWdhZGRyLCAwKVxuK1xuICNkZWZpbmUgRVhfVEFCTEVfRlBDKF9mYXVsdCwgX3RhcmdldClcdFx0XHRcdFx0XFxcbiBcdF9fRVhfVEFCTEUoX19leF90YWJsZSwgX2ZhdWx0LCBfdGFyZ2V0LCBFWF9UWVBFX0ZQQywgX19zdHJpbmdpZnkoJSVyMCksIF9fc3RyaW5naWZ5KCUlcjApLCAwKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcbmluZGV4IGQ5MTllNjk2NjJmNTg0Li4xNTNmZWQ2M2FkZGEzYyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaFxuQEAgLTYzNSw2ICs2MzUsOCBAQCBpbnQgczM5MF93aWdnbGVfc3BsaXRfZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGludCBfX21ha2VfZm9saW9fc2VjdXJlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1dl9jYl9oZWFkZXIgKnV2Y2IpO1xuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIpO1xuIGludCB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4rdm9pZCB1dl9mcmVlX3N0b3JfdmFyKHZvaWQgKnN0b3JfdmFyKTtcbiBcbiB2b2lkIHNldHVwX3V2KHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhcbmluZGV4IGU5Mjg3MDM2MzkyZDA4Li5lYWExOWRlZTc2OTk0MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2FzbS1leHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYml0c3BlcmxvbmcuaFx1MDAzZVxuIFxuIHN0cnVjdCB3b3JkX2F0X2FfdGltZSB7XG5AQCAtNDAsNCArNDEsMjUgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHplcm9fYnl0ZW1hc2sodW5zaWduZWQgbG9uZyBkYXRhKVxuIFx0cmV0dXJuIH4xVUwgXHUwMDNjXHUwMDNjIGRhdGE7XG4gfVxuIFxuKy8qXG4rICogTG9hZCBhbiB1bmFsaWduZWQgd29yZCBmcm9tIGtlcm5lbCBzcGFjZS5cbisgKlxuKyAqIEluIHRoZSAodmVyeSB1bmxpa2VseSkgY2FzZSBvZiB0aGUgd29yZCBiZWluZyBhIHBhZ2UtY3Jvc3NlclxuKyAqIGFuZCB0aGUgbmV4dCBwYWdlIG5vdCBiZWluZyBtYXBwZWQsIHRha2UgdGhlIGV4Y2VwdGlvbiBhbmRcbisgKiByZXR1cm4gemVyb2VzIGluIHRoZSBub24tZXhpc3RpbmcgcGFydC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCB2b2lkICphZGRyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZGF0YTtcbitcbitcdGFzbV9pbmxpbmUgdm9sYXRpbGUoXG4rXHRcdFwiMDpcdGxnXHQlW2RhdGFdLDAoJVthZGRyXSlcXG5cIlxuK1x0XHRcIjE6XHRub3ByXHQlJXI3XFxuXCJcbitcdFx0RVhfVEFCTEVfWkVST1BBRCgwYiwgMWIsICVbZGF0YV0sICVbYWRkcl0pXG4rXHRcdEVYX1RBQkxFX1pFUk9QQUQoMWIsIDFiLCAlW2RhdGFdLCAlW2FkZHJdKVxuK1x0XHQ6IFtkYXRhXSBcIj1kXCIgKGRhdGEpXG4rXHRcdDogW2FkZHJdIFwiYVwiIChhZGRyKSwgXCJtXCIgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpKTtcbitcdHJldHVybiBkYXRhO1xuK31cbitcbiAjZW5kaWYgLyogX0FTTV9XT1JEX0FUX0FfVElNRV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5pbmRleCBhMjg0Zjk4ZDk3MTY4MC4uZDFjZGM1YWU1ZTI3MGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTE2LDYgKzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mYWNpbGl0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdXYuaFx1MDAzZVxuQEAgLTIwOSw2ICsyMTAsNzAgQEAgaW50IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmVfcHRlKHB0ZV90IHB0ZSlcbiBcdHJldHVybiB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlX2ZvbGlvKHBmbl9mb2xpbyhwdGVfcGZuKHB0ZSkpKTtcbiB9XG4gXG4rc3RhdGljIGludCB1dl9mcmVlX3JhbmdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4re1xuK1x0cHRlX3QgcHRlID0gcHRlcF9nZXQocHRlcCk7XG4rXG4rXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpXG4rXHRcdHJldHVybiAwO1xuK1x0LypcbitcdCAqIE5vdGU6IGRvIG5vdCB1cGRhdGUgdGhlIHB0ZSBoZXJlLCBzaW5jZSB0aGVyZSBpcyBubyBjb2RlIHdoaWNoXG4rXHQgKiBhY2Nlc3NlcyB0aGUgbWVtb3J5IHJhbmdlLCBiZXNpZGVzIGJ1Z3MuIFRoZSBpbnZhbGlkYXRpb24gb2YgcHRlc1xuK1x0ICogYW5kIFRMQiBmbHVzaGluZyBpcyBkZWZlcnJlZCBsaWtlIGZvciByZWd1bGFyIHZmcmVlKCkgY2FsbHMuXG4rXHQgKi9cbitcdF9fZnJlZV9wYWdlKHB0ZV9wYWdlKHB0ZSkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgdXZfZnJlZV9zdG9yX3Zhcih2b2lkICpzdG9yX3Zhcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIsIHNpemU7XG4rXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuK1xuK1x0aWYgKCFzdG9yX3ZhcilcbitcdFx0cmV0dXJuO1xuK1x0YXJlYSA9IGZpbmRfdm1fYXJlYShzdG9yX3Zhcik7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmVhIHx8ICEoYXJlYS1cdTAwM2VmbGFncyBcdTAwMjYgVk1fU1BBUlNFKSkpXG4rXHRcdHJldHVybjtcbitcdHNpemUgPSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpO1xuK1x0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbitcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XG4rXHRmcmVlX3ZtX2FyZWEoYXJlYSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfZnJlZV9zdG9yX3ZhciwgXCJrdm1cIik7XG4rXG4rc3RhdGljIGludCB1dl9hbGxvY19yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0cHRlX3QgcHRlO1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cHRlID0gX19wdGUocGFnZV90b19waHlzKHBhZ2UpIHwgcGdwcm90X3ZhbChQQUdFX0tFUk5FTCkpO1xuK1x0c2V0X3B0ZShwdGVwLCBwdGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgKnV2X2FsbG9jX3N0b3JfdmFyKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuK1xuK1x0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG4rXHRhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fU1BBUlNFKTtcbitcdGlmICghYXJlYSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cdTAwM2VhZGRyO1xuK1x0aWYgKGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfYWxsb2NfcmFuZ2VfY2IsIE5VTEwpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldHVybiBhcmVhLVx1MDAzZWFkZHI7XG4rb3V0OlxuK1x0dXZfZnJlZV9zdG9yX3ZhcihhcmVhLVx1MDAzZWFkZHIpO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFwia3ZtXCIpO1xuK1xuIC8qXG4gICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCByZWZfY291bnQgZm9yIGEgZm9saW8gdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBub1xuICAqIGZ1cnRoZXIgcGlucy4gVGhpcyB3YXMgY3JpYmJlZCBmcm9tIHNpbWlsYXIgZnVuY3Rpb25zIGluIG90aGVyIHBsYWNlcyBpblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NTAuLmRjNWFjMjliNGMzMTE4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0zMzcsNyArMzM3LDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiAvKiBvbmx5IGZyZWUgcmVzb3VyY2VzIHdoZW4gdGhlIGRlc3Ryb3kgd2FzIHN1Y2Nlc3NmdWwgKi9cbiBzdGF0aWMgdm9pZCBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHR2ZnJlZShrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3Zhcik7XG4rXHR1dl9mcmVlX3N0b3JfdmFyKGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyKTtcbiBcdGZyZWVfcGFnZXMoa3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuIFx0XHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9iYXNlX3N0b3JfbGVuKSk7XG4gXHRrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShrdm0pO1xuQEAgLTM2OSw3ICszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2FsbG9jX3ZtKHN0cnVjdCBrdm0gKmt2bSlcbiBcdC8qIEFsbG9jYXRlIHZhcmlhYmxlIHN0b3JhZ2UgKi9cbiBcdHZsZW4gPSBBTElHTih2aXJ0ICogKChucGFnZXMgKiBQQUdFX1NJWkUpIC8gSFBBR0VfU0laRSksIFBBR0VfU0laRSk7XG4gXHR2bGVuICs9IHV2X2luZm8uZ3Vlc3RfdmlydF9iYXNlX3N0b3JfbGVuO1xuLVx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSB2emFsbG9jKHZsZW4pO1xuK1x0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSB1dl9hbGxvY19zdG9yX3Zhcih2bGVuKTtcbiBcdGlmICgha3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIpXG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdHJldHVybiAwO1xuQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3B2X2Rpc3Bvc2Vfb25lX2xlZnRvdmVyKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqL1xuIFx0ZnJlZV9wYWdlcyhsZWZ0b3Zlci1cdTAwM2VzdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2Jhc2Vfc3Rvcl9sZW4pKTtcbiBcdGZyZWVfcGFnZXMobGVmdG92ZXItXHUwMDNlb2xkX2dtYXBfdGFibGUsIENSU1RfQUxMT0NfT1JERVIpO1xuLVx0dmZyZWUobGVmdG92ZXItXHUwMDNlc3Rvcl92YXIpO1xuK1x0dXZfZnJlZV9zdG9yX3ZhcihsZWZ0b3Zlci1cdTAwM2VzdG9yX3Zhcik7XG4gZG9uZV9mYXN0OlxuIFx0YXRvbWljX2RlYyhcdTAwMjZrdm0tXHUwMDNlbW0tXHUwMDNlY29udGV4dC5wcm90ZWN0ZWRfY291bnQpO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dGFibGUuYyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcbmluZGV4IDA2M2I0MzQ2NzQyZDk2Li43NDk4ZTg1OGM0MDE5NSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcbisrKyBiL2FyY2gvczM5MC9tbS9leHRhYmxlLmNcbkBAIC01MCw2ICs1MCwyMiBAQCBzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGV4X2hhbmRsZXJfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4re1xuK1x0dW5zaWduZWQgaW50IHJlZ19hZGRyID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0FERFIsIGV4LVx1MDAzZWRhdGEpO1xuK1x0dW5zaWduZWQgaW50IHJlZ19kYXRhID0gRklFTERfR0VUKEVYX0RBVEFfUkVHX0VSUiwgZXgtXHUwMDNlZGF0YSk7XG4rXHR1bnNpZ25lZCBsb25nIGRhdGEsIGFkZHIsIG9mZnNldDtcbitcbitcdGFkZHIgPSByZWdzLVx1MDAzZWdwcnNbcmVnX2FkZHJdO1xuK1x0b2Zmc2V0ID0gYWRkciBcdTAwMjYgKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpO1xuK1x0YWRkciBcdTAwMjY9IH4oc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMSk7XG4rXHRkYXRhID0gKih1bnNpZ25lZCBsb25nICopYWRkcjtcbitcdGRhdGEgXHUwMDNjXHUwMDNjPSBCSVRTX1BFUl9CWVRFICogb2Zmc2V0O1xuK1x0cmVncy1cdTAwM2VncHJzW3JlZ19kYXRhXSA9IGRhdGE7XG4rXHRyZWdzLVx1MDAzZXBzdy5hZGRyID0gZXh0YWJsZV9maXh1cChleCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZXhfaGFuZGxlcl9mcGMoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdGZwdV9zZnBjKDApO1xuQEAgLTExOCw2ICsxMzQsOCBAQCBib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0cmV0dXJuIGV4X2hhbmRsZXJfdWFfbG9hZF9yZWcoZXgsIGZhbHNlLCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9VQV9MT0FEX1JFR1BBSVI6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX3VhX2xvYWRfcmVnKGV4LCB0cnVlLCByZWdzKTtcbitcdGNhc2UgRVhfVFlQRV9aRVJPUEFEOlxuK1x0XHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcbiBcdGNhc2UgRVhfVFlQRV9GUEM6XG4gXHRcdHJldHVybiBleF9oYW5kbGVyX2ZwYyhleCwgcmVncyk7XG4gXHRjYXNlIEVYX1RZUEVfVUFfTVZDT1NfVE86XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggMDI4YWViOWM0OGQ2ZmYuLjY2NmZlOGU5OTQ4MDE5IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDA5LDkgKzQwOSw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHVuaW9uIHRlaWQgdGVpZCA9IHsgLnZhbCA9IHJlZ3MtXHUwMDNlaW50X3Bhcm1fbG9uZyB9O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IHJjO1xuIFxuQEAgLTQyNywxMCArNDI3LDggQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdCAqIHdhcyBub3Qgc3VwcG9zZWQgdG8gZG8sIGUuZy4gYnJhbmNoaW5nIGludG8gc2VjdXJlXG4gXHRcdCAqIG1lbW9yeS4gVHJpZ2dlciBhIHNlZ21lbnRhdGlvbiBmYXVsdC5cbiBcdFx0ICovXG4tXHRcdGlmICh1c2VyX21vZGUocmVncykpIHtcbi1cdFx0XHRzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKHVzZXJfbW9kZShyZWdzKSlcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX0FDQ0VSUik7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBrZXJuZWwgc2hvdWxkIG5ldmVyIHJ1biBpbnRvIHRoaXMgY2FzZSBhbmRcbiBcdFx0ICogdGhlcmUgaXMgbm8gd2F5IG91dCBvZiB0aGlzIHNpdHVhdGlvbi5cbkBAIC00MzgsMTMgKzQzNiw5IEBAIHZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRwYW5pYyhcIlVuZXhwZWN0ZWQgUEdNIDB4M2Qgd2l0aCBURUlEIGJpdCA2MT0wXCIpO1xuIFx0fVxuIFx0aWYgKGlzX2tlcm5lbF9mYXVsdChyZWdzKSkge1xuLVx0XHRmb2xpbyA9IHZpcnRfdG9fZm9saW8oKHZvaWQgKilhZGRyKTtcbi1cdFx0aWYgKHVubGlrZWx5KCFmb2xpb190cnlfZ2V0KGZvbGlvKSkpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyYyA9IHV2X2NvbnZlcnRfZnJvbV9zZWN1cmUoZm9saW9fdG9fcGh5cyhmb2xpbykpO1xuLVx0XHRpZiAoIXJjKVxuLVx0XHRcdGNsZWFyX2JpdChQR19hcmNoXzEsIFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRpZiAoaXNfdm1hbGxvY19hZGRyKCh2b2lkICopYWRkcikpXG4rXHRcdFx0cmV0dXJuIGhhbmRsZV9mYXVsdF9lcnJvcl9ub2xvY2socmVncywgMCk7XG4rXHRcdHJjID0gdXZfY29udmVydF9mcm9tX3NlY3VyZShfX3BhKGFkZHIpKTtcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgYXJlIHNvbWUgdmFsaWQgZml4dXAgdHlwZXMgZm9yIGtlcm5lbFxuIFx0XHQgKiBhY2Nlc3NlcyB0byBkb25hdGVkIHNlY3VyZSBtZW1vcnkuIHplcm9wYWQgaXMgb25lXG5AQCAtNDUzLDI1ICs0NDcsMjIgQEAgdm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChmYXVsdGhhbmRsZXJfZGlzYWJsZWQoKSlcbitcdFx0aWYgKGZhdWx0aGFuZGxlcl9kaXNhYmxlZCgpIHx8ICFtbSlcbiBcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCAwKTtcbi1cdFx0bW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcbitcdFx0dm1hID0gbG9ja19tbV9hbmRfZmluZF92bWEobW0sIGFkZHIsIHJlZ3MpO1xuIFx0XHRpZiAoIXZtYSlcbi1cdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yX25vbG9jayhyZWdzLCBTRUdWX01BUEVSUik7XG4gXHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbi1cdFx0aWYgKCFmb2xpbykge1xuLVx0XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRpZiAoIWZvbGlvKVxuK1x0XHRcdGdvdG8gb3V0O1xuIFx0XHQvKiBhcmNoX21ha2VfZm9saW9fYWNjZXNzaWJsZSgpIG5lZWRzIGEgcmFpc2VkIHJlZmNvdW50LiAqL1xuIFx0XHRmb2xpb19nZXQoZm9saW8pO1xuIFx0XHRyYyA9IGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG4gXHRcdGlmIChyYylcbi1cdFx0XHRzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTtcbitcdFx0XHRyZXR1cm4gaGFuZGxlX2ZhdWx0X2Vycm9yKHJlZ3MsIFNFR1ZfQUNDRVJSKTtcbitvdXQ6XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0fVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjAzLjI0MTcxNDc3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Nzc0ODg1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzMzkwIEFyY2hpdGVjdHVyZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0YXJnZXRpbmcgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhIGZldyBrZXkgYWRkaXRpb25zOiBgRENBQ0hFX1dPUkRfQUNDRVNTYCwgd2hpY2ggaXMgbm93IGJlaW5nIGVuYWJsZWQgZm9yIHMzOTAgd2hlbiBLTVNBTiBpc24ndCBpbiBwbGF5LCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSB3aXRoIGBFWF9UWVBFX1pFUk9QQURgIGFuZCBgRVhfVEFCTEVfWkVST1BBRGAsIG5ldyBmdW5jdGlvbnMgZm9yIHZhcmlhYmxlIHN0b3JhZ2UgbWFuYWdlbWVudCAoYHV2X2FsbG9jX3N0b3JfdmFyYCBhbmQgYHV2X2ZyZWVfc3Rvcl92YXJgKSBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgbG9hZF91bmFsaWduZWRfemVyb3BhZGAgZm9yIHdvcmQtYXQtYS10aW1lIGFjY2VzcyB3aXRoaW4gdGhlIGRjYWNoZS4gSXQncyBhbHNvIG1vZGlmeWluZyBhIGZldyBLVk0gUFYtcmVsYXRlZCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlIHZpcnR1YWwgbWFjaGluZXMsIHRvIHVzZSB0aGVzZSBuZXcgc3RvcmFnZSBmdW5jdGlvbnMuIFdlJ3ZlIGdvdCBjaGFuZ2VzIGluIHRoZSBleGNlcHRpb24gaGFuZGxlciAoYGV4X2hhbmRsZXJfemVyb3BhZGApIGFuZCB0aGUgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGZ1bmN0aW9uIChgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCkgYXMgd2VsbC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHByZXR0eSBjbGVhcjogdGhpcyBpcyBhYm91dCBLVk0gUFYgY29kZSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBzZWN1cmUgc3RvcmFnZSBhY2Nlc3Mgb24gczM5MC4gYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGlzIGtleSBoZXJlLCBkaXJlY3RseSBpbXBhY3RpbmcgYERDQUNIRV9XT1JEX0FDQ0VTU2AsIG1lYW5pbmcgdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciAqYWxsKiBWRlMgcGF0aCBsb29rdXBzIG9uIHMzOTB4IG5vdyB0aGF0IHRoZSB3b3JkLWF0LWEtdGltZSBmZWF0dXJlIGlzIHByZXNlbnQuIEl0J3MgZGVmaW5pdGVseSBhY3RpdmUgYW5kIHJlYWR5IHRvIGNhdXNlIHNvbWUgaW50ZXJlc3RpbmcgcmVzdWx0cy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgcmVhY2hhYmlsaXR5LiBHaXZlbiB0aGF0IFFFTVUgc3VwcG9ydHMgczM5MHgsIGFuZCB3ZSBjYW4gdGVzdCBLVk0gb24gczM5MHggd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IsIHdhaXQsIHdhc24ndCBzeXprYWxsZXIgcnVubmluZyBvbiBzMzkweD8gWWVzISBUaGF0J3MgcGVyZmVjdC4gVGhlIGNoYW5nZXMgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgYW5kIGB1dl9hbGxvY19zdG9yX3ZhcmAgY2xlYXJseSB0aWUgaW50byBLVk0gUFYuIEFuZCB0aGUgZGNhY2hlIGNoYW5nZXMgbWVhbiAqZXZlcnkqIFZGUyBsb29rdXAgb24gczM5MHggaXMgYWZmZWN0ZWQuXG5cblNvLCB3aGVyZSBkbyB3ZSBmb2N1cz8gSSB0aGluayB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uczogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYW5kIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCAoZXZlbiBpZiBpdCdzIGlubGluZSwgaXQncyB1c2VkIGluIHRoZSBWRlMhKS4gYGV4X2hhbmRsZXJfemVyb3BhZGAsIGlzIGFsc28gYSBnb29kIHRhcmdldCBiZWluZyBhbiBleGNlcHRpb24gaGFuZGxlci5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBLY29uZmlnYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IG9mIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIG9uIGBTMzkwYCBhbmQgdGhlIGV4Y2x1c2lvbiBvZiBgS01TQU5gLiBBbmQgSSdsbCBkb3VibGUtY2hlY2sgdGhlIEtWTSBjb25maWdzIGZvciBzMzkwLiBJdCBsb29rcyBsaWtlIGl0J3MganVzdCBgQ09ORklHX0tWTWAgdGhhdCdzIG5lZWRlZCBmb3IgdGhlIHB2LmMgY29kZSwgbm90aGluZyBleG90aWMuIEknbGwgbmVlZCB0byB2ZXJpZnkgaWYgYHV2X2FsbG9jX3N0b3JfdmFyYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBtYWtlZmlsZXMgYW5kIEtjb25maWcgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjEyLjkxOTIwNzI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDIzNjk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU9NDU9b2JqLXlcXHQrPSBub3NwZWMtYnJhbmNoLm8gaXBsX3ZtcGFybS5vIG1hY2hpbmVfa2V4ZWNfcmVsb2MubyB1bndpbmRfYmMub1xcbmFyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGU6NDY6b2JqLXlcXHQrPSBzbXAubyB0ZXh0X2Ftb2RlMzEubyBzdGFja3RyYWNlLm8gYWJzX2xvd2NvcmUubyBmYWNpbGl0eS5vIHV2Lm8gd3RpLm9cXG5hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlLTQ3LW9iai15XFx0Kz0gZGlhZy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MTMuMDYzNDUyNjk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4ODE2NDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQXNzZXNzaW5nIEJ1aWxkIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBgdXYub2AuLi4gdGhhdCdzIGFsd2F5cyBidWlsdCBvbiBzMzkwLCBubyBxdWVzdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGVudmlyb25tZW50IHRoZXJlLCBJJ20gYWxyZWFkeSBhd2FyZSBvZiB0aGF0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiB3aGF0IGFib3V0IGBwdi5jYD8gSXMgaXQgYWxzbyByaWdpZGx5IHRpZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgZmxleGliaWxpdHkgdGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyB0YXJnZXQgZW52aXJvbm1lbnQuIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBzMzkwIGludHJpbnNpY3MsIGFzc2VtYmx5IGxhbmd1YWdlLCBvciBwbGF0Zm9ybS1kZXBlbmRlbnQgbGlicmFyaWVzPyBPciBpcyBpdCB3cml0dGVuIGluIGEgd2F5IHRoYXQgYWxsb3dzIGZvciBicm9hZGVyIHBvcnRhYmlsaXR5IHdpdGggbWluaW1hbCBlZmZvcnQ/IEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGhhdmUgYnJvYWRlciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBidWlsZCBwcm9jZXNzIGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLi4uIHRpbWUgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IG9uIHRoYXQgc3BlY2lmaWMgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcxMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjE1Ljk1MTYyMDA1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2NjMxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEwPWt2bS15ICs9IGt2bS1zMzkwLm8gaW50ZXJjZXB0Lm8gaW50ZXJydXB0Lm8gcHJpdi5vIHNpZ3Aub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgKz0gZGlhZy5vIGdhY2Nlc3MubyBndWVzdGRiZy5vIHZzaWUubyBwdi5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMi1rdm0teSArPSBkYXQubyBnbWFwLm8gZmF1bHRpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjE2LjA1MjI5MTI5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzA1NjYyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNLVJlbGF0ZWQgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgc28gYHB2Lm9gIGlzIGNsZWFybHkgdGllZCBpbnRvIGBrdm0teWAuIFRoYXQgbWVhbnMgaXQncyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzIGlmIGBDT05GSUdfS1ZNYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluY2x1c2lvbi4gSXMgaXQganVzdCBlbmFibGVkICp3aGVuKiBgQ09ORklHX0tWTWAgaXMgb24sIG9yIGFyZSB0aGVyZSBtb3JlIHNwZWNpZmljIGRlcGVuZGVuY2llcz8gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRpcmVjdGx5IHBlcnRhaW4gdG8gXCJQVlwiIG9yIFwiUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uXCIgd2l0aGluIHRoZSBLVk0gY29uZmlndXJhdGlvbiBzcGFjZS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MTkuNDgyODYyMTE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTU4NDUwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipQUk9URUNURURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjE5LjU4ODQ1OTM2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzc2MDY5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgdGhvdWdodCBwcm9jZXNzIGRlc2NyaWJlZDpcblxuKipFeGFtaW5pbmcgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIEtWTSBjb25maWd1cmF0aW9uIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUga2V5IEtWTS1yZWxhdGVkIG9wdGlvbnMgc3BlY2lmaWMgdG8gU3lzdGVtIHogc2hvdWxkIGJlIGRlZmluZWQuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBmZWF0dXJlcyBhcmUgc3RydWN0dXJlZCwgd2hpY2ggb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdmlydHVhbGl6YXRpb24gc3VwcG9ydCwgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZXh0ZW5zaW9ucyBsZXZlcmFnZWQgYnkgS1ZNLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgZGlmZmVyZW50IEtWTSBiYWNrZW5kcyBkZWZpbmVkIG9yIGVuYWJsZWQgYmFzZWQgb24gaGFyZHdhcmUgZmVhdHVyZXMuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHRvIGlkZW50aWZ5IHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgaG93IHRoZXkncmUgZW5hYmxlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBwZXJmb3JtYW5jZSBvciBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MjIuNjI2MDcxMjQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5NTM5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZy0yLSNcXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MzojIEtWTSBjb25maWd1cmF0aW9uXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQtI1xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo1OnNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDoyMi43NjIwMzQyNjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4ODc4NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIEtWTSBhbmQgU2VjdXJlIFN0b3JhZ2Ugb24gczM5MCoqXG5cbkFscmlnaHQsIG15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIGBDT05GSUdfS1ZNYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBwaWVjZSwgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGludGVyYWN0cyB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsgb24gczM5MC5cblxuTGV0J3MgZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgYW5kIGp1bXAgc3RyYWlnaHQgdG8gYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYC4gVGhhdCBmdW5jdGlvbidzIGxpa2VseSB0aGUga2V5LiBJdCdzIHdoZXJlIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgYXJjaGl0ZWN0dXJlJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBzZWN1cml0eSBmZWF0dXJlcyBJJ20gaW50ZXJlc3RlZCBpbiBwcm9iYWJseSBjb252ZXJnZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBsb3ctZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjI1Ljc1MDgyMTY0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjUzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvZW50cnkuaD0yOT12b2lkIGRvX2RhdF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbmFyY2gvczM5MC9rZXJuZWwvZW50cnkuaDozMDp2b2lkIGRvX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oLTMxLXZvaWQgZG9fbm9uX3NlY3VyZV9zdG9yYWdlX2FjY2VzcyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmM9NDAxPXN0YXRpYyB2b2lkICgqcGdtX2NoZWNrX3RhYmxlWzEyOF0pKHN0cnVjdCBwdF9yZWdzICpyZWdzKSA9IHtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzctXFx0WzB4M2NdXFx0XFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcXG5hcmNoL3MzOTAva2VybmVsL3RyYXBzLmM6NDM4OlxcdFsweDNkXVxcdFxcdD0gZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzLFxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00MzktXFx0WzB4M2VdXFx0XFx0PSBkZWZhdWx0X3RyYXBfaGFuZGxlcixcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdHJhcHMuYy00NDktXFxuYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jOjQ1MDpDT05EX1RSQVAoZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jPTQwND1OT0tQUk9CRV9TWU1CT0woZG9fZGF0X2V4Y2VwdGlvbik7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MDctXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDA4OnZvaWQgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQwOS17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NjgtfVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ2OTpOT0tQUk9CRV9TWU1CT0woZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjI1Ljg3NDQ4MzA0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzY0MDIzMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTZWN1cmUgU3RvcmFnZSBBY2Nlc3MgYW5kIEtWTSBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGEgcHJvZ3JhbSBjaGVjayAweDNkLCB0aGUgc2VjdXJlIHN0b3JhZ2UgYWNjZXNzIGV4Y2VwdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGhvdyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCBpcyBoYW5kbGluZyBrZXJuZWwgZmF1bHRzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgemVyb3BhZGAgd2hpY2ggaXMgY291cGxlZCB3aXRoIGBEQ0FDSEVfV09SRF9BQ0NFU1NgLiBJIGdldCBpdCDigJMgYERDQUNIRV9XT1JEX0FDQ0VTU2AgZW5hYmxlZCBtZWFucyB0aGUga2VybmVsIGNvdWxkIHBvdGVudGlhbGx5IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgYSBzdHJpbmcgYW5kIGhpdCBhbiB1bm1hcHBlZCBvciwgY3J1Y2lhbGx5LCBhICpzZWN1cmUqIHBhZ2UuIFRoYXQncyB3aGF0IHRyaWdnZXJzIHRoaXMgMHgzZC5cblxuVGhlIHBhdGNoJ3MgbW9kaWZpY2F0aW9uIG9mIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIG5vdyBjaGVja3MgYGlzX2tlcm5lbF9mYXVsdChyZWdzKWAuIElmIGl0ICppcyogYSBrZXJuZWwgZmF1bHQsIGFuZCBpZiBpdCdzIG5vdCBhIHZtYWxsb2MgYWRkcmVzcywgaXQgdHJpZXMgdG8gY29udmVydCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHNlY3VyZSBzcGFjZSB3aXRoIGB1dl9jb252ZXJ0X2Zyb21fc2VjdXJlKF9fcGEoYWRkcikpYCwgb3RoZXJ3aXNlLCByZXR1cm5zIGBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIDApYC5cblxuTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCwgYHV2X2FsbG9jX3N0b3JfdmFyYCwgYHV2X2ZyZWVfc3Rvcl92YXJgLCBhbmQgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGludGVyYWN0LCBhbmQgaWYgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSBLVk0gY2hhbmdlcy5cblxuTm93LCBgRENBQ0hFX1dPUkRfQUNDRVNTYCBpc24ndCBLVk0gc3BlY2lmaWMsIGl0IGlzIGEgZ2VuZXJpYyBmZWF0dXJlLiBCdXQgdGhlIHNlY3VyZSBzdG9yYWdlIGFjY2VzcyBleGNlcHRpb24sIGlzIHRpZWQgdG8gVWx0cmF2aXNvciAoVVYpIGFuZCBLVk0gUFYuIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBhcmUgZXhwb3J0ZWQgZm9yIHRoZSBLVk0gbW9kdWxlLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoZSBjb25maWdzIHRvIGVuYWJsZSwgdGhlcmVmb3JlLCB3aWxsIGJlIGBLVk1gIGZvciB0aGUgS1ZNIFBWIGNoYW5nZXMsIG9uIHRoaXMgczM5MCBhcmNoaXRlY3R1cmUuXG5cblNvLCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZXNlIGZ1bmN0aW9uczogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AgaXMgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIG5vdCBhIGhvdC1wYXRoIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24uIGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBhcmUgY2FsbGVkIGR1cmluZyBWTSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIGBleF9oYW5kbGVyX3plcm9wYWRgIGlzIGNhbGxlZCB3aGVuIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBoYXMgYSBwYWdlIGZhdWx0LCBhbHNvIGFuIGV4Y2VwdGlvbiBwYXRoLiBUaGlzIG1lYW5zIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBhZGQgdG8gYEZvY3VzU3ltYm9sc2AuXG5cbkkgYWxzbyBub3RpY2VkIGBrdm1fczM5MF9wdl9hbGxvY192bWAsIGBrdm1fczM5MF9wdl9kZWFsbG9jX3ZtYCwgYW5kIGBrdm1fczM5MF9wdl9kaXNwb3NlX29uZV9sZWZ0b3ZlcmAgYXJlIG5vdyB1c2luZyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAuIEkgY2FuIGVpdGhlciBpbmNsdWRlIHRoZXNlIEtWTSBmdW5jdGlvbnMgYXMgZm9jdXMgcG9pbnRzLCBvciBqdXN0IHJlbHkgb24gdGhlIGluY2x1c2lvbiBvZiB0aGUgYHV2XypgIGZ1bmN0aW9ucyBzaW5jZSB0aGV5IGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLlxuXG5JIG5lZWQgdG8gcmV2aWV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgc3BlY2lmaWNhbGx5LCBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VjdXJlIHN0b3JhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MjUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6MzUuNjM4NTA5ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTgzMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rZXJuZWwvdXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmM9MjQ1PXN0YXRpYyBpbnQgdXZfYWxsb2NfcmFuZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNTctXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjI1ODp2b2lkICp1dl9hbGxvY19zdG9yX3Zhcih1bnNpZ25lZCBsb25nIHNpemUpXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI1OS17XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjc0LX1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6Mjc1OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModXZfYWxsb2Nfc3Rvcl92YXIsIFxcXCJrdm1cXFwiKTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDozNS43Mzc3MDE2NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NjM3NjA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEV4Y2VwdGlvbiBIYW5kbGVyKipcblxuWWVzLCB0aGUgcHJvYmxlbSAqaXMqIGRlZmluaXRlbHkgbWFuaWZlc3RpbmcuIEknbSBzZWVpbmcgaXQuIE5vdywgbGV0J3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBleGNlcHRpb24gaGFuZGxlciByZXNwb25zaWJsZS4gVGhlIG1vc3QgbGlrZWx5IGN1bHByaXQgaW4gYSBTMzkwIGFyY2hpdGVjdHVyZSBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB6ZXJvLXBhZGRpbmcgaXNzdWVzLCBpcyBwcm9iYWJseSB0aGUgZXh0ZW5kZWQgdGFibGUgaGFuZGxlci4gSSB0aGluayBJIHdpbGwgY2hlY2sgYGV4X2hhbmRsZXJfemVyb3BhZGAgd2l0aGluIGBhcmNoL3MzOTAvbW0vZXh0YWJsZS5jYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyB0aG9zZSBleGNlcHRpb25zLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIHRoZSBleGNlcHRpb24sIGhvdyB0aGUga2VybmVsIGlzIHJlc3BvbmRpbmcsIGFuZCBpZiB0aGUgemVybyBwYWRkaW5nIGJlaGF2aW9yIGlzIGNhdXNpbmcgYW55IGlzc3VlcyB3aXRoaW4gdGhhdCBjb2RlIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjM4LjkwNDA4MjIzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjk1MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4X2hhbmRsZXJfemVyb3BhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbW0vZXh0YWJsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9tbS9leHRhYmxlLmM9Mzk9c3RhdGljIGJvb2wgZXhfaGFuZGxlcl91YV9sb2FkX3JlZyhjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTItXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYzo1MzpzdGF0aWMgYm9vbCBleF9oYW5kbGVyX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9tbS9leHRhYmxlLmMtNTQte1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dGFibGUuYz0xMTk9Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzNy1cXHRjYXNlIEVYX1RZUEVfWkVST1BBRDpcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jOjEzODpcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl96ZXJvcGFkKGV4LCByZWdzKTtcXG5hcmNoL3MzOTAvbW0vZXh0YWJsZS5jLTEzOS1cXHRjYXNlIEVYX1RZUEVfRlBDOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxMTozMDozOS4wNTQ3ODU5NDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMTAyNzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBbGlnbm1lbnQgU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCB5ZXAsIEkgc2VlIGl0LiBUaGUgY29yZSBpc3N1ZSBpcyByaWdodCB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5LiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3dvcmQtYXQtYS10aW1lLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyY2hpdGVjdHVyZSBpcyBoYW5kbGluZyB0aG9zZSBwb3RlbnRpYWxseSB1bmFsaWduZWQgYWNjZXNzZXMgYW5kIHRoZSB6ZXJvLXBhZGRpbmcgc3RyYXRlZ3kgYmVpbmcgZW1wbG95ZWQuIEl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgaGF6YXJkcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgc3BlY2lmaWMgbWV0aG9kIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgUy8zOTAncyBtZW1vcnkgbW9kZWwuIExldCdzIHNlZSBob3cgdGhleSd2ZSBvcHRpbWl6ZWQgaXQsIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBvciBwZXJoYXBzIGFueSBlZGdlIGNhc2VzIHRoZSBjdXJyZW50IGNvZGUgbWlnaHQgb3Zlcmxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzEwLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NDIuMzU1ODE2OTA1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3OTc4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9hZF91bmFsaWduZWRfemVyb3BhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaD0zOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemVyb19ieXRlbWFzayh1bnNpZ25lZCBsb25nIGRhdGEpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaC01MC0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vd29yZC1hdC1hLXRpbWUuaDo1MTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCB2b2lkICphZGRyKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS93b3JkLWF0LWEtdGltZS5oLTUyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NDIuNDU4NjI2MDM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTU0NjI3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5IbW0sIHRoaXMgZnVuY3Rpb24ncyBpbmxpbmUsIHNvIGl0J3MgcHJvYmFibHkgbm90IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgc3ltYm9sLiBUaGUgY29tcGlsZXIncyBsaWtlbHkgZ29pbmcgdG8gZm9sZCBpdCBhd2F5IGluIG1hbnkgY2FzZXMsIG1ha2luZyBpdCBoYXJkIHRvIHRyYWNrIGluIHRoZSBkaXNhc3NlbWJseSBvciBkZWJ1ZyBvdXRwdXQuIEkgbmVlZCBzb21ldGhpbmcgbW9yZSBjb25jcmV0ZSB0byBsYXRjaCBvbnRvLlxuXG5BbHJpZ2h0LCBsZXQncyBwaXZvdC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdXYuY2AgZmlsZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZS4uLiBgdXZfZnJlZV9yYW5nZV9jYmAgYW5kIGB1dl9hbGxvY19yYW5nZV9jYmAgYXJlIHByb2JhYmx5IHJlbGV2YW50IGNhbGxiYWNrcyBpbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYC4gSSdsbCBzdGFydCB0aGVyZS4gSSdtIGd1ZXNzaW5nIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIHRob3NlLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsICpjb3VsZCogcHJvdmlkZSBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQncyBzZWUgaWYgdGhvc2UgYXJlIHdvcnRoIG15IHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NDUuODE0MDkyNzU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYyOTM3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfZnJlZV9yYW5nZV9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTIwNz1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZV9wdGUocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTIxMi1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MjEzOnN0YXRpYyBpbnQgdXZfZnJlZV9yYW5nZV9jYihwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yMTQte1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTIyOD12b2lkIHV2X2ZyZWVfc3Rvcl92YXIodm9pZCAqc3Rvcl92YXIpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjM5LVxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLVxcdTAwM2VhZGRyO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNDA6XFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwgYWRkciwgc2l6ZSwgdXZfZnJlZV9yYW5nZV9jYiwgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTI0MS1cXHRmcmVlX3ZtX2FyZWEoYXJlYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDExOjMwOjQ1Ljk2MDM5NjI0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDcwODQ3Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2VzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzdGF0aWMgY2FsbGJhY2tzLCBhbmQgeWVzLCB3ZSBjYW4gZGVmaW5pdGVseSBpbmNsdWRlIHRob3NlLiBMZXQgbWUgc2VlLi4uIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBoZXJlIGFyZTogYGRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc2AsIGB1dl9hbGxvY19zdG9yX3ZhcmAsIGB1dl9mcmVlX3N0b3JfdmFyYCwgYHV2X2FsbG9jX3JhbmdlX2NiYCwgYHV2X2ZyZWVfcmFuZ2VfY2JgLCBhbmQgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEdvdCBpdC5cblxuTm93LCB0aGUgY29uZmlnIGl0ZW0gd2UncmUgZm9jdXNpbmcgb24gaXMgYEtWTWAuIExldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBlbmFibGVzIGBEQ0FDSEVfV09SRF9BQ0NFU1NgIHNwZWNpZmljYWxseSBmb3IgczM5MCwgYW5kIGl0IGFkZHMgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBoYW5kbGVyLCBgZXhfaGFuZGxlcl96ZXJvcGFkYC4gRnVydGhlciwgaXQncyBtb2RpZnlpbmcgS1ZNJ3MgUFYgdmFyaWFibGUgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGxldmVyYWdlIHRob3NlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLiBBbmQgb2YgY291cnNlLCB0aGVyZSdzIGFuIHVwZGF0ZSB0byBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cy5cblxuRXNzZW50aWFsbHksIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgb24gczM5MCwgYW5kIG9mIGNvdXJzZSB3aXRoIEtWTS4gVGhpcyBoYXMgdG8gYmUgY29uc2lkZXJlZCB0byBhZmZlY3QgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYEtWTWAgaXMgdGhlICpvbmx5KiBjb25maWcgdGhhdCdzIHJlcXVpcmVkLiBMZXQncyBkaWcgaW4gYSBiaXQuIEl0IGxvb2tzIGxpa2UgYERDQUNIRV9XT1JEX0FDQ0VTU2AgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgUzM5MGAgd2hlbiBgIUtNU0FOYC4gU28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBlbmFibGluZyB0aGF0IGV4cGxpY2l0bHkuIEl0J3MgaGFuZGxlZCBieSBkZWZhdWx0IG9uIHMzOTAgdW5sZXNzIEtNU0FOIGlzIGFjdGl2ZS4gUGVyZmVjdC5cblxuVGhlIGBLVk1gIGNvbmZpZyBpcyBjbGVhcmx5IG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgYXJjaC9zMzkwL2t2bS9wdi5jYCBmaWxlLiBTbyBpdCBsb29rcyBsaWtlIGBLVk1gIGlzIHRoZSBjcml0aWNhbCBpdGVtIHRvIGVuc3VyZSBpcyBlbmFibGVkLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcxOSwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTE6MzA6NTMuNDMxMjQ3NTY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4Mjk3Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NcIixcbiAgICBcInV2X2FsbG9jX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9mcmVlX3N0b3JfdmFyXCIsXG4gICAgXCJ1dl9hbGxvY19yYW5nZV9jYlwiLFxuICAgIFwidXZfZnJlZV9yYW5nZV9jYlwiLFxuICAgIFwiZXhfaGFuZGxlcl96ZXJvcGFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyBEQ0FDSEVfV09SRF9BQ0NFU1MgZm9yIHMzOTAsIGludHJvZHVjaW5nIGBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkYCBhbmQgaXRzIGV4Y2VwdGlvbiBoYW5kbGVyIGBleF9oYW5kbGVyX3plcm9wYWRgLiBJdCBhbHNvIG1vZGlmaWVzIEtWTSBQViB2YXJpYWJsZSBzdG9yYWdlIGFsbG9jYXRpb24gdG8gdXNlIG5ldyBgdXZfYWxsb2Nfc3Rvcl92YXJgIGFuZCBgdXZfZnJlZV9zdG9yX3ZhcmAgZnVuY3Rpb25zLCBhbmQgdXBkYXRlcyBgZG9fc2VjdXJlX3N0b3JhZ2VfYWNjZXNzYCB0byBoYW5kbGUga2VybmVsIGZhdWx0cyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1lbW9yeSBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIEtWTSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFZGUyBvcGVyYXRpb25zIGFuZCBLVk0gVk0gbGlmZWN5Y2xlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3NlY3VyZV9zdG9yYWdlX2FjY2Vzc1wiLFxuICAgIFwidXZfYWxsb2Nfc3Rvcl92YXJcIixcbiAgICBcInV2X2ZyZWVfc3Rvcl92YXJcIixcbiAgICBcInV2X2FsbG9jX3JhbmdlX2NiXCIsXG4gICAgXCJ1dl9mcmVlX3JhbmdlX2NiXCIsXG4gICAgXCJleF9oYW5kbGVyX3plcm9wYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIERDQUNIRV9XT1JEX0FDQ0VTUyBmb3IgczM5MCwgaW50cm9kdWNpbmcgYGxvYWRfdW5hbGlnbmVkX3plcm9wYWRgIGFuZCBpdHMgZXhjZXB0aW9uIGhhbmRsZXIgYGV4X2hhbmRsZXJfemVyb3BhZGAuIEl0IGFsc28gbW9kaWZpZXMgS1ZNIFBWIHZhcmlhYmxlIHN0b3JhZ2UgYWxsb2NhdGlvbiB0byB1c2UgbmV3IGB1dl9hbGxvY19zdG9yX3ZhcmAgYW5kIGB1dl9mcmVlX3N0b3JfdmFyYCBmdW5jdGlvbnMsIGFuZCB1cGRhdGVzIGBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3NgIHRvIGhhbmRsZSBrZXJuZWwgZmF1bHRzIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWVtb3J5IGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIGFzIHdlbGwgYXMgS1ZNLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgVkZTIG9wZXJhdGlvbnMgYW5kIEtWTSBWTSBsaWZlY3ljbGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[1] Phase: Succeeded StartedAt: 2026-07-20 11:31:05 +0000 UTC FinishedAt: 2026-07-20 11:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 11:31:05 +0000 UTC FinishedAt: 2026-07-20 11:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2] Phase: Succeeded StartedAt: 2026-07-20 11:31:05 +0000 UTC FinishedAt: 2026-07-20 13:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 11:31:05 +0000 UTC FinishedAt: 2026-07-20 13:28:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 11:31:05 +0000 UTC FinishedAt: 2026-07-20 11:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 11:31:05 +0000 UTC FinishedAt: 2026-07-20 11:31:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow4mcbz/series-workflow4mcbz-convert-artifact-3917506016/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 11:31:26 +0000 UTC FinishedAt: 2026-07-20 12:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 11:31:26 +0000 UTC FinishedAt: 2026-07-20 12:23:23 +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:*9a973b6a-5970-4c0e-9138-3ebfd7cb16bd,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-workflow4mcbz/series-workflow4mcbz-convert-artifact-3917506016/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": "23f46299-5a32-48d0-a5f6-f1747600db30", "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-workflow4mcbz/series-workflow4mcbz-build-action-3983070374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 11:31:26 +0000 UTC FinishedAt: 2026-07-20 12:23:13 +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:*9a973b6a-5970-4c0e-9138-3ebfd7cb16bd,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-workflow4mcbz/series-workflow4mcbz-convert-artifact-3917506016/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": "23f46299-5a32-48d0-a5f6-f1747600db30", "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-workflow4mcbz/series-workflow4mcbz-build-action-3983070374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 12:23:23 +0000 UTC FinishedAt: 2026-07-20 12:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 12:23:23 +0000 UTC FinishedAt: 2026-07-20 12:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 12:23:23 +0000 UTC FinishedAt: 2026-07-20 12:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 12:23:23 +0000 UTC FinishedAt: 2026-07-20 12:23:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow4mcbz/series-workflow4mcbz-convert-artifact-3956980999/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 12:23:33 +0000 UTC FinishedAt: 2026-07-20 12:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 12:23:33 +0000 UTC FinishedAt: 2026-07-20 12:25:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23f46299-5a32-48d0-a5f6-f1747600db30,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-workflow4mcbz/series-workflow4mcbz-build-action-3983070374/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-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 12:25:30 +0000 UTC FinishedAt: 2026-07-20 12:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 12:25:30 +0000 UTC FinishedAt: 2026-07-20 12:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 12:25:30 +0000 UTC FinishedAt: 2026-07-20 13:25:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 12:25:30 +0000 UTC FinishedAt: 2026-07-20 13:25:10 +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:*9a973b6a-5970-4c0e-9138-3ebfd7cb16bd,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-workflow4mcbz/series-workflow4mcbz-convert-artifact-3956980999/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": "d47bc929-cad0-4f0e-8971-f58daab77e82", "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-workflow4mcbz/series-workflow4mcbz-build-action-2054467211/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 12:25:30 +0000 UTC FinishedAt: 2026-07-20 13:25:00 +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:*9a973b6a-5970-4c0e-9138-3ebfd7cb16bd,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-workflow4mcbz/series-workflow4mcbz-convert-artifact-3956980999/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": "d47bc929-cad0-4f0e-8971-f58daab77e82", "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-workflow4mcbz/series-workflow4mcbz-build-action-2054467211/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 13:25:10 +0000 UTC FinishedAt: 2026-07-20 13:25:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 13:25:10 +0000 UTC FinishedAt: 2026-07-20 13:25:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 13:25:10 +0000 UTC FinishedAt: 2026-07-20 13:26:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 13:25:10 +0000 UTC FinishedAt: 2026-07-20 13:26:36 +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:*d47bc929-cad0-4f0e-8971-f58daab77e82,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-workflow4mcbz/series-workflow4mcbz-build-action-2054467211/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-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 13:26:46 +0000 UTC FinishedAt: 2026-07-20 13:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 13:26:46 +0000 UTC FinishedAt: 2026-07-20 13:28:03 +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":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*23f46299-5a32-48d0-a5f6-f1747600db30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d47bc929-cad0-4f0e-8971-f58daab77e82,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-workflow4mcbz/series-workflow4mcbz-build-action-3983070374/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-workflow4mcbz/series-workflow4mcbz-build-action-2054467211/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 13:26:46 +0000 UTC FinishedAt: 2026-07-20 13:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 13:26:46 +0000 UTC FinishedAt: 2026-07-20 13:26:51 +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":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4mcbz/series-workflow4mcbz-convert-artifact-2486893792/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 13:26:46 +0000 UTC FinishedAt: 2026-07-20 13:26:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 13:26:46 +0000 UTC FinishedAt: 2026-07-20 13:26:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 13:26:46 +0000 UTC FinishedAt: 2026-07-20 13:26:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 13:26:56 +0000 UTC FinishedAt: 2026-07-20 13:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mcbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["do_secure_storage_access","uv_alloc_stor_var","uv_free_stor_var","uv_alloc_range_cb","uv_free_range_cb","ex_handler_zeropad"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"25f744ffa0c8e799e06250ce2e618367b166b0d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"999f4cef-6328-4284-a036-c06f024eba95","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 13:26:56 +0000 UTC FinishedAt: 2026-07-20 13:27:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23f46299-5a32-48d0-a5f6-f1747600db30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d47bc929-cad0-4f0e-8971-f58daab77e82,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-workflow4mcbz/series-workflow4mcbz-build-action-3983070374/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-workflow4mcbz/series-workflow4mcbz-build-action-2054467211/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-workflow4mcbz/series-workflow4mcbz-convert-artifact-2486893792/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,}