Name: series-workflowzw846 Phase: Succeeded StartedAt: 2026-08-19 19:18:29 +0000 UTC FinishedAt: 2026-08-19 20:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[0] Phase: Succeeded StartedAt: 2026-08-19 19:18:29 +0000 UTC FinishedAt: 2026-08-19 20:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 19:18:29 +0000 UTC FinishedAt: 2026-08-19 20:13:40 +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": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "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": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "51c8cfd4-9115-4e40-bd92-d26eeaa2faea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "distribute_float_irqs", "kvm_s390_pv_sclp_kick", "kvm_s390_inject_vm" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfc2NscF9raWNrJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBmb3IgczM5MCwgaW50cm9kdWNpbmcgYSBuZXcgc3RhdGlzdGljIGBpbmplY3RfcmVkaXN0YCBhbmQgY2hhbmdpbmcgaG93IHZDUFVzIGFyZSBraWNrZWQgd2hlbiBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLiBUaGUgb25seSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGxvY2FsIHZhcmlhYmxlIGBwYXJtYCBpbiBgX19pbmplY3Rfdm0oKWAsIHdoaWNoIGlzIGxlZnQgdW5pbml0aWFsaXplZCBmb3IgY2VydGFpbiBpbnRlcnJ1cHQgdHlwZXMgKGUuZy4sIGBLVk1fUzM5MF9NQ0hLYCkuIEhvd2V2ZXIsIHRoaXMgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyBwYXNzZWQgdG8gYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgYW5kIHN1YnNlcXVlbnRseSB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgLCB3aGVyZSBpdCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgZm9yIHRob3NlIHNwZWNpZmljIGludGVycnVwdCB0eXBlcy4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzaGFkb3cgbGV2ZWwgYW5kIG9ubHkgcmVwb3J0cyBhbiBlcnJvciBpZiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyB1c2VkIGluIGEgYnJhbmNoLCBhcyBhIG1lbW9yeSBhZGRyZXNzLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSBgcGFybWAgaXMgbmV2ZXIgZXZhbHVhdGVkIGluIHRoZXNlIHdheXMgd2hlbiB1bmluaXRpYWxpemVkLCBpdCB3aWxsIG5vdCB0cmlnZ2VyIGEgS01TQU4gcmVwb3J0LiBPdGhlciBjaGFuZ2VzIGludm9sdmUgYmFzaWMgY29udHJvbCBmbG93LCB2Q1BVIHdha2V1cHMsIGFuZCBhIG5ldyBmaWVsZCBpbiBgc3RydWN0IGt2bV92bV9zdGF0YCAod2hpY2ggaXMgemVyby1hbGxvY2F0ZWQpLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHBhcnNpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gb24gczM5MHguIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgSVJRcyBhY3Jvc3MgVkNQVXMgYW5kIHRvIGtpY2sgVkNQVXMgd2hlbiBzcGVjaWZpYyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1MzOTBfSU5URVJSVVBUKSBhbmQgZHVyaW5nIFZDUFUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTA4ODNjZmEwNmU3N2JlNjFiNzlhNjA4NTQ5MTY3YmQxZWJkMmQ1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDIwOjAxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIHN0cnVjdCBrdm1fdm1fc3RhdCB7XG4gXHR1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7XG4gXHR1NjQgZ21hcF9zaGFkb3dfc2dfZW50cnk7XG4gXHR1NjQgZ21hcF9zaGFkb3dfcGdfZW50cnk7XG4mIzQzO1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXG5pbmRleCAxOTgwZGY2MWVmMzA0Li5lMWRlM2Y0NzFmZmQwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuQEAgLTUzNiw2ICYjNDM7NTM2LDE1IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlcGVuZGluZ19pcnFzKTtcbiBcdGNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlbWFza2VkX2lycXMpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgbWlzc2VkIHRoZSBmbG9hdGluZyBJUlEga2ljayBzaW5jZSB3ZSBjYW4gb25seSBpbmplY3RcbiYjNDM7XHQgKiB3aGVuIHdlIGVuZCB1cCBoZXJlIGFuZCBub3Qgd2hlbiB0aGUgaXJxIHdhcyBpbmplY3RlZCB2aWFcbiYjNDM7XHQgKiB0aGUgRkxJQy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vdyB0aGF0IHdlIGhhdmUgY2xlYXJlZCB0aGUgbWFza2luZyB3ZSBjYW4ga2ljayBjcHVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV9zMzkwX3B2X3NjbHBfa2ljayh2Y3B1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOGYyNGJjZDFhNmQzNi4uMWVlOWFiMjUwNTA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBhY3RpdmVfbWFzaztcbiB9XG4gXG4mIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4mIzQzO1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZVxuJiM0MztcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbiYjNDM7XHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxuJiM0MztcdCAqL1xuJiM0MztcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbiYjNDM7XHQvKiBXZWxsIG5vYm9keSYjMzk7cyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovXG4mIzQzO1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbiYjNDM7XHRcdGlmIChkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSkge1xuJiM0MztcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICYjNDM7JiM0MztzaWdjcHUpO1xuJiM0MztcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7XG5AQCAtMTkxNSw0OSAmIzQzOzE5NDYsMTI5IEBAIHN0YXRpYyBpbnQgX19pbmplY3RfaW8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHU2NCB0eXBlLCBpbnQgaXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuJiM0MztcdFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxuJiM0MztcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuJiM0MztcdFx0ICAgICAgIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRV9FVik7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4mIzQzO1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuJiM0MztcdFx0cmV0dXJuIGlzY190b19pcnFfdHlwZShpc2MpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuXG4mIzQzOyAqIFNldHVwIGludGVydmVudGlvbiBtYXNrcyB0byBjYXRjaCBydW5uaW5nIHZjcHVzIHRoYXQgaG9wZWZ1bGx5IG9wZW5cbiYjNDM7ICogdGhlaXIgbWFza3Mgc29vbmlzaCBhbmQga2ljayBzbGVlcGluZyB2Y3B1cyB0byBtb3RpdmF0ZSB0aGVtIHRvXG4mIzQzOyAqIHRha2UgSVJRcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpXG4mIzQzO3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdC8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqL1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfTUNISzpcbiYjNDM7XHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1NUT1BfSU5UKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4mIzQzO1x0XHRpZiAoISh0eXBlIFx1MDAyNiBLVk1fUzM5MF9JTlRfSU9fQUlfTUFTSyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQub3JpZ2luKSB8fFxuJiM0MztcdFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUodmNwdSkpXG4mIzQzO1x0XHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0lPX0lOVCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRVhUX0lOVCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0a3ZtX3MzOTBfdmNwdV93YWtldXAodmNwdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtpY2tfY3B1X2lycShzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuIFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzLCBucl90cmllcyA9IDA7XG4mIzQzO1x0dTY0IGlycV9wZW5kX21hc2s7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4gXHRpZiAoIW9ubGluZV92Y3B1cylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2sodHlwZSwgcGFybSk7XG4gXHRmb3IgKHNpZ2NwdSA9IGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUmIzQzOyYjNDM7KSB7XG4gXHRcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XG4gXHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbi1cdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKVxuJiM0MztcdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpIFx1MDAyNiBpcnFfcGVuZF9tYXNrKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHQvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqL1xuLVx0XHRpZiAobnJfdHJpZXMmIzQzOyYjNDM7IFx1MDAzZT0gb25saW5lX3ZjcHVzKVxuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdGlmIChucl90cmllcyYjNDM7JiM0MzsgXHUwMDNlPSBvbmxpbmVfdmNwdXMgKiAyKSB7XG4mIzQzO1x0XHRcdGRzdF92Y3B1ID0gTlVMTDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHQvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi9cbi1cdHN3aXRjaCAodHlwZSkge1xuLVx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuLVx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfU1RPUF9JTlQpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4tXHRcdGlmICghKHR5cGUgXHUwMDI2IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICBrdm0tXHUwMDNlYXJjaC5naXNhX2ludC5vcmlnaW4pIHx8XG4tXHRcdCAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKGRzdF92Y3B1KSlcbi1cdFx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfSU9fSU5UKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfRVhUX0lOVCk7XG4tXHRcdGJyZWFrO1xuJiM0MztcdC8qIE5vYm9keSB3YXMgZW5hYmxlZCwgdGltZSB0byB3YWtlIGFsbCBvZiB0aGVtICovXG4mIzQzO1x0aWYgKCFkc3RfdmNwdSkge1xuJiM0MztcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgZHN0X3ZjcHUsIGt2bSlcbiYjNDM7XHRcdFx0dmNwdV9pbnRlcnZlbnRpb25fa2ljayhkc3RfdmNwdSwgdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4tXHRrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7XG4mIzQzO1xuJiM0MztcdHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBjcHUgdGhhdCBjYWxsZWQgc2NscCBsaWtlbHkgd2lsbCBhbHNvIHRha2UgdGhlIElSUSwgbm9cbiYjNDM7XHQgKiBuZWVkIHRvIGtpY2sgYW55b25lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsaWtlbHkoZGVsaXZlcmFibGVfaXJxcyh2Y3B1KSBcdTAwMjYgSVJRX1BFTkRfRVhUX1NFUlZJQ0UpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciB0aGUgb3RoZXIgY2FzZXMgd2UgbWlnaHQgaGF2ZSBzbGVlcGluZyBjcHVzIHdpdGggb3BlblxuJiM0MztcdCAqIG1hc2tzLiBUaW1lIHRvIGZpbmQgYW5kIGtpY2sgdGhlbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRraWNrX2NwdV9pcnEodmNwdS1cdTAwM2Vrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcHJvdDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0cHJvdCA9IGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZChrdm0pO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBObyBuZWVkIHRvIGtpY2sgb24gbm9uLWV2IHNlcnZpY2UgSVJRcyBmb3IgUFYgVk1zLCB3ZSYjMzk7cmVcbiYjNDM7XHQgKiBub3QgYWxsb3dlZCB0byBpbmplY3QgYW55d2F5LiBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzY2xwXG4mIzQzO1x0ICogaW5zdHJ1Y3Rpb24gbm90aWZpY2F0aW9uIEFGVEVSIHJlLWVudHJ5IG9mIHRoZSB2Y3B1IHRoYXRcbiYjNDM7XHQgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHByb3QgXHUwMDI2XHUwMDI2IHR5cGUgPT0gS1ZNX1MzOTBfSU5UX1NFUlZJQ0UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEocGFybSBcdTAwMjYgU0NDQl9FVkVOVF9QRU5ESU5HKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a2lja19jcHVfaXJxKGt2bSwgdHlwZSwgcGFybSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4ge1xuIFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbiYjNDM7XHR1NjQgcGFybTtcbiBcdGludCByYztcbiBcbiBcdHN3aXRjaCAodHlwZSkge1xuQEAgLTE5NjgsMTIgJiM0MzsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbiYjNDM7XHRcdHBhcm0gPSBpbnRpLVx1MDAzZWV4dC5leHRfcGFyYW1zIFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkc7XG4gXHRcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuIFx0XHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbiYjNDM7XHRcdC8qIEdyYWIgaXNjIGhlcmUgc2luY2UgX19pbmplY3RfaW8oKSBtaWdodCBmcmVlIGludGkgKi9cbiYjNDM7XHRcdHBhcm0gPSBpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktXHUwMDNlaW8uaW9faW50X3dvcmQpKTtcbiBcdFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTk4Miw3ICYjNDM7MjA5Niw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbiYjNDM7XHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSwgcGFybSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHtcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSxcbiYjNDM7XHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgJiM0Mzs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpO1xuIFx0XHRpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKVxuIFx0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi43MTE1YThmNWIxODgyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiAmIzQzOzM3NSw4IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfc2NscF9raWNrJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBvbiBzMzkweC4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBJUlFzIGFjcm9zcyBWQ1BVcyBhbmQgdG8ga2ljayBWQ1BVcyB3aGVuIHNwZWNpZmljIGludGVycnVwdHMgYXJlIGluamVjdGVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fUzM5MF9JTlRFUlJVUFQpIGFuZCBkdXJpbmcgVkNQVSBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDg4M2NmYTA2ZTc3YmU2MWI3OWE2MDg1NDkxNjdiZDFlYmQyZDU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMjA6MDE6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIHN0cnVjdCBrdm1fdm1fc3RhdCB7CiAJdTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTsKIAl1NjQgZ21hcF9zaGFkb3dfcGdfZW50cnk7CiYjNDM7CXU2NCBpbmplY3RfcmVkaXN0OwogfTsKIAogc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCmluZGV4IDE5ODBkZjYxZWYzMDQuLmUxZGUzZjQ3MWZmZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwpAQCAtNTM2LDYgJiM0Mzs1MzYsMTUgQEAgc3RhdGljIGludCBoYW5kbGVfcHZfc2NscChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc2V0X2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgJmFtcDtmaS0mZ3Q7cGVuZGluZ19pcnFzKTsKIAljbGVhcl9iaXQoSVJRX1BFTkRfRVhUX1NFUlZJQ0UsICZhbXA7ZmktJmd0O21hc2tlZF9pcnFzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZmktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2UgbWlzc2VkIHRoZSBmbG9hdGluZyBJUlEga2ljayBzaW5jZSB3ZSBjYW4gb25seSBpbmplY3QKJiM0MzsJICogd2hlbiB3ZSBlbmQgdXAgaGVyZSBhbmQgbm90IHdoZW4gdGhlIGlycSB3YXMgaW5qZWN0ZWQgdmlhCiYjNDM7CSAqIHRoZSBGTElDLgomIzQzOwkgKgomIzQzOwkgKiBOb3cgdGhhdCB3ZSBoYXZlIGNsZWFyZWQgdGhlIG1hc2tpbmcgd2UgY2FuIGtpY2sgY3B1cy4KJiM0MzsJICovCiYjNDM7CWt2bV9zMzkwX3B2X3NjbHBfa2ljayh2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggOGYyNGJjZDFhNmQzNi4uMWVlOWFiMjUwNTA0MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gYWN0aXZlX21hc2s7CiB9CiAKJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwomIzQzOwlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXM7CiYjNDM7CiYjNDM7CWlmICghUkVBRF9PTkNFKGt2bS0mZ3Q7YXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2UKJiM0MzsJICogbWlnaHQgYnVybiB0b28gbWFueSBjeWNsZXMgYnV0IGFwYXJ0IGZyb20gdGhhdCB3YWtpbmcgYQomIzQzOwkgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLgomIzQzOwkgKi8KJiM0MzsJc2lnY3B1ID0gZmluZF9maXJzdF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTsKJiM0MzsJLyogV2VsbCBub2JvZHkmIzM5O3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqLwomIzQzOwlpZiAoc2lnY3B1ID09IG9ubGluZV92Y3B1cykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpOwomIzQzOwkJaWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7CiYjNDM7CQkJa3ZtLSZndDtzdGF0LmluamVjdF9yZWRpc3QmIzQzOyYjNDM7OwomIzQzOwkJCWt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzLCAmIzQzOyYjNDM7c2lnY3B1KTsKJiM0MzsJfSB3aGlsZSAoc2lnY3B1ICZsdDsgb25saW5lX3ZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7CkBAIC0xOTE1LDQ5ICYjNDM7MTk0NiwxMjkgQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHU2NCB0eXBlLCBpbnQgaXNjKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfTUNISzoKJiM0MzsJCS8qIE9ubHkgcmVwcmVzc2libGUgbWFjaGluZSBjaGVja3MgYXJlIGZsb2F0aW5nICovCiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOgomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOgomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfAomIzQzOwkJICAgICAgIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRV9FVik7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOgomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9QRkFVTFRfRE9ORSk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6CiYjNDM7CQlyZXR1cm4gaXNjX3RvX2lycV90eXBlKGlzYyk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCi0gKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuCiYjNDM7ICogU2V0dXAgaW50ZXJ2ZW50aW9uIG1hc2tzIHRvIGNhdGNoIHJ1bm5pbmcgdmNwdXMgdGhhdCBob3BlZnVsbHkgb3BlbgomIzQzOyAqIHRoZWlyIG1hc2tzIHNvb25pc2ggYW5kIGtpY2sgc2xlZXBpbmcgdmNwdXMgdG8gbW90aXZhdGUgdGhlbSB0bwomIzQzOyAqIHRha2UgSVJRcy4KICAqLwotc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSkKJiM0Mzt7CiYjNDM7CS8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqLwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBLVk1fUzM5MF9NQ0hLOgomIzQzOwkJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfU1RPUF9JTlQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6CiYjNDM7CQlpZiAoISh0eXBlICZhbXA7IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5naXNhX2ludC5vcmlnaW4pIHx8CiYjNDM7CQkgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSkKJiM0MzsJCQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9JT19JTlQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWt2bV9zMzkwX3ZjcHVfd2FrZXVwKHZjcHUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBraWNrX2NwdV9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pCiB7CiAJc3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTsKIAlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDsKJiM0MzsJdTY0IGlycV9wZW5kX21hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCW9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpOwogCWlmICghb25saW5lX3ZjcHVzKQogCQlyZXR1cm47CiAKJiM0MzsJaXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayh0eXBlLCBwYXJtKTsKIAlmb3IgKHNpZ2NwdSA9IGt2bS0mZ3Q7YXJjaC5mbG9hdF9pbnQubGFzdF9zbGVlcF9jcHU7IDsgc2lnY3B1JiM0MzsmIzQzOykgewogCQlzaWdjcHUgJT0gb25saW5lX3ZjcHVzOwogCQlkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7Ci0JCWlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSkKJiM0MzsJCWlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgJmFtcDsgaXJxX3BlbmRfbWFzaykKIAkJCWJyZWFrOwogCQkvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqLwotCQlpZiAobnJfdHJpZXMmIzQzOyYjNDM7ICZndDs9IG9ubGluZV92Y3B1cykKLQkJCXJldHVybjsKJiM0MzsJCWlmIChucl90cmllcyYjNDM7JiM0MzsgJmd0Oz0gb25saW5lX3ZjcHVzICogMikgewomIzQzOwkJCWRzdF92Y3B1ID0gTlVMTDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAl9CiAKLQkvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi8KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEtWTV9TMzkwX01DSEs6Ci0JCWt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7Ci0JCWJyZWFrOwotCWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6Ci0JCWlmICghKHR5cGUgJmFtcDsgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgJmFtcDsmYW1wOwotCQkgICAgICBrdm0tJmd0O2FyY2guZ2lzYV9pbnQub3JpZ2luKSB8fAotCQkgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZShkc3RfdmNwdSkpCi0JCQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfSU9fSU5UKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX0VYVF9JTlQpOwotCQlicmVhazsKJiM0MzsJLyogTm9ib2R5IHdhcyBlbmFibGVkLCB0aW1lIHRvIHdha2UgYWxsIG9mIHRoZW0gKi8KJiM0MzsJaWYgKCFkc3RfdmNwdSkgewomIzQzOwkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgZHN0X3ZjcHUsIGt2bSkKJiM0MzsJCQl2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTsKJiM0MzsJCXJldHVybjsKIAl9Ci0Ja3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpOwomIzQzOwomIzQzOwl2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNwdSB0aGF0IGNhbGxlZCBzY2xwIGxpa2VseSB3aWxsIGFsc28gdGFrZSB0aGUgSVJRLCBubwomIzQzOwkgKiBuZWVkIHRvIGtpY2sgYW55b25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpa2VseShkZWxpdmVyYWJsZV9pcnFzKHZjcHUpICZhbXA7IElSUV9QRU5EX0VYVF9TRVJWSUNFKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9yIHRoZSBvdGhlciBjYXNlcyB3ZSBtaWdodCBoYXZlIHNsZWVwaW5nIGNwdXMgd2l0aCBvcGVuCiYjNDM7CSAqIG1hc2tzLiBUaW1lIHRvIGZpbmQgYW5kIGtpY2sgdGhlbS4KJiM0MzsJICovCiYjNDM7CWtpY2tfY3B1X2lycSh2Y3B1LSZndDtrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pCiYjNDM7ewomIzQzOwlpbnQgcHJvdDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CXByb3QgPSBrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQoa3ZtKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogTm8gbmVlZCB0byBraWNrIG9uIG5vbi1ldiBzZXJ2aWNlIElSUXMgZm9yIFBWIFZNcywgd2UmIzM5O3JlCiYjNDM7CSAqIG5vdCBhbGxvd2VkIHRvIGluamVjdCBhbnl3YXkuIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHNjbHAKJiM0MzsJICogaW5zdHJ1Y3Rpb24gbm90aWZpY2F0aW9uIEFGVEVSIHJlLWVudHJ5IG9mIHRoZSB2Y3B1IHRoYXQKJiM0MzsJICogaGFuZGxlZCB0aGUgaW5zdHJ1Y3Rpb24gaW50ZXJjZXB0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHByb3QgJmFtcDsmYW1wOyB0eXBlID09IEtWTV9TMzkwX0lOVF9TRVJWSUNFICZhbXA7JmFtcDsKJiM0MzsJICAgICEocGFybSAmYW1wOyBTQ0NCX0VWRU5UX1BFTkRJTkcpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlraWNrX2NwdV9pcnEoa3ZtLCB0eXBlLCBwYXJtKTsKIH0KIAogc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIHsKIAl1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLSZndDt0eXBlKTsKJiM0MzsJdTY0IHBhcm07CiAJaW50IHJjOwogCiAJc3dpdGNoICh0eXBlKSB7CkBAIC0xOTY4LDEyICYjNDM7MjA3OSwxNSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCQlyYyA9IF9faW5qZWN0X3ZpcnRpbyhrdm0sIGludGkpOwogCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOgomIzQzOwkJcGFybSA9IGludGktJmd0O2V4dC5leHRfcGFyYW1zICZhbXA7IFNDQ0JfRVZFTlRfUEVORElORzsKIAkJcmMgPSBfX2luamVjdF9zZXJ2aWNlKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOgogCQlyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6CiYjNDM7CQkvKiBHcmFiIGlzYyBoZXJlIHNpbmNlIF9faW5qZWN0X2lvKCkgbWlnaHQgZnJlZSBpbnRpICovCiYjNDM7CQlwYXJtID0gaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLSZndDtpby5pb19pbnRfd29yZCkpOwogCQlyYyA9IF9faW5qZWN0X2lvKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xOTgyLDcgJiM0MzsyMDk2LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCV9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTsKJiM0MzsJX19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUsIHBhcm0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggNTE4YTY5YzU1ZTg1Yy4uZDZkNDY2ODhkOTgwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtODYsNiAmIzQzOzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7CiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19yM19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksCiYjNDM7CVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksCiB9OwogCiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0gewpAQCAtNDU3Miw2ICYjNDM7NDU3Myw4IEBAIHN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTsKIAkJaWYgKHJjIHx8IGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkKIAkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCWRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LSZndDtrdm0pOwogCX0KIAogCXJjID0ga3ZtX3MzOTBfaGFuZGxlX3JlcXVlc3RzKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IDZkMjg0MmZiNzFhMzMuLjcxMTVhOGY1YjE4ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTM3NSw2ICYjNDM7Mzc1LDggQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTsKIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pOwogaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODg5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBzMzkwIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLiBJdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBpbnRlcmNlcHQuY2AsIGBpbnRlcnJ1cHQuY2AsIGBrdm0tczM5MC5jYCwgYGt2bS1zMzkwLmhgLCBhbmQgYGt2bV9ob3N0LmhgIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9rdm1gIGRpcmVjdG9yeS4gVGhhdCBwb2ludHMgdG8gc29tZSBzZXJpb3VzIGNoYW5nZXMgdW5kZXIgdGhlIGhvb2QuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCwgc28gdGhlIGNvcmUgbG9naWMgb2YgaG93IHdlIGhhbmRsZSBmbG9hdGluZyBJUlFzIGluIEtWTSBmb3IgczM5MCBpcyBjaGFuZ2luZywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHBheSAqdmVyeSogY2xvc2UgYXR0ZW50aW9uIHRvIHRoaXMuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgaXMsIGNhbiBJIHRlc3QgdGhpcyBlZmZlY3RpdmVseT8gSXMgdGhpcyByZWFjaGFibGUgYnkgZXhpc3RpbmcgdGVzdGluZyBpbmZyYXN0cnVjdHVyZT8gQWgsIHllcywgaWYgd2UgaGF2ZSBzMzkweCBRRU1VLCBLVk0gb24gczM5MCBpcyB0ZXN0YWJsZS4gR29vZCwgZ29vZC4gQW5kIHN5emthbGxlci4uLiBkb2VzIHN5emthbGxlciBkbyBzMzkweD8gWWVzLCBpdCBkb2VzLCBzbyBzeXprYWxsZXIgKmNhbiogZnV6eiBLVk0gb24gczM5MHguIFBlcmZlY3QuIFRoYXQmIzM5O3MgYSBodWdlIHdpbiBpbiB0ZXJtcyBvZiB0ZXN0YWJpbGl0eSBhbmQgZmluZGluZyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgc3l6a2FsbGVyIG5lZWRzIHRvIGVuYWJsZSBLVk0gb24gczM5MHguIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHN0YW5kYXJkIEtWTSBjb25maWcgaXMgc3VmZmljaWVudCwgYENPTkZJR19LVk1gIHNob3VsZCBiZSBnb29kIGVub3VnaC4gVGltZSB0byBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgS1ZNIERlcGVuZGVuY2llcyBmb3IgczM5MCBBcmNoaXRlY3R1cmUgSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3lzdGVtIGlzIGluZGljYXRpbmcgdGhhdCBgQ09ORklHX0tWTWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBzb21ldGhpbmcsIHdoaWNoIGlzbiYjMzk7dCBlbnRpcmVseSBzdXJwcmlzaW5nIGdpdmVuIHRoZSBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGxlYW5pbmcgb24gaXQsIHNwZWNpZmljYWxseSBpbnRlcnJ1cHQgbWFuYWdlbWVudC4gVGhlIHMzOTAgYXJjaGl0ZWN0dXJlIG9mdGVuIGhhcyBzb21lIHVuaXF1ZSBhcHByb2FjaGVzIGhlcmUuCgpJJiMzOTtsbCBzdGFydCB3aXRoIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gVGhhdCBmaWxlIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZTsgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBkaXN0cmlidXRpb24gYXJlIG9mdGVuIHRpZ2h0bHkgY291cGxlZCB3aXRoIHZpcnR1YWxpemF0aW9uLiBUaGUgcHJlc2VuY2Ugb2YgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgaXMgYSBwYXJ0aWN1bGFyIHBvaW50IG9mIGludGVyZXN0IGJlY2F1c2Ugb2YgaXRzIGltcGxpY2F0aW9uIGZvciBmbG9hdGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBhbmQgb3RoZXJzIGFyZSB1dGlsaXppbmcgS1ZNIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGVyZSB0aGF0IGRlcGVuZGVuY3kgaXMgZGVjbGFyZWQgb3IgaW1wbGllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgQ09ORklHX0tWTWAgYW5kIGhvdyB3ZSYjMzk7cmUgZGlzdHJpYnV0aW5nIHRob3NlIGludGVycnVwdHMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGlmIHRoZXJlJiMzOTtzIGFueSBhcmVhIHRoYXQmIzM5O3Mgbm90IG5lZWRlZCwgb3IgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBkaWZmZXJlbnQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlzdHJpYnV0ZV9mbG9hdF9pcnFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3MDp2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ1NTg9c3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTc2LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1Nzc6XHRcdGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3OC1cdH1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc4PXZvaWQga3ZtX3MzOTBfcHZfc2NscF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6Mzc5OnZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMzgwLWludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTAxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB2Y3B1X3ByZV9ydW5gIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBTaW11bHRhbmVvdXNseSwgd2UgaGF2ZSBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCBiZWluZyBpbnRyb2R1Y2VkLCB0cmlnZ2VyZWQgZnJvbSBgaGFuZGxlX3B2X3NjbHBgIGluIGBhcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGhhbmRsZV9wdl9zY2xwYCBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIFFFTVUmIzM5O3MgczM5MHggUFYgc3VwcG9ydC4gQWgsIHllcywgaXQgZG9lcyBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24sIHdoaWNoIGluY2x1ZGVzIFBWLiBCdXQgZXZlbiBpZiBQViBpc24mIzM5O3QgaW4gcGxheSwgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2Agc3RpbGwgZ2V0cyBpbnZva2VkIHZpYSBgdmNwdV9wcmVfcnVuYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIGFyb3VuZCBgX19mbG9hdGluZ19pcnFfa2lja2AsIHNvIHRoZXJlJiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gaGVyZSBpbiB0aGUgS1ZNIHMzOTB4IGltcGxlbWVudGF0aW9uLiBJdCBtZWFucyBJJiMzOTttIGNvbWZvcnRhYmxlIHNheWluZyB0aGlzIGlzIFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGtleSBzeW1ib2xzLiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYXJlIG9idmlvdXMgb25lcy4gVGhlbiB0aGVyZSYjMzk7cyB0aGlzIHBhdGg6IGB2Y3B1X2ludGVydmVudGlvbl9raWNrYCAtJmd0OyBga2lja19jcHVfaXJxYCAtJmd0OyBgX19mbG9hdGluZ19pcnFfa2lja2AgLSZndDsgYF9faW5qZWN0X3ZtYCAtJmd0OyBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gV2FpdCwgYGt2bV9zMzkwX2luamVjdF92bWAgaXMgdGhlIG9uZSBJIHdhbnQgdG8gcmVhbGx5IGxvb2sgaW50by4gQm90aCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBhbmQgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYXJlIGV4cG9ydGVkLCB3aGljaCBnaXZlcyB1cyBzb21lIGdvb2QgZW50cnkgcG9pbnRzLgoKTmV4dCBzdGVwcywgSSBuZWVkIHRvIHZlcmlmeSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhbmQgYGhhbmRsZV9wdl9zY2xwYCBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDY4PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTAzOmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTA0LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEzNy1cdH1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjEzODpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVx1MDAzZXR5cGUsIHMzOTBpbnQtXHUwMDNlcGFybSwgczM5MGludC1cdTAwM2VwYXJtNjQsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMzktXHRcdFx0XHQgMik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODc3PXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg5NS1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4OTY6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODk3LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjkwOS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjkxMDpcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTExLVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mzg2NT1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM5MDctXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozOTA4Olx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzkwOS1cdFx0aWYgKHJldCA9PSAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTI3LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozOTI4Olx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM5MjktXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGZpLVx1MDAzZXNpbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4Olx0XHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0OS1cdFx0aWYgKHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzU9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0OTMtXHRcdGludGkucGFybTY0ID0gdG9rZW47XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5NDpcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXHUwMDNla3ZtLCBcdTAwMjZpbnRpLCBpbnRpX21lbSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cdFx0aWYgKHJldClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc5PXZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MzgwOmludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODEtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbi0tXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXG4tLVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmgtMTI0LVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcbmFyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oLTEyNi1cdCAgICBUUF9QUk9UTyhfX3U2NCB0eXBlLCBfX3UzMiBwYXJtLCBfX3U2NCBwYXJtNjQsIGludCB3aG8pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipDb25zaWRlcmluZyBJbmplY3Rpb24gUG9pbnRzIGluIHRoZSBzMzkwIEtWTSBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4uLiB0aGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludCB0byBmb2N1cyBvbiwgYSBnb29kIHN5bWJvbCB0byBkaXZlIGludG8uIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHdlIHNlZSBjcml0aWNhbCBldmVudHMgYmVpbmcgaW5qZWN0ZWQgaW50byB0aGUgdmlydHVhbCBtYWNoaW5lLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHRoaW5rIGFib3V0IG90aGVyIHBvdGVudGlhbGx5IGltcG9ydGFudCBhcmVhcywgYW5kIHRoZSBuYW1lIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYGhhbmRsZV9wdl9zY2xwYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgdXNlZnVsIG92ZXJsYXAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IGludGVyYWN0aW9ucyBhcmUgb2Ygbm90ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3B2X3NjbHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jPTUwOD1zdGF0aWMgaW50IGhhbmRsZV9wdl9zcHgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTE2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo1MTc6c3RhdGljIGludCBoYW5kbGVfcHZfc2NscChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTUxOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz01ODI9c3RhdGljIGludCBoYW5kbGVfcHZfbm90aWZpY2F0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTU4OC1cdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWlwYSA9PSAweGIyMjApXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjU4OTpcdFx0cmV0dXJuIGhhbmRsZV9wdl9zY2xwKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01OTAtXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpcGEgPT0gMHhiOWE0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTdGF0aWMgTWV0aG9kIFVzYWdlKioKCkFscmlnaHQsIHNvIGBoYW5kbGVfcHZfc2NscGAgaXMgc3RhdGljLCB0aGF0JiMzOTtzIGFscmVhZHkgZXN0YWJsaXNoZWQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBgaGFuZGxlX3B2X25vdGlmaWNhdGlvbmAuIEl0IHNlZW1zIG9kZCB0aGF0IG9uZSBoYW5kbGVyIGlzIHN0YXRpYyB3aGlsZSB0aGUgb3RoZXIgaXNuJiMzOTt0LCBlc3BlY2lhbGx5IHdoZW4gdGhleSBsaWtlbHkgaGFuZGxlIHNpbWlsYXIgcGFyYWxsZWwgcHJvY2Vzc2luZyBzY2VuYXJpb3MsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLiBBIHF1aWNrIGxvb2sgYXQgYGhhbmRsZV9wdl9ub3RpZmljYXRpb25gIGlzIGluIG9yZGVyOyBJIHdhbnQgdG8gZ3Jhc3AgaXRzIGNvbnRleHQgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHVzYWdlLCBvciBpZiB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSBmb3IgaW1wcm92ZW1lbnQgb3IgcmVmYWN0b3JpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3B2X25vdGlmaWNhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NTUxPXN0YXRpYyBpbnQgaGFuZGxlX3B2X3V2YyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01ODEtXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjU4MjpzdGF0aWMgaW50IGhhbmRsZV9wdl9ub3RpZmljYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01ODMte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NjIyPWludCBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjcwLVx0Y2FzZSBJQ1BUX1BWX05PVElGWTpcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NjcxOlx0XHRyYyA9IGhhbmRsZV9wdl9ub3RpZmljYXRpb24odmNwdSk7XG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTY3Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0gU3ltYm9scyBmb3IgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLiBJIGtub3cgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBvd24gZmlsZSwgc28gdGhlb3JldGljYWxseSwgaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEJ1dCwga25vd2luZyBob3cgS1ZNIHdvcmtzLCB0aGF0IGZ1bmN0aW9uIGlzIGxpa2VseSBhICp2ZXJ5KiBob3QgcGF0aC4gSSYjMzk7ZCByYXRoZXIgbG9vayBzb21ld2hlcmUgbGVzcyBoZWF2aWx5IHRyYWZmaWNrZWQgdG8gc3RhcnQuCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgaXMgYWxzbyBleHBvcnRlZC4gVGhhdCBzb3VuZHMgcHJvbWlzaW5nLiBUaGVuIHRoZXJlJiMzOTtzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCDigJMgdGhleSYjMzk7cmUgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQsIHNvIHRoZXkmIzM5O3JlIGFsbCBzb2xpZCBzdGFydGluZyBwb2ludHMuIFRoZXNlIHNlZW0gdG8gYmUgZ29vZCBmb2N1cyBzeW1ib2xzIHRvIGJlZ2luIHdpdGguIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG9mZmVyIGEgY2xlYXJlciB2aWV3IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIHRoYW4gc29tZXRoaW5nIGxpa2UgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAuCgpOb3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19LVk1gIGlzLCBvZiBjb3Vyc2UsIHRoZSBiaWcgb25lLiBJIHNob3VsZCBwcm9iYWJseSByZXZpc2l0IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUgdGhlcmUgYXJlbuKAmXQgYW55IFBWLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBzMzkwIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBLVk0gb24gdGhlIFN5c3RlbSB6IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlYWNoIG9wdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgU2NvcGUqKjogV2hhdCBLVk0gZmVhdHVyZXMgYXJlIGNvbnRyb2xsZWQgaGVyZT8gSXMgdGhpcyBqdXN0IHRoZSBjb3JlIEtWTSBzdXBwb3J0LCBvciBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBleHRlbnNpb25zIG9yIG9wdGltaXphdGlvbnMgZGVmaW5lZD8KKiAgICoqRGVwZW5kZW5jeSBBbmFseXNpcyoqOiBXaGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBkb2VzIHRoaXMgZmlsZSByZWx5IG9uPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgY2VydGFpbiBLVk0gZnVuY3Rpb25hbGl0eS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHM/CiogICAqKkRlZmF1bHQgU2V0dGluZ3MqKjogV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgS1ZNIGZlYXR1cmVzPyBBcmUgdGhlIGRlZmF1bHRzIHJlYXNvbmFibGUgYW5kIHNhZmUsIG9yIGRvIHRoZXkgcmVwcmVzZW50IGEgcGVyZm9ybWFuY2UgdnMuIHNlY3VyaXR5IHRyYWRlLW9mZiB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiBhIHNwZWNpZmljIGRlcGxveW1lbnQ/CiogICAqKlBvdGVudGlhbCBBcmVhcyBmb3IgT3B0aW1pemF0aW9uKio6IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGdhaW5zIG9yIHJlZHVjZWQgcmVzb3VyY2UgY29uc3VtcHRpb24gaWYgdHVuZWQgY29ycmVjdGx5PyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzMzkwLXNwZWNpZmljIHNldHRpbmdzLgoqICAgKipQb3NzaWJsZSBJbnRlcmFjdGlvbnMqKjogSG93IGRvZXMgdGhlIEtjb25maWcgZmlsZSBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBjb2RlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyB0aGF0IGFyZSBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGp1c3QgbG9va2luZyBhdCB0aGlzIGZpbGU/CgpUaGlzIHNjYW4gd2lsbCBob3BlZnVsbHkgYWxsb3cgbWUgdG8gZGV2ZWxvcCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIEtWTSBjb25maWd1cmF0aW9uIG9uIFN5c3RlbSB6LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBLVk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRzb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuICAgNjpcdFxuICAgNzpcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbiAgIDg6XHRcdGRlZl9ib29sIHlcbiAgIDk6XHRcdHByb21wdCBcJiMzNDtLVk1cJiMzNDtcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcbiAgMTI6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXG4gIDEzOlx0XHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXG4gIDE2Olx0XG4gIDE3Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgS1ZNXG4gIDIwOlx0XHRkZWZfdHJpc3RhdGUgeVxuICAyMTpcdFx0cHJvbXB0IFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgMjM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMjQ6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZfU1lOQ1xuICAyNTpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI3Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcbiAgMjg6XHRcdHNlbGVjdCBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcbiAgMjk6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDMwOlx0XHRzZWxlY3QgS1ZNX1ZGSU9cbiAgMzE6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICAzMjpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMzM6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBwYXJhdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgdGhlIFNJRVxuICAzNjpcdFx0ICB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXR5IG9uIHRoZSBtYWluZnJhbWUuIFRoaXMgc2hvdWxkIHdvcmtcbiAgMzc6XHRcdCAgb24gYW55IDY0Yml0IG1hY2hpbmUuXG4gIDM4Olx0XG4gIDM5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcbiAgNDA6XHRcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA0MzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG4gIDQ4Olx0XHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gS1ZNXG4gIDUwOlx0XHRoZWxwXG4gIDUxOlx0XHQgIEFsbG93IENBUF9TWVNfQURNSU4gdXNlcnMgdG8gY3JlYXRlIEtWTSB2aXJ0dWFsIG1hY2hpbmVzIHRoYXQgYXJlXG4gIDUyOlx0XHQgIGNvbnRyb2xsZWQgYnkgdXNlcnNwYWNlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1NTpcdFxuICA1NjpcdGVuZGlmICMgVklSVFVBTElaQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZywgYW5kIHRhaWxvcmVkIGZvciBhIGZlbGxvdyBleHBlcnQ6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBLVk0gaXMgdGhlIGNlbnRyYWwgcG9pbnQgaGVyZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgd2UgbmVlZCB0byBhY2NvdW50IGZvciwgcGFydGljdWxhcmx5IGZvciBQYXJhdmlydHVhbGl6YXRpb24gKFBWKT8gSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgYSBzcGVjaWZpYywgZGVkaWNhdGVkIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZyByZWxhdGVkIHRvIFBhcmF2aXJ0dWFsaXphdGlvbiBvbiBTMzkwLCBsaWtlIGEgYENPTkZJR19LVk1fUzM5MF9QVmAgZmxhZz8gV2UgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyBvciByZWxldmFudCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsIHRvIG91ciBkZXNpcmVkIFBWIHNldHVwLiBUaGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAuKlBWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBmb3IgUGFyYXZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhcmF2aXJ0dWFsaXphdGlvbiAoUFYpIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2Ugd2hlcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcGxhY2UgdG8gZGlzY292ZXIgd2hhdCBrZXJuZWwgZmVhdHVyZXMgYXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBCeSBleGFtaW5pbmcgdGhpcyBLY29uZmlnIGZpbGUsIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSB3aGV0aGVyIFBWIHN1cHBvcnQgaXMgZW5hYmxlZCwgd2hhdCBraW5kcyBvZiBQViBpbnRlcmZhY2VzIGFyZSBzdXBwb3J0ZWQgKGUuZy4sIHZpcnRpbywgcGFyYXZpcnQtb3BzKSwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHZpcnR1YWxpemF0aW9uIG9uIHMzOTAuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5d29yZHMgbGlrZSAmIzM0O3BhcmF2aXJ0dWFsaXphdGlvbiwmIzM0OyAmIzM0O3B2LCYjMzQ7ICYjMzQ7dmlydGlvLCYjMzQ7IG9yIHNwZWNpZmljIEtjb25maWcgc3ltYm9scyByZWxhdGVkIHRvIHRob3NlIGNvbmNlcHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFBWIGlzIGludGVncmF0ZWQgaW50byB0aGUgczM5MCBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qU0VDVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIFNlYXJjaCBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHNwZWNpZmljIGluZGljYXRvcnMgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBrZXkgdGVybXMgcmVsYXRlZCB0byB3aGF0ZXZlciB0aGlzICYjMzQ7UFJPVEVDVEVEJiMzNDsgb3IgJiMzNDtQViYjMzQ7IHJlZmVycyB0by4gSXQmIzM5O3MgYSBxdWljaywgZWZmaWNpZW50IHdheSB0byBpZGVudGlmeSB0aGUgY29yZSBjb25jZXB0IGFuZCBpdHMgcG90ZW50aWFsIHZhcmlhdGlvbnMgd2l0aGluIHRoZSBjb250ZXh0LiBUaGlzIGluaXRpYWwgYXBwcm9hY2ggZm9jdXNlcyBvbiBkaXJlY3QgbWF0Y2hlcyB0byBhdm9pZCBtaXNzaW5nIGFueSBkaXJlY3QgcmVmZXJlbmNlcy4gVGhpcyBoZWxwcyBlc3RhYmxpc2ggYW4gaW5pdGlhbCByYW5nZSBvZiByZWxldmFudCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAuKlBST1RFQ1RFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM5OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24gaW4gdGhlIFMzOTAgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzdGFydCBieSBsb29raW5nIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIGEgc2VhcmNoLCBzb21ldGhpbmcgbGlrZSBgY29uZmlnIC4qYCwgd2hpY2ggc2hvdWxkIGNhdGNoIGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJJiMzOTtsbCBmb2N1cyB0aGF0IHNlYXJjaCB0byBiZSByZWxldmFudCB0byB2aXJ0dWFsaXphdGlvbiwgc2luY2UgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0IGluIHRoZSBzdWJqZWN0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdheSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlcmUgY291bGQgYmUgc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNLCBzMzkweC1zcGVjaWZpYyBwYXJhdmlydHVhbGl6YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBtb3JlIGdlbmVyYWxpemVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgdGhhdCYjMzk7cyBsdXJraW5nIGluIHRoZXJlLiBHb3R0YSBtYXAgb3V0IHdoYXQmIzM5O3MgYXZhaWxhYmxlIGJlZm9yZSBJIGNhbiBtYWtlIGEganVkZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmFyY2gvczM5MC9LY29uZmlnOjI6Y29uZmlnIE1NVVxuYXJjaC9zMzkwL0tjb25maWctMy1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTQtXG5hcmNoL3MzOTAvS2NvbmZpZzo1OmNvbmZpZyBDUFVfQklHX0VORElBTlxuYXJjaC9zMzkwL0tjb25maWctNi1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTctXG5hcmNoL3MzOTAvS2NvbmZpZzo4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvczM5MC9LY29uZmlnLTktXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0xMC1cbmFyY2gvczM5MC9LY29uZmlnOjExOmNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbmFyY2gvczM5MC9LY29uZmlnLTEyLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctMTMtXG5hcmNoL3MzOTAvS2NvbmZpZzoxNDpjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyXG5hcmNoL3MzOTAvS2NvbmZpZy0xNS1cdGRlZl9ib29sIG5cbmFyY2gvczM5MC9LY29uZmlnLTE2LVxuYXJjaC9zMzkwL0tjb25maWc6MTc6Y29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NFxuYXJjaC9zMzkwL0tjb25maWctMTgtXHRkZWZfYm9vbCBuXG5hcmNoL3MzOTAvS2NvbmZpZy0xOS1cbmFyY2gvczM5MC9LY29uZmlnOjIwOmNvbmZpZyBBUkNIX1BST0NfS0NPUkVfVEVYVFxuYXJjaC9zMzkwL0tjb25maWctMjEtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0yMi1cbmFyY2gvczM5MC9LY29uZmlnOjIzOmNvbmZpZyBHRU5FUklDX0hXRUlHSFRcbmFyY2gvczM5MC9LY29uZmlnLTI0LVx0ZGVmX2Jvb2wgIUhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMjUtXG5hcmNoL3MzOTAvS2NvbmZpZzoyNjpjb25maWcgR0VORVJJQ19CVUdcbmFyY2gvczM5MC9LY29uZmlnLTI3LVx0ZGVmX2Jvb2wgeSBpZiBCVUdcbmFyY2gvczM5MC9LY29uZmlnLTI4LVxuYXJjaC9zMzkwL0tjb25maWc6Mjk6Y29uZmlnIEdFTkVSSUNfQlVHX1JFTEFUSVZFX1BPSU5URVJTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMC1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTMxLVxuYXJjaC9zMzkwL0tjb25maWc6MzI6Y29uZmlnIEFVRElUX0FSQ0hcbmFyY2gvczM5MC9LY29uZmlnLTMzLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctMzQtXG5hcmNoL3MzOTAvS2NvbmZpZzozNTpjb25maWcgTk9fSU9QT1JUX01BUFxuYXJjaC9zMzkwL0tjb25maWctMzYtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zNy1cbmFyY2gvczM5MC9LY29uZmlnOjM4OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1VQUk9CRVNcbmFyY2gvczM5MC9LY29uZmlnLTM5LVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctNDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTpjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxuYXJjaC9zMzkwL0tjb25maWctNDItXHRoZXhcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00NS1cbmFyY2gvczM5MC9LY29uZmlnOjQ2OmNvbmZpZyBDQ19IQVNfQlVJTFRJTl9GRlNcbmFyY2gvczM5MC9LY29uZmlnLTQ3LVx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXHUwMDI2XHUwMDI2IEdDQ19WRVJTSU9OIFx1MDAzYyAxNjAwMDApXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTItXG5hcmNoL3MzOTAvS2NvbmZpZzo1Mzpjb25maWcgQ0NfQVNNX0ZMQUdfT1VUUFVUX0JST0tFTlxuYXJjaC9zMzkwL0tjb25maWctNTQtXHRkZWZfYm9vbCBDQ19JU19HQ0MgXHUwMDI2XHUwMDI2IEdDQ19WRVJTSU9OIFx1MDAzYyAxNDAyMDBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01OS1cbmFyY2gvczM5MC9LY29uZmlnOjYwOmNvbmZpZyBDQ19IQVNfQVNNX0FPUl9GT1JNQVRfRkxBR1NcbmFyY2gvczM5MC9LY29uZmlnLTYxLVx0ZGVmX2Jvb2wgIShDQ19JU19DTEFORyBcdTAwMjZcdTAwMjYgQ0xBTkdfVkVSU0lPTiBcdTAwM2MgMTkwMTAwKVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTY1LVxuYXJjaC9zMzkwL0tjb25maWc6NjY6Y29uZmlnIENDX0hBU19BU01fSU1NRURJQVRFX1NUUklOR1NcbmFyY2gvczM5MC9LY29uZmlnLTY3LVx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXHUwMDI2XHUwMDI2IEdDQ19WRVJTSU9OIFx1MDAzYyA5MDAwMClcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03MS1cbmFyY2gvczM5MC9LY29uZmlnOjcyOmNvbmZpZyBDQ19IQVNfU1RBQ0tQUk9URUNUT1JfR0xPQkFMXG5hcmNoL3MzOTAvS2NvbmZpZy03My1cdGRlZl9ib29sICQoY2Mtb3B0aW9uLCAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZD1nbG9iYWwgLW1zdGFjay1wcm90ZWN0b3ItZ3VhcmQtcmVjb3JkKVxuYXJjaC9zMzkwL0tjb25maWctNzQtXG5hcmNoL3MzOTAvS2NvbmZpZzo3NTpjb25maWcgUzM5MFxuYXJjaC9zMzkwL0tjb25maWctNzYtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctMjg5LVxuYXJjaC9zMzkwL0tjb25maWc6MjkwOmNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcbmFyY2gvczM5MC9LY29uZmlnLTI5MS1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTI5Mi1cbmFyY2gvczM5MC9LY29uZmlnOjI5Mzpjb25maWcgUEdUQUJMRV9MRVZFTFNcbmFyY2gvczM5MC9LY29uZmlnLTI5NC1cdGludFxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTI5Nz1zb3VyY2UgXCYjMzQ7a2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZy0yOTgtXG5hcmNoL3MzOTAvS2NvbmZpZzoyOTk6Y29uZmlnIEFSQ0hfQ0NfQ0FOX0xJTktcbmFyY2gvczM5MC9LY29uZmlnLTMwMC1cdGJvb2xcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDItXG5hcmNoL3MzOTAvS2NvbmZpZzozMDM6Y29uZmlnIEFSQ0hfVVNFUkZMQUdTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDQtXHRzdHJpbmdcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDYtXG5hcmNoL3MzOTAvS2NvbmZpZzozMDc6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNcbmFyY2gvczM5MC9LY29uZmlnLTMwOC1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTMwOS1cbmFyY2gvczM5MC9LY29uZmlnOjMxMDpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTEtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zMTItXG5hcmNoL3MzOTAvS2NvbmZpZzozMTM6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfU0lHXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTQtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zMTUtXG5hcmNoL3MzOTAvS2NvbmZpZzozMTY6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfUFVSR0FUT1JZXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTctXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zMTgtXG5hcmNoL3MzOTAvS2NvbmZpZzozMTk6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfQ1JBU0hfRFVNUFxuYXJjaC9zMzkwL0tjb25maWctMzIwLVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTMyNS1cbmFyY2gvczM5MC9LY29uZmlnOjMyNjpjb25maWcgQVJDSF9ERUZBVUxUX0NSQVNIX0RVTVBcbmFyY2gvczM5MC9LY29uZmlnLTMyNy1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz0zMjk9bWVudSBcJiMzNDtQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXNcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTMzMC1cbmFyY2gvczM5MC9LY29uZmlnOjMzMTpjb25maWcgSEFWRV9NQVJDSF9aMTBfRkVBVFVSRVNcbmFyY2gvczM5MC9LY29uZmlnLTMzMi1cdGRlZl9ib29sIG5cbmFyY2gvczM5MC9LY29uZmlnLTMzMy1cbmFyY2gvczM5MC9LY29uZmlnOjMzNDpjb25maWcgSEFWRV9NQVJDSF9aMTk2X0ZFQVRVUkVTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzUtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzM3LVxuYXJjaC9zMzkwL0tjb25maWc6MzM4OmNvbmZpZyBIQVZFX01BUkNIX1pFQzEyX0ZFQVRVUkVTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzktXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzQxLVxuYXJjaC9zMzkwL0tjb25maWc6MzQyOmNvbmZpZyBIQVZFX01BUkNIX1oxM19GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMzQzLVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTM0NS1cbmFyY2gvczM5MC9LY29uZmlnOjM0Njpjb25maWcgSEFWRV9NQVJDSF9aMTRfRkVBVFVSRVNcbmFyY2gvczM5MC9LY29uZmlnLTM0Ny1cdGRlZl9ib29sIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zNDktXG5hcmNoL3MzOTAvS2NvbmZpZzozNTA6Y29uZmlnIEhBVkVfTUFSQ0hfWjE1X0ZFQVRVUkVTXG5hcmNoL3MzOTAvS2NvbmZpZy0zNTEtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzUzLVxuYXJjaC9zMzkwL0tjb25maWc6MzU0OmNvbmZpZyBIQVZFX01BUkNIX1oxNl9GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMzU1LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTM1Ny1cbmFyY2gvczM5MC9LY29uZmlnOjM1ODpjb25maWcgSEFWRV9NQVJDSF9aMTdfRkVBVFVSRVNcbmFyY2gvczM5MC9LY29uZmlnLTM1OS1cdGRlZl9ib29sIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz0zNjI9Y2hvaWNlXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzY1LVxuYXJjaC9zMzkwL0tjb25maWc6MzY2OmNvbmZpZyBNQVJDSF9aMTBcbmFyY2gvczM5MC9LY29uZmlnLTM2Ny1cdGJvb2wgXCYjMzQ7SUJNIFN5c3RlbSB6MTBcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zNzMtXG5hcmNoL3MzOTAvS2NvbmZpZzozNzQ6Y29uZmlnIE1BUkNIX1oxOTZcbmFyY2gvczM5MC9LY29uZmlnLTM3NS1cdGJvb2wgXCYjMzQ7SUJNIHpFbnRlcnByaXNlIDExNCBhbmQgMTk2XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzgyLVxuYXJjaC9zMzkwL0tjb25maWc6MzgzOmNvbmZpZyBNQVJDSF9aRUMxMlxuYXJjaC9zMzkwL0tjb25maWctMzg0LVx0Ym9vbCBcJiMzNDtJQk0gekJDMTIgYW5kIHpFQzEyXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzkxLVxuYXJjaC9zMzkwL0tjb25maWc6MzkyOmNvbmZpZyBNQVJDSF9aMTNcbmFyY2gvczM5MC9LY29uZmlnLTM5My1cdGJvb2wgXCYjMzQ7SUJNIHoxM3MgYW5kIHoxM1wmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQwMC1cbmFyY2gvczM5MC9LY29uZmlnOjQwMTpjb25maWcgTUFSQ0hfWjE0XG5hcmNoL3MzOTAvS2NvbmZpZy00MDItXHRib29sIFwmIzM0O0lCTSB6MTQgWlIxIGFuZCB6MTRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00MDktXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTA6Y29uZmlnIE1BUkNIX1oxNVxuYXJjaC9zMzkwL0tjb25maWctNDExLVx0Ym9vbCBcJiMzNDtJQk0gejE1XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDE4LVxuYXJjaC9zMzkwL0tjb25maWc6NDE5OmNvbmZpZyBNQVJDSF9aMTZcbmFyY2gvczM5MC9LY29uZmlnLTQyMC1cdGJvb2wgXCYjMzQ7SUJNIHoxNlwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQyNi1cbmFyY2gvczM5MC9LY29uZmlnOjQyNzpjb25maWcgTUFSQ0hfWjE3XG5hcmNoL3MzOTAvS2NvbmZpZy00MjgtXHRib29sIFwmIzM0O0lCTSB6MTdcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz00MzU9ZW5kY2hvaWNlXG5hcmNoL3MzOTAvS2NvbmZpZy00MzYtXG5hcmNoL3MzOTAvS2NvbmZpZzo0Mzc6Y29uZmlnIE1BUkNIX1oxMF9UVU5FXG5hcmNoL3MzOTAvS2NvbmZpZy00MzgtXHRkZWZfYm9vbCBUVU5FX1oxMCB8fCBNQVJDSF9aMTAgXHUwMDI2XHUwMDI2IFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDM5LVxuYXJjaC9zMzkwL0tjb25maWc6NDQwOmNvbmZpZyBNQVJDSF9aMTk2X1RVTkVcbmFyY2gvczM5MC9LY29uZmlnLTQ0MS1cdGRlZl9ib29sIFRVTkVfWjE5NiB8fCBNQVJDSF9aMTk2IFx1MDAyNlx1MDAyNiBUVU5FX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTQ0Mi1cbmFyY2gvczM5MC9LY29uZmlnOjQ0Mzpjb25maWcgTUFSQ0hfWkVDMTJfVFVORVxuYXJjaC9zMzkwL0tjb25maWctNDQ0LVx0ZGVmX2Jvb2wgVFVORV9aRUMxMiB8fCBNQVJDSF9aRUMxMiBcdTAwMjZcdTAwMjYgVFVORV9ERUZBVUxUXG5hcmNoL3MzOTAvS2NvbmZpZy00NDUtXG5hcmNoL3MzOTAvS2NvbmZpZzo0NDY6Y29uZmlnIE1BUkNIX1oxM19UVU5FXG5hcmNoL3MzOTAvS2NvbmZpZy00NDctXHRkZWZfYm9vbCBUVU5FX1oxMyB8fCBNQVJDSF9aMTMgXHUwMDI2XHUwMDI2IFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDQ4LVxuYXJjaC9zMzkwL0tjb25maWc6NDQ5OmNvbmZpZyBNQVJDSF9aMTRfVFVORVxuYXJjaC9zMzkwL0tjb25maWctNDUwLVx0ZGVmX2Jvb2wgVFVORV9aMTQgfHwgTUFSQ0hfWjE0IFx1MDAyNlx1MDAyNiBUVU5FX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTQ1MS1cbmFyY2gvczM5MC9LY29uZmlnOjQ1Mjpjb25maWcgTUFSQ0hfWjE1X1RVTkVcbmFyY2gvczM5MC9LY29uZmlnLTQ1My1cdGRlZl9ib29sIFRVTkVfWjE1IHx8IE1BUkNIX1oxNSBcdTAwMjZcdTAwMjYgVFVORV9ERUZBVUxUXG5hcmNoL3MzOTAvS2NvbmZpZy00NTQtXG5hcmNoL3MzOTAvS2NvbmZpZzo0NTU6Y29uZmlnIE1BUkNIX1oxNl9UVU5FXG5hcmNoL3MzOTAvS2NvbmZpZy00NTYtXHRkZWZfYm9vbCBUVU5FX1oxNiB8fCBNQVJDSF9aMTYgXHUwMDI2XHUwMDI2IFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDU3LVxuYXJjaC9zMzkwL0tjb25maWc6NDU4OmNvbmZpZyBNQVJDSF9aMTdfVFVORVxuYXJjaC9zMzkwL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgVFVORV9aMTcgfHwgTUFSQ0hfWjE3IFx1MDAyNlx1MDAyNiBUVU5FX0RFRkFVTFRcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz00NjE9Y2hvaWNlXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDcxLVxuYXJjaC9zMzkwL0tjb25maWc6NDcyOmNvbmZpZyBUVU5FX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTQ3My1cdGJvb2wgXCYjMzQ7RGVmYXVsdFwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQ3Ny1cbmFyY2gvczM5MC9LY29uZmlnOjQ3ODpjb25maWcgVFVORV9aMTBcbmFyY2gvczM5MC9LY29uZmlnLTQ3OS1cdGJvb2wgXCYjMzQ7SUJNIFN5c3RlbSB6MTBcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTQ4MC1cbmFyY2gvczM5MC9LY29uZmlnOjQ4MTpjb25maWcgVFVORV9aMTk2XG5hcmNoL3MzOTAvS2NvbmZpZy00ODItXHRib29sIFwmIzM0O0lCTSB6RW50ZXJwcmlzZSAxMTQgYW5kIDE5NlwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQ4NC1cbmFyY2gvczM5MC9LY29uZmlnOjQ4NTpjb25maWcgVFVORV9aRUMxMlxuYXJjaC9zMzkwL0tjb25maWctNDg2LVx0Ym9vbCBcJiMzNDtJQk0gekJDMTIgYW5kIHpFQzEyXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDg4LVxuYXJjaC9zMzkwL0tjb25maWc6NDg5OmNvbmZpZyBUVU5FX1oxM1xuYXJjaC9zMzkwL0tjb25maWctNDkwLVx0Ym9vbCBcJiMzNDtJQk0gejEzcyBhbmQgejEzXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDkyLVxuYXJjaC9zMzkwL0tjb25maWc6NDkzOmNvbmZpZyBUVU5FX1oxNFxuYXJjaC9zMzkwL0tjb25maWctNDk0LVx0Ym9vbCBcJiMzNDtJQk0gejE0IFpSMSBhbmQgejE0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDk2LVxuYXJjaC9zMzkwL0tjb25maWc6NDk3OmNvbmZpZyBUVU5FX1oxNVxuYXJjaC9zMzkwL0tjb25maWctNDk4LVx0Ym9vbCBcJiMzNDtJQk0gejE1XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTAwLVxuYXJjaC9zMzkwL0tjb25maWc6NTAxOmNvbmZpZyBUVU5FX1oxNlxuYXJjaC9zMzkwL0tjb25maWctNTAyLVx0Ym9vbCBcJiMzNDtJQk0gejE2XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTA0LVxuYXJjaC9zMzkwL0tjb25maWc6NTA1OmNvbmZpZyBUVU5FX1oxN1xuYXJjaC9zMzkwL0tjb25maWctNTA2LVx0Ym9vbCBcJiMzNDtJQk0gejE3XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NTA5PWVuZGNob2ljZVxuYXJjaC9zMzkwL0tjb25maWctNTEwLVxuYXJjaC9zMzkwL0tjb25maWc6NTExOmNvbmZpZyA2NEJJVFxuYXJjaC9zMzkwL0tjb25maWctNTEyLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctNTEzLVxuYXJjaC9zMzkwL0tjb25maWc6NTE0OmNvbmZpZyBDT01NQU5EX0xJTkVfU0laRVxuYXJjaC9zMzkwL0tjb25maWctNTE1LVx0aW50IFwmIzM0O01heGltdW0gc2l6ZSBvZiBrZXJuZWwgY29tbWFuZCBsaW5lXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTIxLVxuYXJjaC9zMzkwL0tjb25maWc6NTIyOmNvbmZpZyBTTVBcbmFyY2gvczM5MC9LY29uZmlnLTUyMy1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTUyNC1cbmFyY2gvczM5MC9LY29uZmlnOjUyNTpjb25maWcgTlJfQ1BVU1xuYXJjaC9zMzkwL0tjb25maWctNTI2LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIENQVXMgKDItNTEyKVwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTUzNi1cbmFyY2gvczM5MC9LY29uZmlnOjUzNzpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvczM5MC9LY29uZmlnLTUzOC1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTUzOS1cbmFyY2gvczM5MC9LY29uZmlnOjU0MDpjb25maWcgTlVNQVxuYXJjaC9zMzkwL0tjb25maWctNTQxLVx0Ym9vbCBcJiMzNDtOVU1BIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01NDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo1NDk6Y29uZmlnIE5PREVTX1NISUZUXG5hcmNoL3MzOTAvS2NvbmZpZy01NTAtXHRpbnRcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01NTMtXG5hcmNoL3MzOTAvS2NvbmZpZzo1NTQ6Y29uZmlnIFNDSEVEX1RPUE9MT0dZXG5hcmNoL3MzOTAvS2NvbmZpZy01NTUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTY1LVxuYXJjaC9zMzkwL0tjb25maWc6NTY2OmNvbmZpZyBTQ0hFRF9UT1BPTE9HWV9WRVJUSUNBTFxuYXJjaC9zMzkwL0tjb25maWctNTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTU3My1cbmFyY2gvczM5MC9LY29uZmlnOjU3NDpjb25maWcgSElQRVJESVNQQVRDSF9PTlxuYXJjaC9zMzkwL0tjb25maWctNTc1LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTU4Nj1zb3VyY2UgXCYjMzQ7a2VybmVsL0tjb25maWcuaHpcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTU4Ny1cbmFyY2gvczM5MC9LY29uZmlnOjU4ODpjb25maWcgQ0VSVF9TVE9SRVxuYXJjaC9zMzkwL0tjb25maWctNTg5LVx0Ym9vbCBcJiMzNDtHZXQgdXNlciBjZXJ0aWZpY2F0ZXMgdmlhIERJQUczMjBcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01OTgtXG5hcmNoL3MzOTAvS2NvbmZpZzo1OTk6Y29uZmlnIEtFUk5FTF9OT0JQXG5hcmNoL3MzOTAvS2NvbmZpZy02MDAtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNjE1LVxuYXJjaC9zMzkwL0tjb25maWc6NjE2OmNvbmZpZyBFWFBPTElORVxuYXJjaC9zMzkwL0tjb25maWctNjE3LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTYyOC1cbmFyY2gvczM5MC9LY29uZmlnOjYyOTpjb25maWcgRVhQT0xJTkVfRVhURVJOXG5hcmNoL3MzOTAvS2NvbmZpZy02MzAtXHRkZWZfYm9vbCBFWFBPTElORSBcdTAwMjZcdTAwMjYgQ0NfSVNfR0NDIFx1MDAyNlx1MDAyNiBHQ0NfVkVSU0lPTiBcdTAwM2U9IDExMDIwMCBcdTAwMjZcdTAwMjYgXFxcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz02Mzg9Y2hvaWNlXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNjQyLVxuYXJjaC9zMzkwL0tjb25maWc6NjQzOmNvbmZpZyBFWFBPTElORV9PRkZcbmFyY2gvczM5MC9LY29uZmlnLTY0NC1cdGJvb2wgXCYjMzQ7c3BlY3RyZV92Mj1vZmZcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTY0NS1cbmFyY2gvczM5MC9LY29uZmlnOjY0Njpjb25maWcgRVhQT0xJTkVfQVVUT1xuYXJjaC9zMzkwL0tjb25maWctNjQ3LVx0Ym9vbCBcJiMzNDtzcGVjdHJlX3YyPWF1dG9cJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTY0OC1cbmFyY2gvczM5MC9LY29uZmlnOjY0OTpjb25maWcgRVhQT0xJTkVfRlVMTFxuYXJjaC9zMzkwL0tjb25maWctNjUwLVx0Ym9vbCBcJiMzNDtzcGVjdHJlX3YyPW9uXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NjUyPWVuZGNob2ljZVxuYXJjaC9zMzkwL0tjb25maWctNjUzLVxuYXJjaC9zMzkwL0tjb25maWc6NjU0OmNvbmZpZyBSRUxPQ0FUQUJMRVxuYXJjaC9zMzkwL0tjb25maWctNjU1LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTY2NC1cbmFyY2gvczM5MC9LY29uZmlnOjY2NTpjb25maWcgUkFORE9NSVpFX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTY2Ni1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHRoZSBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgaW1hZ2UgKEtBU0xSKVwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTY3My1cbmFyY2gvczM5MC9LY29uZmlnOjY3NDpjb25maWcgUkFORE9NSVpFX0lERU5USVRZX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTY3NS1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHRoZSBhZGRyZXNzIG9mIHRoZSBpZGVudGl0eSBtYXBwaW5nIGJhc2VcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy02ODYtXG5hcmNoL3MzOTAvS2NvbmZpZzo2ODc6Y29uZmlnIEtFUk5FTF9JTUFHRV9CQVNFXG5hcmNoL3MzOTAvS2NvbmZpZy02ODgtXHRoZXggXCYjMzQ7S2VybmVsIGltYWdlIGJhc2UgYWRkcmVzc1wmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTcwOD1tZW51IFwmIzM0O01lbW9yeSBzZXR1cFwmIzM0O1xuYXJjaC9zMzkwL0tjb25maWctNzA5LVxuYXJjaC9zMzkwL0tjb25maWc6NzEwOmNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcbmFyY2gvczM5MC9LY29uZmlnLTcxMS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03MTMtXG5hcmNoL3MzOTAvS2NvbmZpZzo3MTQ6Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTcxNS1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTcxNi1cbmFyY2gvczM5MC9LY29uZmlnOjcxNzpjb25maWcgSUxMRUdBTF9QT0lOVEVSX1ZBTFVFXG5hcmNoL3MzOTAvS2NvbmZpZy03MTgtXHRoZXhcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03MjAtXG5hcmNoL3MzOTAvS2NvbmZpZzo3MjE6Y29uZmlnIE1BWF9QSFlTTUVNX0JJVFNcbmFyY2gvczM5MC9LY29uZmlnLTcyMi1cdGludCBcJiMzNDtNYXhpbXVtIHNpemUgb2Ygc3VwcG9ydGVkIHBoeXNpY2FsIG1lbW9yeSBpbiBiaXRzICg0Mi01MylcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03MzM9bWVudSBcJiMzNDtJL08gc3Vic3lzdGVtXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZy03MzQtXG5hcmNoL3MzOTAvS2NvbmZpZzo3MzU6Y29uZmlnIFFESU9cbmFyY2gvczM5MC9LY29uZmlnLTczNi1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzQ3PWlmIFBDSVxuYXJjaC9zMzkwL0tjb25maWctNzQ4LVxuYXJjaC9zMzkwL0tjb25maWc6NzQ5OmNvbmZpZyBQQ0lfTlJfRlVOQ1RJT05TXG5hcmNoL3MzOTAvS2NvbmZpZy03NTAtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgUENJIGZ1bmN0aW9ucyAoMS00MDk2KVwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1Nz1lbmRpZiAjIFBDSVxuYXJjaC9zMzkwL0tjb25maWctNzU4LVxuYXJjaC9zMzkwL0tjb25maWc6NzU5OmNvbmZpZyBIQVNfSU9NRU1cbmFyY2gvczM5MC9LY29uZmlnLTc2MC1cdGRlZl9ib29sIFBDSVxuYXJjaC9zMzkwL0tjb25maWctNzYxLVxuYXJjaC9zMzkwL0tjb25maWc6NzYyOmNvbmZpZyBDSFNDX1NDSFxuYXJjaC9zMzkwL0tjb25maWctNzYzLVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03NzgtXG5hcmNoL3MzOTAvS2NvbmZpZzo3Nzk6Y29uZmlnIFNDTV9CVVNcbmFyY2gvczM5MC9LY29uZmlnLTc4MC1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03ODQtXG5hcmNoL3MzOTAvS2NvbmZpZzo3ODU6Y29uZmlnIEVBRE1fU0NIXG5hcmNoL3MzOTAvS2NvbmZpZy03ODYtXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cbmFyY2gvczM5MC9LY29uZmlnOjc5Njpjb25maWcgQVBcbmFyY2gvczM5MC9LY29uZmlnLTc5Ny1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctODA4LVxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xuYXJjaC9zMzkwL0tjb25maWctODEwLVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTgyMi1cbmFyY2gvczM5MC9LY29uZmlnOjgyMzpjb25maWcgVkZJT19DQ1dcbmFyY2gvczM5MC9LY29uZmlnLTgyNC1cdGRlZl90cmlzdGF0ZSBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTg0OD1lbmRtZW51XG5hcmNoL3MzOTAvS2NvbmZpZy04NDktXG5hcmNoL3MzOTAvS2NvbmZpZzo4NTA6Y29uZmlnIENDV1xuYXJjaC9zMzkwL0tjb25maWctODUxLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctODUyLVxuYXJjaC9zMzkwL0tjb25maWc6ODUzOmNvbmZpZyBIQVZFX1BORVRJRFxuYXJjaC9zMzkwL0tjb25maWctODU0LVx0dHJpc3RhdGVcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz04NTc9bWVudSBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuYXJjaC9zMzkwL0tjb25maWctODU4LVxuYXJjaC9zMzkwL0tjb25maWc6ODU5OmNvbmZpZyBQRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTg2MC1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04NzEtXG5hcmNoL3MzOTAvS2NvbmZpZzo4NzI6Y29uZmlnIENNTVxuYXJjaC9zMzkwL0tjb25maWctODczLVx0ZGVmX3RyaXN0YXRlIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04ODQtXG5hcmNoL3MzOTAvS2NvbmZpZzo4ODU6Y29uZmlnIENNTV9JVUNWXG5hcmNoL3MzOTAvS2NvbmZpZy04ODYtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctODkyLVxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXG5hcmNoL3MzOTAvS2NvbmZpZy04OTQtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTA4LVxuYXJjaC9zMzkwL0tjb25maWc6OTA5OmNvbmZpZyBBUFBMREFUQV9NRU1cbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxuYXJjaC9zMzkwL0tjb25maWc6OTI2OmNvbmZpZyBBUFBMREFUQV9PU1xuYXJjaC9zMzkwL0tjb25maWctOTI3LVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05NDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cbmFyY2gvczM5MC9LY29uZmlnLTk0Mi1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTU2LVxuYXJjaC9zMzkwL0tjb25maWc6OTU3OmNvbmZpZyBTMzkwX0hZUEZTXG5hcmNoL3MzOTAvS2NvbmZpZy05NTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTYzLVxuYXJjaC9zMzkwL0tjb25maWc6OTY0OmNvbmZpZyBTMzkwX0hZUEZTX0ZTXG5hcmNoL3MzOTAvS2NvbmZpZy05NjUtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9OTc2PXNvdXJjZSBcJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTk3Ny1cbmFyY2gvczM5MC9LY29uZmlnOjk3ODpjb25maWcgUzM5MF9HVUVTVFxuYXJjaC9zMzkwL0tjb25maWctOTc5LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTk5MT1lbmRtZW51XG5hcmNoL3MzOTAvS2NvbmZpZy05OTItXG5hcmNoL3MzOTAvS2NvbmZpZzo5OTM6Y29uZmlnIFMzOTBfTU9EVUxFU19TQU5JVFlfVEVTVF9IRUxQRVJTXG5hcmNoL3MzOTAvS2NvbmZpZy05OTQtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9OTk2PW1lbnUgXCYjMzQ7U2VsZnRlc3RzXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZy05OTctXG5hcmNoL3MzOTAvS2NvbmZpZzo5OTg6Y29uZmlnIFMzOTBfVU5XSU5EX1NFTEZURVNUXG5hcmNoL3MzOTAvS2NvbmZpZy05OTktXHRkZWZfdHJpc3RhdGUgS1VOSVRfQUxMX1RFU1RTXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMTAwOC1cbmFyY2gvczM5MC9LY29uZmlnOjEwMDk6Y29uZmlnIFMzOTBfS1BST0JFU19TQU5JVFlfVEVTVFxuYXJjaC9zMzkwL0tjb25maWctMTAxMC1cdGRlZl90cmlzdGF0ZSBLVU5JVF9BTExfVEVTVFNcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDIwLVxuYXJjaC9zMzkwL0tjb25maWc6MTAyMTpjb25maWcgUzM5MF9NT0RVTEVTX1NBTklUWV9URVNUXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDIyLVx0ZGVmX3RyaXN0YXRlIEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4MgoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGVyZSBpc24mIzM5O3QgYSBkZWRpY2F0ZWQsIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBQViAocGFyYS12aXJ0dWFsaXphdGlvbikgb24gUzM5MCBLVk0uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBpbXBsaWNpdGx5IHBhcnQgb2YgS1ZNIGl0c2VsZi4gVGhlcmVmb3JlLCBsb2dpY2FsbHksIGBLVk1gIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byB3b3JyeSBhYm91dC4KCkhhbmcgb24gYSBzZWNvbmTigKYgYEtWTWAgaXMgYSB0cmlzdGF0ZSwgaXNuJiMzOTt0IGl0PyBTbywgaXQgY291bGQgYmUgYnVpbHQgYXMgYSBtb2R1bGUgKGBtYCkuIEJ1dCBjb25zaWRlcmluZyBob3cgc3l6a2FsbGVyIGdlbmVyYWxseSBoYW5kbGVzIHRoaW5ncywgaXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRvIGJlIGJ1aWx0IGFzIGVpdGhlciAmIzM5O3kmIzM5OyBvciAmIzM5O20mIzM5Oy4gIEkgd2lsbCBqdXN0IGxpc3QgYEtWTWAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgZnVuY3Rpb24uIEFoLCB5ZXMsIGZvdW5kIGl0IGluIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgaXQgZXhwb3J0ZWQ/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiprdm1fczM5MF9wdl9zY2xwX2tpY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIFRoYXQgRnVuY3Rpb24gaW4gS1ZNKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgIGZ1bmN0aW9uLiBUaGUgY29kZSBzYXlzIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgLCBidXQgaXQgKmlzKiBub24tc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBga3ZtLXMzOTAuaGAuIE5vIHByb2JsZW0sIHN5emthbGxlciBjYW4gZGVmaW5pdGVseSBmdXp6IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGF0JiMzOTtzIG5vdCBhIGJsb2NrZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluLgoKV2FpdCBhIHNlY29uZC4uLkkgc2VlIGl0IG5vdy4gYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgaXMgaW52b2tlZCBieSBgaGFuZGxlX3B2X3NjbHBgLiBBbmQgdGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9wdl9ub3RpZmljYXRpb25gLCB3aGljaCAqaXRzZWxmKiBpcyBjYWxsZWQgZnJvbSBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YC4gQW5kIGZpbmFsbHksICp0aGF0KiBmdW5jdGlvbiwgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAsIGlzIGNhbGxlZCBmcm9tIGB2Y3B1X3Bvc3RfcnVuYC4gQmluZ28uIFNvLCBlc3NlbnRpYWxseSwgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdGhlIGNvcmUgS1ZNIHJ1biBsb29wLCBpdCBpcyBwYXJ0IG9mIHRoZSBleGVjdXRpb24gZmxvdyBpbiB0aGUgbWFpbiBLVk0gZXhlY3V0aW9uIHBhdGguCgpOb3csIGxldCYjMzk7cyB0dXJuIG15IGF0dGVudGlvbiB0byBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDQ2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIGNvbnRleHQgaXMgZHluYW1pYyDigJMgbm90IGEgZml4ZWQgc25hcHNob3QuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNoZWNraW5nIHRoZSBmdW5jdGlvbiBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGhvdyBkb2VzIGl0IHBsYXkgaW50byB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5vbi1zdGF0aWMgZWxlbWVudCBlZmZlY3RzIGhvdyB0aGUgYGt2bV9zMzkwX2luamVjdF92bWAgZnVuY3Rpb24gZnVuY3Rpb25zLCBhbmQgaXRzIGVmZmVjdCBvbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgdmFyaWFibGVzIG1heSBiZSBlZmZlY3RpbmcgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiprdm1fczM5MF9pbmplY3Rfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjc5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0vczM5MCBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBLVk0vczM5MCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgc3ltYm9sIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUuIEkgc2VlIGEgZmV3IGtleSBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYyBidXQgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBtb2R1bGUuIEFoYSwgYGt2bV9zMzkwX2luamVjdF92bWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBvdGhlciBmaWxlcyBpbiB0aGUgYGt2bWAgbW9kdWxlLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gV2UgZG9uJiMzOTt0IG5lZWQgYEVYUE9SVF9TWU1CT0xgIGZvciBpbnRlci1maWxlIG1vZHVsZSB1c2FnZS4gSXQmIzM5O3Mgb25seSBuZWVkZWQgaWYgb3RoZXIgbW9kdWxlcyBjb25zdW1lIHRoZXNlIHN5bWJvbHMuCgpUaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCwgYW5kIGBrdm1fczM5MF9pbmplY3Rfdm1gLgoKTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHJlbGF0ZWQgdG8gdGhlc2Ugc3ltYm9scy4KCkFscmlnaHQsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBgdmNwdV9pbnRlcnZlbnRpb25fa2lja2AsIGBraWNrX2NwdV9pcnFgLCBgX19mbG9hdGluZ19pcnFfa2lja2AsIGFuZCBgX19pbmplY3Rfdm1gIGFyZSBhbGwgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QuCgpTbywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFnYWluIGFyZTogYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgLCBhbmQgYGt2bV9zMzkwX2luamVjdF92bWAuIChBbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpc24mIzM5O3QgKmRpcmVjdGx5KiBtb2RpZmllZCwgYF9faW5qZWN0X3ZtYCB3aGljaCBpdCB3cmFwcyBpcy4pCgpXYWl0LCBsZXQgbWUganVzdCBjb25maXJtIHRoYXQgdGhvdWdodC4gYGt2bV9zMzkwX2luamVjdF92bWAgKmNhbGxzKiBgX19pbmplY3Rfdm1gLiBTbywgYSBjaGFuZ2UgdG8gYF9faW5qZWN0X3ZtYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBga3ZtX3MzOTBfaW5qZWN0X3ZtYCwgZXZlbiB0aG91Z2ggdGhlIGxhdHRlciBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGF0IGlzIGNvcnJlY3QgYW5kIG5vdCBzb21lIG9iZnVzY2F0aW9uLiBJIHNob3VsZCBnbyBjaGVjayBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGt2bV9zMzkwX2luamVjdF92bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDY4PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTAzOmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTA0LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMxMgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWVkKioKCk9rYXksIGBrdm1fczM5MF9pbmplY3Rfdm1gIGxvb2tzIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludC4gQnV0IGhvbGQgb24uLi4gSSByZW1lbWJlciBub3csIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB3aGVuIHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBpb2N0bCBpcyB1c2VkLiBCaW5nbyEgVGhhdCBtZWFucyBpdCYjMzk7cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBQZXJmZWN0ISBUaGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIGNhbiBieXBhc3MgYSBsb3Qgb2YgdGhlIHVzdWFsIGNvbXBsZXhpdGllcyBieSBnb2luZyBzdHJhaWdodCB0aHJvdWdoIHRoZSBpb2N0bCBpbnRlcmZhY2UuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBga3ZtX2FyY2hfdm1faW9jdGxgIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIHRvIHVuZGVyc3RhbmQgdGhlIHNldHVwLiBJIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGl0IGV4cGVjdHMgYW5kIGhvdyB0aGF0IGluamVjdGlvbiBtZWNoYW5pc20gaXMgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1MzOTBfSU5URVJSVVBUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cdHN3aXRjaCAoaW9jdGwpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTM2Olx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTM3LVx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0NDM9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NTgtXHR9XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQ1OTpcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ2MC1cdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAwOQoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTS9zMzkweCBJbnRlcnJ1cHQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gSSBjYW4gY29uZmlybSB0aGF0IHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBpb2N0bCwgYXMgSSBzdXNwZWN0ZWQsICpkb2VzKiBpbmRlZWQgY2FsbCBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhcyBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmdW5jdGlvbiBmb3IgZnV6emluZyBlZmZvcnRzLiBJdOKAmXMgYSBjb3JlIGVudHJ5IHBvaW50LgoKTGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyOgoKKiAgICoqRnV6emluZyBQcmlvcml0eToqKiBIaWdoIHByaW9yaXR5IC0gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBnaXZlbiB0aGUgY2hhbmdlcy4KKiAgICoqS2V5IEZvY3VzIFN5bWJvbHM6KiogVGhlIHBhdGNoIHJlYWxseSBoaWdobGlnaHRzIHRoZXNlOgogICAgKiAgIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgOiBUaGlzIGlzIGNsZWFybHkgaW52b2x2ZWQgaW4gdGhlICpuZXcqIGxvZ2ljLCB3aGljaCBtZWFucyBhbnkgc3VidGxlIGNoYW5nZXMgaW4gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBoYW5kbGluZyBuZWVkIHRvIGJlIGNoZWNrZWQuCiAgICAqICAgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2A6IFRoaXMgZnVuY3Rpb24gaXMgdGllZCB0byBraWNraW5nIFZDUFVzLiBJIGJldCB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBpbnRlcnJ1cHRzIGZvcmNlIGV4ZWN1dGlvbiB0byBtb3ZlLgogICAgKiAgIGBrdm1fczM5MF9pbmplY3Rfdm1gOiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBkaXJlY3QgaW5qZWN0aW9uIHBvaW50LiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIG91ciBmdXp6aW5nIHN0cmF0ZWd5LiBXZSBuZWVkIHRvIGhhbW1lciB0aGlzLgoqICAgKipFbmFibGVkIENvbmZpZ3VyYXRpb246KiogVGhlIGBLVk1gIGNvbmZpZyBpcyByZXF1aXJlZC4gTm90IGEgc3VycHJpc2UsIGJ1dCBpbXBvcnRhbnQgdG8gbm90ZS4KKiAgICoqUmVhc29uaW5nIFN1bW1hcnk6KiogVGhpcyBwYXRjaCBtb2RpZmllcyBob3cgZmxvYXRpbmcgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aGluIEtWTSBvbiBzMzkweC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBsb2dpYyBmb3IgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBhY3Jvc3MgVkNQVXMuIFRoZSBwYXRjaCBpcyB0aWVkIHRvIGludGVycnVwdCBpbmplY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIE1vcmVvdmVyLCB0aGVzZSBjaGFuZ2VzIGltcGFjdCBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzIGFuZCBWQ1BVIGV4ZWN1dGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgdGhhdCBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aHMgYXJlIGJlaW5nIHVwZGF0ZWQgb3IgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfc2NscF9raWNrJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBvbiBzMzkweC4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBJUlFzIGFjcm9zcyBWQ1BVcyBhbmQgdG8ga2ljayBWQ1BVcyB3aGVuIHNwZWNpZmljIGludGVycnVwdHMgYXJlIGluamVjdGVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fUzM5MF9JTlRFUlJVUFQpIGFuZCBkdXJpbmcgVkNQVSBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9zY2xwX2tpY2smIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIG9uIHMzOTB4LiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIElSUXMgYWNyb3NzIFZDUFVzIGFuZCB0byBraWNrIFZDUFVzIHdoZW4gc3BlY2lmaWMgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TMzkwX0lOVEVSUlVQVCkgYW5kIGR1cmluZyBWQ1BVIGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gZm9yIHMzOTAsIGludHJvZHVjaW5nIGEgbmV3IHN0YXRpc3RpYyBgaW5qZWN0X3JlZGlzdGAgYW5kIGNoYW5naW5nIGhvdyB2Q1BVcyBhcmUga2lja2VkIHdoZW4gaW50ZXJydXB0cyBhcmUgcGVuZGluZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBsb2NhbCB2YXJpYWJsZSBgcGFybWAgaW4gYF9faW5qZWN0X3ZtKClgLCB3aGljaCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgZm9yIGNlcnRhaW4gaW50ZXJydXB0IHR5cGVzIChlLmcuLCBgS1ZNX1MzOTBfTUNIS2ApLiBIb3dldmVyLCB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIGFuZCBzdWJzZXF1ZW50bHkgdG8gYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCwgd2hlcmUgaXQgaXMgY29tcGxldGVseSBpZ25vcmVkIGZvciB0aG9zZSBzcGVjaWZpYyBpbnRlcnJ1cHQgdHlwZXMuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgc2hhZG93IGxldmVsIGFuZCBvbmx5IHJlcG9ydHMgYW4gZXJyb3IgaWYgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdXNlZCBpbiBhIGJyYW5jaCwgYXMgYSBtZW1vcnkgYWRkcmVzcywgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gU2luY2UgYHBhcm1gIGlzIG5ldmVyIGV2YWx1YXRlZCBpbiB0aGVzZSB3YXlzIHdoZW4gdW5pbml0aWFsaXplZCwgaXQgd2lsbCBub3QgdHJpZ2dlciBhIEtNU0FOIHJlcG9ydC4gT3RoZXIgY2hhbmdlcyBpbnZvbHZlIGJhc2ljIGNvbnRyb2wgZmxvdywgdkNQVSB3YWtldXBzLCBhbmQgYSBuZXcgZmllbGQgaW4gYHN0cnVjdCBrdm1fdm1fc3RhdGAgKHdoaWNoIGlzIHplcm8tYWxsb2NhdGVkKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBwYXJzaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODgzY2ZhMDZlNzdiZTYxYjc5YTYwODU0OTE2N2JkMWViZDJkNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDowMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTQ2Nyw2ICYjNDM7NDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHsKIAl1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7CiAJdTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTsKJiM0MzsJdTY0IGluamVjdF9yZWRpc3Q7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggMTk4MGRmNjFlZjMwNC4uZTFkZTNmNDcxZmZkMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC01MzYsNiAmIzQzOzUzNiwxNSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wdl9zY2xwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzZXRfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCAmYW1wO2ZpLSZndDtwZW5kaW5nX2lycXMpOwogCWNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgJmFtcDtmaS0mZ3Q7bWFza2VkX2lycXMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtmaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXZSBtaXNzZWQgdGhlIGZsb2F0aW5nIElSUSBraWNrIHNpbmNlIHdlIGNhbiBvbmx5IGluamVjdAomIzQzOwkgKiB3aGVuIHdlIGVuZCB1cCBoZXJlIGFuZCBub3Qgd2hlbiB0aGUgaXJxIHdhcyBpbmplY3RlZCB2aWEKJiM0MzsJICogdGhlIEZMSUMuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdyB0aGF0IHdlIGhhdmUgY2xlYXJlZCB0aGUgbWFza2luZyB3ZSBjYW4ga2ljayBjcHVzLgomIzQzOwkgKi8KJiM0MzsJa3ZtX3MzOTBfcHZfc2NscF9raWNrKHZjcHUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA4ZjI0YmNkMWE2ZDM2Li4xZWU5YWIyNTA1MDQyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTM2Nyw2ICYjNDM7MzY3LDM3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbGl2ZXJhYmxlX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBhY3RpdmVfbWFzazsKIH0KIAomIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7CiYjNDM7CWludCBzaWdjcHUsIG9ubGluZV92Y3B1czsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0Uoa3ZtLSZndDthcmNoLmZsb2F0X2ludC5wZW5kaW5nX2lycXMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZCgmYW1wO2t2bS0mZ3Q7b25saW5lX3ZjcHVzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZQomIzQzOwkgKiBtaWdodCBidXJuIHRvbyBtYW55IGN5Y2xlcyBidXQgYXBhcnQgZnJvbSB0aGF0IHdha2luZyBhCiYjNDM7CSAqIHZjcHUgaXMgbm90IGhhcm1mdWwuCiYjNDM7CSAqLwomIzQzOwlzaWdjcHUgPSBmaW5kX2ZpcnN0X2JpdChrdm0tJmd0O2FyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMpOwomIzQzOwkvKiBXZWxsIG5vYm9keSYjMzk7cyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovCiYjNDM7CWlmIChzaWdjcHUgPT0gb25saW5lX3ZjcHVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7CiYjNDM7CQlpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHsKJiM0MzsJCQlrdm0tJmd0O3N0YXQuaW5qZWN0X3JlZGlzdCYjNDM7JiM0Mzs7CiYjNDM7CQkJa3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJc2lnY3B1ID0gZmluZF9uZXh0X2JpdChrdm0tJmd0O2FyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICYjNDM7JiM0MztzaWdjcHUpOwomIzQzOwl9IHdoaWxlIChzaWdjcHUgJmx0OyBvbmxpbmVfdmNwdXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9fc2V0X2NwdV9pZGxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9XQUlUKTsKQEAgLTE5MTUsNDkgJiM0MzsxOTQ2LDEyOSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2sodTY0IHR5cGUsIGludCBpc2MpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBLVk1fUzM5MF9NQ0hLOgomIzQzOwkJLyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi8KJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1ZJUlRJTyk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8CiYjNDM7CQkgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCXJldHVybiBpc2NfdG9faXJxX3R5cGUoaXNjKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKLSAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC4KJiM0MzsgKiBTZXR1cCBpbnRlcnZlbnRpb24gbWFza3MgdG8gY2F0Y2ggcnVubmluZyB2Y3B1cyB0aGF0IGhvcGVmdWxseSBvcGVuCiYjNDM7ICogdGhlaXIgbWFza3Mgc29vbmlzaCBhbmQga2ljayBzbGVlcGluZyB2Y3B1cyB0byBtb3RpdmF0ZSB0aGVtIHRvCiYjNDM7ICogdGFrZSBJUlFzLgogICovCi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpCiYjNDM7c3RhdGljIHZvaWQgdmNwdV9pbnRlcnZlbnRpb25fa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0eXBlKQomIzQzO3sKJiM0MzsJLyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovCiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEtWTV9TMzkwX01DSEs6CiYjNDM7CQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCWlmICghKHR5cGUgJmFtcDsgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgJmFtcDsmYW1wOwomIzQzOwkJICAgICAgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdpc2FfaW50Lm9yaWdpbikgfHwKJiM0MzsJCSAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKHZjcHUpKQomIzQzOwkJCWt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0lPX0lOVCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VYVF9JTlQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJa3ZtX3MzOTBfdmNwdV93YWtldXAodmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtpY2tfY3B1X2lycShzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwogCWludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwOwomIzQzOwl1NjQgaXJxX3BlbmRfbWFzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiAJaWYgKCFvbmxpbmVfdmNwdXMpCiAJCXJldHVybjsKIAomIzQzOwlpcnFfcGVuZF9tYXNrID0gaW50aV90b19pcnFfcGVuZF9tYXNrKHR5cGUsIHBhcm0pOwogCWZvciAoc2lnY3B1ID0ga3ZtLSZndDthcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUmIzQzOyYjNDM7KSB7CiAJCXNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7CiAJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTsKLQkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKQomIzQzOwkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSAmYW1wOyBpcnFfcGVuZF9tYXNrKQogCQkJYnJlYWs7CiAJCS8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovCi0JCWlmIChucl90cmllcyYjNDM7JiM0MzsgJmd0Oz0gb25saW5lX3ZjcHVzKQotCQkJcmV0dXJuOwomIzQzOwkJaWYgKG5yX3RyaWVzJiM0MzsmIzQzOyAmZ3Q7PSBvbmxpbmVfdmNwdXMgKiAyKSB7CiYjNDM7CQkJZHN0X3ZjcHUgPSBOVUxMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAotCS8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgS1ZNX1MzOTBfTUNISzoKLQkJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX1NUT1BfSU5UKTsKLQkJYnJlYWs7Ci0JY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKLQkJaWYgKCEodHlwZSAmYW1wOyBLVk1fUzM5MF9JTlRfSU9fQUlfTUFTSyAmYW1wOyZhbXA7Ci0JCSAgICAgIGt2bS0mZ3Q7YXJjaC5naXNhX2ludC5vcmlnaW4pIHx8Ci0JCSAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKGRzdF92Y3B1KSkKLQkJCWt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9JT19JTlQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfRVhUX0lOVCk7Ci0JCWJyZWFrOwomIzQzOwkvKiBOb2JvZHkgd2FzIGVuYWJsZWQsIHRpbWUgdG8gd2FrZSBhbGwgb2YgdGhlbSAqLwomIzQzOwlpZiAoIWRzdF92Y3B1KSB7CiYjNDM7CQlrdm1fZm9yX2VhY2hfdmNwdShpLCBkc3RfdmNwdSwga3ZtKQomIzQzOwkJCXZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpOwomIzQzOwkJcmV0dXJuOwogCX0KLQlrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7CiYjNDM7CiYjNDM7CXZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUaGUgY3B1IHRoYXQgY2FsbGVkIHNjbHAgbGlrZWx5IHdpbGwgYWxzbyB0YWtlIHRoZSBJUlEsIG5vCiYjNDM7CSAqIG5lZWQgdG8ga2ljayBhbnlvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAobGlrZWx5KGRlbGl2ZXJhYmxlX2lycXModmNwdSkgJmFtcDsgSVJRX1BFTkRfRVhUX1NFUlZJQ0UpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3IgdGhlIG90aGVyIGNhc2VzIHdlIG1pZ2h0IGhhdmUgc2xlZXBpbmcgY3B1cyB3aXRoIG9wZW4KJiM0MzsJICogbWFza3MuIFRpbWUgdG8gZmluZCBhbmQga2ljayB0aGVtLgomIzQzOwkgKi8KJiM0MzsJa2lja19jcHVfaXJxKHZjcHUtJmd0O2t2bSwgS1ZNX1MzOTBfSU5UX1NFUlZJQ0UsIC0xKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSkKJiM0Mzt7CiYjNDM7CWludCBwcm90OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsJcHJvdCA9IGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZChrdm0pOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2xvY2spOwomIzQzOwkvKgomIzQzOwkgKiBObyBuZWVkIHRvIGtpY2sgb24gbm9uLWV2IHNlcnZpY2UgSVJRcyBmb3IgUFYgVk1zLCB3ZSYjMzk7cmUKJiM0MzsJICogbm90IGFsbG93ZWQgdG8gaW5qZWN0IGFueXdheS4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc2NscAomIzQzOwkgKiBpbnN0cnVjdGlvbiBub3RpZmljYXRpb24gQUZURVIgcmUtZW50cnkgb2YgdGhlIHZjcHUgdGhhdAomIzQzOwkgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJvdCAmYW1wOyZhbXA7IHR5cGUgPT0gS1ZNX1MzOTBfSU5UX1NFUlZJQ0UgJmFtcDsmYW1wOwomIzQzOwkgICAgIShwYXJtICZhbXA7IFNDQ0JfRVZFTlRfUEVORElORykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWtpY2tfY3B1X2lycShrdm0sIHR5cGUsIHBhcm0pOwogfQogCiBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogewogCXU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktJmd0O3R5cGUpOwomIzQzOwl1NjQgcGFybTsKIAlpbnQgcmM7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTE5NjgsMTIgJiM0MzsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpCiAJCXJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6CiYjNDM7CQlwYXJtID0gaW50aS0mZ3Q7ZXh0LmV4dF9wYXJhbXMgJmFtcDsgU0NDQl9FVkVOVF9QRU5ESU5HOwogCQlyYyA9IF9faW5qZWN0X3NlcnZpY2Uoa3ZtLCBpbnRpKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6CiAJCXJjID0gX19pbmplY3RfcGZhdWx0X2RvbmUoa3ZtLCBpbnRpKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCS8qIEdyYWIgaXNjIGhlcmUgc2luY2UgX19pbmplY3RfaW8oKSBtaWdodCBmcmVlIGludGkgKi8KJiM0MzsJCXBhcm0gPSBpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktJmd0O2lvLmlvX2ludF93b3JkKSk7CiAJCXJjID0gX19pbmplY3RfaW8oa3ZtLCBpbnRpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE5ODIsNyAmIzQzOzIwOTYsNyBAQCBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JX19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUpOwomIzQzOwlfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSwgcGFybSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC04Niw2ICYjNDM7ODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHsKIAlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSwKIAlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3NnX2VudHJ5KSwKIAlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSwKJiM0MzsJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBpbmplY3RfcmVkaXN0KSwKIH07CiAKIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfaGVhZGVyIGt2bV92bV9zdGF0c19oZWFkZXIgPSB7CkBAIC00NTcyLDYgJiM0Mzs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpOwogCQlpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKQogCQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHZjcHUtJmd0O2t2bSk7CiAJfQogCiAJcmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKaW5kZXggNmQyODQyZmI3MWEzMy4uNzExNWE4ZjViMTg4MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaApAQCAtMzc1LDYgJiM0MzszNzUsOCBAQCBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpOwogaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTsKJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODg2CgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDQ4OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBzMzkwIEtWTSBJbnRlcnJ1cHQgUmVkaXN0cmlidXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIHdoaWNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIEtWTSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGZsb2F0aW5nIGludGVycnVwdCBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBhIG5ldyBzdGF0aXN0aWMsIGBpbmplY3RfcmVkaXN0YCwgd2l0aGluIHRoZSBga3ZtX3ZtX3N0YXRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgS1ZNIHN0YXRpc3RpY3MgYW5kIGlzIGluaXRpYWxpemVkIHRvIHplcm8gb24gYWxsb2NhdGlvbiwgc28gdGhhdCYjMzk7cyBmaW5lLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgZGlzdHJpYnV0aW5nIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSB2Q1BVcyBhbmQgd2FraW5nIHRoZW0gdXAgYXMgbmVlZGVkLiBUaGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgaGFuZGxlX3B2X3NjbHBgLCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBga2lja19jcHVfaXJxYCwgYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGB2Y3B1X2ludGVydmVudGlvbl9raWNrYCwgYF9faW5qZWN0X3ZtYCwgYW5kIGB2Y3B1X3ByZV9ydW5gIHRvIGltcGxlbWVudCB0aGlzIG5ldyBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggSSBzY3J1dGluaXplZCBoZXJlLiBUaGUgbWFpbiBhcmVhIG9mIGludGVyZXN0IGlzIHRoZSBgX19pbmplY3Rfdm1gIGZ1bmN0aW9uLCB3aGVyZSB0aGUgdmFyaWFibGUgYHBhcm1gICpjYW4qIGJlIHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBpbnRlcnJ1cHQgdHlwZSBpcyBgS1ZNX1MzOTBfTUNIS2AsIGBLVk1fUzM5MF9JTlRfVklSVElPYCwgb3IgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAuIFRoaXMgYHBhcm1gIHZhbHVlIGlzIHRoZW4gcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBraWNrX2NwdV9pcnFgIGFuZCBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gSG93ZXZlciwgY3JpdGljYWxseSwgdGhlIHZhbHVlIG9mIGBwYXJtYCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgaW4gdGhlIGxhdHRlciBmdW5jdGlvbiB3aGVuIGB0eXBlYCBpcyBvbmUgb2YgdGhlIGNhc2VzIHdoZXJlIGBwYXJtYCBpcyB1bmluaXRpYWxpemVkLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvbnN0aXR1dGVzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZS4gS01TQU4gdHJhY2tzIG1lbW9yeSBhdCB0aGUgc2hhZG93IGxldmVsIGFuZCBpcyBkZXNpZ25lZCB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhbHVlcy4gSG93ZXZlciwgS01TQU4gb25seSByZXBvcnRzIHdoZW4gdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdXNlZCBpbiBhIGJyYW5jaCwgYXMgYSBtZW1vcnkgYWRkcmVzcywgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gSW4gdGhpcyBzY2VuYXJpbywgd2hpbGUgYHBhcm1gICppcyogcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHdpdGggYW4gdW5kZWZpbmVkIHZhbHVlIHdoZW4gYHR5cGVgIGlzIGNlcnRhaW4gdmFsdWVzLCB0aGF0IHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgTk9UIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGJyYW5jaCBvciBtZW1vcnkgYWNjZXNzLiBJdCYjMzk7cyBlZmZlY3RpdmVseSBkaXNjYXJkZWQuIFRoZSBjaGVja3MgaW4gYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHNwZWNpZmljYWxseSBza2lwIHRoZSBicmFuY2hpbmcgd2hlbiBgdHlwZWAgaXMgYEtWTV9TMzkwX01DSEtgLCBldGMuIEluIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCB0aGUgdmFsdWUgb2YgYHBhcm1gIChwYXNzZWQgYXMgYGlzY2ApIGlzIGNvbXBsZXRlbHkgaWdub3JlZCB3aGVuIHRoZSBpbnRlcnJ1cHQgdHlwZSBpcyBvbmUgb2YgdGhvc2UgdGhhdCBsZWF2ZSBgcGFybWAgdW5pbml0aWFsaXplZC4gVGh1cywgS01TQU4gd29uJiMzOTt0IGNvbXBsYWluIGhlcmUsIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgaXNuJiMzOTt0IHVzZWQgaW4gYSB3YXkgdGhhdCBhZmZlY3RzIHByb2dyYW0gYmVoYXZpb3IuCgpUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9zdGx5IGNvbnRyb2wgZmxvdywgc2V0dGluZyBhbmQgY2hlY2tpbmcgbWFza3MsIGFuZCB3YWtpbmcgdkNQVXMsIHdoaWNoIGFyZSBhbGwgcHJldHR5IHN0YW5kYXJkIEtWTSBvcGVyYXRpb25zLiBUaGUgbmV3IGBpbmplY3RfcmVkaXN0YCBzdGF0aXN0aWMgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoZSBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLiBJIGRpZG4mIzM5O3Qgc2VlIGFueSBvdGhlciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY29tcGxleCBkYXRhIHBhcnNpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU28sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBSZWd1bGFyIHN0YXRpYyBhbmFseXNpcyB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMTo1NC43NDE2MTQzNDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQyMTgwMTg2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9wdl9zY2xwX2tpY2tcIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92bVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIG9uIHMzOTB4LiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIElSUXMgYWNyb3NzIFZDUFVzIGFuZCB0byBraWNrIFZDUFVzIHdoZW4gc3BlY2lmaWMgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TMzkwX0lOVEVSUlVQVCkgYW5kIGR1cmluZyBWQ1BVIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDE6NTQuNzQxNjE5Mzk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyOTQ0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTA4ODNjZmEwNmU3N2JlNjFiNzlhNjA4NTQ5MTY3YmQxZWJkMmQ1OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDowMTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xcbiBcXHR1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7XFxuIFxcdHU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTtcXG4gXFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xcbitcXHR1NjQgaW5qZWN0X3JlZGlzdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBrdm1fYXJjaF9tZW1vcnlfc2xvdCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXFxuaW5kZXggMTk4MGRmNjFlZjMwNC4uZTFkZTNmNDcxZmZkMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xcbkBAIC01MzYsNiArNTM2LDE1IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzZXRfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCBcXHUwMDI2ZmktXFx1MDAzZXBlbmRpbmdfaXJxcyk7XFxuIFxcdGNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXFx1MDAyNmZpLVxcdTAwM2VtYXNrZWRfaXJxcyk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXZSBtaXNzZWQgdGhlIGZsb2F0aW5nIElSUSBraWNrIHNpbmNlIHdlIGNhbiBvbmx5IGluamVjdFxcbitcXHQgKiB3aGVuIHdlIGVuZCB1cCBoZXJlIGFuZCBub3Qgd2hlbiB0aGUgaXJxIHdhcyBpbmplY3RlZCB2aWFcXG4rXFx0ICogdGhlIEZMSUMuXFxuK1xcdCAqXFxuK1xcdCAqIE5vdyB0aGF0IHdlIGhhdmUgY2xlYXJlZCB0aGUgbWFza2luZyB3ZSBjYW4ga2ljayBjcHVzLlxcbitcXHQgKi9cXG4rXFx0a3ZtX3MzOTBfcHZfc2NscF9raWNrKHZjcHUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li4xZWU5YWIyNTA1MDQyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBhY3RpdmVfbWFzaztcXG4gfVxcbiBcXG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XFxuK1xcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cztcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKGt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcXG4rXFx0ICogbWlnaHQgYnVybiB0b28gbWFueSBjeWNsZXMgYnV0IGFwYXJ0IGZyb20gdGhhdCB3YWtpbmcgYVxcbitcXHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxcbitcXHQgKi9cXG4rXFx0c2lnY3B1ID0gZmluZF9maXJzdF9iaXQoa3ZtLVxcdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcXG4rXFx0LyogV2VsbCBub2JvZHkncyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovXFxuK1xcdGlmIChzaWdjcHUgPT0gb25saW5lX3ZjcHVzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcXG4rXFx0XFx0aWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7XFxuK1xcdFxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XFxuK1xcdFxcdFxcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2lnY3B1ID0gZmluZF9uZXh0X2JpdChrdm0tXFx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcXG4rXFx0fSB3aGlsZSAoc2lnY3B1IFxcdTAwM2Mgb25saW5lX3ZjcHVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xcbkBAIC0xOTE1LDQ5ICsxOTQ2LDEyOSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2sodTY0IHR5cGUsIGludCBpc2MpXFxuK3tcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfTUNISzpcXG4rXFx0XFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9NQ0hLX1JFUCk7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxcbitcXHRcXHRyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8XFxuK1xcdFxcdCAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORTpcXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9QRkFVTFRfRE9ORSk7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuK1xcdFxcdHJldHVybiBpc2NfdG9faXJxX3R5cGUoaXNjKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4tICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxcbisgKiBTZXR1cCBpbnRlcnZlbnRpb24gbWFza3MgdG8gY2F0Y2ggcnVubmluZyB2Y3B1cyB0aGF0IGhvcGVmdWxseSBvcGVuXFxuKyAqIHRoZWlyIG1hc2tzIHNvb25pc2ggYW5kIGtpY2sgc2xlZXBpbmcgdmNwdXMgdG8gbW90aXZhdGUgdGhlbSB0b1xcbisgKiB0YWtlIElSUXMuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpXFxuK3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSlcXG4re1xcbitcXHQvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi9cXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfTUNISzpcXG4rXFx0XFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfU1RPUF9JTlQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcXG4rXFx0XFx0aWYgKCEodHlwZSBcXHUwMDI2IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5naXNhX2ludC5vcmlnaW4pIHx8XFxuK1xcdFxcdCAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKHZjcHUpKVxcbitcXHRcXHRcXHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9JT19JTlQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRVhUX0lOVCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKHZjcHUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBraWNrX2NwdV9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcXG4gXFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzLCBucl90cmllcyA9IDA7XFxuK1xcdHU2NCBpcnFfcGVuZF9tYXNrO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbiBcXHRpZiAoIW9ubGluZV92Y3B1cylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayh0eXBlLCBwYXJtKTtcXG4gXFx0Zm9yIChzaWdjcHUgPSBrdm0tXFx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSsrKSB7XFxuIFxcdFxcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XFxuIFxcdFxcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcXG4tXFx0XFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKVxcbitcXHRcXHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpIFxcdTAwMjYgaXJxX3BlbmRfbWFzaylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXFxuLVxcdFxcdGlmIChucl90cmllcysrIFxcdTAwM2U9IG9ubGluZV92Y3B1cylcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRpZiAobnJfdHJpZXMrKyBcXHUwMDNlPSBvbmxpbmVfdmNwdXMgKiAyKSB7XFxuK1xcdFxcdFxcdGRzdF92Y3B1ID0gTlVMTDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovXFxuLVxcdHN3aXRjaCAodHlwZSkge1xcbi1cXHRjYXNlIEtWTV9TMzkwX01DSEs6XFxuLVxcdFxcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxcbi1cXHRcXHRpZiAoISh0eXBlIFxcdTAwMjYgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAga3ZtLVxcdTAwM2VhcmNoLmdpc2FfaW50Lm9yaWdpbikgfHxcXG4tXFx0XFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUoZHN0X3ZjcHUpKVxcbi1cXHRcXHRcXHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfSU9fSU5UKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdC8qIE5vYm9keSB3YXMgZW5hYmxlZCwgdGltZSB0byB3YWtlIGFsbCBvZiB0aGVtICovXFxuK1xcdGlmICghZHN0X3ZjcHUpIHtcXG4rXFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgZHN0X3ZjcHUsIGt2bSlcXG4rXFx0XFx0XFx0dmNwdV9pbnRlcnZlbnRpb25fa2ljayhkc3RfdmNwdSwgdHlwZSk7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7XFxuK1xcbitcXHR2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTtcXG4rfVxcbitcXG4rdm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjcHUgdGhhdCBjYWxsZWQgc2NscCBsaWtlbHkgd2lsbCBhbHNvIHRha2UgdGhlIElSUSwgbm9cXG4rXFx0ICogbmVlZCB0byBraWNrIGFueW9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChsaWtlbHkoZGVsaXZlcmFibGVfaXJxcyh2Y3B1KSBcXHUwMDI2IElSUV9QRU5EX0VYVF9TRVJWSUNFKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yIHRoZSBvdGhlciBjYXNlcyB3ZSBtaWdodCBoYXZlIHNsZWVwaW5nIGNwdXMgd2l0aCBvcGVuXFxuK1xcdCAqIG1hc2tzLiBUaW1lIHRvIGZpbmQgYW5kIGtpY2sgdGhlbS5cXG4rXFx0ICovXFxuK1xcdGtpY2tfY3B1X2lycSh2Y3B1LVxcdTAwM2Vrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXFxuK3tcXG4rXFx0aW50IHByb3Q7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRwcm90ID0ga3ZtX3MzOTBfcHZfaXNfcHJvdGVjdGVkKGt2bSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogTm8gbmVlZCB0byBraWNrIG9uIG5vbi1ldiBzZXJ2aWNlIElSUXMgZm9yIFBWIFZNcywgd2UncmVcXG4rXFx0ICogbm90IGFsbG93ZWQgdG8gaW5qZWN0IGFueXdheS4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc2NscFxcbitcXHQgKiBpbnN0cnVjdGlvbiBub3RpZmljYXRpb24gQUZURVIgcmUtZW50cnkgb2YgdGhlIHZjcHUgdGhhdFxcbitcXHQgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJvdCBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEtWTV9TMzkwX0lOVF9TRVJWSUNFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKHBhcm0gXFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkcpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRraWNrX2NwdV9pcnEoa3ZtLCB0eXBlLCBwYXJtKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4ge1xcbiBcXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVxcdTAwM2V0eXBlKTtcXG4rXFx0dTY0IHBhcm07XFxuIFxcdGludCByYztcXG4gXFxuIFxcdHN3aXRjaCAodHlwZSkge1xcbkBAIC0xOTY4LDEyICsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuIFxcdFxcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxcbitcXHRcXHRwYXJtID0gaW50aS1cXHUwMDNlZXh0LmV4dF9wYXJhbXMgXFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkc7XFxuIFxcdFxcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuIFxcdFxcdHJjID0gX19pbmplY3RfcGZhdWx0X2RvbmUoa3ZtLCBpbnRpKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuK1xcdFxcdC8qIEdyYWIgaXNjIGhlcmUgc2luY2UgX19pbmplY3RfaW8oKSBtaWdodCBmcmVlIGludGkgKi9cXG4rXFx0XFx0cGFybSA9IGlzY190b19pcnFfdHlwZShpbnRfd29yZF90b19pc2MoaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmQpKTtcXG4gXFx0XFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtMTk4Miw3ICsyMDk2LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcbi1cXHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSk7XFxuK1xcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlLCBwYXJtKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XFxuIFxcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxcbiBcXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3NnX2VudHJ5KSxcXG4gXFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXFxuK1xcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksXFxuIH07XFxuIFxcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0ge1xcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XFxuIFxcdFxcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiBcXHR9XFxuIFxcbiBcXHRyYyA9IGt2bV9zMzkwX2hhbmRsZV9yZXF1ZXN0cyh2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXFxuaW5kZXggNmQyODQyZmI3MWEzMy4uNzExNWE4ZjViMTg4MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcXG5AQCAtMzc1LDYgKzM3NSw4IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XFxuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbit2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDE6NTYuMzQ1NTI3MjAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjUyOTkxMDY1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICAgIFwia3ZtX3MzOTBfcHZfc2NscF9raWNrXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3Rfdm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBvbiBzMzkweC4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBJUlFzIGFjcm9zcyBWQ1BVcyBhbmQgdG8ga2ljayBWQ1BVcyB3aGVuIHNwZWNpZmljIGludGVycnVwdHMgYXJlIGluamVjdGVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fUzM5MF9JTlRFUlJVUFQpIGFuZCBkdXJpbmcgVkNQVSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkwODgzY2ZhMDZlNzdiZTYxYjc5YTYwODU0OTE2N2JkMWViZDJkNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDowMTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00NjcsNiArNDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHtcbiBcdHU2NCBnbWFwX3NoYWRvd19yM19lbnRyeTtcbiBcdHU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTtcbiBcdHU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTtcbitcdHU2NCBpbmplY3RfcmVkaXN0O1xuIH07XG4gXG4gc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuaW5kZXggMTk4MGRmNjFlZjMwNC4uZTFkZTNmNDcxZmZkMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmNcbkBAIC01MzYsNiArNTM2LDE1IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlcGVuZGluZ19pcnFzKTtcbiBcdGNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlbWFza2VkX2lycXMpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHQvKlxuK1x0ICogV2UgbWlzc2VkIHRoZSBmbG9hdGluZyBJUlEga2ljayBzaW5jZSB3ZSBjYW4gb25seSBpbmplY3RcbitcdCAqIHdoZW4gd2UgZW5kIHVwIGhlcmUgYW5kIG5vdCB3aGVuIHRoZSBpcnEgd2FzIGluamVjdGVkIHZpYVxuK1x0ICogdGhlIEZMSUMuXG4rXHQgKlxuK1x0ICogTm93IHRoYXQgd2UgaGF2ZSBjbGVhcmVkIHRoZSBtYXNraW5nIHdlIGNhbiBraWNrIGNwdXMuXG4rXHQgKi9cbitcdGt2bV9zMzkwX3B2X3NjbHBfa2ljayh2Y3B1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOGYyNGJjZDFhNmQzNi4uMWVlOWFiMjUwNTA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0zNjcsNiArMzY3LDM3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbGl2ZXJhYmxlX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGFjdGl2ZV9tYXNrO1xuIH1cbiBcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbitcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cztcbitcbitcdGlmICghUkVBRF9PTkNFKGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5wZW5kaW5nX2lycXMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbitcbitcdC8qXG4rXHQgKiBOb3QgdG9vIHdvcnJpZWQgYWJvdXQgc3luY2hyb25pemF0aW9uIGZvciBpZGxlX21hc2suIFdlXG4rXHQgKiBtaWdodCBidXJuIHRvbyBtYW55IGN5Y2xlcyBidXQgYXBhcnQgZnJvbSB0aGF0IHdha2luZyBhXG4rXHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxuK1x0ICovXG4rXHRzaWdjcHUgPSBmaW5kX2ZpcnN0X2JpdChrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cyk7XG4rXHQvKiBXZWxsIG5vYm9keSdzIHNsZWVwaW5nIHNvIHNvbWVvbmUgd2lsbCBsaWtlbHkgdGFrZSB0aGUgSVJRIHNvb24gKi9cbitcdGlmIChzaWdjcHUgPT0gb25saW5lX3ZjcHVzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkbyB7XG4rXHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbitcdFx0aWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7XG4rXHRcdFx0a3ZtLVx1MDAzZXN0YXQuaW5qZWN0X3JlZGlzdCsrO1xuK1x0XHRcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRzaWdjcHUgPSBmaW5kX25leHRfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzLCArK3NpZ2NwdSk7XG4rXHR9IHdoaWxlIChzaWdjcHUgXHUwMDNjIG9ubGluZV92Y3B1cyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9fc2V0X2NwdV9pZGxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9XQUlUKTtcbkBAIC0xOTE1LDQ5ICsxOTQ2LDEyOSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHU2NCB0eXBlLCBpbnQgaXNjKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuK1x0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdHJldHVybiBpc2NfdG9faXJxX3R5cGUoaXNjKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbiAvKlxuLSAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cbisgKiBTZXR1cCBpbnRlcnZlbnRpb24gbWFza3MgdG8gY2F0Y2ggcnVubmluZyB2Y3B1cyB0aGF0IGhvcGVmdWxseSBvcGVuXG4rICogdGhlaXIgbWFza3Mgc29vbmlzaCBhbmQga2ljayBzbGVlcGluZyB2Y3B1cyB0byBtb3RpdmF0ZSB0aGVtIHRvXG4rICogdGFrZSBJUlFzLlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcbitzdGF0aWMgdm9pZCB2Y3B1X2ludGVydmVudGlvbl9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHR5cGUpXG4re1xuK1x0LyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgS1ZNX1MzOTBfTUNISzpcbitcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfU1RPUF9JTlQpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdGlmICghKHR5cGUgXHUwMDI2IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdpc2FfaW50Lm9yaWdpbikgfHxcbitcdFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUodmNwdSkpXG4rXHRcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfSU9fSU5UKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRrdm1fczM5MF92Y3B1X3dha2V1cCh2Y3B1KTtcbit9XG4rXG4rc3RhdGljIHZvaWQga2lja19jcHVfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUsIHU2NCBwYXJtKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4gXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcbitcdHU2NCBpcnFfcGVuZF9tYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4gXHRpZiAoIW9ubGluZV92Y3B1cylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayh0eXBlLCBwYXJtKTtcbiBcdGZvciAoc2lnY3B1ID0ga3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSsrKSB7XG4gXHRcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XG4gXHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbi1cdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKVxuK1x0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcdTAwMjYgaXJxX3BlbmRfbWFzaylcbiBcdFx0XHRicmVhaztcbiBcdFx0LyogYXZvaWQgZW5kbGVzcyBsb29wcyBpZiBhbGwgdmNwdXMgYXJlIHN0b3BwZWQgKi9cbi1cdFx0aWYgKG5yX3RyaWVzKysgXHUwMDNlPSBvbmxpbmVfdmNwdXMpXG4tXHRcdFx0cmV0dXJuO1xuK1x0XHRpZiAobnJfdHJpZXMrKyBcdTAwM2U9IG9ubGluZV92Y3B1cyAqIDIpIHtcbitcdFx0XHRkc3RfdmNwdSA9IE5VTEw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdC8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqL1xuLVx0c3dpdGNoICh0eXBlKSB7XG4tXHRjYXNlIEtWTV9TMzkwX01DSEs6XG4tXHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbi1cdFx0aWYgKCEodHlwZSBcdTAwMjYgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgIGt2bS1cdTAwM2VhcmNoLmdpc2FfaW50Lm9yaWdpbikgfHxcbi1cdFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUoZHN0X3ZjcHUpKVxuLVx0XHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9JT19JTlQpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTtcbi1cdFx0YnJlYWs7XG4rXHQvKiBOb2JvZHkgd2FzIGVuYWJsZWQsIHRpbWUgdG8gd2FrZSBhbGwgb2YgdGhlbSAqL1xuK1x0aWYgKCFkc3RfdmNwdSkge1xuK1x0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCBkc3RfdmNwdSwga3ZtKVxuK1x0XHRcdHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4tXHRrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7XG4rXG4rXHR2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTtcbit9XG4rXG4rdm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdC8qXG4rXHQgKiBUaGUgY3B1IHRoYXQgY2FsbGVkIHNjbHAgbGlrZWx5IHdpbGwgYWxzbyB0YWtlIHRoZSBJUlEsIG5vXG4rXHQgKiBuZWVkIHRvIGtpY2sgYW55b25lLlxuK1x0ICovXG4rXHRpZiAobGlrZWx5KGRlbGl2ZXJhYmxlX2lycXModmNwdSkgXHUwMDI2IElSUV9QRU5EX0VYVF9TRVJWSUNFKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIEZvciB0aGUgb3RoZXIgY2FzZXMgd2UgbWlnaHQgaGF2ZSBzbGVlcGluZyBjcHVzIHdpdGggb3BlblxuK1x0ICogbWFza3MuIFRpbWUgdG8gZmluZCBhbmQga2ljayB0aGVtLlxuK1x0ICovXG4rXHRraWNrX2NwdV9pcnEodmNwdS1cdTAwM2Vrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7XG4rfVxuK1xuKy8qXG4rICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXG4re1xuK1x0aW50IHByb3Q7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdHByb3QgPSBrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQoa3ZtKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXHQvKlxuK1x0ICogTm8gbmVlZCB0byBraWNrIG9uIG5vbi1ldiBzZXJ2aWNlIElSUXMgZm9yIFBWIFZNcywgd2UncmVcbitcdCAqIG5vdCBhbGxvd2VkIHRvIGluamVjdCBhbnl3YXkuIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHNjbHBcbitcdCAqIGluc3RydWN0aW9uIG5vdGlmaWNhdGlvbiBBRlRFUiByZS1lbnRyeSBvZiB0aGUgdmNwdSB0aGF0XG4rXHQgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuXG4rXHQgKi9cbitcdGlmIChwcm90IFx1MDAyNlx1MDAyNiB0eXBlID09IEtWTV9TMzkwX0lOVF9TRVJWSUNFIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEocGFybSBcdTAwMjYgU0NDQl9FVkVOVF9QRU5ESU5HKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a2lja19jcHVfaXJxKGt2bSwgdHlwZSwgcGFybSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4ge1xuIFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbitcdHU2NCBwYXJtO1xuIFx0aW50IHJjO1xuIFxuIFx0c3dpdGNoICh0eXBlKSB7XG5AQCAtMTk2OCwxMiArMjA3OSwxNSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIFx0XHRyYyA9IF9faW5qZWN0X3ZpcnRpbyhrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6XG4rXHRcdHBhcm0gPSBpbnRpLVx1MDAzZWV4dC5leHRfcGFyYW1zIFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkc7XG4gXHRcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuIFx0XHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbitcdFx0LyogR3JhYiBpc2MgaGVyZSBzaW5jZSBfX2luamVjdF9pbygpIG1pZ2h0IGZyZWUgaW50aSAqL1xuK1x0XHRwYXJtID0gaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSk7XG4gXHRcdHJjID0gX19pbmplY3RfaW8oa3ZtLCBpbnRpKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuQEAgLTE5ODIsNyArMjA5Niw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbitcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlLCBwYXJtKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXG4rXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XG4gXHRcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi43MTE1YThmNWIxODgyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiArMzc1LDggQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMTo1Ni4zNDU1Mjg4MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjY2NjE0NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBzMzkwIFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSXQncyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBpbnRlcmNlcHQuY2AsIGBpbnRlcnJ1cHQuY2AsIGBrdm0tczM5MC5jYCwgYGt2bS1zMzkwLmhgLCBhbmQgYGt2bV9ob3N0LmhgIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9rdm1gIGRpcmVjdG9yeS4gVGhhdCBwb2ludHMgdG8gc29tZSBzZXJpb3VzIGNoYW5nZXMgdW5kZXIgdGhlIGhvb2QuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgYW5kIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgLCBzbyB0aGUgY29yZSBsb2dpYyBvZiBob3cgd2UgaGFuZGxlIGZsb2F0aW5nIElSUXMgaW4gS1ZNIGZvciBzMzkwIGlzIGNoYW5naW5nLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5ICp2ZXJ5KiBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcy5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSB0ZXN0IHRoaXMgZWZmZWN0aXZlbHk/IElzIHRoaXMgcmVhY2hhYmxlIGJ5IGV4aXN0aW5nIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmU/IEFoLCB5ZXMsIGlmIHdlIGhhdmUgczM5MHggUUVNVSwgS1ZNIG9uIHMzOTAgaXMgdGVzdGFibGUuIEdvb2QsIGdvb2QuIEFuZCBzeXprYWxsZXIuLi4gZG9lcyBzeXprYWxsZXIgZG8gczM5MHg/IFllcywgaXQgZG9lcywgc28gc3l6a2FsbGVyICpjYW4qIGZ1enogS1ZNIG9uIHMzOTB4LiBQZXJmZWN0LiBUaGF0J3MgYSBodWdlIHdpbiBpbiB0ZXJtcyBvZiB0ZXN0YWJpbGl0eSBhbmQgZmluZGluZyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBpc3N1ZXMuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgc3l6a2FsbGVyIG5lZWRzIHRvIGVuYWJsZSBLVk0gb24gczM5MHguIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgc3RhbmRhcmQgS1ZNIGNvbmZpZyBpcyBzdWZmaWNpZW50LCBgQ09ORklHX0tWTWAgc2hvdWxkIGJlIGdvb2QgZW5vdWdoLiBUaW1lIHRvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjowMy4wMTIxNDY3MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNDU0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjowMy4wNjIyOTg1MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY2MTYyMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBEZXBlbmRlbmNpZXMgZm9yIHMzOTAgQXJjaGl0ZWN0dXJlIEludGVycnVwdCBIYW5kbGluZyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSBzeXN0ZW0gaXMgaW5kaWNhdGluZyB0aGF0IGBDT05GSUdfS1ZNYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHNvbWV0aGluZywgd2hpY2ggaXNuJ3QgZW50aXJlbHkgc3VycHJpc2luZyBnaXZlbiB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gY29kZSB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBsZWFuaW5nIG9uIGl0LCBzcGVjaWZpY2FsbHkgaW50ZXJydXB0IG1hbmFnZW1lbnQuIFRoZSBzMzkwIGFyY2hpdGVjdHVyZSBvZnRlbiBoYXMgc29tZSB1bmlxdWUgYXBwcm9hY2hlcyBoZXJlLlxuXG5JJ2xsIHN0YXJ0IHdpdGggYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBUaGF0IGZpbGUgaXMgYSBsaWtlbHkgY2FuZGlkYXRlOyBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBhcmUgb2Z0ZW4gdGlnaHRseSBjb3VwbGVkIHdpdGggdmlydHVhbGl6YXRpb24uIFRoZSBwcmVzZW5jZSBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBpcyBhIHBhcnRpY3VsYXIgcG9pbnQgb2YgaW50ZXJlc3QgYmVjYXVzZSBvZiBpdHMgaW1wbGljYXRpb24gZm9yIGZsb2F0aW5nIHBvaW50LiBMZXQncyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gYW5kIG90aGVycyBhcmUgdXRpbGl6aW5nIEtWTSBmdW5jdGlvbmFsaXR5LCBhbmQgd2hlcmUgdGhhdCBkZXBlbmRlbmN5IGlzIGRlY2xhcmVkIG9yIGltcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYENPTkZJR19LVk1gIGFuZCBob3cgd2UncmUgZGlzdHJpYnV0aW5nIHRob3NlIGludGVycnVwdHMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGlmIHRoZXJlJ3MgYW55IGFyZWEgdGhhdCdzIG5vdCBuZWVkZWQsIG9yIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgZGlmZmVyZW50IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDI6MDcuMDI4NDY0MjkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDI4MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzY5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzcwOnZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDU1OD1zdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3NzpcXHRcXHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3OC1cXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc4PXZvaWQga3ZtX3MzOTBfcHZfc2NscF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjM3OTp2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjowNy4wNzY5MDAzMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA5NjI2ODA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgY2FsbGVkIHdpdGhpbiBgdmNwdV9wcmVfcnVuYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYC4gU2ltdWx0YW5lb3VzbHksIHdlIGhhdmUgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYmVpbmcgaW50cm9kdWNlZCwgdHJpZ2dlcmVkIGZyb20gYGhhbmRsZV9wdl9zY2xwYCBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBoYW5kbGVfcHZfc2NscGAgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIFFFTVUncyBzMzkweCBQViBzdXBwb3J0LiBBaCwgeWVzLCBpdCBkb2VzIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiwgd2hpY2ggaW5jbHVkZXMgUFYuIEJ1dCBldmVuIGlmIFBWIGlzbid0IGluIHBsYXksIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHN0aWxsIGdldHMgaW52b2tlZCB2aWEgYHZjcHVfcHJlX3J1bmAuIEkgYWxzbyBzZWUgY2hhbmdlcyBhcm91bmQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBzbyB0aGVyZSdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gaGVyZSBpbiB0aGUgS1ZNIHMzOTB4IGltcGxlbWVudGF0aW9uLiBJdCBtZWFucyBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoaXMgaXMgV29ydGhGdXp6aW5nPXRydWUuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGtleSBzeW1ib2xzLiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYXJlIG9idmlvdXMgb25lcy4gVGhlbiB0aGVyZSdzIHRoaXMgcGF0aDogYHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2tgIC1cdTAwM2UgYGtpY2tfY3B1X2lycWAgLVx1MDAzZSBgX19mbG9hdGluZ19pcnFfa2lja2AgLVx1MDAzZSBgX19pbmplY3Rfdm1gIC1cdTAwM2UgYGt2bV9zMzkwX2luamVjdF92bWAuIFdhaXQsIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBvbmUgSSB3YW50IHRvIHJlYWxseSBsb29rIGludG8uIEJvdGggYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgYW5kIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgIGFyZSBleHBvcnRlZCwgd2hpY2ggZ2l2ZXMgdXMgc29tZSBnb29kIGVudHJ5IHBvaW50cy5cblxuTmV4dCBzdGVwcywgSSBuZWVkIHRvIHZlcmlmeSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhbmQgYGhhbmRsZV9wdl9zY2xwYCBhbmQgaG93IHRoZXkncmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjoxNy4xNzMxNzE0MTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNzAyNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA2OD1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTAyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjEwMzppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMDQtXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEzNy1cXHR9XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTM4OlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVxcdTAwM2V0eXBlLCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTM5LVxcdFxcdFxcdFxcdCAyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mjg3Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg5NS1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4OTY6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg5Ny1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTA5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjkxMDpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTExLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODY1PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTA3LVxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzkwODpcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTA5LVxcdFxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTI3LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzkyODpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTI5LVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChmaS1cXHUwMDNlc2ltbSBcXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cXHUwMDNlaXNjKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4OlxcdFxcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDktXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDkzLVxcdFxcdGludGkucGFybTY0ID0gdG9rZW47XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTQ6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXFx1MDAzZWt2bSwgXFx1MDAyNmludGksIGludGlfbWVtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3OT12b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozODA6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjYtXFx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjAyOjE3LjIyMTI0ODk1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjQ4NDQxNTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQ29uc2lkZXJpbmcgSW5qZWN0aW9uIFBvaW50cyBpbiB0aGUgczM5MCBLVk0gS2VybmVsIE1vZHVsZSoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIGBrdm1fczM5MF9pbmplY3Rfdm1gLi4uIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50IHRvIGZvY3VzIG9uLCBhIGdvb2Qgc3ltYm9sIHRvIGRpdmUgaW50by4gSXQncyBvZnRlbiB3aGVyZSB3ZSBzZWUgY3JpdGljYWwgZXZlbnRzIGJlaW5nIGluamVjdGVkIGludG8gdGhlIHZpcnR1YWwgbWFjaGluZS4gTm93LCBJJ20gdHJ5aW5nIHRvIHRoaW5rIGFib3V0IG90aGVyIHBvdGVudGlhbGx5IGltcG9ydGFudCBhcmVhcywgYW5kIHRoZSBuYW1lIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYGhhbmRsZV9wdl9zY2xwYC4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhlcmUncyBzb21lIHVzZWZ1bCBvdmVybGFwLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IGludGVyYWN0aW9ucyBhcmUgb2Ygbm90ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA1OjEzLjcwNTY2ODY5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mjc5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3B2X3NjbHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz01MDg9c3RhdGljIGludCBoYW5kbGVfcHZfc3B4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTE2LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NTE3OnN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTE4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NTgyPXN0YXRpYyBpbnQgaGFuZGxlX3B2X25vdGlmaWNhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTU4OC1cXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWlwYSA9PSAweGIyMjApXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo1ODk6XFx0XFx0cmV0dXJuIGhhbmRsZV9wdl9zY2xwKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTkwLVxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlaXBhID09IDB4YjlhNClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDU6MTMuNzU0MjA3MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5NTM3NDA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgU3RhdGljIE1ldGhvZCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIGBoYW5kbGVfcHZfc2NscGAgaXMgc3RhdGljLCB0aGF0J3MgYWxyZWFkeSBlc3RhYmxpc2hlZC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIGBoYW5kbGVfcHZfbm90aWZpY2F0aW9uYC4gSXQgc2VlbXMgb2RkIHRoYXQgb25lIGhhbmRsZXIgaXMgc3RhdGljIHdoaWxlIHRoZSBvdGhlciBpc24ndCwgZXNwZWNpYWxseSB3aGVuIHRoZXkgbGlrZWx5IGhhbmRsZSBzaW1pbGFyIHBhcmFsbGVsIHByb2Nlc3Npbmcgc2NlbmFyaW9zLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4gQSBxdWljayBsb29rIGF0IGBoYW5kbGVfcHZfbm90aWZpY2F0aW9uYCBpcyBpbiBvcmRlcjsgSSB3YW50IHRvIGdyYXNwIGl0cyBjb250ZXh0IGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGF0J3MgdGhlIGV4cGVjdGVkIHVzYWdlLCBvciBpZiB0aGVyZSdzIGFuIG9wcG9ydHVuaXR5IGZvciBpbXByb3ZlbWVudCBvciByZWZhY3RvcmluZy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowNToyMi44NDk1ODUzMTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjkzMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9wdl9ub3RpZmljYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz01NTE9c3RhdGljIGludCBoYW5kbGVfcHZfdXZjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTgxLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NTgyOnN0YXRpYyBpbnQgaGFuZGxlX3B2X25vdGlmaWNhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01ODMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MjI9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTY3MC1cXHRjYXNlIElDUFRfUFZfTk9USUZZOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NjcxOlxcdFxcdHJjID0gaGFuZGxlX3B2X25vdGlmaWNhdGlvbih2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTY3Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDU6MjIuOTE1Mjg1MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAwMjYwNjkyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEtWTSBTeW1ib2xzIGZvciBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLiBJIGtub3cgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyB2aXNpYmxlIG91dHNpZGUgaXRzIG93biBmaWxlLCBzbyB0aGVvcmV0aWNhbGx5LCBpdCdzIGEgY2FuZGlkYXRlLiBCdXQsIGtub3dpbmcgaG93IEtWTSB3b3JrcywgdGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgYSAqdmVyeSogaG90IHBhdGguIEknZCByYXRoZXIgbG9vayBzb21ld2hlcmUgbGVzcyBoZWF2aWx5IHRyYWZmaWNrZWQgdG8gc3RhcnQuXG5cblJpZ2h0LCBsZXQncyBzZWUuIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgIGlzIGFsc28gZXhwb3J0ZWQuIFRoYXQgc291bmRzIHByb21pc2luZy4gVGhlbiB0aGVyZSdzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCDigJMgdGhleSdyZSBub24tc3RhdGljIGFuZCBleHBvcnRlZCwgc28gdGhleSdyZSBhbGwgc29saWQgc3RhcnRpbmcgcG9pbnRzLiBUaGVzZSBzZWVtIHRvIGJlIGdvb2QgZm9jdXMgc3ltYm9scyB0byBiZWdpbiB3aXRoLiBUaGV5J3JlIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG9mZmVyIGEgY2xlYXJlciB2aWV3IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIHRoYW4gc29tZXRoaW5nIGxpa2UgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAuXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX0tWTWAgaXMsIG9mIGNvdXJzZSwgdGhlIGJpZyBvbmUuIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgdG8gYmUgc3VyZSB0aGVyZSBhcmVu4oCZdCBhbnkgUFYtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA1OjQyLjk0MTM1ODA2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NDc4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowNTo0My4wMDY4MTI1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTYxNzc0MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgczM5MCBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBLVk0gb24gdGhlIFN5c3RlbSB6IGFyY2hpdGVjdHVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgU2NvcGUqKjogV2hhdCBLVk0gZmVhdHVyZXMgYXJlIGNvbnRyb2xsZWQgaGVyZT8gSXMgdGhpcyBqdXN0IHRoZSBjb3JlIEtWTSBzdXBwb3J0LCBvciBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBleHRlbnNpb25zIG9yIG9wdGltaXphdGlvbnMgZGVmaW5lZD9cbiogICAqKkRlcGVuZGVuY3kgQW5hbHlzaXMqKjogV2hhdCBvdGhlciBLY29uZmlnIG9wdGlvbnMgZG9lcyB0aGlzIGZpbGUgcmVseSBvbj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIGNlcnRhaW4gS1ZNIGZ1bmN0aW9uYWxpdHkuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzP1xuKiAgICoqRGVmYXVsdCBTZXR0aW5ncyoqOiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBLVk0gZmVhdHVyZXM/IEFyZSB0aGUgZGVmYXVsdHMgcmVhc29uYWJsZSBhbmQgc2FmZSwgb3IgZG8gdGhleSByZXByZXNlbnQgYSBwZXJmb3JtYW5jZSB2cy4gc2VjdXJpdHkgdHJhZGUtb2ZmIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIGEgc3BlY2lmaWMgZGVwbG95bWVudD9cbiogICAqKlBvdGVudGlhbCBBcmVhcyBmb3IgT3B0aW1pemF0aW9uKio6IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGdhaW5zIG9yIHJlZHVjZWQgcmVzb3VyY2UgY29uc3VtcHRpb24gaWYgdHVuZWQgY29ycmVjdGx5PyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHMzOTAtc3BlY2lmaWMgc2V0dGluZ3MuXG4qICAgKipQb3NzaWJsZSBJbnRlcmFjdGlvbnMqKjogSG93IGRvZXMgdGhlIEtjb25maWcgZmlsZSBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBjb2RlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyB0aGF0IGFyZSBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGp1c3QgbG9va2luZyBhdCB0aGlzIGZpbGU/XG5cblRoaXMgc2NhbiB3aWxsIGhvcGVmdWxseSBhbGxvdyBtZSB0byBkZXZlbG9wIGEgZ29vZCBtZW50YWwgbW9kZWwgb2YgS1ZNIGNvbmZpZ3VyYXRpb24gb24gU3lzdGVtIHouIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA1OjQ4LjE2ODU5MDE5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBLVk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbiAgIDY6XFx0XFxuICAgNzpcXHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuICAgODpcXHRcXHRkZWZfYm9vbCB5XFxuICAgOTpcXHRcXHRwcm9tcHQgXFxcIktWTVxcXCJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEyOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIEtWTVxcbiAgMjA6XFx0XFx0ZGVmX3RyaXN0YXRlIHlcXG4gIDIxOlxcdFxcdHByb21wdCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDI0OlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZfU1lOQ1xcbiAgMjU6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcXG4gIDI4OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcXG4gIDI5OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICAzMDpcXHRcXHRzZWxlY3QgS1ZNX1ZGSU9cXG4gIDMxOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgMzI6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBwYXJhdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgdGhlIFNJRVxcbiAgMzY6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXR5IG9uIHRoZSBtYWluZnJhbWUuIFRoaXMgc2hvdWxkIHdvcmtcXG4gIDM3OlxcdFxcdCAgb24gYW55IDY0Yml0IG1hY2hpbmUuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNDA6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDQzOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuICA1MDpcXHRcXHRoZWxwXFxuICA1MTpcXHRcXHQgIEFsbG93IENBUF9TWVNfQURNSU4gdXNlcnMgdG8gY3JlYXRlIEtWTSB2aXJ0dWFsIG1hY2hpbmVzIHRoYXQgYXJlXFxuICA1MjpcXHRcXHQgIGNvbnRyb2xsZWQgYnkgdXNlcnNwYWNlLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1NTpcXHRcXG4gIDU2OlxcdGVuZGlmICMgVklSVFVBTElaQVRJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDU6NDguMTY4NjcwOTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4Mjg1OTQyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nLCBhbmQgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBLVk0gaXMgdGhlIGNlbnRyYWwgcG9pbnQgaGVyZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBmb3VuZGF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBzdXBwb3J0aW5nIGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IsIHBhcnRpY3VsYXJseSBmb3IgUGFyYXZpcnR1YWxpemF0aW9uIChQVik/IEknbSB0aGlua2luZywgaXMgdGhlcmUgYSBzcGVjaWZpYywgZGVkaWNhdGVkIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZyByZWxhdGVkIHRvIFBhcmF2aXJ0dWFsaXphdGlvbiBvbiBTMzkwLCBsaWtlIGEgYENPTkZJR19LVk1fUzM5MF9QVmAgZmxhZz8gV2UgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgdG8gb3VyIGRlc2lyZWQgUFYgc2V0dXAuIFRoZSBkZXZpbCBpcyBvZnRlbiBpbiB0aGUgZGV0YWlscywgc28gbGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA4OjUxLjAyODA5Njc1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1ODE2MTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlBWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA4OjUxLjA4NjY4OTU4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDQ0MTk5MzE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgZm9yIFBhcmF2aXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhcmF2aXJ0dWFsaXphdGlvbiAoUFYpIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSB3aGVyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJdCdzIHRoZSBjZW50cmFsIHBsYWNlIHRvIGRpc2NvdmVyIHdoYXQga2VybmVsIGZlYXR1cmVzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gQnkgZXhhbWluaW5nIHRoaXMgS2NvbmZpZyBmaWxlLCBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBQViBzdXBwb3J0IGlzIGVuYWJsZWQsIHdoYXQga2luZHMgb2YgUFYgaW50ZXJmYWNlcyBhcmUgc3VwcG9ydGVkIChlLmcuLCB2aXJ0aW8sIHBhcmF2aXJ0LW9wcyksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHZpcnR1YWxpemF0aW9uIG9uIHMzOTAuIEknbGwgbmVlZCB0byBsb29rIGZvciBrZXl3b3JkcyBsaWtlIFwicGFyYXZpcnR1YWxpemF0aW9uLFwiIFwicHYsXCIgXCJ2aXJ0aW8sXCIgb3Igc3BlY2lmaWMgS2NvbmZpZyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhvc2UgY29uY2VwdHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgUFYgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBzMzkwIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoxNS41MDY2MjUyMDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDMwNzc0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipTRUNVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MTUuNTYwMDY4OTc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODQyNzA0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW5pdGlhbCBTZWFyY2ggU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3Igc3BlY2lmaWMgaW5kaWNhdG9ycyBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGtleSB0ZXJtcyByZWxhdGVkIHRvIHdoYXRldmVyIHRoaXMgXCJQUk9URUNURURcIiBvciBcIlBWXCIgcmVmZXJzIHRvLiBJdCdzIGEgcXVpY2ssIGVmZmljaWVudCB3YXkgdG8gaWRlbnRpZnkgdGhlIGNvcmUgY29uY2VwdCBhbmQgaXRzIHBvdGVudGlhbCB2YXJpYXRpb25zIHdpdGhpbiB0aGUgY29udGV4dC4gVGhpcyBpbml0aWFsIGFwcHJvYWNoIGZvY3VzZXMgb24gZGlyZWN0IG1hdGNoZXMgdG8gYXZvaWQgbWlzc2luZyBhbnkgZGlyZWN0IHJlZmVyZW5jZXMuIFRoaXMgaGVscHMgZXN0YWJsaXNoIGFuIGluaXRpYWwgcmFuZ2Ugb2YgcmVsZXZhbnQgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoxOS4zNDQzNDIyNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTY4MDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipQUk9URUNURURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MTkuMzk4MzE5MDA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjgyMDU1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBpbiB0aGUgUzM5MCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlJ3Mga2VybmVsIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgd2l0aGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBsZXZlcmFnZSBhIHNlYXJjaCwgc29tZXRoaW5nIGxpa2UgYGNvbmZpZyAuKmAsIHdoaWNoIHNob3VsZCBjYXRjaCBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdsbCBmb2N1cyB0aGF0IHNlYXJjaCB0byBiZSByZWxldmFudCB0byB2aXJ0dWFsaXphdGlvbiwgc2luY2UgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0IGluIHRoZSBzdWJqZWN0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdheSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlcmUgY291bGQgYmUgc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNLCBzMzkweC1zcGVjaWZpYyBwYXJhdmlydHVhbGl6YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBtb3JlIGdlbmVyYWxpemVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgdGhhdCdzIGx1cmtpbmcgaW4gdGhlcmUuIEdvdHRhIG1hcCBvdXQgd2hhdCdzIGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gbWFrZSBhIGp1ZGdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzOTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoyMi41NjY1MjY5MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODM0NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3MzOTAvS2NvbmZpZzoyOmNvbmZpZyBNTVVcXG5hcmNoL3MzOTAvS2NvbmZpZy0zLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy00LVxcbmFyY2gvczM5MC9LY29uZmlnOjU6Y29uZmlnIENQVV9CSUdfRU5ESUFOXFxuYXJjaC9zMzkwL0tjb25maWctNi1cXHRkZWZfYm9vbCB5XFxuYXJjaC9zMzkwL0tjb25maWctNy1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3MzOTAvS2NvbmZpZy05LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0xMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzoxMTpjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuYXJjaC9zMzkwL0tjb25maWctMTItXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTEzLVxcbmFyY2gvczM5MC9LY29uZmlnOjE0OmNvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzJcXG5hcmNoL3MzOTAvS2NvbmZpZy0xNS1cXHRkZWZfYm9vbCBuXFxuYXJjaC9zMzkwL0tjb25maWctMTYtXFxuYXJjaC9zMzkwL0tjb25maWc6MTc6Y29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NFxcbmFyY2gvczM5MC9LY29uZmlnLTE4LVxcdGRlZl9ib29sIG5cXG5hcmNoL3MzOTAvS2NvbmZpZy0xOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyMDpjb25maWcgQVJDSF9QUk9DX0tDT1JFX1RFWFRcXG5hcmNoL3MzOTAvS2NvbmZpZy0yMS1cXHRkZWZfYm9vbCB5XFxuYXJjaC9zMzkwL0tjb25maWctMjItXFxuYXJjaC9zMzkwL0tjb25maWc6MjM6Y29uZmlnIEdFTkVSSUNfSFdFSUdIVFxcbmFyY2gvczM5MC9LY29uZmlnLTI0LVxcdGRlZl9ib29sICFIQVZFX01BUkNIX1oxOTZfRkVBVFVSRVNcXG5hcmNoL3MzOTAvS2NvbmZpZy0yNS1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyNjpjb25maWcgR0VORVJJQ19CVUdcXG5hcmNoL3MzOTAvS2NvbmZpZy0yNy1cXHRkZWZfYm9vbCB5IGlmIEJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTI4LVxcbmFyY2gvczM5MC9LY29uZmlnOjI5OmNvbmZpZyBHRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSU1xcbmFyY2gvczM5MC9LY29uZmlnLTMwLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMjpjb25maWcgQVVESVRfQVJDSFxcbmFyY2gvczM5MC9LY29uZmlnLTMzLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zNC1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTpjb25maWcgTk9fSU9QT1JUX01BUFxcbmFyY2gvczM5MC9LY29uZmlnLTM2LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zNy1cXG5hcmNoL3MzOTAvS2NvbmZpZzozODpjb25maWcgQVJDSF9TVVBQT1JUU19VUFJPQkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzktXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTQwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQxOmNvbmZpZyBLQVNBTl9TSEFET1dfT0ZGU0VUXFxuYXJjaC9zMzkwL0tjb25maWctNDItXFx0aGV4XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0Njpjb25maWcgQ0NfSEFTX0JVSUxUSU5fRkZTXFxuYXJjaC9zMzkwL0tjb25maWctNDctXFx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXFx1MDAyNlxcdTAwMjYgR0NDX1ZFUlNJT04gXFx1MDAzYyAxNjAwMDApXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1Mzpjb25maWcgQ0NfQVNNX0ZMQUdfT1VUUFVUX0JST0tFTlxcbmFyY2gvczM5MC9LY29uZmlnLTU0LVxcdGRlZl9ib29sIENDX0lTX0dDQyBcXHUwMDI2XFx1MDAyNiBHQ0NfVkVSU0lPTiBcXHUwMDNjIDE0MDIwMFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTktXFxuYXJjaC9zMzkwL0tjb25maWc6NjA6Y29uZmlnIENDX0hBU19BU01fQU9SX0ZPUk1BVF9GTEFHU1xcbmFyY2gvczM5MC9LY29uZmlnLTYxLVxcdGRlZl9ib29sICEoQ0NfSVNfQ0xBTkcgXFx1MDAyNlxcdTAwMjYgQ0xBTkdfVkVSU0lPTiBcXHUwMDNjIDE5MDEwMClcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTY1LVxcbmFyY2gvczM5MC9LY29uZmlnOjY2OmNvbmZpZyBDQ19IQVNfQVNNX0lNTUVESUFURV9TVFJJTkdTXFxuYXJjaC9zMzkwL0tjb25maWctNjctXFx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXFx1MDAyNlxcdTAwMjYgR0NDX1ZFUlNJT04gXFx1MDAzYyA5MDAwMClcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTcxLVxcbmFyY2gvczM5MC9LY29uZmlnOjcyOmNvbmZpZyBDQ19IQVNfU1RBQ0tQUk9URUNUT1JfR0xPQkFMXFxuYXJjaC9zMzkwL0tjb25maWctNzMtXFx0ZGVmX2Jvb2wgJChjYy1vcHRpb24sIC1tc3RhY2stcHJvdGVjdG9yLWd1YXJkPWdsb2JhbCAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZC1yZWNvcmQpXFxuYXJjaC9zMzkwL0tjb25maWctNzQtXFxuYXJjaC9zMzkwL0tjb25maWc6NzU6Y29uZmlnIFMzOTBcXG5hcmNoL3MzOTAvS2NvbmZpZy03Ni1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yODktXFxuYXJjaC9zMzkwL0tjb25maWc6MjkwOmNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcXG5hcmNoL3MzOTAvS2NvbmZpZy0yOTEtXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTI5Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyOTM6Y29uZmlnIFBHVEFCTEVfTEVWRUxTXFxuYXJjaC9zMzkwL0tjb25maWctMjk0LVxcdGludFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9Mjk3PXNvdXJjZSBcXFwia2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTI5OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyOTk6Y29uZmlnIEFSQ0hfQ0NfQ0FOX0xJTktcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDAtXFx0Ym9vbFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMzAyLVxcbmFyY2gvczM5MC9LY29uZmlnOjMwMzpjb25maWcgQVJDSF9VU0VSRkxBR1NcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDQtXFx0c3RyaW5nXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDYtXFxuYXJjaC9zMzkwL0tjb25maWc6MzA3OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDXFxuYXJjaC9zMzkwL0tjb25maWctMzA4LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDktXFxuYXJjaC9zMzkwL0tjb25maWc6MzEwOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTEtXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTMxMi1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMTM6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfU0lHXFxuYXJjaC9zMzkwL0tjb25maWctMzE0LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTUtXFxuYXJjaC9zMzkwL0tjb25maWc6MzE2OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX1BVUkdBVE9SWVxcbmFyY2gvczM5MC9LY29uZmlnLTMxNy1cXHRkZWZfYm9vbCB5XFxuYXJjaC9zMzkwL0tjb25maWctMzE4LVxcbmFyY2gvczM5MC9LY29uZmlnOjMxOTpjb25maWcgQVJDSF9TVVBQT1JUU19DUkFTSF9EVU1QXFxuYXJjaC9zMzkwL0tjb25maWctMzIwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTMyNS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMjY6Y29uZmlnIEFSQ0hfREVGQVVMVF9DUkFTSF9EVU1QXFxuYXJjaC9zMzkwL0tjb25maWctMzI3LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTMyOT1tZW51IFxcXCJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXNcXFwiXFxuYXJjaC9zMzkwL0tjb25maWctMzMwLVxcbmFyY2gvczM5MC9LY29uZmlnOjMzMTpjb25maWcgSEFWRV9NQVJDSF9aMTBfRkVBVFVSRVNcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzItXFx0ZGVmX2Jvb2wgblxcbmFyY2gvczM5MC9LY29uZmlnLTMzMy1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMzQ6Y29uZmlnIEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xcbmFyY2gvczM5MC9LY29uZmlnLTMzNS1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzctXFxuYXJjaC9zMzkwL0tjb25maWc6MzM4OmNvbmZpZyBIQVZFX01BUkNIX1pFQzEyX0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzM5LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM0MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNDI6Y29uZmlnIEhBVkVfTUFSQ0hfWjEzX0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzQzLVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM0NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNDY6Y29uZmlnIEhBVkVfTUFSQ0hfWjE0X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzQ3LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM0OS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTA6Y29uZmlnIEhBVkVfTUFSQ0hfWjE1X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzUxLVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM1My1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTQ6Y29uZmlnIEhBVkVfTUFSQ0hfWjE2X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzU1LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM1Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTg6Y29uZmlnIEhBVkVfTUFSQ0hfWjE3X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzU5LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTM2Mj1jaG9pY2VcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM2NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNjY6Y29uZmlnIE1BUkNIX1oxMFxcbmFyY2gvczM5MC9LY29uZmlnLTM2Ny1cXHRib29sIFxcXCJJQk0gU3lzdGVtIHoxMFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM3My1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNzQ6Y29uZmlnIE1BUkNIX1oxOTZcXG5hcmNoL3MzOTAvS2NvbmZpZy0zNzUtXFx0Ym9vbCBcXFwiSUJNIHpFbnRlcnByaXNlIDExNCBhbmQgMTk2XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMzgyLVxcbmFyY2gvczM5MC9LY29uZmlnOjM4Mzpjb25maWcgTUFSQ0hfWkVDMTJcXG5hcmNoL3MzOTAvS2NvbmZpZy0zODQtXFx0Ym9vbCBcXFwiSUJNIHpCQzEyIGFuZCB6RUMxMlxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM5MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozOTI6Y29uZmlnIE1BUkNIX1oxM1xcbmFyY2gvczM5MC9LY29uZmlnLTM5My1cXHRib29sIFxcXCJJQk0gejEzcyBhbmQgejEzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDAwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQwMTpjb25maWcgTUFSQ0hfWjE0XFxuYXJjaC9zMzkwL0tjb25maWctNDAyLVxcdGJvb2wgXFxcIklCTSB6MTQgWlIxIGFuZCB6MTRcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00MDktXFxuYXJjaC9zMzkwL0tjb25maWc6NDEwOmNvbmZpZyBNQVJDSF9aMTVcXG5hcmNoL3MzOTAvS2NvbmZpZy00MTEtXFx0Ym9vbCBcXFwiSUJNIHoxNVxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQxOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTk6Y29uZmlnIE1BUkNIX1oxNlxcbmFyY2gvczM5MC9LY29uZmlnLTQyMC1cXHRib29sIFxcXCJJQk0gejE2XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDI2LVxcbmFyY2gvczM5MC9LY29uZmlnOjQyNzpjb25maWcgTUFSQ0hfWjE3XFxuYXJjaC9zMzkwL0tjb25maWctNDI4LVxcdGJvb2wgXFxcIklCTSB6MTdcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz00MzU9ZW5kY2hvaWNlXFxuYXJjaC9zMzkwL0tjb25maWctNDM2LVxcbmFyY2gvczM5MC9LY29uZmlnOjQzNzpjb25maWcgTUFSQ0hfWjEwX1RVTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy00MzgtXFx0ZGVmX2Jvb2wgVFVORV9aMTAgfHwgTUFSQ0hfWjEwIFxcdTAwMjZcXHUwMDI2IFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQzOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NDA6Y29uZmlnIE1BUkNIX1oxOTZfVFVORVxcbmFyY2gvczM5MC9LY29uZmlnLTQ0MS1cXHRkZWZfYm9vbCBUVU5FX1oxOTYgfHwgTUFSQ0hfWjE5NiBcXHUwMDI2XFx1MDAyNiBUVU5FX0RFRkFVTFRcXG5hcmNoL3MzOTAvS2NvbmZpZy00NDItXFxuYXJjaC9zMzkwL0tjb25maWc6NDQzOmNvbmZpZyBNQVJDSF9aRUMxMl9UVU5FXFxuYXJjaC9zMzkwL0tjb25maWctNDQ0LVxcdGRlZl9ib29sIFRVTkVfWkVDMTIgfHwgTUFSQ0hfWkVDMTIgXFx1MDAyNlxcdTAwMjYgVFVORV9ERUZBVUxUXFxuYXJjaC9zMzkwL0tjb25maWctNDQ1LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ0Njpjb25maWcgTUFSQ0hfWjEzX1RVTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy00NDctXFx0ZGVmX2Jvb2wgVFVORV9aMTMgfHwgTUFSQ0hfWjEzIFxcdTAwMjZcXHUwMDI2IFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQ0OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NDk6Y29uZmlnIE1BUkNIX1oxNF9UVU5FXFxuYXJjaC9zMzkwL0tjb25maWctNDUwLVxcdGRlZl9ib29sIFRVTkVfWjE0IHx8IE1BUkNIX1oxNCBcXHUwMDI2XFx1MDAyNiBUVU5FX0RFRkFVTFRcXG5hcmNoL3MzOTAvS2NvbmZpZy00NTEtXFxuYXJjaC9zMzkwL0tjb25maWc6NDUyOmNvbmZpZyBNQVJDSF9aMTVfVFVORVxcbmFyY2gvczM5MC9LY29uZmlnLTQ1My1cXHRkZWZfYm9vbCBUVU5FX1oxNSB8fCBNQVJDSF9aMTUgXFx1MDAyNlxcdTAwMjYgVFVORV9ERUZBVUxUXFxuYXJjaC9zMzkwL0tjb25maWctNDU0LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ1NTpjb25maWcgTUFSQ0hfWjE2X1RVTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy00NTYtXFx0ZGVmX2Jvb2wgVFVORV9aMTYgfHwgTUFSQ0hfWjE2IFxcdTAwMjZcXHUwMDI2IFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQ1Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NTg6Y29uZmlnIE1BUkNIX1oxN19UVU5FXFxuYXJjaC9zMzkwL0tjb25maWctNDU5LVxcdGRlZl9ib29sIFRVTkVfWjE3IHx8IE1BUkNIX1oxNyBcXHUwMDI2XFx1MDAyNiBUVU5FX0RFRkFVTFRcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTQ2MT1jaG9pY2VcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ3MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NzI6Y29uZmlnIFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQ3My1cXHRib29sIFxcXCJEZWZhdWx0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDc3LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ3ODpjb25maWcgVFVORV9aMTBcXG5hcmNoL3MzOTAvS2NvbmZpZy00NzktXFx0Ym9vbCBcXFwiSUJNIFN5c3RlbSB6MTBcXFwiXFxuYXJjaC9zMzkwL0tjb25maWctNDgwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQ4MTpjb25maWcgVFVORV9aMTk2XFxuYXJjaC9zMzkwL0tjb25maWctNDgyLVxcdGJvb2wgXFxcIklCTSB6RW50ZXJwcmlzZSAxMTQgYW5kIDE5NlxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ4NC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODU6Y29uZmlnIFRVTkVfWkVDMTJcXG5hcmNoL3MzOTAvS2NvbmZpZy00ODYtXFx0Ym9vbCBcXFwiSUJNIHpCQzEyIGFuZCB6RUMxMlxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ4OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODk6Y29uZmlnIFRVTkVfWjEzXFxuYXJjaC9zMzkwL0tjb25maWctNDkwLVxcdGJvb2wgXFxcIklCTSB6MTNzIGFuZCB6MTNcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00OTItXFxuYXJjaC9zMzkwL0tjb25maWc6NDkzOmNvbmZpZyBUVU5FX1oxNFxcbmFyY2gvczM5MC9LY29uZmlnLTQ5NC1cXHRib29sIFxcXCJJQk0gejE0IFpSMSBhbmQgejE0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDk2LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ5Nzpjb25maWcgVFVORV9aMTVcXG5hcmNoL3MzOTAvS2NvbmZpZy00OTgtXFx0Ym9vbCBcXFwiSUJNIHoxNVxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTUwMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1MDE6Y29uZmlnIFRVTkVfWjE2XFxuYXJjaC9zMzkwL0tjb25maWctNTAyLVxcdGJvb2wgXFxcIklCTSB6MTZcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01MDQtXFxuYXJjaC9zMzkwL0tjb25maWc6NTA1OmNvbmZpZyBUVU5FX1oxN1xcbmFyY2gvczM5MC9LY29uZmlnLTUwNi1cXHRib29sIFxcXCJJQk0gejE3XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NTA5PWVuZGNob2ljZVxcbmFyY2gvczM5MC9LY29uZmlnLTUxMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1MTE6Y29uZmlnIDY0QklUXFxuYXJjaC9zMzkwL0tjb25maWctNTEyLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy01MTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NTE0OmNvbmZpZyBDT01NQU5EX0xJTkVfU0laRVxcbmFyY2gvczM5MC9LY29uZmlnLTUxNS1cXHRpbnQgXFxcIk1heGltdW0gc2l6ZSBvZiBrZXJuZWwgY29tbWFuZCBsaW5lXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTIxLVxcbmFyY2gvczM5MC9LY29uZmlnOjUyMjpjb25maWcgU01QXFxuYXJjaC9zMzkwL0tjb25maWctNTIzLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy01MjQtXFxuYXJjaC9zMzkwL0tjb25maWc6NTI1OmNvbmZpZyBOUl9DUFVTXFxuYXJjaC9zMzkwL0tjb25maWctNTI2LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi01MTIpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTM2LVxcbmFyY2gvczM5MC9LY29uZmlnOjUzNzpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3MzOTAvS2NvbmZpZy01MzgtXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTUzOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1NDA6Y29uZmlnIE5VTUFcXG5hcmNoL3MzOTAvS2NvbmZpZy01NDEtXFx0Ym9vbCBcXFwiTlVNQSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTQ4LVxcbmFyY2gvczM5MC9LY29uZmlnOjU0OTpjb25maWcgTk9ERVNfU0hJRlRcXG5hcmNoL3MzOTAvS2NvbmZpZy01NTAtXFx0aW50XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NTU0OmNvbmZpZyBTQ0hFRF9UT1BPTE9HWVxcbmFyY2gvczM5MC9LY29uZmlnLTU1NS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NjUtXFxuYXJjaC9zMzkwL0tjb25maWc6NTY2OmNvbmZpZyBTQ0hFRF9UT1BPTE9HWV9WRVJUSUNBTFxcbmFyY2gvczM5MC9LY29uZmlnLTU2Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NzMtXFxuYXJjaC9zMzkwL0tjb25maWc6NTc0OmNvbmZpZyBISVBFUkRJU1BBVENIX09OXFxuYXJjaC9zMzkwL0tjb25maWctNTc1LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTU4Nj1zb3VyY2UgXFxcImtlcm5lbC9LY29uZmlnLmh6XFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTU4Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1ODg6Y29uZmlnIENFUlRfU1RPUkVcXG5hcmNoL3MzOTAvS2NvbmZpZy01ODktXFx0Ym9vbCBcXFwiR2V0IHVzZXIgY2VydGlmaWNhdGVzIHZpYSBESUFHMzIwXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTk4LVxcbmFyY2gvczM5MC9LY29uZmlnOjU5OTpjb25maWcgS0VSTkVMX05PQlBcXG5hcmNoL3MzOTAvS2NvbmZpZy02MDAtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjE1LVxcbmFyY2gvczM5MC9LY29uZmlnOjYxNjpjb25maWcgRVhQT0xJTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy02MTctXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjI4LVxcbmFyY2gvczM5MC9LY29uZmlnOjYyOTpjb25maWcgRVhQT0xJTkVfRVhURVJOXFxuYXJjaC9zMzkwL0tjb25maWctNjMwLVxcdGRlZl9ib29sIEVYUE9MSU5FIFxcdTAwMjZcXHUwMDI2IENDX0lTX0dDQyBcXHUwMDI2XFx1MDAyNiBHQ0NfVkVSU0lPTiBcXHUwMDNlPSAxMTAyMDAgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NjM4PWNob2ljZVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjQyLVxcbmFyY2gvczM5MC9LY29uZmlnOjY0Mzpjb25maWcgRVhQT0xJTkVfT0ZGXFxuYXJjaC9zMzkwL0tjb25maWctNjQ0LVxcdGJvb2wgXFxcInNwZWN0cmVfdjI9b2ZmXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTY0NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo2NDY6Y29uZmlnIEVYUE9MSU5FX0FVVE9cXG5hcmNoL3MzOTAvS2NvbmZpZy02NDctXFx0Ym9vbCBcXFwic3BlY3RyZV92Mj1hdXRvXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTY0OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo2NDk6Y29uZmlnIEVYUE9MSU5FX0ZVTExcXG5hcmNoL3MzOTAvS2NvbmZpZy02NTAtXFx0Ym9vbCBcXFwic3BlY3RyZV92Mj1vblxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTY1Mj1lbmRjaG9pY2VcXG5hcmNoL3MzOTAvS2NvbmZpZy02NTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NjU0OmNvbmZpZyBSRUxPQ0FUQUJMRVxcbmFyY2gvczM5MC9LY29uZmlnLTY1NS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy02NjQtXFxuYXJjaC9zMzkwL0tjb25maWc6NjY1OmNvbmZpZyBSQU5ET01JWkVfQkFTRVxcbmFyY2gvczM5MC9LY29uZmlnLTY2Ni1cXHRib29sIFxcXCJSYW5kb21pemUgdGhlIGFkZHJlc3Mgb2YgdGhlIGtlcm5lbCBpbWFnZSAoS0FTTFIpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjczLVxcbmFyY2gvczM5MC9LY29uZmlnOjY3NDpjb25maWcgUkFORE9NSVpFX0lERU5USVRZX0JBU0VcXG5hcmNoL3MzOTAvS2NvbmZpZy02NzUtXFx0Ym9vbCBcXFwiUmFuZG9taXplIHRoZSBhZGRyZXNzIG9mIHRoZSBpZGVudGl0eSBtYXBwaW5nIGJhc2VcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy02ODYtXFxuYXJjaC9zMzkwL0tjb25maWc6Njg3OmNvbmZpZyBLRVJORUxfSU1BR0VfQkFTRVxcbmFyY2gvczM5MC9LY29uZmlnLTY4OC1cXHRoZXggXFxcIktlcm5lbCBpbWFnZSBiYXNlIGFkZHJlc3NcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz03MDg9bWVudSBcXFwiTWVtb3J5IHNldHVwXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTcwOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3MTA6Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbmFyY2gvczM5MC9LY29uZmlnLTcxMS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03MTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NzE0OmNvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUXFxuYXJjaC9zMzkwL0tjb25maWctNzE1LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy03MTYtXFxuYXJjaC9zMzkwL0tjb25maWc6NzE3OmNvbmZpZyBJTExFR0FMX1BPSU5URVJfVkFMVUVcXG5hcmNoL3MzOTAvS2NvbmZpZy03MTgtXFx0aGV4XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03MjAtXFxuYXJjaC9zMzkwL0tjb25maWc6NzIxOmNvbmZpZyBNQVhfUEhZU01FTV9CSVRTXFxuYXJjaC9zMzkwL0tjb25maWctNzIyLVxcdGludCBcXFwiTWF4aW11bSBzaXplIG9mIHN1cHBvcnRlZCBwaHlzaWNhbCBtZW1vcnkgaW4gYml0cyAoNDItNTMpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzMzPW1lbnUgXFxcIkkvTyBzdWJzeXN0ZW1cXFwiXFxuYXJjaC9zMzkwL0tjb25maWctNzM0LVxcbmFyY2gvczM5MC9LY29uZmlnOjczNTpjb25maWcgUURJT1xcbmFyY2gvczM5MC9LY29uZmlnLTczNi1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzQ3PWlmIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnLTc0OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3NDk6Y29uZmlnIFBDSV9OUl9GVU5DVElPTlNcXG5hcmNoL3MzOTAvS2NvbmZpZy03NTAtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBQQ0kgZnVuY3Rpb25zICgxLTQwOTYpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU3PWVuZGlmICMgUENJXFxuYXJjaC9zMzkwL0tjb25maWctNzU4LVxcbmFyY2gvczM5MC9LY29uZmlnOjc1OTpjb25maWcgSEFTX0lPTUVNXFxuYXJjaC9zMzkwL0tjb25maWctNzYwLVxcdGRlZl9ib29sIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnLTc2MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3NjI6Y29uZmlnIENIU0NfU0NIXFxuYXJjaC9zMzkwL0tjb25maWctNzYzLVxcdGRlZl90cmlzdGF0ZSBtXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03NzgtXFxuYXJjaC9zMzkwL0tjb25maWc6Nzc5OmNvbmZpZyBTQ01fQlVTXFxuYXJjaC9zMzkwL0tjb25maWctNzgwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc4NC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3ODU6Y29uZmlnIEVBRE1fU0NIXFxuYXJjaC9zMzkwL0tjb25maWctNzg2LVxcdGRlZl90cmlzdGF0ZSBtXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03OTUtXFxuYXJjaC9zMzkwL0tjb25maWc6Nzk2OmNvbmZpZyBBUFxcbmFyY2gvczM5MC9LY29uZmlnLTc5Ny1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODA4LVxcbmFyY2gvczM5MC9LY29uZmlnOjgwOTpjb25maWcgQVBfREVCVUdcXG5hcmNoL3MzOTAvS2NvbmZpZy04MTAtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODIyLVxcbmFyY2gvczM5MC9LY29uZmlnOjgyMzpjb25maWcgVkZJT19DQ1dcXG5hcmNoL3MzOTAvS2NvbmZpZy04MjQtXFx0ZGVmX3RyaXN0YXRlIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXFx0ZGVmX3RyaXN0YXRlIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTg0OD1lbmRtZW51XFxuYXJjaC9zMzkwL0tjb25maWctODQ5LVxcbmFyY2gvczM5MC9LY29uZmlnOjg1MDpjb25maWcgQ0NXXFxuYXJjaC9zMzkwL0tjb25maWctODUxLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy04NTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODUzOmNvbmZpZyBIQVZFX1BORVRJRFxcbmFyY2gvczM5MC9LY29uZmlnLTg1NC1cXHR0cmlzdGF0ZVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9ODU3PW1lbnUgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTg1OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4NTk6Y29uZmlnIFBGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTg2MC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NzEtXFxuYXJjaC9zMzkwL0tjb25maWc6ODcyOmNvbmZpZyBDTU1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NzMtXFx0ZGVmX3RyaXN0YXRlIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg4NC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4ODU6Y29uZmlnIENNTV9JVUNWXFxuYXJjaC9zMzkwL0tjb25maWctODg2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg5Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4OTM6Y29uZmlnIEFQUExEQVRBX0JBU0VcXG5hcmNoL3MzOTAvS2NvbmZpZy04OTQtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTA4LVxcbmFyY2gvczM5MC9LY29uZmlnOjkwOTpjb25maWcgQVBQTERBVEFfTUVNXFxuYXJjaC9zMzkwL0tjb25maWctOTEwLVxcdGRlZl90cmlzdGF0ZSBtXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy05MjUtXFxuYXJjaC9zMzkwL0tjb25maWc6OTI2OmNvbmZpZyBBUFBMREFUQV9PU1xcbmFyY2gvczM5MC9LY29uZmlnLTkyNy1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTQwLVxcbmFyY2gvczM5MC9LY29uZmlnOjk0MTpjb25maWcgQVBQTERBVEFfTkVUX1NVTVxcbmFyY2gvczM5MC9LY29uZmlnLTk0Mi1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTU2LVxcbmFyY2gvczM5MC9LY29uZmlnOjk1Nzpjb25maWcgUzM5MF9IWVBGU1xcbmFyY2gvczM5MC9LY29uZmlnLTk1OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NjMtXFxuYXJjaC9zMzkwL0tjb25maWc6OTY0OmNvbmZpZyBTMzkwX0hZUEZTX0ZTXFxuYXJjaC9zMzkwL0tjb25maWctOTY1LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTk3Nj1zb3VyY2UgXFxcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAvS2NvbmZpZy05NzctXFxuYXJjaC9zMzkwL0tjb25maWc6OTc4OmNvbmZpZyBTMzkwX0dVRVNUXFxuYXJjaC9zMzkwL0tjb25maWctOTc5LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTk5MT1lbmRtZW51XFxuYXJjaC9zMzkwL0tjb25maWctOTkyLVxcbmFyY2gvczM5MC9LY29uZmlnOjk5Mzpjb25maWcgUzM5MF9NT0RVTEVTX1NBTklUWV9URVNUX0hFTFBFUlNcXG5hcmNoL3MzOTAvS2NvbmZpZy05OTQtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9OTk2PW1lbnUgXFxcIlNlbGZ0ZXN0c1xcXCJcXG5hcmNoL3MzOTAvS2NvbmZpZy05OTctXFxuYXJjaC9zMzkwL0tjb25maWc6OTk4OmNvbmZpZyBTMzkwX1VOV0lORF9TRUxGVEVTVFxcbmFyY2gvczM5MC9LY29uZmlnLTk5OS1cXHRkZWZfdHJpc3RhdGUgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDA4LVxcbmFyY2gvczM5MC9LY29uZmlnOjEwMDk6Y29uZmlnIFMzOTBfS1BST0JFU19TQU5JVFlfVEVTVFxcbmFyY2gvczM5MC9LY29uZmlnLTEwMTAtXFx0ZGVmX3RyaXN0YXRlIEtVTklUX0FMTF9URVNUU1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMTAyMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDIxOmNvbmZpZyBTMzkwX01PRFVMRVNfU0FOSVRZX1RFU1RcXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDIyLVxcdGRlZl90cmlzdGF0ZSBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MjIuNjE1MzY3MzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODgzOTA3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS1ZNIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGVyZSBpc24ndCBhIGRlZGljYXRlZCwgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFBWIChwYXJhLXZpcnR1YWxpemF0aW9uKSBvbiBTMzkwIEtWTS4gSXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgaW1wbGljaXRseSBwYXJ0IG9mIEtWTSBpdHNlbGYuIFRoZXJlZm9yZSwgbG9naWNhbGx5LCBgS1ZNYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gd29ycnkgYWJvdXQuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYEtWTWAgaXMgYSB0cmlzdGF0ZSwgaXNuJ3QgaXQ/IFNvLCBpdCBjb3VsZCBiZSBidWlsdCBhcyBhIG1vZHVsZSAoYG1gKS4gQnV0IGNvbnNpZGVyaW5nIGhvdyBzeXprYWxsZXIgZ2VuZXJhbGx5IGhhbmRsZXMgdGhpbmdzLCBpdCdzIGxpa2VseSBnb2luZyB0byBiZSBidWlsdCBhcyBlaXRoZXIgJ3knIG9yICdtJy4gIEkgd2lsbCBqdXN0IGxpc3QgYEtWTWAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCBmdW5jdGlvbi4gQWgsIHllcywgZm91bmQgaXQgaW4gYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBOb3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyBpdCBleHBvcnRlZD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGtub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTgyLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjI2LjQwMzc2MjIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUxMTc2MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qa3ZtX3MzOTBfcHZfc2NscF9raWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoyNi40NTAyODA5MDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwNDI1NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBUaGF0IEZ1bmN0aW9uIGluIEtWTSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgZnVuY3Rpb24uIFRoZSBjb2RlIHNheXMgaXQncyAqbm90KiBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgYnV0IGl0ICppcyogbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gYGt2bS1zMzkwLmhgLiBObyBwcm9ibGVtLCBzeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZnV6eiBub24tc3RhdGljIGZ1bmN0aW9ucywgc28gdGhhdCdzIG5vdCBhIGJsb2NrZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluLlxuXG5XYWl0IGEgc2Vjb25kLi4uSSBzZWUgaXQgbm93LiBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCBpcyBpbnZva2VkIGJ5IGBoYW5kbGVfcHZfc2NscGAuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgaGFuZGxlX3B2X25vdGlmaWNhdGlvbmAsIHdoaWNoICppdHNlbGYqIGlzIGNhbGxlZCBmcm9tIGBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHRgLiBBbmQgZmluYWxseSwgKnRoYXQqIGZ1bmN0aW9uLCBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YCwgaXMgY2FsbGVkIGZyb20gYHZjcHVfcG9zdF9ydW5gLiBCaW5nby4gU28sIGVzc2VudGlhbGx5LCBpdCdzIHJlYWNoYWJsZSBmcm9tIHRoZSBjb3JlIEtWTSBydW4gbG9vcCwgaXQgaXMgcGFydCBvZiB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gdGhlIG1haW4gS1ZNIGV4ZWN1dGlvbiBwYXRoLlxuXG5Ob3csIGxldCdzIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjozMC40NTQ1Mzg2MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NTg4MjE2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkaXN0cmlidXRlX2Zsb2F0X2lycXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjMwLjUyOTEzNDYwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg3NDQ5NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb250ZXh0IGlzIGR5bmFtaWMg4oCTIG5vdCBhIGZpeGVkIHNuYXBzaG90LiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjaGVja2luZyB0aGUgZnVuY3Rpb24gYGt2bV9zMzkwX2luamVjdF92bWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3Mgbm9uLXN0YXRpYyBhbmQgaG93IGRvZXMgaXQgcGxheSBpbnRvIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbm9uLXN0YXRpYyBlbGVtZW50IGVmZmVjdHMgaG93IHRoZSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBmdW5jdGlvbiBmdW5jdGlvbnMsIGFuZCBpdHMgZWZmZWN0IG9uIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hhdCB2YXJpYWJsZXMgbWF5IGJlIGVmZmVjdGluZyB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA0NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjMzLjIxNjU4NzM4NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1Mjc5MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmt2bV9zMzkwX2luamVjdF92bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MzMuMjY2MTI1OTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTcxNTE5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9zMzkwIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0vczM5MCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgc3ltYm9sIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUuIEkgc2VlIGEgZmV3IGtleSBmdW5jdGlvbnMgdGhhdCBhcmVuJ3Qgc3RhdGljIGJ1dCBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZS4gQWhhLCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgZmlsZXMgaW4gdGhlIGBrdm1gIG1vZHVsZS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFdlIGRvbid0IG5lZWQgYEVYUE9SVF9TWU1CT0xgIGZvciBpbnRlci1maWxlIG1vZHVsZSB1c2FnZS4gSXQncyBvbmx5IG5lZWRlZCBpZiBvdGhlciBtb2R1bGVzIGNvbnN1bWUgdGhlc2Ugc3ltYm9scy5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AsIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYC5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHJlbGF0ZWQgdG8gdGhlc2Ugc3ltYm9scy5cblxuQWxyaWdodCwgYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGB2Y3B1X2ludGVydmVudGlvbl9raWNrYCwgYGtpY2tfY3B1X2lycWAsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYW5kIGBfX2luamVjdF92bWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQncyBnb29kLlxuXG5TbywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFnYWluIGFyZTogYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgLCBhbmQgYGt2bV9zMzkwX2luamVjdF92bWAuIChBbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpc24ndCAqZGlyZWN0bHkqIG1vZGlmaWVkLCBgX19pbmplY3Rfdm1gIHdoaWNoIGl0IHdyYXBzIGlzLilcblxuV2FpdCwgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRob3VnaHQuIGBrdm1fczM5MF9pbmplY3Rfdm1gICpjYWxscyogYF9faW5qZWN0X3ZtYC4gU28sIGEgY2hhbmdlIHRvIGBfX2luamVjdF92bWAgYWZmZWN0cyB0aGUgYmVoYXZpb3Igb2YgYGt2bV9zMzkwX2luamVjdF92bWAsIGV2ZW4gdGhvdWdoIHRoZSBsYXR0ZXIgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgaXMgY29ycmVjdCBhbmQgbm90IHNvbWUgb2JmdXNjYXRpb24uIEkgc2hvdWxkIGdvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI3OSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjozOS4yODMyODE1OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzg0MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBrdm1fczM5MF9pbmplY3Rfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwNjg9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEwMi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMDM6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTA0LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjM5LjMyOTY3MTM5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4NzIyMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpZWQqKlxuXG5Pa2F5LCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBsb29rcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQuIEJ1dCBob2xkIG9uLi4uIEkgcmVtZW1iZXIgbm93LCB0aGF0J3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB3aGVuIHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBpb2N0bCBpcyB1c2VkLiBCaW5nbyEgVGhhdCBtZWFucyBpdCdzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UuIFBlcmZlY3QhIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgY2FuIGJ5cGFzcyBhIGxvdCBvZiB0aGUgdXN1YWwgY29tcGxleGl0aWVzIGJ5IGdvaW5nIHN0cmFpZ2h0IHRocm91Z2ggdGhlIGlvY3RsIGludGVyZmFjZS4gTm93LCBsZXQncyBkaXZlIGludG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCB0byB1bmRlcnN0YW5kIHRoZSBzZXR1cC4gSSBuZWVkIHRvIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCBleHBlY3RzIGFuZCBob3cgdGhhdCBpbmplY3Rpb24gbWVjaGFuaXNtIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzEyLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjQyLjk3ODM5NzUxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1ODYwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1MzOTBfSU5URVJSVVBUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cXHRzd2l0Y2ggKGlvY3RsKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5MzY6XFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNy1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ0Mz1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDU4LVxcdH1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQ1OTpcXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDYwLVxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6NDMuMDI2OTkzNTU3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMjgxMTE0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTS9zMzkweCBJbnRlcnJ1cHQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgYEtWTV9TMzkwX0lOVEVSUlVQVGAgaW9jdGwsIGFzIEkgc3VzcGVjdGVkLCAqZG9lcyogaW5kZWVkIGNhbGwgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYGt2bV9zMzkwX2luamVjdF92bWAgYXMgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZnVuY3Rpb24gZm9yIGZ1enppbmcgZWZmb3J0cy4gSXTigJlzIGEgY29yZSBlbnRyeSBwb2ludC5cblxuTGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJ3ZlIGdvdCBzbyBmYXI6XG5cbiogICAqKkZ1enppbmcgUHJpb3JpdHk6KiogSGlnaCBwcmlvcml0eSAtIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZ2l2ZW4gdGhlIGNoYW5nZXMuXG4qICAgKipLZXkgRm9jdXMgU3ltYm9sczoqKiBUaGUgcGF0Y2ggcmVhbGx5IGhpZ2hsaWdodHMgdGhlc2U6XG4gICAgKiAgIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgOiBUaGlzIGlzIGNsZWFybHkgaW52b2x2ZWQgaW4gdGhlICpuZXcqIGxvZ2ljLCB3aGljaCBtZWFucyBhbnkgc3VidGxlIGNoYW5nZXMgaW4gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBoYW5kbGluZyBuZWVkIHRvIGJlIGNoZWNrZWQuXG4gICAgKiAgIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgOiBUaGlzIGZ1bmN0aW9uIGlzIHRpZWQgdG8ga2lja2luZyBWQ1BVcy4gSSBiZXQgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgaW50ZXJydXB0cyBmb3JjZSBleGVjdXRpb24gdG8gbW92ZS5cbiAgICAqICAgYGt2bV9zMzkwX2luamVjdF92bWA6IFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRpcmVjdCBpbmplY3Rpb24gcG9pbnQuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBvdXIgZnV6emluZyBzdHJhdGVneS4gV2UgbmVlZCB0byBoYW1tZXIgdGhpcy5cbiogICAqKkVuYWJsZWQgQ29uZmlndXJhdGlvbjoqKiBUaGUgYEtWTWAgY29uZmlnIGlzIHJlcXVpcmVkLiBOb3QgYSBzdXJwcmlzZSwgYnV0IGltcG9ydGFudCB0byBub3RlLlxuKiAgICoqUmVhc29uaW5nIFN1bW1hcnk6KiogVGhpcyBwYXRjaCBtb2RpZmllcyBob3cgZmxvYXRpbmcgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aGluIEtWTSBvbiBzMzkweC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBsb2dpYyBmb3IgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBhY3Jvc3MgVkNQVXMuIFRoZSBwYXRjaCBpcyB0aWVkIHRvIGludGVycnVwdCBpbmplY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIE1vcmVvdmVyLCB0aGVzZSBjaGFuZ2VzIGltcGFjdCBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzIGFuZCBWQ1BVIGV4ZWN1dGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgdGhhdCBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aHMgYXJlIGJlaW5nIHVwZGF0ZWQgb3IgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDA5LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjo0OS4yNTUxMDg0OTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ4MTgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9wdl9zY2xwX2tpY2tcIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92bVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIG9uIHMzOTB4LiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIElSUXMgYWNyb3NzIFZDUFVzIGFuZCB0byBraWNrIFZDUFVzIHdoZW4gc3BlY2lmaWMgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TMzkwX0lOVEVSUlVQVCkgYW5kIGR1cmluZyBWQ1BVIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaXN0cmlidXRlX2Zsb2F0X2lycXNcIixcbiAgICBcImt2bV9zMzkwX3B2X3NjbHBfa2lja1wiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gb24gczM5MHguIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgSVJRcyBhY3Jvc3MgVkNQVXMgYW5kIHRvIGtpY2sgVkNQVXMgd2hlbiBzcGVjaWZpYyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1MzOTBfSU5URVJSVVBUKSBhbmQgZHVyaW5nIFZDUFUgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjo0OS4zMzY1OTc2ODNaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjIzMDI1MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6NDkuMzM3MTUzMzYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5NjIyNDY0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gZm9yIHMzOTAsIGludHJvZHVjaW5nIGEgbmV3IHN0YXRpc3RpYyBgaW5qZWN0X3JlZGlzdGAgYW5kIGNoYW5naW5nIGhvdyB2Q1BVcyBhcmUga2lja2VkIHdoZW4gaW50ZXJydXB0cyBhcmUgcGVuZGluZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBsb2NhbCB2YXJpYWJsZSBgcGFybWAgaW4gYF9faW5qZWN0X3ZtKClgLCB3aGljaCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgZm9yIGNlcnRhaW4gaW50ZXJydXB0IHR5cGVzIChlLmcuLCBgS1ZNX1MzOTBfTUNIS2ApLiBIb3dldmVyLCB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIGFuZCBzdWJzZXF1ZW50bHkgdG8gYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCwgd2hlcmUgaXQgaXMgY29tcGxldGVseSBpZ25vcmVkIGZvciB0aG9zZSBzcGVjaWZpYyBpbnRlcnJ1cHQgdHlwZXMuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgc2hhZG93IGxldmVsIGFuZCBvbmx5IHJlcG9ydHMgYW4gZXJyb3IgaWYgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdXNlZCBpbiBhIGJyYW5jaCwgYXMgYSBtZW1vcnkgYWRkcmVzcywgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gU2luY2UgYHBhcm1gIGlzIG5ldmVyIGV2YWx1YXRlZCBpbiB0aGVzZSB3YXlzIHdoZW4gdW5pbml0aWFsaXplZCwgaXQgd2lsbCBub3QgdHJpZ2dlciBhIEtNU0FOIHJlcG9ydC4gT3RoZXIgY2hhbmdlcyBpbnZvbHZlIGJhc2ljIGNvbnRyb2wgZmxvdywgdkNQVSB3YWtldXBzLCBhbmQgYSBuZXcgZmllbGQgaW4gYHN0cnVjdCBrdm1fdm1fc3RhdGAgKHdoaWNoIGlzIHplcm8tYWxsb2NhdGVkKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBwYXJzaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA4ODNjZmEwNmU3N2JlNjFiNzlhNjA4NTQ5MTY3YmQxZWJkMmQ1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDIwOjAxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuK1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXG5pbmRleCAxOTgwZGY2MWVmMzA0Li5lMWRlM2Y0NzFmZmQwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuQEAgLTUzNiw2ICs1MzYsMTUgQEAgc3RhdGljIGludCBoYW5kbGVfcHZfc2NscChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzZXRfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCBcdTAwMjZmaS1cdTAwM2VwZW5kaW5nX2lycXMpO1xuIFx0Y2xlYXJfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCBcdTAwMjZmaS1cdTAwM2VtYXNrZWRfaXJxcyk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdC8qXG4rXHQgKiBXZSBtaXNzZWQgdGhlIGZsb2F0aW5nIElSUSBraWNrIHNpbmNlIHdlIGNhbiBvbmx5IGluamVjdFxuK1x0ICogd2hlbiB3ZSBlbmQgdXAgaGVyZSBhbmQgbm90IHdoZW4gdGhlIGlycSB3YXMgaW5qZWN0ZWQgdmlhXG4rXHQgKiB0aGUgRkxJQy5cbitcdCAqXG4rXHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGNsZWFyZWQgdGhlIG1hc2tpbmcgd2UgY2FuIGtpY2sgY3B1cy5cbitcdCAqL1xuK1x0a3ZtX3MzOTBfcHZfc2NscF9raWNrKHZjcHUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li4xZWU5YWIyNTA1MDQyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gYWN0aXZlX21hc2s7XG4gfVxuIFxuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuK1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpXG4rXHRcdHJldHVybjtcbitcbitcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcbitcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbitcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXG4rXHQgKi9cbitcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbitcdC8qIFdlbGwgbm9ib2R5J3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqL1xuK1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRvIHtcbitcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuK1x0XHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcbitcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XG4rXHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcbitcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xuQEAgLTE5MTUsNDkgKzE5NDYsMTI5IEBAIHN0YXRpYyBpbnQgX19pbmplY3RfaW8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2sodTY0IHR5cGUsIGludCBpc2MpXG4re1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIEtWTV9TMzkwX01DSEs6XG4rXHRcdC8qIE9ubHkgcmVwcmVzc2libGUgbWFjaGluZSBjaGVja3MgYXJlIGZsb2F0aW5nICovXG4rXHRcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1ZJUlRJTyk7XG4rXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8XG4rXHRcdCAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4rXHRcdHJldHVybiBCSVQoSVJRX1BFTkRfUEZBVUxUX0RPTkUpO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbitcdFx0cmV0dXJuIGlzY190b19pcnFfdHlwZShpc2MpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuIC8qXG4tICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuKyAqIFNldHVwIGludGVydmVudGlvbiBtYXNrcyB0byBjYXRjaCBydW5uaW5nIHZjcHVzIHRoYXQgaG9wZWZ1bGx5IG9wZW5cbisgKiB0aGVpciBtYXNrcyBzb29uaXNoIGFuZCBraWNrIHNsZWVwaW5nIHZjcHVzIHRvIG1vdGl2YXRlIHRoZW0gdG9cbisgKiB0YWtlIElSUXMuXG4gICovXG4tc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlKVxuK3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSlcbit7XG4rXHQvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi9cbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbitcdFx0aWYgKCEodHlwZSBcdTAwMjYgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQub3JpZ2luKSB8fFxuK1x0XHQgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSlcbitcdFx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9JT19JTlQpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VYVF9JTlQpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKHZjcHUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBraWNrX2NwdV9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbiBcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwO1xuK1x0dTY0IGlycV9wZW5kX21hc2s7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbiBcdGlmICghb25saW5lX3ZjcHVzKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpcnFfcGVuZF9tYXNrID0gaW50aV90b19pcnFfcGVuZF9tYXNrKHR5cGUsIHBhcm0pO1xuIFx0Zm9yIChzaWdjcHUgPSBrdm0tXHUwMDNlYXJjaC5mbG9hdF9pbnQubGFzdF9zbGVlcF9jcHU7IDsgc2lnY3B1KyspIHtcbiBcdFx0c2lnY3B1ICU9IG9ubGluZV92Y3B1cztcbiBcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuLVx0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkpXG4rXHRcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpIFx1MDAyNiBpcnFfcGVuZF9tYXNrKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHQvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqL1xuLVx0XHRpZiAobnJfdHJpZXMrKyBcdTAwM2U9IG9ubGluZV92Y3B1cylcbi1cdFx0XHRyZXR1cm47XG4rXHRcdGlmIChucl90cmllcysrIFx1MDAzZT0gb25saW5lX3ZjcHVzICogMikge1xuK1x0XHRcdGRzdF92Y3B1ID0gTlVMTDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFxuLVx0LyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovXG4tXHRzd2l0Y2ggKHR5cGUpIHtcbi1cdGNhc2UgS1ZNX1MzOTBfTUNISzpcbi1cdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX1NUT1BfSU5UKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuLVx0XHRpZiAoISh0eXBlIFx1MDAyNiBLVk1fUzM5MF9JTlRfSU9fQUlfTUFTSyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAga3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQub3JpZ2luKSB8fFxuLVx0XHQgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZShkc3RfdmNwdSkpXG4tXHRcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX0lPX0lOVCk7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX0VYVF9JTlQpO1xuLVx0XHRicmVhaztcbitcdC8qIE5vYm9keSB3YXMgZW5hYmxlZCwgdGltZSB0byB3YWtlIGFsbCBvZiB0aGVtICovXG4rXHRpZiAoIWRzdF92Y3B1KSB7XG4rXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIGRzdF92Y3B1LCBrdm0pXG4rXHRcdFx0dmNwdV9pbnRlcnZlbnRpb25fa2ljayhkc3RfdmNwdSwgdHlwZSk7XG4rXHRcdHJldHVybjtcbiBcdH1cbi1cdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTtcbitcbitcdHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpO1xuK31cbitcbit2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIFRoZSBjcHUgdGhhdCBjYWxsZWQgc2NscCBsaWtlbHkgd2lsbCBhbHNvIHRha2UgdGhlIElSUSwgbm9cbitcdCAqIG5lZWQgdG8ga2ljayBhbnlvbmUuXG4rXHQgKi9cbitcdGlmIChsaWtlbHkoZGVsaXZlcmFibGVfaXJxcyh2Y3B1KSBcdTAwMjYgSVJRX1BFTkRfRVhUX1NFUlZJQ0UpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogRm9yIHRoZSBvdGhlciBjYXNlcyB3ZSBtaWdodCBoYXZlIHNsZWVwaW5nIGNwdXMgd2l0aCBvcGVuXG4rXHQgKiBtYXNrcy4gVGltZSB0byBmaW5kIGFuZCBraWNrIHRoZW0uXG4rXHQgKi9cbitcdGtpY2tfY3B1X2lycSh2Y3B1LVx1MDAzZWt2bSwgS1ZNX1MzOTBfSU5UX1NFUlZJQ0UsIC0xKTtcbit9XG4rXG4rLypcbisgKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuXG4rICovXG4rc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSlcbit7XG4rXHRpbnQgcHJvdDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1x0cHJvdCA9IGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZChrdm0pO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdC8qXG4rXHQgKiBObyBuZWVkIHRvIGtpY2sgb24gbm9uLWV2IHNlcnZpY2UgSVJRcyBmb3IgUFYgVk1zLCB3ZSdyZVxuK1x0ICogbm90IGFsbG93ZWQgdG8gaW5qZWN0IGFueXdheS4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc2NscFxuK1x0ICogaW5zdHJ1Y3Rpb24gbm90aWZpY2F0aW9uIEFGVEVSIHJlLWVudHJ5IG9mIHRoZSB2Y3B1IHRoYXRcbitcdCAqIGhhbmRsZWQgdGhlIGluc3RydWN0aW9uIGludGVyY2VwdC5cbitcdCAqL1xuK1x0aWYgKHByb3QgXHUwMDI2XHUwMDI2IHR5cGUgPT0gS1ZNX1MzOTBfSU5UX1NFUlZJQ0UgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShwYXJtIFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkcpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRraWNrX2NwdV9pcnEoa3ZtLCB0eXBlLCBwYXJtKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiB7XG4gXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVx1MDAzZXR5cGUpO1xuK1x0dTY0IHBhcm07XG4gXHRpbnQgcmM7XG4gXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbkBAIC0xOTY4LDEyICsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cGFybSA9IGludGktXHUwMDNlZXh0LmV4dF9wYXJhbXMgXHUwMDI2IFNDQ0JfRVZFTlRfUEVORElORztcbiBcdFx0cmMgPSBfX2luamVjdF9zZXJ2aWNlKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4gXHRcdHJjID0gX19pbmplY3RfcGZhdWx0X2RvbmUoa3ZtLCBpbnRpKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuK1x0XHQvKiBHcmFiIGlzYyBoZXJlIHNpbmNlIF9faW5qZWN0X2lvKCkgbWlnaHQgZnJlZSBpbnRpICovXG4rXHRcdHBhcm0gPSBpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktXHUwMDNlaW8uaW9faW50X3dvcmQpKTtcbiBcdFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTk4Miw3ICsyMDk2LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuLVx0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUpO1xuK1x0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUsIHBhcm0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggNTE4YTY5YzU1ZTg1Yy4uZDZkNDY2ODhkOTgwOCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtODYsNiArODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHtcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSxcbitcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0ge1xuQEAgLTQ1NzIsNiArNDU3Myw4IEBAIHN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcbiBcdFx0aWYgKHJjIHx8IGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LVx1MDAzZWt2bSk7XG4gXHR9XG4gXG4gXHRyYyA9IGt2bV9zMzkwX2hhbmRsZV9yZXF1ZXN0cyh2Y3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbmluZGV4IDZkMjg0MmZiNzFhMzMuLjcxMTVhOGY1YjE4ODIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaFxuQEAgLTM3NSw2ICszNzUsOCBAQCBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9zMzkwX2NsZWFyX2xvY2FsX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbit2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjQ5LjMzNzE1NDA3NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYyMjQzNjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIHMzOTAgS1ZNIEludGVycnVwdCBSZWRpc3RyaWJ1dGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIHdoaWNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIEtWTSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGZsb2F0aW5nIGludGVycnVwdCBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBhIG5ldyBzdGF0aXN0aWMsIGBpbmplY3RfcmVkaXN0YCwgd2l0aGluIHRoZSBga3ZtX3ZtX3N0YXRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgS1ZNIHN0YXRpc3RpY3MgYW5kIGlzIGluaXRpYWxpemVkIHRvIHplcm8gb24gYWxsb2NhdGlvbiwgc28gdGhhdCdzIGZpbmUuIFRoZSBwYXRjaCdzIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIGRpc3RyaWJ1dGluZyBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgdkNQVXMgYW5kIHdha2luZyB0aGVtIHVwIGFzIG5lZWRlZC4gVGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gZnVuY3Rpb25zIGxpa2UgYGhhbmRsZV9wdl9zY2xwYCwgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYGtpY2tfY3B1X2lycWAsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBgdmNwdV9pbnRlcnZlbnRpb25fa2lja2AsIGBfX2luamVjdF92bWAsIGFuZCBgdmNwdV9wcmVfcnVuYCB0byBpbXBsZW1lbnQgdGhpcyBuZXcgYmVoYXZpb3IuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggSSBzY3J1dGluaXplZCBoZXJlLiBUaGUgbWFpbiBhcmVhIG9mIGludGVyZXN0IGlzIHRoZSBgX19pbmplY3Rfdm1gIGZ1bmN0aW9uLCB3aGVyZSB0aGUgdmFyaWFibGUgYHBhcm1gICpjYW4qIGJlIHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBpbnRlcnJ1cHQgdHlwZSBpcyBgS1ZNX1MzOTBfTUNIS2AsIGBLVk1fUzM5MF9JTlRfVklSVElPYCwgb3IgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAuIFRoaXMgYHBhcm1gIHZhbHVlIGlzIHRoZW4gcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBraWNrX2NwdV9pcnFgIGFuZCBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gSG93ZXZlciwgY3JpdGljYWxseSwgdGhlIHZhbHVlIG9mIGBwYXJtYCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgaW4gdGhlIGxhdHRlciBmdW5jdGlvbiB3aGVuIGB0eXBlYCBpcyBvbmUgb2YgdGhlIGNhc2VzIHdoZXJlIGBwYXJtYCBpcyB1bmluaXRpYWxpemVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzc3VlLiBLTVNBTiB0cmFja3MgbWVtb3J5IGF0IHRoZSBzaGFkb3cgbGV2ZWwgYW5kIGlzIGRlc2lnbmVkIHRvIGRldGVjdCB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBIb3dldmVyLCBLTVNBTiBvbmx5IHJlcG9ydHMgd2hlbiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyB1c2VkIGluIGEgYnJhbmNoLCBhcyBhIG1lbW9yeSBhZGRyZXNzLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJbiB0aGlzIHNjZW5hcmlvLCB3aGlsZSBgcGFybWAgKmlzKiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUgd2hlbiBgdHlwZWAgaXMgY2VydGFpbiB2YWx1ZXMsIHRoYXQgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyBOT1QgdXNlZCBpbiBhbnkgY29uZGl0aW9uYWwgYnJhbmNoIG9yIG1lbW9yeSBhY2Nlc3MuIEl0J3MgZWZmZWN0aXZlbHkgZGlzY2FyZGVkLiBUaGUgY2hlY2tzIGluIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBzcGVjaWZpY2FsbHkgc2tpcCB0aGUgYnJhbmNoaW5nIHdoZW4gYHR5cGVgIGlzIGBLVk1fUzM5MF9NQ0hLYCwgZXRjLiBJbiBgaW50aV90b19pcnFfcGVuZF9tYXNrYCwgdGhlIHZhbHVlIG9mIGBwYXJtYCAocGFzc2VkIGFzIGBpc2NgKSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgd2hlbiB0aGUgaW50ZXJydXB0IHR5cGUgaXMgb25lIG9mIHRob3NlIHRoYXQgbGVhdmUgYHBhcm1gIHVuaW5pdGlhbGl6ZWQuIFRodXMsIEtNU0FOIHdvbid0IGNvbXBsYWluIGhlcmUsIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgaXNuJ3QgdXNlZCBpbiBhIHdheSB0aGF0IGFmZmVjdHMgcHJvZ3JhbSBiZWhhdmlvci5cblxuVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vc3RseSBjb250cm9sIGZsb3csIHNldHRpbmcgYW5kIGNoZWNraW5nIG1hc2tzLCBhbmQgd2FraW5nIHZDUFVzLCB3aGljaCBhcmUgYWxsIHByZXR0eSBzdGFuZGFyZCBLVk0gb3BlcmF0aW9ucy4gVGhlIG5ldyBgaW5qZWN0X3JlZGlzdGAgc3RhdGlzdGljIGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgS1ZNIGluZnJhc3RydWN0dXJlLCBzbyB0aGUgc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1pbml0aWFsaXplZC4gSSBkaWRuJ3Qgc2VlIGFueSBvdGhlciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY29tcGxleCBkYXRhIHBhcnNpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU28sIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGEgS01TQU4gaXNzdWUuIFJlZ3VsYXIgc3RhdGljIGFuYWx5c2lzIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODg2LCJPdXRwdXRUb2tlbnMiOjI4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMzoyOC45NTk1OTkyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBmb3IgczM5MCwgaW50cm9kdWNpbmcgYSBuZXcgc3RhdGlzdGljIGBpbmplY3RfcmVkaXN0YCBhbmQgY2hhbmdpbmcgaG93IHZDUFVzIGFyZSBraWNrZWQgd2hlbiBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLiBUaGUgb25seSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGxvY2FsIHZhcmlhYmxlIGBwYXJtYCBpbiBgX19pbmplY3Rfdm0oKWAsIHdoaWNoIGlzIGxlZnQgdW5pbml0aWFsaXplZCBmb3IgY2VydGFpbiBpbnRlcnJ1cHQgdHlwZXMgKGUuZy4sIGBLVk1fUzM5MF9NQ0hLYCkuIEhvd2V2ZXIsIHRoaXMgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyBwYXNzZWQgdG8gYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgYW5kIHN1YnNlcXVlbnRseSB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgLCB3aGVyZSBpdCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgZm9yIHRob3NlIHNwZWNpZmljIGludGVycnVwdCB0eXBlcy4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzaGFkb3cgbGV2ZWwgYW5kIG9ubHkgcmVwb3J0cyBhbiBlcnJvciBpZiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyB1c2VkIGluIGEgYnJhbmNoLCBhcyBhIG1lbW9yeSBhZGRyZXNzLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSBgcGFybWAgaXMgbmV2ZXIgZXZhbHVhdGVkIGluIHRoZXNlIHdheXMgd2hlbiB1bmluaXRpYWxpemVkLCBpdCB3aWxsIG5vdCB0cmlnZ2VyIGEgS01TQU4gcmVwb3J0LiBPdGhlciBjaGFuZ2VzIGludm9sdmUgYmFzaWMgY29udHJvbCBmbG93LCB2Q1BVIHdha2V1cHMsIGFuZCBhIG5ldyBmaWVsZCBpbiBgc3RydWN0IGt2bV92bV9zdGF0YCAod2hpY2ggaXMgemVyby1hbGxvY2F0ZWQpLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHBhcnNpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzw846[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 19:18:29 +0000 UTC FinishedAt: 2026-08-19 20:13:30 +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": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "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": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "51c8cfd4-9115-4e40-bd92-d26eeaa2faea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "distribute_float_irqs", "kvm_s390_pv_sclp_kick", "kvm_s390_inject_vm" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfc2NscF9raWNrJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBmb3IgczM5MCwgaW50cm9kdWNpbmcgYSBuZXcgc3RhdGlzdGljIGBpbmplY3RfcmVkaXN0YCBhbmQgY2hhbmdpbmcgaG93IHZDUFVzIGFyZSBraWNrZWQgd2hlbiBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLiBUaGUgb25seSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGxvY2FsIHZhcmlhYmxlIGBwYXJtYCBpbiBgX19pbmplY3Rfdm0oKWAsIHdoaWNoIGlzIGxlZnQgdW5pbml0aWFsaXplZCBmb3IgY2VydGFpbiBpbnRlcnJ1cHQgdHlwZXMgKGUuZy4sIGBLVk1fUzM5MF9NQ0hLYCkuIEhvd2V2ZXIsIHRoaXMgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyBwYXNzZWQgdG8gYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgYW5kIHN1YnNlcXVlbnRseSB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgLCB3aGVyZSBpdCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgZm9yIHRob3NlIHNwZWNpZmljIGludGVycnVwdCB0eXBlcy4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzaGFkb3cgbGV2ZWwgYW5kIG9ubHkgcmVwb3J0cyBhbiBlcnJvciBpZiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyB1c2VkIGluIGEgYnJhbmNoLCBhcyBhIG1lbW9yeSBhZGRyZXNzLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSBgcGFybWAgaXMgbmV2ZXIgZXZhbHVhdGVkIGluIHRoZXNlIHdheXMgd2hlbiB1bmluaXRpYWxpemVkLCBpdCB3aWxsIG5vdCB0cmlnZ2VyIGEgS01TQU4gcmVwb3J0LiBPdGhlciBjaGFuZ2VzIGludm9sdmUgYmFzaWMgY29udHJvbCBmbG93LCB2Q1BVIHdha2V1cHMsIGFuZCBhIG5ldyBmaWVsZCBpbiBgc3RydWN0IGt2bV92bV9zdGF0YCAod2hpY2ggaXMgemVyby1hbGxvY2F0ZWQpLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHBhcnNpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gb24gczM5MHguIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgSVJRcyBhY3Jvc3MgVkNQVXMgYW5kIHRvIGtpY2sgVkNQVXMgd2hlbiBzcGVjaWZpYyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1MzOTBfSU5URVJSVVBUKSBhbmQgZHVyaW5nIFZDUFUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTA4ODNjZmEwNmU3N2JlNjFiNzlhNjA4NTQ5MTY3YmQxZWJkMmQ1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDIwOjAxOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIHN0cnVjdCBrdm1fdm1fc3RhdCB7XG4gXHR1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7XG4gXHR1NjQgZ21hcF9zaGFkb3dfc2dfZW50cnk7XG4gXHR1NjQgZ21hcF9zaGFkb3dfcGdfZW50cnk7XG4mIzQzO1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXG5pbmRleCAxOTgwZGY2MWVmMzA0Li5lMWRlM2Y0NzFmZmQwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuQEAgLTUzNiw2ICYjNDM7NTM2LDE1IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlcGVuZGluZ19pcnFzKTtcbiBcdGNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlbWFza2VkX2lycXMpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgbWlzc2VkIHRoZSBmbG9hdGluZyBJUlEga2ljayBzaW5jZSB3ZSBjYW4gb25seSBpbmplY3RcbiYjNDM7XHQgKiB3aGVuIHdlIGVuZCB1cCBoZXJlIGFuZCBub3Qgd2hlbiB0aGUgaXJxIHdhcyBpbmplY3RlZCB2aWFcbiYjNDM7XHQgKiB0aGUgRkxJQy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vdyB0aGF0IHdlIGhhdmUgY2xlYXJlZCB0aGUgbWFza2luZyB3ZSBjYW4ga2ljayBjcHVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV9zMzkwX3B2X3NjbHBfa2ljayh2Y3B1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOGYyNGJjZDFhNmQzNi4uMWVlOWFiMjUwNTA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBhY3RpdmVfbWFzaztcbiB9XG4gXG4mIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4mIzQzO1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZVxuJiM0MztcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbiYjNDM7XHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxuJiM0MztcdCAqL1xuJiM0MztcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbiYjNDM7XHQvKiBXZWxsIG5vYm9keSYjMzk7cyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovXG4mIzQzO1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbiYjNDM7XHRcdGlmIChkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSkge1xuJiM0MztcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICYjNDM7JiM0MztzaWdjcHUpO1xuJiM0MztcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7XG5AQCAtMTkxNSw0OSAmIzQzOzE5NDYsMTI5IEBAIHN0YXRpYyBpbnQgX19pbmplY3RfaW8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHU2NCB0eXBlLCBpbnQgaXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuJiM0MztcdFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxuJiM0MztcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuJiM0MztcdFx0ICAgICAgIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRV9FVik7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4mIzQzO1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuJiM0MztcdFx0cmV0dXJuIGlzY190b19pcnFfdHlwZShpc2MpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuXG4mIzQzOyAqIFNldHVwIGludGVydmVudGlvbiBtYXNrcyB0byBjYXRjaCBydW5uaW5nIHZjcHVzIHRoYXQgaG9wZWZ1bGx5IG9wZW5cbiYjNDM7ICogdGhlaXIgbWFza3Mgc29vbmlzaCBhbmQga2ljayBzbGVlcGluZyB2Y3B1cyB0byBtb3RpdmF0ZSB0aGVtIHRvXG4mIzQzOyAqIHRha2UgSVJRcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpXG4mIzQzO3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdC8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqL1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfTUNISzpcbiYjNDM7XHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1NUT1BfSU5UKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4mIzQzO1x0XHRpZiAoISh0eXBlIFx1MDAyNiBLVk1fUzM5MF9JTlRfSU9fQUlfTUFTSyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQub3JpZ2luKSB8fFxuJiM0MztcdFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUodmNwdSkpXG4mIzQzO1x0XHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0lPX0lOVCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRVhUX0lOVCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0a3ZtX3MzOTBfdmNwdV93YWtldXAodmNwdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGtpY2tfY3B1X2lycShzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuIFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzLCBucl90cmllcyA9IDA7XG4mIzQzO1x0dTY0IGlycV9wZW5kX21hc2s7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4gXHRpZiAoIW9ubGluZV92Y3B1cylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2sodHlwZSwgcGFybSk7XG4gXHRmb3IgKHNpZ2NwdSA9IGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUmIzQzOyYjNDM7KSB7XG4gXHRcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XG4gXHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbi1cdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKVxuJiM0MztcdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpIFx1MDAyNiBpcnFfcGVuZF9tYXNrKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHQvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqL1xuLVx0XHRpZiAobnJfdHJpZXMmIzQzOyYjNDM7IFx1MDAzZT0gb25saW5lX3ZjcHVzKVxuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdGlmIChucl90cmllcyYjNDM7JiM0MzsgXHUwMDNlPSBvbmxpbmVfdmNwdXMgKiAyKSB7XG4mIzQzO1x0XHRcdGRzdF92Y3B1ID0gTlVMTDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHQvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi9cbi1cdHN3aXRjaCAodHlwZSkge1xuLVx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuLVx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfU1RPUF9JTlQpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4tXHRcdGlmICghKHR5cGUgXHUwMDI2IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICBrdm0tXHUwMDNlYXJjaC5naXNhX2ludC5vcmlnaW4pIHx8XG4tXHRcdCAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKGRzdF92Y3B1KSlcbi1cdFx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfSU9fSU5UKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfRVhUX0lOVCk7XG4tXHRcdGJyZWFrO1xuJiM0MztcdC8qIE5vYm9keSB3YXMgZW5hYmxlZCwgdGltZSB0byB3YWtlIGFsbCBvZiB0aGVtICovXG4mIzQzO1x0aWYgKCFkc3RfdmNwdSkge1xuJiM0MztcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgZHN0X3ZjcHUsIGt2bSlcbiYjNDM7XHRcdFx0dmNwdV9pbnRlcnZlbnRpb25fa2ljayhkc3RfdmNwdSwgdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4tXHRrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7XG4mIzQzO1xuJiM0MztcdHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBjcHUgdGhhdCBjYWxsZWQgc2NscCBsaWtlbHkgd2lsbCBhbHNvIHRha2UgdGhlIElSUSwgbm9cbiYjNDM7XHQgKiBuZWVkIHRvIGtpY2sgYW55b25lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsaWtlbHkoZGVsaXZlcmFibGVfaXJxcyh2Y3B1KSBcdTAwMjYgSVJRX1BFTkRfRVhUX1NFUlZJQ0UpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciB0aGUgb3RoZXIgY2FzZXMgd2UgbWlnaHQgaGF2ZSBzbGVlcGluZyBjcHVzIHdpdGggb3BlblxuJiM0MztcdCAqIG1hc2tzLiBUaW1lIHRvIGZpbmQgYW5kIGtpY2sgdGhlbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRraWNrX2NwdV9pcnEodmNwdS1cdTAwM2Vrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcHJvdDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0cHJvdCA9IGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZChrdm0pO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBObyBuZWVkIHRvIGtpY2sgb24gbm9uLWV2IHNlcnZpY2UgSVJRcyBmb3IgUFYgVk1zLCB3ZSYjMzk7cmVcbiYjNDM7XHQgKiBub3QgYWxsb3dlZCB0byBpbmplY3QgYW55d2F5LiBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzY2xwXG4mIzQzO1x0ICogaW5zdHJ1Y3Rpb24gbm90aWZpY2F0aW9uIEFGVEVSIHJlLWVudHJ5IG9mIHRoZSB2Y3B1IHRoYXRcbiYjNDM7XHQgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHByb3QgXHUwMDI2XHUwMDI2IHR5cGUgPT0gS1ZNX1MzOTBfSU5UX1NFUlZJQ0UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEocGFybSBcdTAwMjYgU0NDQl9FVkVOVF9QRU5ESU5HKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a2lja19jcHVfaXJxKGt2bSwgdHlwZSwgcGFybSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4ge1xuIFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbiYjNDM7XHR1NjQgcGFybTtcbiBcdGludCByYztcbiBcbiBcdHN3aXRjaCAodHlwZSkge1xuQEAgLTE5NjgsMTIgJiM0MzsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbiYjNDM7XHRcdHBhcm0gPSBpbnRpLVx1MDAzZWV4dC5leHRfcGFyYW1zIFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkc7XG4gXHRcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuIFx0XHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbiYjNDM7XHRcdC8qIEdyYWIgaXNjIGhlcmUgc2luY2UgX19pbmplY3RfaW8oKSBtaWdodCBmcmVlIGludGkgKi9cbiYjNDM7XHRcdHBhcm0gPSBpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktXHUwMDNlaW8uaW9faW50X3dvcmQpKTtcbiBcdFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTk4Miw3ICYjNDM7MjA5Niw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbiYjNDM7XHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSwgcGFybSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHtcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSxcbiYjNDM7XHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgJiM0Mzs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpO1xuIFx0XHRpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKVxuIFx0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi43MTE1YThmNWIxODgyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiAmIzQzOzM3NSw4IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfc2NscF9raWNrJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBvbiBzMzkweC4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBJUlFzIGFjcm9zcyBWQ1BVcyBhbmQgdG8ga2ljayBWQ1BVcyB3aGVuIHNwZWNpZmljIGludGVycnVwdHMgYXJlIGluamVjdGVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fUzM5MF9JTlRFUlJVUFQpIGFuZCBkdXJpbmcgVkNQVSBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDg4M2NmYTA2ZTc3YmU2MWI3OWE2MDg1NDkxNjdiZDFlYmQyZDU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMjA6MDE6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIHN0cnVjdCBrdm1fdm1fc3RhdCB7CiAJdTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTsKIAl1NjQgZ21hcF9zaGFkb3dfcGdfZW50cnk7CiYjNDM7CXU2NCBpbmplY3RfcmVkaXN0OwogfTsKIAogc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCmluZGV4IDE5ODBkZjYxZWYzMDQuLmUxZGUzZjQ3MWZmZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwpAQCAtNTM2LDYgJiM0Mzs1MzYsMTUgQEAgc3RhdGljIGludCBoYW5kbGVfcHZfc2NscChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc2V0X2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgJmFtcDtmaS0mZ3Q7cGVuZGluZ19pcnFzKTsKIAljbGVhcl9iaXQoSVJRX1BFTkRfRVhUX1NFUlZJQ0UsICZhbXA7ZmktJmd0O21hc2tlZF9pcnFzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZmktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2UgbWlzc2VkIHRoZSBmbG9hdGluZyBJUlEga2ljayBzaW5jZSB3ZSBjYW4gb25seSBpbmplY3QKJiM0MzsJICogd2hlbiB3ZSBlbmQgdXAgaGVyZSBhbmQgbm90IHdoZW4gdGhlIGlycSB3YXMgaW5qZWN0ZWQgdmlhCiYjNDM7CSAqIHRoZSBGTElDLgomIzQzOwkgKgomIzQzOwkgKiBOb3cgdGhhdCB3ZSBoYXZlIGNsZWFyZWQgdGhlIG1hc2tpbmcgd2UgY2FuIGtpY2sgY3B1cy4KJiM0MzsJICovCiYjNDM7CWt2bV9zMzkwX3B2X3NjbHBfa2ljayh2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggOGYyNGJjZDFhNmQzNi4uMWVlOWFiMjUwNTA0MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gYWN0aXZlX21hc2s7CiB9CiAKJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwomIzQzOwlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXM7CiYjNDM7CiYjNDM7CWlmICghUkVBRF9PTkNFKGt2bS0mZ3Q7YXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2UKJiM0MzsJICogbWlnaHQgYnVybiB0b28gbWFueSBjeWNsZXMgYnV0IGFwYXJ0IGZyb20gdGhhdCB3YWtpbmcgYQomIzQzOwkgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLgomIzQzOwkgKi8KJiM0MzsJc2lnY3B1ID0gZmluZF9maXJzdF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTsKJiM0MzsJLyogV2VsbCBub2JvZHkmIzM5O3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqLwomIzQzOwlpZiAoc2lnY3B1ID09IG9ubGluZV92Y3B1cykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpOwomIzQzOwkJaWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7CiYjNDM7CQkJa3ZtLSZndDtzdGF0LmluamVjdF9yZWRpc3QmIzQzOyYjNDM7OwomIzQzOwkJCWt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzLCAmIzQzOyYjNDM7c2lnY3B1KTsKJiM0MzsJfSB3aGlsZSAoc2lnY3B1ICZsdDsgb25saW5lX3ZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7CkBAIC0xOTE1LDQ5ICYjNDM7MTk0NiwxMjkgQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHU2NCB0eXBlLCBpbnQgaXNjKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfTUNISzoKJiM0MzsJCS8qIE9ubHkgcmVwcmVzc2libGUgbWFjaGluZSBjaGVja3MgYXJlIGZsb2F0aW5nICovCiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOgomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOgomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfAomIzQzOwkJICAgICAgIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRV9FVik7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOgomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9QRkFVTFRfRE9ORSk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6CiYjNDM7CQlyZXR1cm4gaXNjX3RvX2lycV90eXBlKGlzYyk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCi0gKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuCiYjNDM7ICogU2V0dXAgaW50ZXJ2ZW50aW9uIG1hc2tzIHRvIGNhdGNoIHJ1bm5pbmcgdmNwdXMgdGhhdCBob3BlZnVsbHkgb3BlbgomIzQzOyAqIHRoZWlyIG1hc2tzIHNvb25pc2ggYW5kIGtpY2sgc2xlZXBpbmcgdmNwdXMgdG8gbW90aXZhdGUgdGhlbSB0bwomIzQzOyAqIHRha2UgSVJRcy4KICAqLwotc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSkKJiM0Mzt7CiYjNDM7CS8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqLwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBLVk1fUzM5MF9NQ0hLOgomIzQzOwkJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfU1RPUF9JTlQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6CiYjNDM7CQlpZiAoISh0eXBlICZhbXA7IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5naXNhX2ludC5vcmlnaW4pIHx8CiYjNDM7CQkgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSkKJiM0MzsJCQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9JT19JTlQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWt2bV9zMzkwX3ZjcHVfd2FrZXVwKHZjcHUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBraWNrX2NwdV9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pCiB7CiAJc3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTsKIAlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDsKJiM0MzsJdTY0IGlycV9wZW5kX21hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCW9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpOwogCWlmICghb25saW5lX3ZjcHVzKQogCQlyZXR1cm47CiAKJiM0MzsJaXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayh0eXBlLCBwYXJtKTsKIAlmb3IgKHNpZ2NwdSA9IGt2bS0mZ3Q7YXJjaC5mbG9hdF9pbnQubGFzdF9zbGVlcF9jcHU7IDsgc2lnY3B1JiM0MzsmIzQzOykgewogCQlzaWdjcHUgJT0gb25saW5lX3ZjcHVzOwogCQlkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7Ci0JCWlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSkKJiM0MzsJCWlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgJmFtcDsgaXJxX3BlbmRfbWFzaykKIAkJCWJyZWFrOwogCQkvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqLwotCQlpZiAobnJfdHJpZXMmIzQzOyYjNDM7ICZndDs9IG9ubGluZV92Y3B1cykKLQkJCXJldHVybjsKJiM0MzsJCWlmIChucl90cmllcyYjNDM7JiM0MzsgJmd0Oz0gb25saW5lX3ZjcHVzICogMikgewomIzQzOwkJCWRzdF92Y3B1ID0gTlVMTDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAl9CiAKLQkvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi8KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEtWTV9TMzkwX01DSEs6Ci0JCWt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7Ci0JCWJyZWFrOwotCWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6Ci0JCWlmICghKHR5cGUgJmFtcDsgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgJmFtcDsmYW1wOwotCQkgICAgICBrdm0tJmd0O2FyY2guZ2lzYV9pbnQub3JpZ2luKSB8fAotCQkgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZShkc3RfdmNwdSkpCi0JCQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfSU9fSU5UKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX0VYVF9JTlQpOwotCQlicmVhazsKJiM0MzsJLyogTm9ib2R5IHdhcyBlbmFibGVkLCB0aW1lIHRvIHdha2UgYWxsIG9mIHRoZW0gKi8KJiM0MzsJaWYgKCFkc3RfdmNwdSkgewomIzQzOwkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgZHN0X3ZjcHUsIGt2bSkKJiM0MzsJCQl2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTsKJiM0MzsJCXJldHVybjsKIAl9Ci0Ja3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpOwomIzQzOwomIzQzOwl2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNwdSB0aGF0IGNhbGxlZCBzY2xwIGxpa2VseSB3aWxsIGFsc28gdGFrZSB0aGUgSVJRLCBubwomIzQzOwkgKiBuZWVkIHRvIGtpY2sgYW55b25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpa2VseShkZWxpdmVyYWJsZV9pcnFzKHZjcHUpICZhbXA7IElSUV9QRU5EX0VYVF9TRVJWSUNFKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9yIHRoZSBvdGhlciBjYXNlcyB3ZSBtaWdodCBoYXZlIHNsZWVwaW5nIGNwdXMgd2l0aCBvcGVuCiYjNDM7CSAqIG1hc2tzLiBUaW1lIHRvIGZpbmQgYW5kIGtpY2sgdGhlbS4KJiM0MzsJICovCiYjNDM7CWtpY2tfY3B1X2lycSh2Y3B1LSZndDtrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pCiYjNDM7ewomIzQzOwlpbnQgcHJvdDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CiYjNDM7CXByb3QgPSBrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQoa3ZtKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogTm8gbmVlZCB0byBraWNrIG9uIG5vbi1ldiBzZXJ2aWNlIElSUXMgZm9yIFBWIFZNcywgd2UmIzM5O3JlCiYjNDM7CSAqIG5vdCBhbGxvd2VkIHRvIGluamVjdCBhbnl3YXkuIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHNjbHAKJiM0MzsJICogaW5zdHJ1Y3Rpb24gbm90aWZpY2F0aW9uIEFGVEVSIHJlLWVudHJ5IG9mIHRoZSB2Y3B1IHRoYXQKJiM0MzsJICogaGFuZGxlZCB0aGUgaW5zdHJ1Y3Rpb24gaW50ZXJjZXB0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHByb3QgJmFtcDsmYW1wOyB0eXBlID09IEtWTV9TMzkwX0lOVF9TRVJWSUNFICZhbXA7JmFtcDsKJiM0MzsJICAgICEocGFybSAmYW1wOyBTQ0NCX0VWRU5UX1BFTkRJTkcpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlraWNrX2NwdV9pcnEoa3ZtLCB0eXBlLCBwYXJtKTsKIH0KIAogc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIHsKIAl1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLSZndDt0eXBlKTsKJiM0MzsJdTY0IHBhcm07CiAJaW50IHJjOwogCiAJc3dpdGNoICh0eXBlKSB7CkBAIC0xOTY4LDEyICYjNDM7MjA3OSwxNSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCQlyYyA9IF9faW5qZWN0X3ZpcnRpbyhrdm0sIGludGkpOwogCQlicmVhazsKIAljYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOgomIzQzOwkJcGFybSA9IGludGktJmd0O2V4dC5leHRfcGFyYW1zICZhbXA7IFNDQ0JfRVZFTlRfUEVORElORzsKIAkJcmMgPSBfX2luamVjdF9zZXJ2aWNlKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOgogCQlyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6CiYjNDM7CQkvKiBHcmFiIGlzYyBoZXJlIHNpbmNlIF9faW5qZWN0X2lvKCkgbWlnaHQgZnJlZSBpbnRpICovCiYjNDM7CQlwYXJtID0gaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLSZndDtpby5pb19pbnRfd29yZCkpOwogCQlyYyA9IF9faW5qZWN0X2lvKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xOTgyLDcgJiM0MzsyMDk2LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCV9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTsKJiM0MzsJX19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUsIHBhcm0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggNTE4YTY5YzU1ZTg1Yy4uZDZkNDY2ODhkOTgwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtODYsNiAmIzQzOzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7CiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19yM19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksCiYjNDM7CVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksCiB9OwogCiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0gewpAQCAtNDU3Miw2ICYjNDM7NDU3Myw4IEBAIHN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTsKIAkJaWYgKHJjIHx8IGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkKIAkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCWRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LSZndDtrdm0pOwogCX0KIAogCXJjID0ga3ZtX3MzOTBfaGFuZGxlX3JlcXVlc3RzKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IDZkMjg0MmZiNzFhMzMuLjcxMTVhOGY1YjE4ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTM3NSw2ICYjNDM7Mzc1LDggQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTsKIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pOwogaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODg5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBzMzkwIFBhdGNoIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lLiBJdCYjMzk7cyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBpbnRlcmNlcHQuY2AsIGBpbnRlcnJ1cHQuY2AsIGBrdm0tczM5MC5jYCwgYGt2bS1zMzkwLmhgLCBhbmQgYGt2bV9ob3N0LmhgIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9rdm1gIGRpcmVjdG9yeS4gVGhhdCBwb2ludHMgdG8gc29tZSBzZXJpb3VzIGNoYW5nZXMgdW5kZXIgdGhlIGhvb2QuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCwgc28gdGhlIGNvcmUgbG9naWMgb2YgaG93IHdlIGhhbmRsZSBmbG9hdGluZyBJUlFzIGluIEtWTSBmb3IgczM5MCBpcyBjaGFuZ2luZywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHBheSAqdmVyeSogY2xvc2UgYXR0ZW50aW9uIHRvIHRoaXMuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgaXMsIGNhbiBJIHRlc3QgdGhpcyBlZmZlY3RpdmVseT8gSXMgdGhpcyByZWFjaGFibGUgYnkgZXhpc3RpbmcgdGVzdGluZyBpbmZyYXN0cnVjdHVyZT8gQWgsIHllcywgaWYgd2UgaGF2ZSBzMzkweCBRRU1VLCBLVk0gb24gczM5MCBpcyB0ZXN0YWJsZS4gR29vZCwgZ29vZC4gQW5kIHN5emthbGxlci4uLiBkb2VzIHN5emthbGxlciBkbyBzMzkweD8gWWVzLCBpdCBkb2VzLCBzbyBzeXprYWxsZXIgKmNhbiogZnV6eiBLVk0gb24gczM5MHguIFBlcmZlY3QuIFRoYXQmIzM5O3MgYSBodWdlIHdpbiBpbiB0ZXJtcyBvZiB0ZXN0YWJpbGl0eSBhbmQgZmluZGluZyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgc3l6a2FsbGVyIG5lZWRzIHRvIGVuYWJsZSBLVk0gb24gczM5MHguIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIHN0YW5kYXJkIEtWTSBjb25maWcgaXMgc3VmZmljaWVudCwgYENPTkZJR19LVk1gIHNob3VsZCBiZSBnb29kIGVub3VnaC4gVGltZSB0byBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgS1ZNIERlcGVuZGVuY2llcyBmb3IgczM5MCBBcmNoaXRlY3R1cmUgSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3lzdGVtIGlzIGluZGljYXRpbmcgdGhhdCBgQ09ORklHX0tWTWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciBzb21ldGhpbmcsIHdoaWNoIGlzbiYjMzk7dCBlbnRpcmVseSBzdXJwcmlzaW5nIGdpdmVuIHRoZSBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb2RlIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGxlYW5pbmcgb24gaXQsIHNwZWNpZmljYWxseSBpbnRlcnJ1cHQgbWFuYWdlbWVudC4gVGhlIHMzOTAgYXJjaGl0ZWN0dXJlIG9mdGVuIGhhcyBzb21lIHVuaXF1ZSBhcHByb2FjaGVzIGhlcmUuCgpJJiMzOTtsbCBzdGFydCB3aXRoIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gVGhhdCBmaWxlIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZTsgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBkaXN0cmlidXRpb24gYXJlIG9mdGVuIHRpZ2h0bHkgY291cGxlZCB3aXRoIHZpcnR1YWxpemF0aW9uLiBUaGUgcHJlc2VuY2Ugb2YgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgaXMgYSBwYXJ0aWN1bGFyIHBvaW50IG9mIGludGVyZXN0IGJlY2F1c2Ugb2YgaXRzIGltcGxpY2F0aW9uIGZvciBmbG9hdGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBhbmQgb3RoZXJzIGFyZSB1dGlsaXppbmcgS1ZNIGZ1bmN0aW9uYWxpdHksIGFuZCB3aGVyZSB0aGF0IGRlcGVuZGVuY3kgaXMgZGVjbGFyZWQgb3IgaW1wbGllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgQ09ORklHX0tWTWAgYW5kIGhvdyB3ZSYjMzk7cmUgZGlzdHJpYnV0aW5nIHRob3NlIGludGVycnVwdHMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGlmIHRoZXJlJiMzOTtzIGFueSBhcmVhIHRoYXQmIzM5O3Mgbm90IG5lZWRlZCwgb3IgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBkaWZmZXJlbnQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlzdHJpYnV0ZV9mbG9hdF9pcnFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNjktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3MDp2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3MS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ1NTg9c3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTc2LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1Nzc6XHRcdGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3OC1cdH1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc4PXZvaWQga3ZtX3MzOTBfcHZfc2NscF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6Mzc5OnZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMzgwLWludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTAxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB2Y3B1X3ByZV9ydW5gIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBTaW11bHRhbmVvdXNseSwgd2UgaGF2ZSBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCBiZWluZyBpbnRyb2R1Y2VkLCB0cmlnZ2VyZWQgZnJvbSBgaGFuZGxlX3B2X3NjbHBgIGluIGBhcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGhhbmRsZV9wdl9zY2xwYCBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIFFFTVUmIzM5O3MgczM5MHggUFYgc3VwcG9ydC4gQWgsIHllcywgaXQgZG9lcyBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24sIHdoaWNoIGluY2x1ZGVzIFBWLiBCdXQgZXZlbiBpZiBQViBpc24mIzM5O3QgaW4gcGxheSwgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2Agc3RpbGwgZ2V0cyBpbnZva2VkIHZpYSBgdmNwdV9wcmVfcnVuYC4gSSBhbHNvIHNlZSBjaGFuZ2VzIGFyb3VuZCBgX19mbG9hdGluZ19pcnFfa2lja2AsIHNvIHRoZXJlJiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gaGVyZSBpbiB0aGUgS1ZNIHMzOTB4IGltcGxlbWVudGF0aW9uLiBJdCBtZWFucyBJJiMzOTttIGNvbWZvcnRhYmxlIHNheWluZyB0aGlzIGlzIFdvcnRoRnV6emluZz10cnVlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGtleSBzeW1ib2xzLiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYXJlIG9idmlvdXMgb25lcy4gVGhlbiB0aGVyZSYjMzk7cyB0aGlzIHBhdGg6IGB2Y3B1X2ludGVydmVudGlvbl9raWNrYCAtJmd0OyBga2lja19jcHVfaXJxYCAtJmd0OyBgX19mbG9hdGluZ19pcnFfa2lja2AgLSZndDsgYF9faW5qZWN0X3ZtYCAtJmd0OyBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gV2FpdCwgYGt2bV9zMzkwX2luamVjdF92bWAgaXMgdGhlIG9uZSBJIHdhbnQgdG8gcmVhbGx5IGxvb2sgaW50by4gQm90aCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBhbmQgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYXJlIGV4cG9ydGVkLCB3aGljaCBnaXZlcyB1cyBzb21lIGdvb2QgZW50cnkgcG9pbnRzLgoKTmV4dCBzdGVwcywgSSBuZWVkIHRvIHZlcmlmeSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhbmQgYGhhbmRsZV9wdl9zY2xwYCBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDY4PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTAzOmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTA0LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEzNy1cdH1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjEzODpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVx1MDAzZXR5cGUsIHMzOTBpbnQtXHUwMDNlcGFybSwgczM5MGludC1cdTAwM2VwYXJtNjQsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMzktXHRcdFx0XHQgMik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODc3PXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg5NS1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4OTY6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODk3LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjkwOS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjkxMDpcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTExLVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mzg2NT1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM5MDctXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozOTA4Olx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzkwOS1cdFx0aWYgKHJldCA9PSAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTI3LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozOTI4Olx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM5MjktXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGZpLVx1MDAzZXNpbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4Olx0XHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0OS1cdFx0aWYgKHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzU9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0OTMtXHRcdGludGkucGFybTY0ID0gdG9rZW47XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5NDpcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXHUwMDNla3ZtLCBcdTAwMjZpbnRpLCBpbnRpX21lbSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cdFx0aWYgKHJldClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc5PXZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6MzgwOmludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODEtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbi0tXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXG4tLVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmgtMTI0LVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcbmFyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oLTEyNi1cdCAgICBUUF9QUk9UTyhfX3U2NCB0eXBlLCBfX3UzMiBwYXJtLCBfX3U2NCBwYXJtNjQsIGludCB3aG8pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipDb25zaWRlcmluZyBJbmplY3Rpb24gUG9pbnRzIGluIHRoZSBzMzkwIEtWTSBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4uLiB0aGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludCB0byBmb2N1cyBvbiwgYSBnb29kIHN5bWJvbCB0byBkaXZlIGludG8uIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHdlIHNlZSBjcml0aWNhbCBldmVudHMgYmVpbmcgaW5qZWN0ZWQgaW50byB0aGUgdmlydHVhbCBtYWNoaW5lLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHRoaW5rIGFib3V0IG90aGVyIHBvdGVudGlhbGx5IGltcG9ydGFudCBhcmVhcywgYW5kIHRoZSBuYW1lIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYGhhbmRsZV9wdl9zY2xwYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgdXNlZnVsIG92ZXJsYXAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IGludGVyYWN0aW9ucyBhcmUgb2Ygbm90ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3B2X3NjbHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jPTUwOD1zdGF0aWMgaW50IGhhbmRsZV9wdl9zcHgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTE2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo1MTc6c3RhdGljIGludCBoYW5kbGVfcHZfc2NscChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTUxOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz01ODI9c3RhdGljIGludCBoYW5kbGVfcHZfbm90aWZpY2F0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTU4OC1cdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWlwYSA9PSAweGIyMjApXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjU4OTpcdFx0cmV0dXJuIGhhbmRsZV9wdl9zY2xwKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01OTAtXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpcGEgPT0gMHhiOWE0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTdGF0aWMgTWV0aG9kIFVzYWdlKioKCkFscmlnaHQsIHNvIGBoYW5kbGVfcHZfc2NscGAgaXMgc3RhdGljLCB0aGF0JiMzOTtzIGFscmVhZHkgZXN0YWJsaXNoZWQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBgaGFuZGxlX3B2X25vdGlmaWNhdGlvbmAuIEl0IHNlZW1zIG9kZCB0aGF0IG9uZSBoYW5kbGVyIGlzIHN0YXRpYyB3aGlsZSB0aGUgb3RoZXIgaXNuJiMzOTt0LCBlc3BlY2lhbGx5IHdoZW4gdGhleSBsaWtlbHkgaGFuZGxlIHNpbWlsYXIgcGFyYWxsZWwgcHJvY2Vzc2luZyBzY2VuYXJpb3MsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLiBBIHF1aWNrIGxvb2sgYXQgYGhhbmRsZV9wdl9ub3RpZmljYXRpb25gIGlzIGluIG9yZGVyOyBJIHdhbnQgdG8gZ3Jhc3AgaXRzIGNvbnRleHQgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHVzYWdlLCBvciBpZiB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSBmb3IgaW1wcm92ZW1lbnQgb3IgcmVmYWN0b3JpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX3B2X25vdGlmaWNhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NTUxPXN0YXRpYyBpbnQgaGFuZGxlX3B2X3V2YyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01ODEtXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jOjU4MjpzdGF0aWMgaW50IGhhbmRsZV9wdl9ub3RpZmljYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01ODMte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NjIyPWludCBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNjcwLVx0Y2FzZSBJQ1BUX1BWX05PVElGWTpcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NjcxOlx0XHRyYyA9IGhhbmRsZV9wdl9ub3RpZmljYXRpb24odmNwdSk7XG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTY3Mi1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0gU3ltYm9scyBmb3IgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLiBJIGtub3cgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBvd24gZmlsZSwgc28gdGhlb3JldGljYWxseSwgaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEJ1dCwga25vd2luZyBob3cgS1ZNIHdvcmtzLCB0aGF0IGZ1bmN0aW9uIGlzIGxpa2VseSBhICp2ZXJ5KiBob3QgcGF0aC4gSSYjMzk7ZCByYXRoZXIgbG9vayBzb21ld2hlcmUgbGVzcyBoZWF2aWx5IHRyYWZmaWNrZWQgdG8gc3RhcnQuCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgaXMgYWxzbyBleHBvcnRlZC4gVGhhdCBzb3VuZHMgcHJvbWlzaW5nLiBUaGVuIHRoZXJlJiMzOTtzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCDigJMgdGhleSYjMzk7cmUgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQsIHNvIHRoZXkmIzM5O3JlIGFsbCBzb2xpZCBzdGFydGluZyBwb2ludHMuIFRoZXNlIHNlZW0gdG8gYmUgZ29vZCBmb2N1cyBzeW1ib2xzIHRvIGJlZ2luIHdpdGguIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG9mZmVyIGEgY2xlYXJlciB2aWV3IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIHRoYW4gc29tZXRoaW5nIGxpa2UgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAuCgpOb3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19LVk1gIGlzLCBvZiBjb3Vyc2UsIHRoZSBiaWcgb25lLiBJIHNob3VsZCBwcm9iYWJseSByZXZpc2l0IGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUgdGhlcmUgYXJlbuKAmXQgYW55IFBWLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBzMzkwIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBLVk0gb24gdGhlIFN5c3RlbSB6IGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlYWNoIG9wdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgU2NvcGUqKjogV2hhdCBLVk0gZmVhdHVyZXMgYXJlIGNvbnRyb2xsZWQgaGVyZT8gSXMgdGhpcyBqdXN0IHRoZSBjb3JlIEtWTSBzdXBwb3J0LCBvciBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBleHRlbnNpb25zIG9yIG9wdGltaXphdGlvbnMgZGVmaW5lZD8KKiAgICoqRGVwZW5kZW5jeSBBbmFseXNpcyoqOiBXaGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBkb2VzIHRoaXMgZmlsZSByZWx5IG9uPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgZW5hYmxpbmcgY2VydGFpbiBLVk0gZnVuY3Rpb25hbGl0eS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHM/CiogICAqKkRlZmF1bHQgU2V0dGluZ3MqKjogV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgS1ZNIGZlYXR1cmVzPyBBcmUgdGhlIGRlZmF1bHRzIHJlYXNvbmFibGUgYW5kIHNhZmUsIG9yIGRvIHRoZXkgcmVwcmVzZW50IGEgcGVyZm9ybWFuY2UgdnMuIHNlY3VyaXR5IHRyYWRlLW9mZiB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiBhIHNwZWNpZmljIGRlcGxveW1lbnQ/CiogICAqKlBvdGVudGlhbCBBcmVhcyBmb3IgT3B0aW1pemF0aW9uKio6IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGdhaW5zIG9yIHJlZHVjZWQgcmVzb3VyY2UgY29uc3VtcHRpb24gaWYgdHVuZWQgY29ycmVjdGx5PyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzMzkwLXNwZWNpZmljIHNldHRpbmdzLgoqICAgKipQb3NzaWJsZSBJbnRlcmFjdGlvbnMqKjogSG93IGRvZXMgdGhlIEtjb25maWcgZmlsZSBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBjb2RlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyB0aGF0IGFyZSBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGp1c3QgbG9va2luZyBhdCB0aGlzIGZpbGU/CgpUaGlzIHNjYW4gd2lsbCBob3BlZnVsbHkgYWxsb3cgbWUgdG8gZGV2ZWxvcCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIEtWTSBjb25maWd1cmF0aW9uIG9uIFN5c3RlbSB6LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBLVk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRzb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuICAgNjpcdFxuICAgNzpcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbiAgIDg6XHRcdGRlZl9ib29sIHlcbiAgIDk6XHRcdHByb21wdCBcJiMzNDtLVk1cJiMzNDtcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcbiAgMTI6XHRcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXG4gIDEzOlx0XHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXG4gIDE2Olx0XG4gIDE3Olx0aWYgVklSVFVBTElaQVRJT05cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgS1ZNXG4gIDIwOlx0XHRkZWZfdHJpc3RhdGUgeVxuICAyMTpcdFx0cHJvbXB0IFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgMjM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMjQ6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZfU1lOQ1xuICAyNTpcdFx0c2VsZWN0IEtWTV9DT01NT05cbiAgMjY6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI3Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcbiAgMjg6XHRcdHNlbGVjdCBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcbiAgMjk6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDMwOlx0XHRzZWxlY3QgS1ZNX1ZGSU9cbiAgMzE6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICAzMjpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMzM6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBwYXJhdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgdGhlIFNJRVxuICAzNjpcdFx0ICB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXR5IG9uIHRoZSBtYWluZnJhbWUuIFRoaXMgc2hvdWxkIHdvcmtcbiAgMzc6XHRcdCAgb24gYW55IDY0Yml0IG1hY2hpbmUuXG4gIDM4Olx0XG4gIDM5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcbiAgNDA6XHRcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA0MzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG4gIDQ4Olx0XHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gS1ZNXG4gIDUwOlx0XHRoZWxwXG4gIDUxOlx0XHQgIEFsbG93IENBUF9TWVNfQURNSU4gdXNlcnMgdG8gY3JlYXRlIEtWTSB2aXJ0dWFsIG1hY2hpbmVzIHRoYXQgYXJlXG4gIDUyOlx0XHQgIGNvbnRyb2xsZWQgYnkgdXNlcnNwYWNlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1NTpcdFxuICA1NjpcdGVuZGlmICMgVklSVFVBTElaQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZywgYW5kIHRhaWxvcmVkIGZvciBhIGZlbGxvdyBleHBlcnQ6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBLVk0gaXMgdGhlIGNlbnRyYWwgcG9pbnQgaGVyZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgd2UgbmVlZCB0byBhY2NvdW50IGZvciwgcGFydGljdWxhcmx5IGZvciBQYXJhdmlydHVhbGl6YXRpb24gKFBWKT8gSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgYSBzcGVjaWZpYywgZGVkaWNhdGVkIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZyByZWxhdGVkIHRvIFBhcmF2aXJ0dWFsaXphdGlvbiBvbiBTMzkwLCBsaWtlIGEgYENPTkZJR19LVk1fUzM5MF9QVmAgZmxhZz8gV2UgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGRlcGVuZGVuY2llcyBvciByZWxldmFudCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsIHRvIG91ciBkZXNpcmVkIFBWIHNldHVwLiBUaGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAuKlBWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBmb3IgUGFyYXZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhcmF2aXJ0dWFsaXphdGlvbiAoUFYpIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2Ugd2hlcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcGxhY2UgdG8gZGlzY292ZXIgd2hhdCBrZXJuZWwgZmVhdHVyZXMgYXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBCeSBleGFtaW5pbmcgdGhpcyBLY29uZmlnIGZpbGUsIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSB3aGV0aGVyIFBWIHN1cHBvcnQgaXMgZW5hYmxlZCwgd2hhdCBraW5kcyBvZiBQViBpbnRlcmZhY2VzIGFyZSBzdXBwb3J0ZWQgKGUuZy4sIHZpcnRpbywgcGFyYXZpcnQtb3BzKSwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHZpcnR1YWxpemF0aW9uIG9uIHMzOTAuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5d29yZHMgbGlrZSAmIzM0O3BhcmF2aXJ0dWFsaXphdGlvbiwmIzM0OyAmIzM0O3B2LCYjMzQ7ICYjMzQ7dmlydGlvLCYjMzQ7IG9yIHNwZWNpZmljIEtjb25maWcgc3ltYm9scyByZWxhdGVkIHRvIHRob3NlIGNvbmNlcHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFBWIGlzIGludGVncmF0ZWQgaW50byB0aGUgczM5MCBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qU0VDVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIFNlYXJjaCBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHNwZWNpZmljIGluZGljYXRvcnMgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBrZXkgdGVybXMgcmVsYXRlZCB0byB3aGF0ZXZlciB0aGlzICYjMzQ7UFJPVEVDVEVEJiMzNDsgb3IgJiMzNDtQViYjMzQ7IHJlZmVycyB0by4gSXQmIzM5O3MgYSBxdWljaywgZWZmaWNpZW50IHdheSB0byBpZGVudGlmeSB0aGUgY29yZSBjb25jZXB0IGFuZCBpdHMgcG90ZW50aWFsIHZhcmlhdGlvbnMgd2l0aGluIHRoZSBjb250ZXh0LiBUaGlzIGluaXRpYWwgYXBwcm9hY2ggZm9jdXNlcyBvbiBkaXJlY3QgbWF0Y2hlcyB0byBhdm9pZCBtaXNzaW5nIGFueSBkaXJlY3QgcmVmZXJlbmNlcy4gVGhpcyBoZWxwcyBlc3RhYmxpc2ggYW4gaW5pdGlhbCByYW5nZSBvZiByZWxldmFudCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAuKlBST1RFQ1RFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM5OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24gaW4gdGhlIFMzOTAgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGtlcm5lbCBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzdGFydCBieSBsb29raW5nIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIGEgc2VhcmNoLCBzb21ldGhpbmcgbGlrZSBgY29uZmlnIC4qYCwgd2hpY2ggc2hvdWxkIGNhdGNoIGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJJiMzOTtsbCBmb2N1cyB0aGF0IHNlYXJjaCB0byBiZSByZWxldmFudCB0byB2aXJ0dWFsaXphdGlvbiwgc2luY2UgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0IGluIHRoZSBzdWJqZWN0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdheSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlcmUgY291bGQgYmUgc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNLCBzMzkweC1zcGVjaWZpYyBwYXJhdmlydHVhbGl6YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBtb3JlIGdlbmVyYWxpemVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgdGhhdCYjMzk7cyBsdXJraW5nIGluIHRoZXJlLiBHb3R0YSBtYXAgb3V0IHdoYXQmIzM5O3MgYXZhaWxhYmxlIGJlZm9yZSBJIGNhbiBtYWtlIGEganVkZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmFyY2gvczM5MC9LY29uZmlnOjI6Y29uZmlnIE1NVVxuYXJjaC9zMzkwL0tjb25maWctMy1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTQtXG5hcmNoL3MzOTAvS2NvbmZpZzo1OmNvbmZpZyBDUFVfQklHX0VORElBTlxuYXJjaC9zMzkwL0tjb25maWctNi1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTctXG5hcmNoL3MzOTAvS2NvbmZpZzo4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvczM5MC9LY29uZmlnLTktXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0xMC1cbmFyY2gvczM5MC9LY29uZmlnOjExOmNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbmFyY2gvczM5MC9LY29uZmlnLTEyLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctMTMtXG5hcmNoL3MzOTAvS2NvbmZpZzoxNDpjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyXG5hcmNoL3MzOTAvS2NvbmZpZy0xNS1cdGRlZl9ib29sIG5cbmFyY2gvczM5MC9LY29uZmlnLTE2LVxuYXJjaC9zMzkwL0tjb25maWc6MTc6Y29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NFxuYXJjaC9zMzkwL0tjb25maWctMTgtXHRkZWZfYm9vbCBuXG5hcmNoL3MzOTAvS2NvbmZpZy0xOS1cbmFyY2gvczM5MC9LY29uZmlnOjIwOmNvbmZpZyBBUkNIX1BST0NfS0NPUkVfVEVYVFxuYXJjaC9zMzkwL0tjb25maWctMjEtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0yMi1cbmFyY2gvczM5MC9LY29uZmlnOjIzOmNvbmZpZyBHRU5FUklDX0hXRUlHSFRcbmFyY2gvczM5MC9LY29uZmlnLTI0LVx0ZGVmX2Jvb2wgIUhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMjUtXG5hcmNoL3MzOTAvS2NvbmZpZzoyNjpjb25maWcgR0VORVJJQ19CVUdcbmFyY2gvczM5MC9LY29uZmlnLTI3LVx0ZGVmX2Jvb2wgeSBpZiBCVUdcbmFyY2gvczM5MC9LY29uZmlnLTI4LVxuYXJjaC9zMzkwL0tjb25maWc6Mjk6Y29uZmlnIEdFTkVSSUNfQlVHX1JFTEFUSVZFX1BPSU5URVJTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMC1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTMxLVxuYXJjaC9zMzkwL0tjb25maWc6MzI6Y29uZmlnIEFVRElUX0FSQ0hcbmFyY2gvczM5MC9LY29uZmlnLTMzLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctMzQtXG5hcmNoL3MzOTAvS2NvbmZpZzozNTpjb25maWcgTk9fSU9QT1JUX01BUFxuYXJjaC9zMzkwL0tjb25maWctMzYtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zNy1cbmFyY2gvczM5MC9LY29uZmlnOjM4OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1VQUk9CRVNcbmFyY2gvczM5MC9LY29uZmlnLTM5LVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctNDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTpjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxuYXJjaC9zMzkwL0tjb25maWctNDItXHRoZXhcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00NS1cbmFyY2gvczM5MC9LY29uZmlnOjQ2OmNvbmZpZyBDQ19IQVNfQlVJTFRJTl9GRlNcbmFyY2gvczM5MC9LY29uZmlnLTQ3LVx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXHUwMDI2XHUwMDI2IEdDQ19WRVJTSU9OIFx1MDAzYyAxNjAwMDApXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTItXG5hcmNoL3MzOTAvS2NvbmZpZzo1Mzpjb25maWcgQ0NfQVNNX0ZMQUdfT1VUUFVUX0JST0tFTlxuYXJjaC9zMzkwL0tjb25maWctNTQtXHRkZWZfYm9vbCBDQ19JU19HQ0MgXHUwMDI2XHUwMDI2IEdDQ19WRVJTSU9OIFx1MDAzYyAxNDAyMDBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01OS1cbmFyY2gvczM5MC9LY29uZmlnOjYwOmNvbmZpZyBDQ19IQVNfQVNNX0FPUl9GT1JNQVRfRkxBR1NcbmFyY2gvczM5MC9LY29uZmlnLTYxLVx0ZGVmX2Jvb2wgIShDQ19JU19DTEFORyBcdTAwMjZcdTAwMjYgQ0xBTkdfVkVSU0lPTiBcdTAwM2MgMTkwMTAwKVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTY1LVxuYXJjaC9zMzkwL0tjb25maWc6NjY6Y29uZmlnIENDX0hBU19BU01fSU1NRURJQVRFX1NUUklOR1NcbmFyY2gvczM5MC9LY29uZmlnLTY3LVx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXHUwMDI2XHUwMDI2IEdDQ19WRVJTSU9OIFx1MDAzYyA5MDAwMClcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03MS1cbmFyY2gvczM5MC9LY29uZmlnOjcyOmNvbmZpZyBDQ19IQVNfU1RBQ0tQUk9URUNUT1JfR0xPQkFMXG5hcmNoL3MzOTAvS2NvbmZpZy03My1cdGRlZl9ib29sICQoY2Mtb3B0aW9uLCAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZD1nbG9iYWwgLW1zdGFjay1wcm90ZWN0b3ItZ3VhcmQtcmVjb3JkKVxuYXJjaC9zMzkwL0tjb25maWctNzQtXG5hcmNoL3MzOTAvS2NvbmZpZzo3NTpjb25maWcgUzM5MFxuYXJjaC9zMzkwL0tjb25maWctNzYtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctMjg5LVxuYXJjaC9zMzkwL0tjb25maWc6MjkwOmNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcbmFyY2gvczM5MC9LY29uZmlnLTI5MS1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTI5Mi1cbmFyY2gvczM5MC9LY29uZmlnOjI5Mzpjb25maWcgUEdUQUJMRV9MRVZFTFNcbmFyY2gvczM5MC9LY29uZmlnLTI5NC1cdGludFxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTI5Nz1zb3VyY2UgXCYjMzQ7a2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZy0yOTgtXG5hcmNoL3MzOTAvS2NvbmZpZzoyOTk6Y29uZmlnIEFSQ0hfQ0NfQ0FOX0xJTktcbmFyY2gvczM5MC9LY29uZmlnLTMwMC1cdGJvb2xcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDItXG5hcmNoL3MzOTAvS2NvbmZpZzozMDM6Y29uZmlnIEFSQ0hfVVNFUkZMQUdTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDQtXHRzdHJpbmdcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDYtXG5hcmNoL3MzOTAvS2NvbmZpZzozMDc6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNcbmFyY2gvczM5MC9LY29uZmlnLTMwOC1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTMwOS1cbmFyY2gvczM5MC9LY29uZmlnOjMxMDpjb25maWcgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTEtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zMTItXG5hcmNoL3MzOTAvS2NvbmZpZzozMTM6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfU0lHXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTQtXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zMTUtXG5hcmNoL3MzOTAvS2NvbmZpZzozMTY6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfUFVSR0FUT1JZXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTctXHRkZWZfYm9vbCB5XG5hcmNoL3MzOTAvS2NvbmZpZy0zMTgtXG5hcmNoL3MzOTAvS2NvbmZpZzozMTk6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfQ1JBU0hfRFVNUFxuYXJjaC9zMzkwL0tjb25maWctMzIwLVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTMyNS1cbmFyY2gvczM5MC9LY29uZmlnOjMyNjpjb25maWcgQVJDSF9ERUZBVUxUX0NSQVNIX0RVTVBcbmFyY2gvczM5MC9LY29uZmlnLTMyNy1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz0zMjk9bWVudSBcJiMzNDtQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXNcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTMzMC1cbmFyY2gvczM5MC9LY29uZmlnOjMzMTpjb25maWcgSEFWRV9NQVJDSF9aMTBfRkVBVFVSRVNcbmFyY2gvczM5MC9LY29uZmlnLTMzMi1cdGRlZl9ib29sIG5cbmFyY2gvczM5MC9LY29uZmlnLTMzMy1cbmFyY2gvczM5MC9LY29uZmlnOjMzNDpjb25maWcgSEFWRV9NQVJDSF9aMTk2X0ZFQVRVUkVTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzUtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzM3LVxuYXJjaC9zMzkwL0tjb25maWc6MzM4OmNvbmZpZyBIQVZFX01BUkNIX1pFQzEyX0ZFQVRVUkVTXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzktXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzQxLVxuYXJjaC9zMzkwL0tjb25maWc6MzQyOmNvbmZpZyBIQVZFX01BUkNIX1oxM19GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMzQzLVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTM0NS1cbmFyY2gvczM5MC9LY29uZmlnOjM0Njpjb25maWcgSEFWRV9NQVJDSF9aMTRfRkVBVFVSRVNcbmFyY2gvczM5MC9LY29uZmlnLTM0Ny1cdGRlZl9ib29sIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zNDktXG5hcmNoL3MzOTAvS2NvbmZpZzozNTA6Y29uZmlnIEhBVkVfTUFSQ0hfWjE1X0ZFQVRVUkVTXG5hcmNoL3MzOTAvS2NvbmZpZy0zNTEtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzUzLVxuYXJjaC9zMzkwL0tjb25maWc6MzU0OmNvbmZpZyBIQVZFX01BUkNIX1oxNl9GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMzU1LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTM1Ny1cbmFyY2gvczM5MC9LY29uZmlnOjM1ODpjb25maWcgSEFWRV9NQVJDSF9aMTdfRkVBVFVSRVNcbmFyY2gvczM5MC9LY29uZmlnLTM1OS1cdGRlZl9ib29sIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz0zNjI9Y2hvaWNlXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzY1LVxuYXJjaC9zMzkwL0tjb25maWc6MzY2OmNvbmZpZyBNQVJDSF9aMTBcbmFyY2gvczM5MC9LY29uZmlnLTM2Ny1cdGJvb2wgXCYjMzQ7SUJNIFN5c3RlbSB6MTBcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0zNzMtXG5hcmNoL3MzOTAvS2NvbmZpZzozNzQ6Y29uZmlnIE1BUkNIX1oxOTZcbmFyY2gvczM5MC9LY29uZmlnLTM3NS1cdGJvb2wgXCYjMzQ7SUJNIHpFbnRlcnByaXNlIDExNCBhbmQgMTk2XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzgyLVxuYXJjaC9zMzkwL0tjb25maWc6MzgzOmNvbmZpZyBNQVJDSF9aRUMxMlxuYXJjaC9zMzkwL0tjb25maWctMzg0LVx0Ym9vbCBcJiMzNDtJQk0gekJDMTIgYW5kIHpFQzEyXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctMzkxLVxuYXJjaC9zMzkwL0tjb25maWc6MzkyOmNvbmZpZyBNQVJDSF9aMTNcbmFyY2gvczM5MC9LY29uZmlnLTM5My1cdGJvb2wgXCYjMzQ7SUJNIHoxM3MgYW5kIHoxM1wmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQwMC1cbmFyY2gvczM5MC9LY29uZmlnOjQwMTpjb25maWcgTUFSQ0hfWjE0XG5hcmNoL3MzOTAvS2NvbmZpZy00MDItXHRib29sIFwmIzM0O0lCTSB6MTQgWlIxIGFuZCB6MTRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00MDktXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTA6Y29uZmlnIE1BUkNIX1oxNVxuYXJjaC9zMzkwL0tjb25maWctNDExLVx0Ym9vbCBcJiMzNDtJQk0gejE1XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDE4LVxuYXJjaC9zMzkwL0tjb25maWc6NDE5OmNvbmZpZyBNQVJDSF9aMTZcbmFyY2gvczM5MC9LY29uZmlnLTQyMC1cdGJvb2wgXCYjMzQ7SUJNIHoxNlwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQyNi1cbmFyY2gvczM5MC9LY29uZmlnOjQyNzpjb25maWcgTUFSQ0hfWjE3XG5hcmNoL3MzOTAvS2NvbmZpZy00MjgtXHRib29sIFwmIzM0O0lCTSB6MTdcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz00MzU9ZW5kY2hvaWNlXG5hcmNoL3MzOTAvS2NvbmZpZy00MzYtXG5hcmNoL3MzOTAvS2NvbmZpZzo0Mzc6Y29uZmlnIE1BUkNIX1oxMF9UVU5FXG5hcmNoL3MzOTAvS2NvbmZpZy00MzgtXHRkZWZfYm9vbCBUVU5FX1oxMCB8fCBNQVJDSF9aMTAgXHUwMDI2XHUwMDI2IFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDM5LVxuYXJjaC9zMzkwL0tjb25maWc6NDQwOmNvbmZpZyBNQVJDSF9aMTk2X1RVTkVcbmFyY2gvczM5MC9LY29uZmlnLTQ0MS1cdGRlZl9ib29sIFRVTkVfWjE5NiB8fCBNQVJDSF9aMTk2IFx1MDAyNlx1MDAyNiBUVU5FX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTQ0Mi1cbmFyY2gvczM5MC9LY29uZmlnOjQ0Mzpjb25maWcgTUFSQ0hfWkVDMTJfVFVORVxuYXJjaC9zMzkwL0tjb25maWctNDQ0LVx0ZGVmX2Jvb2wgVFVORV9aRUMxMiB8fCBNQVJDSF9aRUMxMiBcdTAwMjZcdTAwMjYgVFVORV9ERUZBVUxUXG5hcmNoL3MzOTAvS2NvbmZpZy00NDUtXG5hcmNoL3MzOTAvS2NvbmZpZzo0NDY6Y29uZmlnIE1BUkNIX1oxM19UVU5FXG5hcmNoL3MzOTAvS2NvbmZpZy00NDctXHRkZWZfYm9vbCBUVU5FX1oxMyB8fCBNQVJDSF9aMTMgXHUwMDI2XHUwMDI2IFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDQ4LVxuYXJjaC9zMzkwL0tjb25maWc6NDQ5OmNvbmZpZyBNQVJDSF9aMTRfVFVORVxuYXJjaC9zMzkwL0tjb25maWctNDUwLVx0ZGVmX2Jvb2wgVFVORV9aMTQgfHwgTUFSQ0hfWjE0IFx1MDAyNlx1MDAyNiBUVU5FX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTQ1MS1cbmFyY2gvczM5MC9LY29uZmlnOjQ1Mjpjb25maWcgTUFSQ0hfWjE1X1RVTkVcbmFyY2gvczM5MC9LY29uZmlnLTQ1My1cdGRlZl9ib29sIFRVTkVfWjE1IHx8IE1BUkNIX1oxNSBcdTAwMjZcdTAwMjYgVFVORV9ERUZBVUxUXG5hcmNoL3MzOTAvS2NvbmZpZy00NTQtXG5hcmNoL3MzOTAvS2NvbmZpZzo0NTU6Y29uZmlnIE1BUkNIX1oxNl9UVU5FXG5hcmNoL3MzOTAvS2NvbmZpZy00NTYtXHRkZWZfYm9vbCBUVU5FX1oxNiB8fCBNQVJDSF9aMTYgXHUwMDI2XHUwMDI2IFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDU3LVxuYXJjaC9zMzkwL0tjb25maWc6NDU4OmNvbmZpZyBNQVJDSF9aMTdfVFVORVxuYXJjaC9zMzkwL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgVFVORV9aMTcgfHwgTUFSQ0hfWjE3IFx1MDAyNlx1MDAyNiBUVU5FX0RFRkFVTFRcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz00NjE9Y2hvaWNlXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDcxLVxuYXJjaC9zMzkwL0tjb25maWc6NDcyOmNvbmZpZyBUVU5FX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTQ3My1cdGJvb2wgXCYjMzQ7RGVmYXVsdFwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQ3Ny1cbmFyY2gvczM5MC9LY29uZmlnOjQ3ODpjb25maWcgVFVORV9aMTBcbmFyY2gvczM5MC9LY29uZmlnLTQ3OS1cdGJvb2wgXCYjMzQ7SUJNIFN5c3RlbSB6MTBcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTQ4MC1cbmFyY2gvczM5MC9LY29uZmlnOjQ4MTpjb25maWcgVFVORV9aMTk2XG5hcmNoL3MzOTAvS2NvbmZpZy00ODItXHRib29sIFwmIzM0O0lCTSB6RW50ZXJwcmlzZSAxMTQgYW5kIDE5NlwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTQ4NC1cbmFyY2gvczM5MC9LY29uZmlnOjQ4NTpjb25maWcgVFVORV9aRUMxMlxuYXJjaC9zMzkwL0tjb25maWctNDg2LVx0Ym9vbCBcJiMzNDtJQk0gekJDMTIgYW5kIHpFQzEyXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDg4LVxuYXJjaC9zMzkwL0tjb25maWc6NDg5OmNvbmZpZyBUVU5FX1oxM1xuYXJjaC9zMzkwL0tjb25maWctNDkwLVx0Ym9vbCBcJiMzNDtJQk0gejEzcyBhbmQgejEzXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDkyLVxuYXJjaC9zMzkwL0tjb25maWc6NDkzOmNvbmZpZyBUVU5FX1oxNFxuYXJjaC9zMzkwL0tjb25maWctNDk0LVx0Ym9vbCBcJiMzNDtJQk0gejE0IFpSMSBhbmQgejE0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDk2LVxuYXJjaC9zMzkwL0tjb25maWc6NDk3OmNvbmZpZyBUVU5FX1oxNVxuYXJjaC9zMzkwL0tjb25maWctNDk4LVx0Ym9vbCBcJiMzNDtJQk0gejE1XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTAwLVxuYXJjaC9zMzkwL0tjb25maWc6NTAxOmNvbmZpZyBUVU5FX1oxNlxuYXJjaC9zMzkwL0tjb25maWctNTAyLVx0Ym9vbCBcJiMzNDtJQk0gejE2XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTA0LVxuYXJjaC9zMzkwL0tjb25maWc6NTA1OmNvbmZpZyBUVU5FX1oxN1xuYXJjaC9zMzkwL0tjb25maWctNTA2LVx0Ym9vbCBcJiMzNDtJQk0gejE3XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NTA5PWVuZGNob2ljZVxuYXJjaC9zMzkwL0tjb25maWctNTEwLVxuYXJjaC9zMzkwL0tjb25maWc6NTExOmNvbmZpZyA2NEJJVFxuYXJjaC9zMzkwL0tjb25maWctNTEyLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctNTEzLVxuYXJjaC9zMzkwL0tjb25maWc6NTE0OmNvbmZpZyBDT01NQU5EX0xJTkVfU0laRVxuYXJjaC9zMzkwL0tjb25maWctNTE1LVx0aW50IFwmIzM0O01heGltdW0gc2l6ZSBvZiBrZXJuZWwgY29tbWFuZCBsaW5lXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTIxLVxuYXJjaC9zMzkwL0tjb25maWc6NTIyOmNvbmZpZyBTTVBcbmFyY2gvczM5MC9LY29uZmlnLTUyMy1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTUyNC1cbmFyY2gvczM5MC9LY29uZmlnOjUyNTpjb25maWcgTlJfQ1BVU1xuYXJjaC9zMzkwL0tjb25maWctNTI2LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIENQVXMgKDItNTEyKVwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTUzNi1cbmFyY2gvczM5MC9LY29uZmlnOjUzNzpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvczM5MC9LY29uZmlnLTUzOC1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTUzOS1cbmFyY2gvczM5MC9LY29uZmlnOjU0MDpjb25maWcgTlVNQVxuYXJjaC9zMzkwL0tjb25maWctNTQxLVx0Ym9vbCBcJiMzNDtOVU1BIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01NDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo1NDk6Y29uZmlnIE5PREVTX1NISUZUXG5hcmNoL3MzOTAvS2NvbmZpZy01NTAtXHRpbnRcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01NTMtXG5hcmNoL3MzOTAvS2NvbmZpZzo1NTQ6Y29uZmlnIFNDSEVEX1RPUE9MT0dZXG5hcmNoL3MzOTAvS2NvbmZpZy01NTUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTY1LVxuYXJjaC9zMzkwL0tjb25maWc6NTY2OmNvbmZpZyBTQ0hFRF9UT1BPTE9HWV9WRVJUSUNBTFxuYXJjaC9zMzkwL0tjb25maWctNTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTU3My1cbmFyY2gvczM5MC9LY29uZmlnOjU3NDpjb25maWcgSElQRVJESVNQQVRDSF9PTlxuYXJjaC9zMzkwL0tjb25maWctNTc1LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTU4Nj1zb3VyY2UgXCYjMzQ7a2VybmVsL0tjb25maWcuaHpcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTU4Ny1cbmFyY2gvczM5MC9LY29uZmlnOjU4ODpjb25maWcgQ0VSVF9TVE9SRVxuYXJjaC9zMzkwL0tjb25maWctNTg5LVx0Ym9vbCBcJiMzNDtHZXQgdXNlciBjZXJ0aWZpY2F0ZXMgdmlhIERJQUczMjBcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01OTgtXG5hcmNoL3MzOTAvS2NvbmZpZzo1OTk6Y29uZmlnIEtFUk5FTF9OT0JQXG5hcmNoL3MzOTAvS2NvbmZpZy02MDAtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNjE1LVxuYXJjaC9zMzkwL0tjb25maWc6NjE2OmNvbmZpZyBFWFBPTElORVxuYXJjaC9zMzkwL0tjb25maWctNjE3LVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTYyOC1cbmFyY2gvczM5MC9LY29uZmlnOjYyOTpjb25maWcgRVhQT0xJTkVfRVhURVJOXG5hcmNoL3MzOTAvS2NvbmZpZy02MzAtXHRkZWZfYm9vbCBFWFBPTElORSBcdTAwMjZcdTAwMjYgQ0NfSVNfR0NDIFx1MDAyNlx1MDAyNiBHQ0NfVkVSU0lPTiBcdTAwM2U9IDExMDIwMCBcdTAwMjZcdTAwMjYgXFxcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz02Mzg9Y2hvaWNlXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNjQyLVxuYXJjaC9zMzkwL0tjb25maWc6NjQzOmNvbmZpZyBFWFBPTElORV9PRkZcbmFyY2gvczM5MC9LY29uZmlnLTY0NC1cdGJvb2wgXCYjMzQ7c3BlY3RyZV92Mj1vZmZcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTY0NS1cbmFyY2gvczM5MC9LY29uZmlnOjY0Njpjb25maWcgRVhQT0xJTkVfQVVUT1xuYXJjaC9zMzkwL0tjb25maWctNjQ3LVx0Ym9vbCBcJiMzNDtzcGVjdHJlX3YyPWF1dG9cJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTY0OC1cbmFyY2gvczM5MC9LY29uZmlnOjY0OTpjb25maWcgRVhQT0xJTkVfRlVMTFxuYXJjaC9zMzkwL0tjb25maWctNjUwLVx0Ym9vbCBcJiMzNDtzcGVjdHJlX3YyPW9uXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NjUyPWVuZGNob2ljZVxuYXJjaC9zMzkwL0tjb25maWctNjUzLVxuYXJjaC9zMzkwL0tjb25maWc6NjU0OmNvbmZpZyBSRUxPQ0FUQUJMRVxuYXJjaC9zMzkwL0tjb25maWctNjU1LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTY2NC1cbmFyY2gvczM5MC9LY29uZmlnOjY2NTpjb25maWcgUkFORE9NSVpFX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTY2Ni1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHRoZSBhZGRyZXNzIG9mIHRoZSBrZXJuZWwgaW1hZ2UgKEtBU0xSKVwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnLTY3My1cbmFyY2gvczM5MC9LY29uZmlnOjY3NDpjb25maWcgUkFORE9NSVpFX0lERU5USVRZX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTY3NS1cdGJvb2wgXCYjMzQ7UmFuZG9taXplIHRoZSBhZGRyZXNzIG9mIHRoZSBpZGVudGl0eSBtYXBwaW5nIGJhc2VcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy02ODYtXG5hcmNoL3MzOTAvS2NvbmZpZzo2ODc6Y29uZmlnIEtFUk5FTF9JTUFHRV9CQVNFXG5hcmNoL3MzOTAvS2NvbmZpZy02ODgtXHRoZXggXCYjMzQ7S2VybmVsIGltYWdlIGJhc2UgYWRkcmVzc1wmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTcwOD1tZW51IFwmIzM0O01lbW9yeSBzZXR1cFwmIzM0O1xuYXJjaC9zMzkwL0tjb25maWctNzA5LVxuYXJjaC9zMzkwL0tjb25maWc6NzEwOmNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcbmFyY2gvczM5MC9LY29uZmlnLTcxMS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03MTMtXG5hcmNoL3MzOTAvS2NvbmZpZzo3MTQ6Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTcxNS1cdGRlZl9ib29sIHlcbmFyY2gvczM5MC9LY29uZmlnLTcxNi1cbmFyY2gvczM5MC9LY29uZmlnOjcxNzpjb25maWcgSUxMRUdBTF9QT0lOVEVSX1ZBTFVFXG5hcmNoL3MzOTAvS2NvbmZpZy03MTgtXHRoZXhcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03MjAtXG5hcmNoL3MzOTAvS2NvbmZpZzo3MjE6Y29uZmlnIE1BWF9QSFlTTUVNX0JJVFNcbmFyY2gvczM5MC9LY29uZmlnLTcyMi1cdGludCBcJiMzNDtNYXhpbXVtIHNpemUgb2Ygc3VwcG9ydGVkIHBoeXNpY2FsIG1lbW9yeSBpbiBiaXRzICg0Mi01MylcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03MzM9bWVudSBcJiMzNDtJL08gc3Vic3lzdGVtXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZy03MzQtXG5hcmNoL3MzOTAvS2NvbmZpZzo3MzU6Y29uZmlnIFFESU9cbmFyY2gvczM5MC9LY29uZmlnLTczNi1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzQ3PWlmIFBDSVxuYXJjaC9zMzkwL0tjb25maWctNzQ4LVxuYXJjaC9zMzkwL0tjb25maWc6NzQ5OmNvbmZpZyBQQ0lfTlJfRlVOQ1RJT05TXG5hcmNoL3MzOTAvS2NvbmZpZy03NTAtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgUENJIGZ1bmN0aW9ucyAoMS00MDk2KVwmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc1Nz1lbmRpZiAjIFBDSVxuYXJjaC9zMzkwL0tjb25maWctNzU4LVxuYXJjaC9zMzkwL0tjb25maWc6NzU5OmNvbmZpZyBIQVNfSU9NRU1cbmFyY2gvczM5MC9LY29uZmlnLTc2MC1cdGRlZl9ib29sIFBDSVxuYXJjaC9zMzkwL0tjb25maWctNzYxLVxuYXJjaC9zMzkwL0tjb25maWc6NzYyOmNvbmZpZyBDSFNDX1NDSFxuYXJjaC9zMzkwL0tjb25maWctNzYzLVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03NzgtXG5hcmNoL3MzOTAvS2NvbmZpZzo3Nzk6Y29uZmlnIFNDTV9CVVNcbmFyY2gvczM5MC9LY29uZmlnLTc4MC1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy03ODQtXG5hcmNoL3MzOTAvS2NvbmZpZzo3ODU6Y29uZmlnIEVBRE1fU0NIXG5hcmNoL3MzOTAvS2NvbmZpZy03ODYtXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cbmFyY2gvczM5MC9LY29uZmlnOjc5Njpjb25maWcgQVBcbmFyY2gvczM5MC9LY29uZmlnLTc5Ny1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctODA4LVxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xuYXJjaC9zMzkwL0tjb25maWctODEwLVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTgyMi1cbmFyY2gvczM5MC9LY29uZmlnOjgyMzpjb25maWcgVkZJT19DQ1dcbmFyY2gvczM5MC9LY29uZmlnLTgyNC1cdGRlZl90cmlzdGF0ZSBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTg0OD1lbmRtZW51XG5hcmNoL3MzOTAvS2NvbmZpZy04NDktXG5hcmNoL3MzOTAvS2NvbmZpZzo4NTA6Y29uZmlnIENDV1xuYXJjaC9zMzkwL0tjb25maWctODUxLVx0ZGVmX2Jvb2wgeVxuYXJjaC9zMzkwL0tjb25maWctODUyLVxuYXJjaC9zMzkwL0tjb25maWc6ODUzOmNvbmZpZyBIQVZFX1BORVRJRFxuYXJjaC9zMzkwL0tjb25maWctODU0LVx0dHJpc3RhdGVcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz04NTc9bWVudSBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuYXJjaC9zMzkwL0tjb25maWctODU4LVxuYXJjaC9zMzkwL0tjb25maWc6ODU5OmNvbmZpZyBQRkFVTFRcbmFyY2gvczM5MC9LY29uZmlnLTg2MC1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04NzEtXG5hcmNoL3MzOTAvS2NvbmZpZzo4NzI6Y29uZmlnIENNTVxuYXJjaC9zMzkwL0tjb25maWctODczLVx0ZGVmX3RyaXN0YXRlIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04ODQtXG5hcmNoL3MzOTAvS2NvbmZpZzo4ODU6Y29uZmlnIENNTV9JVUNWXG5hcmNoL3MzOTAvS2NvbmZpZy04ODYtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctODkyLVxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXG5hcmNoL3MzOTAvS2NvbmZpZy04OTQtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTA4LVxuYXJjaC9zMzkwL0tjb25maWc6OTA5OmNvbmZpZyBBUFBMREFUQV9NRU1cbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxuYXJjaC9zMzkwL0tjb25maWc6OTI2OmNvbmZpZyBBUFBMREFUQV9PU1xuYXJjaC9zMzkwL0tjb25maWctOTI3LVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05NDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cbmFyY2gvczM5MC9LY29uZmlnLTk0Mi1cdGRlZl90cmlzdGF0ZSBtXG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTU2LVxuYXJjaC9zMzkwL0tjb25maWc6OTU3OmNvbmZpZyBTMzkwX0hZUEZTXG5hcmNoL3MzOTAvS2NvbmZpZy05NTgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctOTYzLVxuYXJjaC9zMzkwL0tjb25maWc6OTY0OmNvbmZpZyBTMzkwX0hZUEZTX0ZTXG5hcmNoL3MzOTAvS2NvbmZpZy05NjUtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9OTc2PXNvdXJjZSBcJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9LY29uZmlnLTk3Ny1cbmFyY2gvczM5MC9LY29uZmlnOjk3ODpjb25maWcgUzM5MF9HVUVTVFxuYXJjaC9zMzkwL0tjb25maWctOTc5LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTk5MT1lbmRtZW51XG5hcmNoL3MzOTAvS2NvbmZpZy05OTItXG5hcmNoL3MzOTAvS2NvbmZpZzo5OTM6Y29uZmlnIFMzOTBfTU9EVUxFU19TQU5JVFlfVEVTVF9IRUxQRVJTXG5hcmNoL3MzOTAvS2NvbmZpZy05OTQtXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9OTk2PW1lbnUgXCYjMzQ7U2VsZnRlc3RzXCYjMzQ7XG5hcmNoL3MzOTAvS2NvbmZpZy05OTctXG5hcmNoL3MzOTAvS2NvbmZpZzo5OTg6Y29uZmlnIFMzOTBfVU5XSU5EX1NFTEZURVNUXG5hcmNoL3MzOTAvS2NvbmZpZy05OTktXHRkZWZfdHJpc3RhdGUgS1VOSVRfQUxMX1RFU1RTXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMTAwOC1cbmFyY2gvczM5MC9LY29uZmlnOjEwMDk6Y29uZmlnIFMzOTBfS1BST0JFU19TQU5JVFlfVEVTVFxuYXJjaC9zMzkwL0tjb25maWctMTAxMC1cdGRlZl90cmlzdGF0ZSBLVU5JVF9BTExfVEVTVFNcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDIwLVxuYXJjaC9zMzkwL0tjb25maWc6MTAyMTpjb25maWcgUzM5MF9NT0RVTEVTX1NBTklUWV9URVNUXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDIyLVx0ZGVmX3RyaXN0YXRlIEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4MgoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGVyZSBpc24mIzM5O3QgYSBkZWRpY2F0ZWQsIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBQViAocGFyYS12aXJ0dWFsaXphdGlvbikgb24gUzM5MCBLVk0uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBpbXBsaWNpdGx5IHBhcnQgb2YgS1ZNIGl0c2VsZi4gVGhlcmVmb3JlLCBsb2dpY2FsbHksIGBLVk1gIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byB3b3JyeSBhYm91dC4KCkhhbmcgb24gYSBzZWNvbmTigKYgYEtWTWAgaXMgYSB0cmlzdGF0ZSwgaXNuJiMzOTt0IGl0PyBTbywgaXQgY291bGQgYmUgYnVpbHQgYXMgYSBtb2R1bGUgKGBtYCkuIEJ1dCBjb25zaWRlcmluZyBob3cgc3l6a2FsbGVyIGdlbmVyYWxseSBoYW5kbGVzIHRoaW5ncywgaXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRvIGJlIGJ1aWx0IGFzIGVpdGhlciAmIzM5O3kmIzM5OyBvciAmIzM5O20mIzM5Oy4gIEkgd2lsbCBqdXN0IGxpc3QgYEtWTWAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgZnVuY3Rpb24uIEFoLCB5ZXMsIGZvdW5kIGl0IGluIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogaXMgaXQgZXhwb3J0ZWQ/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8ga25vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiprdm1fczM5MF9wdl9zY2xwX2tpY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIFRoYXQgRnVuY3Rpb24gaW4gS1ZNKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgIGZ1bmN0aW9uLiBUaGUgY29kZSBzYXlzIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgLCBidXQgaXQgKmlzKiBub24tc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBga3ZtLXMzOTAuaGAuIE5vIHByb2JsZW0sIHN5emthbGxlciBjYW4gZGVmaW5pdGVseSBmdXp6IG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGF0JiMzOTtzIG5vdCBhIGJsb2NrZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluLgoKV2FpdCBhIHNlY29uZC4uLkkgc2VlIGl0IG5vdy4gYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgaXMgaW52b2tlZCBieSBgaGFuZGxlX3B2X3NjbHBgLiBBbmQgdGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gYGhhbmRsZV9wdl9ub3RpZmljYXRpb25gLCB3aGljaCAqaXRzZWxmKiBpcyBjYWxsZWQgZnJvbSBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YC4gQW5kIGZpbmFsbHksICp0aGF0KiBmdW5jdGlvbiwgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAsIGlzIGNhbGxlZCBmcm9tIGB2Y3B1X3Bvc3RfcnVuYC4gQmluZ28uIFNvLCBlc3NlbnRpYWxseSwgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdGhlIGNvcmUgS1ZNIHJ1biBsb29wLCBpdCBpcyBwYXJ0IG9mIHRoZSBleGVjdXRpb24gZmxvdyBpbiB0aGUgbWFpbiBLVk0gZXhlY3V0aW9uIHBhdGguCgpOb3csIGxldCYjMzk7cyB0dXJuIG15IGF0dGVudGlvbiB0byBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDQ2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gdGhlIGNvbnRleHQgaXMgZHluYW1pYyDigJMgbm90IGEgZml4ZWQgc25hcHNob3QuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGNoZWNraW5nIHRoZSBmdW5jdGlvbiBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGhvdyBkb2VzIGl0IHBsYXkgaW50byB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5vbi1zdGF0aWMgZWxlbWVudCBlZmZlY3RzIGhvdyB0aGUgYGt2bV9zMzkwX2luamVjdF92bWAgZnVuY3Rpb24gZnVuY3Rpb25zLCBhbmQgaXRzIGVmZmVjdCBvbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgdmFyaWFibGVzIG1heSBiZSBlZmZlY3RpbmcgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiprdm1fczM5MF9pbmplY3Rfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjc5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0vczM5MCBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBLVk0vczM5MCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgc3ltYm9sIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUuIEkgc2VlIGEgZmV3IGtleSBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IHN0YXRpYyBidXQgYXJlIGdsb2JhbGx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBtb2R1bGUuIEFoYSwgYGt2bV9zMzkwX2luamVjdF92bWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBvdGhlciBmaWxlcyBpbiB0aGUgYGt2bWAgbW9kdWxlLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gV2UgZG9uJiMzOTt0IG5lZWQgYEVYUE9SVF9TWU1CT0xgIGZvciBpbnRlci1maWxlIG1vZHVsZSB1c2FnZS4gSXQmIzM5O3Mgb25seSBuZWVkZWQgaWYgb3RoZXIgbW9kdWxlcyBjb25zdW1lIHRoZXNlIHN5bWJvbHMuCgpUaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCwgYW5kIGBrdm1fczM5MF9pbmplY3Rfdm1gLgoKTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHJlbGF0ZWQgdG8gdGhlc2Ugc3ltYm9scy4KCkFscmlnaHQsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBgdmNwdV9pbnRlcnZlbnRpb25fa2lja2AsIGBraWNrX2NwdV9pcnFgLCBgX19mbG9hdGluZ19pcnFfa2lja2AsIGFuZCBgX19pbmplY3Rfdm1gIGFyZSBhbGwgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QuCgpTbywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFnYWluIGFyZTogYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgLCBhbmQgYGt2bV9zMzkwX2luamVjdF92bWAuIChBbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpc24mIzM5O3QgKmRpcmVjdGx5KiBtb2RpZmllZCwgYF9faW5qZWN0X3ZtYCB3aGljaCBpdCB3cmFwcyBpcy4pCgpXYWl0LCBsZXQgbWUganVzdCBjb25maXJtIHRoYXQgdGhvdWdodC4gYGt2bV9zMzkwX2luamVjdF92bWAgKmNhbGxzKiBgX19pbmplY3Rfdm1gLiBTbywgYSBjaGFuZ2UgdG8gYF9faW5qZWN0X3ZtYCBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZiBga3ZtX3MzOTBfaW5qZWN0X3ZtYCwgZXZlbiB0aG91Z2ggdGhlIGxhdHRlciBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCB0aGF0IGlzIGNvcnJlY3QgYW5kIG5vdCBzb21lIG9iZnVzY2F0aW9uLiBJIHNob3VsZCBnbyBjaGVjayBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGt2bV9zMzkwX2luamVjdF92bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDY4PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTAzOmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTA0LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMxMgoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWVkKioKCk9rYXksIGBrdm1fczM5MF9pbmplY3Rfdm1gIGxvb2tzIGxpa2UgYSBzb2xpZCBlbnRyeSBwb2ludC4gQnV0IGhvbGQgb24uLi4gSSByZW1lbWJlciBub3csIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB3aGVuIHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBpb2N0bCBpcyB1c2VkLiBCaW5nbyEgVGhhdCBtZWFucyBpdCYjMzk7cyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBQZXJmZWN0ISBUaGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIGNhbiBieXBhc3MgYSBsb3Qgb2YgdGhlIHVzdWFsIGNvbXBsZXhpdGllcyBieSBnb2luZyBzdHJhaWdodCB0aHJvdWdoIHRoZSBpb2N0bCBpbnRlcmZhY2UuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byBga3ZtX2FyY2hfdm1faW9jdGxgIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIHRvIHVuZGVyc3RhbmQgdGhlIHNldHVwLiBJIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGl0IGV4cGVjdHMgYW5kIGhvdyB0aGF0IGluamVjdGlvbiBtZWNoYW5pc20gaXMgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1MzOTBfSU5URVJSVVBUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cdHN3aXRjaCAoaW9jdGwpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTM2Olx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTM3LVx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0NDM9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NTgtXHR9XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQ1OTpcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ2MC1cdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAwOQoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTS9zMzkweCBJbnRlcnJ1cHQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gSSBjYW4gY29uZmlybSB0aGF0IHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBpb2N0bCwgYXMgSSBzdXNwZWN0ZWQsICpkb2VzKiBpbmRlZWQgY2FsbCBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhcyBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmdW5jdGlvbiBmb3IgZnV6emluZyBlZmZvcnRzLiBJdOKAmXMgYSBjb3JlIGVudHJ5IHBvaW50LgoKTGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyOgoKKiAgICoqRnV6emluZyBQcmlvcml0eToqKiBIaWdoIHByaW9yaXR5IC0gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdCBnaXZlbiB0aGUgY2hhbmdlcy4KKiAgICoqS2V5IEZvY3VzIFN5bWJvbHM6KiogVGhlIHBhdGNoIHJlYWxseSBoaWdobGlnaHRzIHRoZXNlOgogICAgKiAgIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgOiBUaGlzIGlzIGNsZWFybHkgaW52b2x2ZWQgaW4gdGhlICpuZXcqIGxvZ2ljLCB3aGljaCBtZWFucyBhbnkgc3VidGxlIGNoYW5nZXMgaW4gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBoYW5kbGluZyBuZWVkIHRvIGJlIGNoZWNrZWQuCiAgICAqICAgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2A6IFRoaXMgZnVuY3Rpb24gaXMgdGllZCB0byBraWNraW5nIFZDUFVzLiBJIGJldCB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBpbnRlcnJ1cHRzIGZvcmNlIGV4ZWN1dGlvbiB0byBtb3ZlLgogICAgKiAgIGBrdm1fczM5MF9pbmplY3Rfdm1gOiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBkaXJlY3QgaW5qZWN0aW9uIHBvaW50LiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIG91ciBmdXp6aW5nIHN0cmF0ZWd5LiBXZSBuZWVkIHRvIGhhbW1lciB0aGlzLgoqICAgKipFbmFibGVkIENvbmZpZ3VyYXRpb246KiogVGhlIGBLVk1gIGNvbmZpZyBpcyByZXF1aXJlZC4gTm90IGEgc3VycHJpc2UsIGJ1dCBpbXBvcnRhbnQgdG8gbm90ZS4KKiAgICoqUmVhc29uaW5nIFN1bW1hcnk6KiogVGhpcyBwYXRjaCBtb2RpZmllcyBob3cgZmxvYXRpbmcgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aGluIEtWTSBvbiBzMzkweC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBsb2dpYyBmb3IgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBhY3Jvc3MgVkNQVXMuIFRoZSBwYXRjaCBpcyB0aWVkIHRvIGludGVycnVwdCBpbmplY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIE1vcmVvdmVyLCB0aGVzZSBjaGFuZ2VzIGltcGFjdCBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzIGFuZCBWQ1BVIGV4ZWN1dGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgdGhhdCBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aHMgYXJlIGJlaW5nIHVwZGF0ZWQgb3IgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaXN0cmlidXRlX2Zsb2F0X2lycXMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfc2NscF9raWNrJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBvbiBzMzkweC4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBJUlFzIGFjcm9zcyBWQ1BVcyBhbmQgdG8ga2ljayBWQ1BVcyB3aGVuIHNwZWNpZmljIGludGVycnVwdHMgYXJlIGluamVjdGVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fUzM5MF9JTlRFUlJVUFQpIGFuZCBkdXJpbmcgVkNQVSBleGVjdXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9zY2xwX2tpY2smIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIG9uIHMzOTB4LiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIElSUXMgYWNyb3NzIFZDUFVzIGFuZCB0byBraWNrIFZDUFVzIHdoZW4gc3BlY2lmaWMgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TMzkwX0lOVEVSUlVQVCkgYW5kIGR1cmluZyBWQ1BVIGV4ZWN1dGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gZm9yIHMzOTAsIGludHJvZHVjaW5nIGEgbmV3IHN0YXRpc3RpYyBgaW5qZWN0X3JlZGlzdGAgYW5kIGNoYW5naW5nIGhvdyB2Q1BVcyBhcmUga2lja2VkIHdoZW4gaW50ZXJydXB0cyBhcmUgcGVuZGluZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBsb2NhbCB2YXJpYWJsZSBgcGFybWAgaW4gYF9faW5qZWN0X3ZtKClgLCB3aGljaCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgZm9yIGNlcnRhaW4gaW50ZXJydXB0IHR5cGVzIChlLmcuLCBgS1ZNX1MzOTBfTUNIS2ApLiBIb3dldmVyLCB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIGFuZCBzdWJzZXF1ZW50bHkgdG8gYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCwgd2hlcmUgaXQgaXMgY29tcGxldGVseSBpZ25vcmVkIGZvciB0aG9zZSBzcGVjaWZpYyBpbnRlcnJ1cHQgdHlwZXMuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgc2hhZG93IGxldmVsIGFuZCBvbmx5IHJlcG9ydHMgYW4gZXJyb3IgaWYgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdXNlZCBpbiBhIGJyYW5jaCwgYXMgYSBtZW1vcnkgYWRkcmVzcywgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gU2luY2UgYHBhcm1gIGlzIG5ldmVyIGV2YWx1YXRlZCBpbiB0aGVzZSB3YXlzIHdoZW4gdW5pbml0aWFsaXplZCwgaXQgd2lsbCBub3QgdHJpZ2dlciBhIEtNU0FOIHJlcG9ydC4gT3RoZXIgY2hhbmdlcyBpbnZvbHZlIGJhc2ljIGNvbnRyb2wgZmxvdywgdkNQVSB3YWtldXBzLCBhbmQgYSBuZXcgZmllbGQgaW4gYHN0cnVjdCBrdm1fdm1fc3RhdGAgKHdoaWNoIGlzIHplcm8tYWxsb2NhdGVkKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBwYXJzaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODgzY2ZhMDZlNzdiZTYxYjc5YTYwODU0OTE2N2JkMWViZDJkNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDowMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTQ2Nyw2ICYjNDM7NDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHsKIAl1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7CiAJdTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTsKJiM0MzsJdTY0IGluamVjdF9yZWRpc3Q7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggMTk4MGRmNjFlZjMwNC4uZTFkZTNmNDcxZmZkMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC01MzYsNiAmIzQzOzUzNiwxNSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wdl9zY2xwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzZXRfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCAmYW1wO2ZpLSZndDtwZW5kaW5nX2lycXMpOwogCWNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgJmFtcDtmaS0mZ3Q7bWFza2VkX2lycXMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtmaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXZSBtaXNzZWQgdGhlIGZsb2F0aW5nIElSUSBraWNrIHNpbmNlIHdlIGNhbiBvbmx5IGluamVjdAomIzQzOwkgKiB3aGVuIHdlIGVuZCB1cCBoZXJlIGFuZCBub3Qgd2hlbiB0aGUgaXJxIHdhcyBpbmplY3RlZCB2aWEKJiM0MzsJICogdGhlIEZMSUMuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdyB0aGF0IHdlIGhhdmUgY2xlYXJlZCB0aGUgbWFza2luZyB3ZSBjYW4ga2ljayBjcHVzLgomIzQzOwkgKi8KJiM0MzsJa3ZtX3MzOTBfcHZfc2NscF9raWNrKHZjcHUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA4ZjI0YmNkMWE2ZDM2Li4xZWU5YWIyNTA1MDQyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTM2Nyw2ICYjNDM7MzY3LDM3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbGl2ZXJhYmxlX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBhY3RpdmVfbWFzazsKIH0KIAomIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7CiYjNDM7CWludCBzaWdjcHUsIG9ubGluZV92Y3B1czsKJiM0MzsKJiM0MzsJaWYgKCFSRUFEX09OQ0Uoa3ZtLSZndDthcmNoLmZsb2F0X2ludC5wZW5kaW5nX2lycXMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZCgmYW1wO2t2bS0mZ3Q7b25saW5lX3ZjcHVzKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZQomIzQzOwkgKiBtaWdodCBidXJuIHRvbyBtYW55IGN5Y2xlcyBidXQgYXBhcnQgZnJvbSB0aGF0IHdha2luZyBhCiYjNDM7CSAqIHZjcHUgaXMgbm90IGhhcm1mdWwuCiYjNDM7CSAqLwomIzQzOwlzaWdjcHUgPSBmaW5kX2ZpcnN0X2JpdChrdm0tJmd0O2FyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMpOwomIzQzOwkvKiBXZWxsIG5vYm9keSYjMzk7cyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovCiYjNDM7CWlmIChzaWdjcHUgPT0gb25saW5lX3ZjcHVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7CiYjNDM7CQlpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHsKJiM0MzsJCQlrdm0tJmd0O3N0YXQuaW5qZWN0X3JlZGlzdCYjNDM7JiM0Mzs7CiYjNDM7CQkJa3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJc2lnY3B1ID0gZmluZF9uZXh0X2JpdChrdm0tJmd0O2FyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICYjNDM7JiM0MztzaWdjcHUpOwomIzQzOwl9IHdoaWxlIChzaWdjcHUgJmx0OyBvbmxpbmVfdmNwdXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9fc2V0X2NwdV9pZGxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9XQUlUKTsKQEAgLTE5MTUsNDkgJiM0MzsxOTQ2LDEyOSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2sodTY0IHR5cGUsIGludCBpc2MpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBLVk1fUzM5MF9NQ0hLOgomIzQzOwkJLyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi8KJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1ZJUlRJTyk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8CiYjNDM7CQkgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCXJldHVybiBpc2NfdG9faXJxX3R5cGUoaXNjKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKLSAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC4KJiM0MzsgKiBTZXR1cCBpbnRlcnZlbnRpb24gbWFza3MgdG8gY2F0Y2ggcnVubmluZyB2Y3B1cyB0aGF0IGhvcGVmdWxseSBvcGVuCiYjNDM7ICogdGhlaXIgbWFza3Mgc29vbmlzaCBhbmQga2ljayBzbGVlcGluZyB2Y3B1cyB0byBtb3RpdmF0ZSB0aGVtIHRvCiYjNDM7ICogdGFrZSBJUlFzLgogICovCi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpCiYjNDM7c3RhdGljIHZvaWQgdmNwdV9pbnRlcnZlbnRpb25fa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0eXBlKQomIzQzO3sKJiM0MzsJLyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovCiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEtWTV9TMzkwX01DSEs6CiYjNDM7CQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCWlmICghKHR5cGUgJmFtcDsgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgJmFtcDsmYW1wOwomIzQzOwkJICAgICAgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmdpc2FfaW50Lm9yaWdpbikgfHwKJiM0MzsJCSAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKHZjcHUpKQomIzQzOwkJCWt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0lPX0lOVCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VYVF9JTlQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJa3ZtX3MzOTBfdmNwdV93YWtldXAodmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGtpY2tfY3B1X2lycShzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwogCWludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwOwomIzQzOwl1NjQgaXJxX3BlbmRfbWFzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiAJaWYgKCFvbmxpbmVfdmNwdXMpCiAJCXJldHVybjsKIAomIzQzOwlpcnFfcGVuZF9tYXNrID0gaW50aV90b19pcnFfcGVuZF9tYXNrKHR5cGUsIHBhcm0pOwogCWZvciAoc2lnY3B1ID0ga3ZtLSZndDthcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUmIzQzOyYjNDM7KSB7CiAJCXNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7CiAJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTsKLQkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKQomIzQzOwkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSAmYW1wOyBpcnFfcGVuZF9tYXNrKQogCQkJYnJlYWs7CiAJCS8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovCi0JCWlmIChucl90cmllcyYjNDM7JiM0MzsgJmd0Oz0gb25saW5lX3ZjcHVzKQotCQkJcmV0dXJuOwomIzQzOwkJaWYgKG5yX3RyaWVzJiM0MzsmIzQzOyAmZ3Q7PSBvbmxpbmVfdmNwdXMgKiAyKSB7CiYjNDM7CQkJZHN0X3ZjcHUgPSBOVUxMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAotCS8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgS1ZNX1MzOTBfTUNISzoKLQkJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX1NUT1BfSU5UKTsKLQkJYnJlYWs7Ci0JY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKLQkJaWYgKCEodHlwZSAmYW1wOyBLVk1fUzM5MF9JTlRfSU9fQUlfTUFTSyAmYW1wOyZhbXA7Ci0JCSAgICAgIGt2bS0mZ3Q7YXJjaC5naXNhX2ludC5vcmlnaW4pIHx8Ci0JCSAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKGRzdF92Y3B1KSkKLQkJCWt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9JT19JTlQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfRVhUX0lOVCk7Ci0JCWJyZWFrOwomIzQzOwkvKiBOb2JvZHkgd2FzIGVuYWJsZWQsIHRpbWUgdG8gd2FrZSBhbGwgb2YgdGhlbSAqLwomIzQzOwlpZiAoIWRzdF92Y3B1KSB7CiYjNDM7CQlrdm1fZm9yX2VhY2hfdmNwdShpLCBkc3RfdmNwdSwga3ZtKQomIzQzOwkJCXZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpOwomIzQzOwkJcmV0dXJuOwogCX0KLQlrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7CiYjNDM7CiYjNDM7CXZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUaGUgY3B1IHRoYXQgY2FsbGVkIHNjbHAgbGlrZWx5IHdpbGwgYWxzbyB0YWtlIHRoZSBJUlEsIG5vCiYjNDM7CSAqIG5lZWQgdG8ga2ljayBhbnlvbmUuCiYjNDM7CSAqLwomIzQzOwlpZiAobGlrZWx5KGRlbGl2ZXJhYmxlX2lycXModmNwdSkgJmFtcDsgSVJRX1BFTkRfRVhUX1NFUlZJQ0UpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3IgdGhlIG90aGVyIGNhc2VzIHdlIG1pZ2h0IGhhdmUgc2xlZXBpbmcgY3B1cyB3aXRoIG9wZW4KJiM0MzsJICogbWFza3MuIFRpbWUgdG8gZmluZCBhbmQga2ljayB0aGVtLgomIzQzOwkgKi8KJiM0MzsJa2lja19jcHVfaXJxKHZjcHUtJmd0O2t2bSwgS1ZNX1MzOTBfSU5UX1NFUlZJQ0UsIC0xKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSkKJiM0Mzt7CiYjNDM7CWludCBwcm90OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKJiM0MzsJcHJvdCA9IGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZChrdm0pOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2xvY2spOwomIzQzOwkvKgomIzQzOwkgKiBObyBuZWVkIHRvIGtpY2sgb24gbm9uLWV2IHNlcnZpY2UgSVJRcyBmb3IgUFYgVk1zLCB3ZSYjMzk7cmUKJiM0MzsJICogbm90IGFsbG93ZWQgdG8gaW5qZWN0IGFueXdheS4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc2NscAomIzQzOwkgKiBpbnN0cnVjdGlvbiBub3RpZmljYXRpb24gQUZURVIgcmUtZW50cnkgb2YgdGhlIHZjcHUgdGhhdAomIzQzOwkgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJvdCAmYW1wOyZhbXA7IHR5cGUgPT0gS1ZNX1MzOTBfSU5UX1NFUlZJQ0UgJmFtcDsmYW1wOwomIzQzOwkgICAgIShwYXJtICZhbXA7IFNDQ0JfRVZFTlRfUEVORElORykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWtpY2tfY3B1X2lycShrdm0sIHR5cGUsIHBhcm0pOwogfQogCiBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogewogCXU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktJmd0O3R5cGUpOwomIzQzOwl1NjQgcGFybTsKIAlpbnQgcmM7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTE5NjgsMTIgJiM0MzsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpCiAJCXJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6CiYjNDM7CQlwYXJtID0gaW50aS0mZ3Q7ZXh0LmV4dF9wYXJhbXMgJmFtcDsgU0NDQl9FVkVOVF9QRU5ESU5HOwogCQlyYyA9IF9faW5qZWN0X3NlcnZpY2Uoa3ZtLCBpbnRpKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6CiAJCXJjID0gX19pbmplY3RfcGZhdWx0X2RvbmUoa3ZtLCBpbnRpKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCS8qIEdyYWIgaXNjIGhlcmUgc2luY2UgX19pbmplY3RfaW8oKSBtaWdodCBmcmVlIGludGkgKi8KJiM0MzsJCXBhcm0gPSBpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktJmd0O2lvLmlvX2ludF93b3JkKSk7CiAJCXJjID0gX19pbmplY3RfaW8oa3ZtLCBpbnRpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE5ODIsNyAmIzQzOzIwOTYsNyBAQCBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JX19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUpOwomIzQzOwlfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSwgcGFybSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC04Niw2ICYjNDM7ODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHsKIAlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSwKIAlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3NnX2VudHJ5KSwKIAlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSwKJiM0MzsJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBpbmplY3RfcmVkaXN0KSwKIH07CiAKIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfaGVhZGVyIGt2bV92bV9zdGF0c19oZWFkZXIgPSB7CkBAIC00NTcyLDYgJiM0Mzs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpOwogCQlpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKQogCQkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkJZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHZjcHUtJmd0O2t2bSk7CiAJfQogCiAJcmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKaW5kZXggNmQyODQyZmI3MWEzMy4uNzExNWE4ZjViMTg4MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaApAQCAtMzc1LDYgJiM0MzszNzUsOCBAQCBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpOwogaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTsKJiM0Mzt2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODg2CgkJCQkJCQlvdXRwdXQ6IDI4NwoJCQkJCQkJdGhvdWdodHM6IDQ4OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBzMzkwIEtWTSBJbnRlcnJ1cHQgUmVkaXN0cmlidXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIHdoaWNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIEtWTSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGZsb2F0aW5nIGludGVycnVwdCBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBhIG5ldyBzdGF0aXN0aWMsIGBpbmplY3RfcmVkaXN0YCwgd2l0aGluIHRoZSBga3ZtX3ZtX3N0YXRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgS1ZNIHN0YXRpc3RpY3MgYW5kIGlzIGluaXRpYWxpemVkIHRvIHplcm8gb24gYWxsb2NhdGlvbiwgc28gdGhhdCYjMzk7cyBmaW5lLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgZGlzdHJpYnV0aW5nIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSB2Q1BVcyBhbmQgd2FraW5nIHRoZW0gdXAgYXMgbmVlZGVkLiBUaGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBmdW5jdGlvbnMgbGlrZSBgaGFuZGxlX3B2X3NjbHBgLCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBga2lja19jcHVfaXJxYCwgYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGB2Y3B1X2ludGVydmVudGlvbl9raWNrYCwgYF9faW5qZWN0X3ZtYCwgYW5kIGB2Y3B1X3ByZV9ydW5gIHRvIGltcGxlbWVudCB0aGlzIG5ldyBiZWhhdmlvci4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggSSBzY3J1dGluaXplZCBoZXJlLiBUaGUgbWFpbiBhcmVhIG9mIGludGVyZXN0IGlzIHRoZSBgX19pbmplY3Rfdm1gIGZ1bmN0aW9uLCB3aGVyZSB0aGUgdmFyaWFibGUgYHBhcm1gICpjYW4qIGJlIHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBpbnRlcnJ1cHQgdHlwZSBpcyBgS1ZNX1MzOTBfTUNIS2AsIGBLVk1fUzM5MF9JTlRfVklSVElPYCwgb3IgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAuIFRoaXMgYHBhcm1gIHZhbHVlIGlzIHRoZW4gcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBraWNrX2NwdV9pcnFgIGFuZCBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gSG93ZXZlciwgY3JpdGljYWxseSwgdGhlIHZhbHVlIG9mIGBwYXJtYCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgaW4gdGhlIGxhdHRlciBmdW5jdGlvbiB3aGVuIGB0eXBlYCBpcyBvbmUgb2YgdGhlIGNhc2VzIHdoZXJlIGBwYXJtYCBpcyB1bmluaXRpYWxpemVkLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvbnN0aXR1dGVzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc3N1ZS4gS01TQU4gdHJhY2tzIG1lbW9yeSBhdCB0aGUgc2hhZG93IGxldmVsIGFuZCBpcyBkZXNpZ25lZCB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhbHVlcy4gSG93ZXZlciwgS01TQU4gb25seSByZXBvcnRzIHdoZW4gdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdXNlZCBpbiBhIGJyYW5jaCwgYXMgYSBtZW1vcnkgYWRkcmVzcywgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gSW4gdGhpcyBzY2VuYXJpbywgd2hpbGUgYHBhcm1gICppcyogcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHdpdGggYW4gdW5kZWZpbmVkIHZhbHVlIHdoZW4gYHR5cGVgIGlzIGNlcnRhaW4gdmFsdWVzLCB0aGF0IHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgTk9UIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGJyYW5jaCBvciBtZW1vcnkgYWNjZXNzLiBJdCYjMzk7cyBlZmZlY3RpdmVseSBkaXNjYXJkZWQuIFRoZSBjaGVja3MgaW4gYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHNwZWNpZmljYWxseSBza2lwIHRoZSBicmFuY2hpbmcgd2hlbiBgdHlwZWAgaXMgYEtWTV9TMzkwX01DSEtgLCBldGMuIEluIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCB0aGUgdmFsdWUgb2YgYHBhcm1gIChwYXNzZWQgYXMgYGlzY2ApIGlzIGNvbXBsZXRlbHkgaWdub3JlZCB3aGVuIHRoZSBpbnRlcnJ1cHQgdHlwZSBpcyBvbmUgb2YgdGhvc2UgdGhhdCBsZWF2ZSBgcGFybWAgdW5pbml0aWFsaXplZC4gVGh1cywgS01TQU4gd29uJiMzOTt0IGNvbXBsYWluIGhlcmUsIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgaXNuJiMzOTt0IHVzZWQgaW4gYSB3YXkgdGhhdCBhZmZlY3RzIHByb2dyYW0gYmVoYXZpb3IuCgpUaGUgcmVzdCBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9zdGx5IGNvbnRyb2wgZmxvdywgc2V0dGluZyBhbmQgY2hlY2tpbmcgbWFza3MsIGFuZCB3YWtpbmcgdkNQVXMsIHdoaWNoIGFyZSBhbGwgcHJldHR5IHN0YW5kYXJkIEtWTSBvcGVyYXRpb25zLiBUaGUgbmV3IGBpbmplY3RfcmVkaXN0YCBzdGF0aXN0aWMgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHNvIHRoZSBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLiBJIGRpZG4mIzM5O3Qgc2VlIGFueSBvdGhlciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY29tcGxleCBkYXRhIHBhcnNpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU28sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBSZWd1bGFyIHN0YXRpYyBhbmFseXNpcyB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMjA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMTo1NC43NDE2MTQzNDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQyMTgwMTg2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9wdl9zY2xwX2tpY2tcIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92bVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIG9uIHMzOTB4LiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIElSUXMgYWNyb3NzIFZDUFVzIGFuZCB0byBraWNrIFZDUFVzIHdoZW4gc3BlY2lmaWMgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TMzkwX0lOVEVSUlVQVCkgYW5kIGR1cmluZyBWQ1BVIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDE6NTQuNzQxNjE5Mzk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyOTQ0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTA4ODNjZmEwNmU3N2JlNjFiNzlhNjA4NTQ5MTY3YmQxZWJkMmQ1OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDowMTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xcbiBcXHR1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7XFxuIFxcdHU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTtcXG4gXFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xcbitcXHR1NjQgaW5qZWN0X3JlZGlzdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBrdm1fYXJjaF9tZW1vcnlfc2xvdCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXFxuaW5kZXggMTk4MGRmNjFlZjMwNC4uZTFkZTNmNDcxZmZkMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xcbkBAIC01MzYsNiArNTM2LDE1IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzZXRfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCBcXHUwMDI2ZmktXFx1MDAzZXBlbmRpbmdfaXJxcyk7XFxuIFxcdGNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXFx1MDAyNmZpLVxcdTAwM2VtYXNrZWRfaXJxcyk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXZSBtaXNzZWQgdGhlIGZsb2F0aW5nIElSUSBraWNrIHNpbmNlIHdlIGNhbiBvbmx5IGluamVjdFxcbitcXHQgKiB3aGVuIHdlIGVuZCB1cCBoZXJlIGFuZCBub3Qgd2hlbiB0aGUgaXJxIHdhcyBpbmplY3RlZCB2aWFcXG4rXFx0ICogdGhlIEZMSUMuXFxuK1xcdCAqXFxuK1xcdCAqIE5vdyB0aGF0IHdlIGhhdmUgY2xlYXJlZCB0aGUgbWFza2luZyB3ZSBjYW4ga2ljayBjcHVzLlxcbitcXHQgKi9cXG4rXFx0a3ZtX3MzOTBfcHZfc2NscF9raWNrKHZjcHUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li4xZWU5YWIyNTA1MDQyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBhY3RpdmVfbWFzaztcXG4gfVxcbiBcXG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XFxuK1xcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cztcXG4rXFxuK1xcdGlmICghUkVBRF9PTkNFKGt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcXG4rXFx0ICogbWlnaHQgYnVybiB0b28gbWFueSBjeWNsZXMgYnV0IGFwYXJ0IGZyb20gdGhhdCB3YWtpbmcgYVxcbitcXHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxcbitcXHQgKi9cXG4rXFx0c2lnY3B1ID0gZmluZF9maXJzdF9iaXQoa3ZtLVxcdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcXG4rXFx0LyogV2VsbCBub2JvZHkncyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovXFxuK1xcdGlmIChzaWdjcHUgPT0gb25saW5lX3ZjcHVzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcXG4rXFx0XFx0aWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7XFxuK1xcdFxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XFxuK1xcdFxcdFxcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c2lnY3B1ID0gZmluZF9uZXh0X2JpdChrdm0tXFx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcXG4rXFx0fSB3aGlsZSAoc2lnY3B1IFxcdTAwM2Mgb25saW5lX3ZjcHVzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xcbkBAIC0xOTE1LDQ5ICsxOTQ2LDEyOSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2sodTY0IHR5cGUsIGludCBpc2MpXFxuK3tcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfTUNISzpcXG4rXFx0XFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9NQ0hLX1JFUCk7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxcbitcXHRcXHRyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8XFxuK1xcdFxcdCAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORTpcXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9QRkFVTFRfRE9ORSk7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuK1xcdFxcdHJldHVybiBpc2NfdG9faXJxX3R5cGUoaXNjKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4tICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxcbisgKiBTZXR1cCBpbnRlcnZlbnRpb24gbWFza3MgdG8gY2F0Y2ggcnVubmluZyB2Y3B1cyB0aGF0IGhvcGVmdWxseSBvcGVuXFxuKyAqIHRoZWlyIG1hc2tzIHNvb25pc2ggYW5kIGtpY2sgc2xlZXBpbmcgdmNwdXMgdG8gbW90aXZhdGUgdGhlbSB0b1xcbisgKiB0YWtlIElSUXMuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpXFxuK3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSlcXG4re1xcbitcXHQvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi9cXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgS1ZNX1MzOTBfTUNISzpcXG4rXFx0XFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfU1RPUF9JTlQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcXG4rXFx0XFx0aWYgKCEodHlwZSBcXHUwMDI2IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5naXNhX2ludC5vcmlnaW4pIHx8XFxuK1xcdFxcdCAgICAgIGt2bV9zMzkwX3B2X2NwdV9nZXRfaGFuZGxlKHZjcHUpKVxcbitcXHRcXHRcXHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9JT19JTlQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRVhUX0lOVCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKHZjcHUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBraWNrX2NwdV9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcXG4gXFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzLCBucl90cmllcyA9IDA7XFxuK1xcdHU2NCBpcnFfcGVuZF9tYXNrO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbiBcXHRpZiAoIW9ubGluZV92Y3B1cylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayh0eXBlLCBwYXJtKTtcXG4gXFx0Zm9yIChzaWdjcHUgPSBrdm0tXFx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSsrKSB7XFxuIFxcdFxcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XFxuIFxcdFxcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcXG4tXFx0XFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKVxcbitcXHRcXHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpIFxcdTAwMjYgaXJxX3BlbmRfbWFzaylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXFxuLVxcdFxcdGlmIChucl90cmllcysrIFxcdTAwM2U9IG9ubGluZV92Y3B1cylcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRpZiAobnJfdHJpZXMrKyBcXHUwMDNlPSBvbmxpbmVfdmNwdXMgKiAyKSB7XFxuK1xcdFxcdFxcdGRzdF92Y3B1ID0gTlVMTDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovXFxuLVxcdHN3aXRjaCAodHlwZSkge1xcbi1cXHRjYXNlIEtWTV9TMzkwX01DSEs6XFxuLVxcdFxcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxcbi1cXHRcXHRpZiAoISh0eXBlIFxcdTAwMjYgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAga3ZtLVxcdTAwM2VhcmNoLmdpc2FfaW50Lm9yaWdpbikgfHxcXG4tXFx0XFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUoZHN0X3ZjcHUpKVxcbi1cXHRcXHRcXHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3MoZHN0X3ZjcHUsIENQVVNUQVRfSU9fSU5UKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdC8qIE5vYm9keSB3YXMgZW5hYmxlZCwgdGltZSB0byB3YWtlIGFsbCBvZiB0aGVtICovXFxuK1xcdGlmICghZHN0X3ZjcHUpIHtcXG4rXFx0XFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgZHN0X3ZjcHUsIGt2bSlcXG4rXFx0XFx0XFx0dmNwdV9pbnRlcnZlbnRpb25fa2ljayhkc3RfdmNwdSwgdHlwZSk7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7XFxuK1xcbitcXHR2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTtcXG4rfVxcbitcXG4rdm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjcHUgdGhhdCBjYWxsZWQgc2NscCBsaWtlbHkgd2lsbCBhbHNvIHRha2UgdGhlIElSUSwgbm9cXG4rXFx0ICogbmVlZCB0byBraWNrIGFueW9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChsaWtlbHkoZGVsaXZlcmFibGVfaXJxcyh2Y3B1KSBcXHUwMDI2IElSUV9QRU5EX0VYVF9TRVJWSUNFKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yIHRoZSBvdGhlciBjYXNlcyB3ZSBtaWdodCBoYXZlIHNsZWVwaW5nIGNwdXMgd2l0aCBvcGVuXFxuK1xcdCAqIG1hc2tzLiBUaW1lIHRvIGZpbmQgYW5kIGtpY2sgdGhlbS5cXG4rXFx0ICovXFxuK1xcdGtpY2tfY3B1X2lycSh2Y3B1LVxcdTAwM2Vrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXFxuK3tcXG4rXFx0aW50IHByb3Q7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRwcm90ID0ga3ZtX3MzOTBfcHZfaXNfcHJvdGVjdGVkKGt2bSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogTm8gbmVlZCB0byBraWNrIG9uIG5vbi1ldiBzZXJ2aWNlIElSUXMgZm9yIFBWIFZNcywgd2UncmVcXG4rXFx0ICogbm90IGFsbG93ZWQgdG8gaW5qZWN0IGFueXdheS4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc2NscFxcbitcXHQgKiBpbnN0cnVjdGlvbiBub3RpZmljYXRpb24gQUZURVIgcmUtZW50cnkgb2YgdGhlIHZjcHUgdGhhdFxcbitcXHQgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJvdCBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEtWTV9TMzkwX0lOVF9TRVJWSUNFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhKHBhcm0gXFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkcpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRraWNrX2NwdV9pcnEoa3ZtLCB0eXBlLCBwYXJtKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4ge1xcbiBcXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVxcdTAwM2V0eXBlKTtcXG4rXFx0dTY0IHBhcm07XFxuIFxcdGludCByYztcXG4gXFxuIFxcdHN3aXRjaCAodHlwZSkge1xcbkBAIC0xOTY4LDEyICsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuIFxcdFxcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxcbitcXHRcXHRwYXJtID0gaW50aS1cXHUwMDNlZXh0LmV4dF9wYXJhbXMgXFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkc7XFxuIFxcdFxcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuIFxcdFxcdHJjID0gX19pbmplY3RfcGZhdWx0X2RvbmUoa3ZtLCBpbnRpKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuK1xcdFxcdC8qIEdyYWIgaXNjIGhlcmUgc2luY2UgX19pbmplY3RfaW8oKSBtaWdodCBmcmVlIGludGkgKi9cXG4rXFx0XFx0cGFybSA9IGlzY190b19pcnFfdHlwZShpbnRfd29yZF90b19pc2MoaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmQpKTtcXG4gXFx0XFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtMTk4Miw3ICsyMDk2LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcbi1cXHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSk7XFxuK1xcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlLCBwYXJtKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XFxuIFxcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxcbiBcXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3NnX2VudHJ5KSxcXG4gXFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXFxuK1xcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksXFxuIH07XFxuIFxcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0ge1xcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XFxuIFxcdFxcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiBcXHR9XFxuIFxcbiBcXHRyYyA9IGt2bV9zMzkwX2hhbmRsZV9yZXF1ZXN0cyh2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXFxuaW5kZXggNmQyODQyZmI3MWEzMy4uNzExNWE4ZjViMTg4MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcXG5AQCAtMzc1LDYgKzM3NSw4IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XFxuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbit2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDE6NTYuMzQ1NTI3MjAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjUyOTkxMDY1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICAgIFwia3ZtX3MzOTBfcHZfc2NscF9raWNrXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3Rfdm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBvbiBzMzkweC4gSXQgaW50cm9kdWNlcyBuZXcgbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBJUlFzIGFjcm9zcyBWQ1BVcyBhbmQgdG8ga2ljayBWQ1BVcyB3aGVuIHNwZWNpZmljIGludGVycnVwdHMgYXJlIGluamVjdGVkLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIChlLmcuLCBLVk1fUzM5MF9JTlRFUlJVUFQpIGFuZCBkdXJpbmcgVkNQVSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkwODgzY2ZhMDZlNzdiZTYxYjc5YTYwODU0OTE2N2JkMWViZDJkNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAyMDowMTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00NjcsNiArNDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHtcbiBcdHU2NCBnbWFwX3NoYWRvd19yM19lbnRyeTtcbiBcdHU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTtcbiBcdHU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTtcbitcdHU2NCBpbmplY3RfcmVkaXN0O1xuIH07XG4gXG4gc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuaW5kZXggMTk4MGRmNjFlZjMwNC4uZTFkZTNmNDcxZmZkMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmNcbkBAIC01MzYsNiArNTM2LDE1IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c2V0X2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlcGVuZGluZ19pcnFzKTtcbiBcdGNsZWFyX2JpdChJUlFfUEVORF9FWFRfU0VSVklDRSwgXHUwMDI2ZmktXHUwMDNlbWFza2VkX2lycXMpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHQvKlxuK1x0ICogV2UgbWlzc2VkIHRoZSBmbG9hdGluZyBJUlEga2ljayBzaW5jZSB3ZSBjYW4gb25seSBpbmplY3RcbitcdCAqIHdoZW4gd2UgZW5kIHVwIGhlcmUgYW5kIG5vdCB3aGVuIHRoZSBpcnEgd2FzIGluamVjdGVkIHZpYVxuK1x0ICogdGhlIEZMSUMuXG4rXHQgKlxuK1x0ICogTm93IHRoYXQgd2UgaGF2ZSBjbGVhcmVkIHRoZSBtYXNraW5nIHdlIGNhbiBraWNrIGNwdXMuXG4rXHQgKi9cbitcdGt2bV9zMzkwX3B2X3NjbHBfa2ljayh2Y3B1KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOGYyNGJjZDFhNmQzNi4uMWVlOWFiMjUwNTA0MiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0zNjcsNiArMzY3LDM3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbGl2ZXJhYmxlX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGFjdGl2ZV9tYXNrO1xuIH1cbiBcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXG4re1xuK1x0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbitcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cztcbitcbitcdGlmICghUkVBRF9PTkNFKGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5wZW5kaW5nX2lycXMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbitcbitcdC8qXG4rXHQgKiBOb3QgdG9vIHdvcnJpZWQgYWJvdXQgc3luY2hyb25pemF0aW9uIGZvciBpZGxlX21hc2suIFdlXG4rXHQgKiBtaWdodCBidXJuIHRvbyBtYW55IGN5Y2xlcyBidXQgYXBhcnQgZnJvbSB0aGF0IHdha2luZyBhXG4rXHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxuK1x0ICovXG4rXHRzaWdjcHUgPSBmaW5kX2ZpcnN0X2JpdChrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cyk7XG4rXHQvKiBXZWxsIG5vYm9keSdzIHNsZWVwaW5nIHNvIHNvbWVvbmUgd2lsbCBsaWtlbHkgdGFrZSB0aGUgSVJRIHNvb24gKi9cbitcdGlmIChzaWdjcHUgPT0gb25saW5lX3ZjcHVzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkbyB7XG4rXHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbitcdFx0aWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7XG4rXHRcdFx0a3ZtLVx1MDAzZXN0YXQuaW5qZWN0X3JlZGlzdCsrO1xuK1x0XHRcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRzaWdjcHUgPSBmaW5kX25leHRfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzLCArK3NpZ2NwdSk7XG4rXHR9IHdoaWxlIChzaWdjcHUgXHUwMDNjIG9ubGluZV92Y3B1cyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9fc2V0X2NwdV9pZGxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9XQUlUKTtcbkBAIC0xOTE1LDQ5ICsxOTQ2LDEyOSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHU2NCB0eXBlLCBpbnQgaXNjKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuK1x0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdHJldHVybiBpc2NfdG9faXJxX3R5cGUoaXNjKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbiAvKlxuLSAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cbisgKiBTZXR1cCBpbnRlcnZlbnRpb24gbWFza3MgdG8gY2F0Y2ggcnVubmluZyB2Y3B1cyB0aGF0IGhvcGVmdWxseSBvcGVuXG4rICogdGhlaXIgbWFza3Mgc29vbmlzaCBhbmQga2ljayBzbGVlcGluZyB2Y3B1cyB0byBtb3RpdmF0ZSB0aGVtIHRvXG4rICogdGFrZSBJUlFzLlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcbitzdGF0aWMgdm9pZCB2Y3B1X2ludGVydmVudGlvbl9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHR5cGUpXG4re1xuK1x0LyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgS1ZNX1MzOTBfTUNISzpcbitcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfU1RPUF9JTlQpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdGlmICghKHR5cGUgXHUwMDI2IEtWTV9TMzkwX0lOVF9JT19BSV9NQVNLIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdpc2FfaW50Lm9yaWdpbikgfHxcbitcdFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUodmNwdSkpXG4rXHRcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfSU9fSU5UKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRrdm1fczM5MF92Y3B1X3dha2V1cCh2Y3B1KTtcbit9XG4rXG4rc3RhdGljIHZvaWQga2lja19jcHVfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUsIHU2NCBwYXJtKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4gXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcbitcdHU2NCBpcnFfcGVuZF9tYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4gXHRpZiAoIW9ubGluZV92Y3B1cylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayh0eXBlLCBwYXJtKTtcbiBcdGZvciAoc2lnY3B1ID0ga3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSsrKSB7XG4gXHRcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XG4gXHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbi1cdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKVxuK1x0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcdTAwMjYgaXJxX3BlbmRfbWFzaylcbiBcdFx0XHRicmVhaztcbiBcdFx0LyogYXZvaWQgZW5kbGVzcyBsb29wcyBpZiBhbGwgdmNwdXMgYXJlIHN0b3BwZWQgKi9cbi1cdFx0aWYgKG5yX3RyaWVzKysgXHUwMDNlPSBvbmxpbmVfdmNwdXMpXG4tXHRcdFx0cmV0dXJuO1xuK1x0XHRpZiAobnJfdHJpZXMrKyBcdTAwM2U9IG9ubGluZV92Y3B1cyAqIDIpIHtcbitcdFx0XHRkc3RfdmNwdSA9IE5VTEw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdC8qIG1ha2UgdGhlIFZDUFUgZHJvcCBvdXQgb2YgdGhlIFNJRSwgb3Igd2FrZSBpdCB1cCBpZiBzbGVlcGluZyAqL1xuLVx0c3dpdGNoICh0eXBlKSB7XG4tXHRjYXNlIEtWTV9TMzkwX01DSEs6XG4tXHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbi1cdFx0aWYgKCEodHlwZSBcdTAwMjYgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgIGt2bS1cdTAwM2VhcmNoLmdpc2FfaW50Lm9yaWdpbikgfHxcbi1cdFx0ICAgICAga3ZtX3MzOTBfcHZfY3B1X2dldF9oYW5kbGUoZHN0X3ZjcHUpKVxuLVx0XHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9JT19JTlQpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyhkc3RfdmNwdSwgQ1BVU1RBVF9FWFRfSU5UKTtcbi1cdFx0YnJlYWs7XG4rXHQvKiBOb2JvZHkgd2FzIGVuYWJsZWQsIHRpbWUgdG8gd2FrZSBhbGwgb2YgdGhlbSAqL1xuK1x0aWYgKCFkc3RfdmNwdSkge1xuK1x0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCBkc3RfdmNwdSwga3ZtKVxuK1x0XHRcdHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4tXHRrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7XG4rXG4rXHR2Y3B1X2ludGVydmVudGlvbl9raWNrKGRzdF92Y3B1LCB0eXBlKTtcbit9XG4rXG4rdm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdC8qXG4rXHQgKiBUaGUgY3B1IHRoYXQgY2FsbGVkIHNjbHAgbGlrZWx5IHdpbGwgYWxzbyB0YWtlIHRoZSBJUlEsIG5vXG4rXHQgKiBuZWVkIHRvIGtpY2sgYW55b25lLlxuK1x0ICovXG4rXHRpZiAobGlrZWx5KGRlbGl2ZXJhYmxlX2lycXModmNwdSkgXHUwMDI2IElSUV9QRU5EX0VYVF9TRVJWSUNFKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIEZvciB0aGUgb3RoZXIgY2FzZXMgd2UgbWlnaHQgaGF2ZSBzbGVlcGluZyBjcHVzIHdpdGggb3BlblxuK1x0ICogbWFza3MuIFRpbWUgdG8gZmluZCBhbmQga2ljayB0aGVtLlxuK1x0ICovXG4rXHRraWNrX2NwdV9pcnEodmNwdS1cdTAwM2Vrdm0sIEtWTV9TMzkwX0lOVF9TRVJWSUNFLCAtMSk7XG4rfVxuK1xuKy8qXG4rICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXG4re1xuK1x0aW50IHByb3Q7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdHByb3QgPSBrdm1fczM5MF9wdl9pc19wcm90ZWN0ZWQoa3ZtKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4rXHQvKlxuK1x0ICogTm8gbmVlZCB0byBraWNrIG9uIG5vbi1ldiBzZXJ2aWNlIElSUXMgZm9yIFBWIFZNcywgd2UncmVcbitcdCAqIG5vdCBhbGxvd2VkIHRvIGluamVjdCBhbnl3YXkuIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHNjbHBcbitcdCAqIGluc3RydWN0aW9uIG5vdGlmaWNhdGlvbiBBRlRFUiByZS1lbnRyeSBvZiB0aGUgdmNwdSB0aGF0XG4rXHQgKiBoYW5kbGVkIHRoZSBpbnN0cnVjdGlvbiBpbnRlcmNlcHQuXG4rXHQgKi9cbitcdGlmIChwcm90IFx1MDAyNlx1MDAyNiB0eXBlID09IEtWTV9TMzkwX0lOVF9TRVJWSUNFIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEocGFybSBcdTAwMjYgU0NDQl9FVkVOVF9QRU5ESU5HKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a2lja19jcHVfaXJxKGt2bSwgdHlwZSwgcGFybSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4ge1xuIFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbitcdHU2NCBwYXJtO1xuIFx0aW50IHJjO1xuIFxuIFx0c3dpdGNoICh0eXBlKSB7XG5AQCAtMTk2OCwxMiArMjA3OSwxNSBAQCBzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIFx0XHRyYyA9IF9faW5qZWN0X3ZpcnRpbyhrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6XG4rXHRcdHBhcm0gPSBpbnRpLVx1MDAzZWV4dC5leHRfcGFyYW1zIFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkc7XG4gXHRcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuIFx0XHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbitcdFx0LyogR3JhYiBpc2MgaGVyZSBzaW5jZSBfX2luamVjdF9pbygpIG1pZ2h0IGZyZWUgaW50aSAqL1xuK1x0XHRwYXJtID0gaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSk7XG4gXHRcdHJjID0gX19pbmplY3RfaW8oa3ZtLCBpbnRpKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuQEAgLTE5ODIsNyArMjA5Niw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbitcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlLCBwYXJtKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXG4rXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XG4gXHRcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi43MTE1YThmNWIxODgyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiArMzc1LDggQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCBrdm1fczM5MF9wdl9zY2xwX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMTo1Ni4zNDU1Mjg4MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjY2NjE0NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBzMzkwIFBhdGNoIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZS4gSXQncyB0b3VjaGluZyBzb21lIGNyaXRpY2FsIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBpbnRlcmNlcHQuY2AsIGBpbnRlcnJ1cHQuY2AsIGBrdm0tczM5MC5jYCwgYGt2bS1zMzkwLmhgLCBhbmQgYGt2bV9ob3N0LmhgIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9rdm1gIGRpcmVjdG9yeS4gVGhhdCBwb2ludHMgdG8gc29tZSBzZXJpb3VzIGNoYW5nZXMgdW5kZXIgdGhlIGhvb2QuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgYW5kIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgLCBzbyB0aGUgY29yZSBsb2dpYyBvZiBob3cgd2UgaGFuZGxlIGZsb2F0aW5nIElSUXMgaW4gS1ZNIGZvciBzMzkwIGlzIGNoYW5naW5nLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5ICp2ZXJ5KiBjbG9zZSBhdHRlbnRpb24gdG8gdGhpcy5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSB0ZXN0IHRoaXMgZWZmZWN0aXZlbHk/IElzIHRoaXMgcmVhY2hhYmxlIGJ5IGV4aXN0aW5nIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmU/IEFoLCB5ZXMsIGlmIHdlIGhhdmUgczM5MHggUUVNVSwgS1ZNIG9uIHMzOTAgaXMgdGVzdGFibGUuIEdvb2QsIGdvb2QuIEFuZCBzeXprYWxsZXIuLi4gZG9lcyBzeXprYWxsZXIgZG8gczM5MHg/IFllcywgaXQgZG9lcywgc28gc3l6a2FsbGVyICpjYW4qIGZ1enogS1ZNIG9uIHMzOTB4LiBQZXJmZWN0LiBUaGF0J3MgYSBodWdlIHdpbiBpbiB0ZXJtcyBvZiB0ZXN0YWJpbGl0eSBhbmQgZmluZGluZyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHN1YnRsZSBpc3N1ZXMuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgc3l6a2FsbGVyIG5lZWRzIHRvIGVuYWJsZSBLVk0gb24gczM5MHguIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgc3RhbmRhcmQgS1ZNIGNvbmZpZyBpcyBzdWZmaWNpZW50LCBgQ09ORklHX0tWTWAgc2hvdWxkIGJlIGdvb2QgZW5vdWdoLiBUaW1lIHRvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjowMy4wMTIxNDY3MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNDU0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjowMy4wNjIyOTg1MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY2MTYyMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBEZXBlbmRlbmNpZXMgZm9yIHMzOTAgQXJjaGl0ZWN0dXJlIEludGVycnVwdCBIYW5kbGluZyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSBzeXN0ZW0gaXMgaW5kaWNhdGluZyB0aGF0IGBDT05GSUdfS1ZNYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHNvbWV0aGluZywgd2hpY2ggaXNuJ3QgZW50aXJlbHkgc3VycHJpc2luZyBnaXZlbiB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gY29kZSB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBsZWFuaW5nIG9uIGl0LCBzcGVjaWZpY2FsbHkgaW50ZXJydXB0IG1hbmFnZW1lbnQuIFRoZSBzMzkwIGFyY2hpdGVjdHVyZSBvZnRlbiBoYXMgc29tZSB1bmlxdWUgYXBwcm9hY2hlcyBoZXJlLlxuXG5JJ2xsIHN0YXJ0IHdpdGggYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBUaGF0IGZpbGUgaXMgYSBsaWtlbHkgY2FuZGlkYXRlOyBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIGRpc3RyaWJ1dGlvbiBhcmUgb2Z0ZW4gdGlnaHRseSBjb3VwbGVkIHdpdGggdmlydHVhbGl6YXRpb24uIFRoZSBwcmVzZW5jZSBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBpcyBhIHBhcnRpY3VsYXIgcG9pbnQgb2YgaW50ZXJlc3QgYmVjYXVzZSBvZiBpdHMgaW1wbGljYXRpb24gZm9yIGZsb2F0aW5nIHBvaW50LiBMZXQncyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gYW5kIG90aGVycyBhcmUgdXRpbGl6aW5nIEtWTSBmdW5jdGlvbmFsaXR5LCBhbmQgd2hlcmUgdGhhdCBkZXBlbmRlbmN5IGlzIGRlY2xhcmVkIG9yIGltcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYENPTkZJR19LVk1gIGFuZCBob3cgd2UncmUgZGlzdHJpYnV0aW5nIHRob3NlIGludGVycnVwdHMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGlmIHRoZXJlJ3MgYW55IGFyZWEgdGhhdCdzIG5vdCBuZWVkZWQsIG9yIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgZGlmZmVyZW50IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDI6MDcuMDI4NDY0MjkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDI4MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzY5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzcwOnZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3MS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDU1OD1zdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3Ni1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDU3NzpcXHRcXHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3OC1cXHR9XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc4PXZvaWQga3ZtX3MzOTBfcHZfc2NscF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjM3OTp2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjowNy4wNzY5MDAzMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA5NjI2ODA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgY2FsbGVkIHdpdGhpbiBgdmNwdV9wcmVfcnVuYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYC4gU2ltdWx0YW5lb3VzbHksIHdlIGhhdmUgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYmVpbmcgaW50cm9kdWNlZCwgdHJpZ2dlcmVkIGZyb20gYGhhbmRsZV9wdl9zY2xwYCBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBoYW5kbGVfcHZfc2NscGAgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIFFFTVUncyBzMzkweCBQViBzdXBwb3J0LiBBaCwgeWVzLCBpdCBkb2VzIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiwgd2hpY2ggaW5jbHVkZXMgUFYuIEJ1dCBldmVuIGlmIFBWIGlzbid0IGluIHBsYXksIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHN0aWxsIGdldHMgaW52b2tlZCB2aWEgYHZjcHVfcHJlX3J1bmAuIEkgYWxzbyBzZWUgY2hhbmdlcyBhcm91bmQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBzbyB0aGVyZSdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gaGVyZSBpbiB0aGUgS1ZNIHMzOTB4IGltcGxlbWVudGF0aW9uLiBJdCBtZWFucyBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoaXMgaXMgV29ydGhGdXp6aW5nPXRydWUuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGtleSBzeW1ib2xzLiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgYXJlIG9idmlvdXMgb25lcy4gVGhlbiB0aGVyZSdzIHRoaXMgcGF0aDogYHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2tgIC1cdTAwM2UgYGtpY2tfY3B1X2lycWAgLVx1MDAzZSBgX19mbG9hdGluZ19pcnFfa2lja2AgLVx1MDAzZSBgX19pbmplY3Rfdm1gIC1cdTAwM2UgYGt2bV9zMzkwX2luamVjdF92bWAuIFdhaXQsIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBvbmUgSSB3YW50IHRvIHJlYWxseSBsb29rIGludG8uIEJvdGggYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgYW5kIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgIGFyZSBleHBvcnRlZCwgd2hpY2ggZ2l2ZXMgdXMgc29tZSBnb29kIGVudHJ5IHBvaW50cy5cblxuTmV4dCBzdGVwcywgSSBuZWVkIHRvIHZlcmlmeSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhbmQgYGhhbmRsZV9wdl9zY2xwYCBhbmQgaG93IHRoZXkncmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowMjoxNy4xNzMxNzE0MTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNzAyNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA2OD1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTAyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjEwMzppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxMDQtXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEzNy1cXHR9XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMTM4OlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVxcdTAwM2V0eXBlLCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTM5LVxcdFxcdFxcdFxcdCAyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mjg3Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg5NS1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4OTY6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg5Ny1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTA5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjkxMDpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTExLVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODY1PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTA3LVxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzkwODpcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTA5LVxcdFxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTI3LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzkyODpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zOTI5LVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChmaS1cXHUwMDNlc2ltbSBcXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cXHUwMDNlaXNjKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4OlxcdFxcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDktXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDkzLVxcdFxcdGludGkucGFybTY0ID0gdG9rZW47XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTQ6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXFx1MDAzZWt2bSwgXFx1MDAyNmludGksIGludGlfbWVtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3OT12b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozODA6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjYtXFx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjAyOjE3LjIyMTI0ODk1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NjQ4NDQxNTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQ29uc2lkZXJpbmcgSW5qZWN0aW9uIFBvaW50cyBpbiB0aGUgczM5MCBLVk0gS2VybmVsIE1vZHVsZSoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIGBrdm1fczM5MF9pbmplY3Rfdm1gLi4uIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50IHRvIGZvY3VzIG9uLCBhIGdvb2Qgc3ltYm9sIHRvIGRpdmUgaW50by4gSXQncyBvZnRlbiB3aGVyZSB3ZSBzZWUgY3JpdGljYWwgZXZlbnRzIGJlaW5nIGluamVjdGVkIGludG8gdGhlIHZpcnR1YWwgbWFjaGluZS4gTm93LCBJJ20gdHJ5aW5nIHRvIHRoaW5rIGFib3V0IG90aGVyIHBvdGVudGlhbGx5IGltcG9ydGFudCBhcmVhcywgYW5kIHRoZSBuYW1lIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYGhhbmRsZV9wdl9zY2xwYC4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhlcmUncyBzb21lIHVzZWZ1bCBvdmVybGFwLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgYW55IGludGVyYWN0aW9ucyBhcmUgb2Ygbm90ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA1OjEzLjcwNTY2ODY5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mjc5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3B2X3NjbHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz01MDg9c3RhdGljIGludCBoYW5kbGVfcHZfc3B4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTE2LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NTE3OnN0YXRpYyBpbnQgaGFuZGxlX3B2X3NjbHAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTE4LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM9NTgyPXN0YXRpYyBpbnQgaGFuZGxlX3B2X25vdGlmaWNhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTU4OC1cXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWlwYSA9PSAweGIyMjApXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYzo1ODk6XFx0XFx0cmV0dXJuIGhhbmRsZV9wdl9zY2xwKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTkwLVxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlaXBhID09IDB4YjlhNClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDU6MTMuNzU0MjA3MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5NTM3NDA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgU3RhdGljIE1ldGhvZCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIGBoYW5kbGVfcHZfc2NscGAgaXMgc3RhdGljLCB0aGF0J3MgYWxyZWFkeSBlc3RhYmxpc2hlZC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIGBoYW5kbGVfcHZfbm90aWZpY2F0aW9uYC4gSXQgc2VlbXMgb2RkIHRoYXQgb25lIGhhbmRsZXIgaXMgc3RhdGljIHdoaWxlIHRoZSBvdGhlciBpc24ndCwgZXNwZWNpYWxseSB3aGVuIHRoZXkgbGlrZWx5IGhhbmRsZSBzaW1pbGFyIHBhcmFsbGVsIHByb2Nlc3Npbmcgc2NlbmFyaW9zLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4gQSBxdWljayBsb29rIGF0IGBoYW5kbGVfcHZfbm90aWZpY2F0aW9uYCBpcyBpbiBvcmRlcjsgSSB3YW50IHRvIGdyYXNwIGl0cyBjb250ZXh0IGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGF0J3MgdGhlIGV4cGVjdGVkIHVzYWdlLCBvciBpZiB0aGVyZSdzIGFuIG9wcG9ydHVuaXR5IGZvciBpbXByb3ZlbWVudCBvciByZWZhY3RvcmluZy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowNToyMi44NDk1ODUzMTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjkzMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9wdl9ub3RpZmljYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz01NTE9c3RhdGljIGludCBoYW5kbGVfcHZfdXZjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMtNTgxLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NTgyOnN0YXRpYyBpbnQgaGFuZGxlX3B2X25vdGlmaWNhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYy01ODMte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYz02MjI9aW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTY3MC1cXHRjYXNlIElDUFRfUFZfTk9USUZZOlxcbmFyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmM6NjcxOlxcdFxcdHJjID0gaGFuZGxlX3B2X25vdGlmaWNhdGlvbih2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jLTY3Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDU6MjIuOTE1Mjg1MjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAwMjYwNjkyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEtWTSBTeW1ib2xzIGZvciBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIEtWTSBjb2RlLiBJIGtub3cgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyB2aXNpYmxlIG91dHNpZGUgaXRzIG93biBmaWxlLCBzbyB0aGVvcmV0aWNhbGx5LCBpdCdzIGEgY2FuZGlkYXRlLiBCdXQsIGtub3dpbmcgaG93IEtWTSB3b3JrcywgdGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgYSAqdmVyeSogaG90IHBhdGguIEknZCByYXRoZXIgbG9vayBzb21ld2hlcmUgbGVzcyBoZWF2aWx5IHRyYWZmaWNrZWQgdG8gc3RhcnQuXG5cblJpZ2h0LCBsZXQncyBzZWUuIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgIGlzIGFsc28gZXhwb3J0ZWQuIFRoYXQgc291bmRzIHByb21pc2luZy4gVGhlbiB0aGVyZSdzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCDigJMgdGhleSdyZSBub24tc3RhdGljIGFuZCBleHBvcnRlZCwgc28gdGhleSdyZSBhbGwgc29saWQgc3RhcnRpbmcgcG9pbnRzLiBUaGVzZSBzZWVtIHRvIGJlIGdvb2QgZm9jdXMgc3ltYm9scyB0byBiZWdpbiB3aXRoLiBUaGV5J3JlIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG9mZmVyIGEgY2xlYXJlciB2aWV3IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIHRoYW4gc29tZXRoaW5nIGxpa2UgYGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdGAuXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX0tWTWAgaXMsIG9mIGNvdXJzZSwgdGhlIGJpZyBvbmUuIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgdG8gYmUgc3VyZSB0aGVyZSBhcmVu4oCZdCBhbnkgUFYtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA1OjQyLjk0MTM1ODA2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NDc4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDowNTo0My4wMDY4MTI1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTYxNzc0MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgczM5MCBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBLVk0gb24gdGhlIFN5c3RlbSB6IGFyY2hpdGVjdHVyZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqVW5kZXJzdGFuZGluZyB0aGUgU2NvcGUqKjogV2hhdCBLVk0gZmVhdHVyZXMgYXJlIGNvbnRyb2xsZWQgaGVyZT8gSXMgdGhpcyBqdXN0IHRoZSBjb3JlIEtWTSBzdXBwb3J0LCBvciBhcmUgdGhlcmUgbW9yZSBzcGVjaWZpYyBleHRlbnNpb25zIG9yIG9wdGltaXphdGlvbnMgZGVmaW5lZD9cbiogICAqKkRlcGVuZGVuY3kgQW5hbHlzaXMqKjogV2hhdCBvdGhlciBLY29uZmlnIG9wdGlvbnMgZG9lcyB0aGlzIGZpbGUgcmVseSBvbj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIGNlcnRhaW4gS1ZNIGZ1bmN0aW9uYWxpdHkuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzP1xuKiAgICoqRGVmYXVsdCBTZXR0aW5ncyoqOiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBLVk0gZmVhdHVyZXM/IEFyZSB0aGUgZGVmYXVsdHMgcmVhc29uYWJsZSBhbmQgc2FmZSwgb3IgZG8gdGhleSByZXByZXNlbnQgYSBwZXJmb3JtYW5jZSB2cy4gc2VjdXJpdHkgdHJhZGUtb2ZmIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIGEgc3BlY2lmaWMgZGVwbG95bWVudD9cbiogICAqKlBvdGVudGlhbCBBcmVhcyBmb3IgT3B0aW1pemF0aW9uKio6IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGdhaW5zIG9yIHJlZHVjZWQgcmVzb3VyY2UgY29uc3VtcHRpb24gaWYgdHVuZWQgY29ycmVjdGx5PyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55IHMzOTAtc3BlY2lmaWMgc2V0dGluZ3MuXG4qICAgKipQb3NzaWJsZSBJbnRlcmFjdGlvbnMqKjogSG93IGRvZXMgdGhlIEtjb25maWcgZmlsZSBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBjb2RlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBsaW1pdGF0aW9ucyB0aGF0IGFyZSBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGp1c3QgbG9va2luZyBhdCB0aGlzIGZpbGU/XG5cblRoaXMgc2NhbiB3aWxsIGhvcGVmdWxseSBhbGxvdyBtZSB0byBkZXZlbG9wIGEgZ29vZCBtZW50YWwgbW9kZWwgb2YgS1ZNIGNvbmZpZ3VyYXRpb24gb24gU3lzdGVtIHouIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA1OjQ4LjE2ODU5MDE5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBLVk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbiAgIDY6XFx0XFxuICAgNzpcXHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuICAgODpcXHRcXHRkZWZfYm9vbCB5XFxuICAgOTpcXHRcXHRwcm9tcHQgXFxcIktWTVxcXCJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEyOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIEtWTVxcbiAgMjA6XFx0XFx0ZGVmX3RyaXN0YXRlIHlcXG4gIDIxOlxcdFxcdHByb21wdCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDI0OlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZfU1lOQ1xcbiAgMjU6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcXG4gIDI4OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JTlZBTElEX1dBS0VVUFNcXG4gIDI5OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICAzMDpcXHRcXHRzZWxlY3QgS1ZNX1ZGSU9cXG4gIDMxOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgMzI6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBwYXJhdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgdGhlIFNJRVxcbiAgMzY6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXR5IG9uIHRoZSBtYWluZnJhbWUuIFRoaXMgc2hvdWxkIHdvcmtcXG4gIDM3OlxcdFxcdCAgb24gYW55IDY0Yml0IG1hY2hpbmUuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNDA6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDQzOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuICA1MDpcXHRcXHRoZWxwXFxuICA1MTpcXHRcXHQgIEFsbG93IENBUF9TWVNfQURNSU4gdXNlcnMgdG8gY3JlYXRlIEtWTSB2aXJ0dWFsIG1hY2hpbmVzIHRoYXQgYXJlXFxuICA1MjpcXHRcXHQgIGNvbnRyb2xsZWQgYnkgdXNlcnNwYWNlLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1NTpcXHRcXG4gIDU2OlxcdGVuZGlmICMgVklSVFVBTElaQVRJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MDU6NDguMTY4NjcwOTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4Mjg1OTQyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nLCBhbmQgdGFpbG9yZWQgZm9yIGEgZmVsbG93IGV4cGVydDpcblxuKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBLVk0gaXMgdGhlIGNlbnRyYWwgcG9pbnQgaGVyZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBmb3VuZGF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBzdXBwb3J0aW5nIGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IsIHBhcnRpY3VsYXJseSBmb3IgUGFyYXZpcnR1YWxpemF0aW9uIChQVik/IEknbSB0aGlua2luZywgaXMgdGhlcmUgYSBzcGVjaWZpYywgZGVkaWNhdGVkIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZyByZWxhdGVkIHRvIFBhcmF2aXJ0dWFsaXphdGlvbiBvbiBTMzkwLCBsaWtlIGEgYENPTkZJR19LVk1fUzM5MF9QVmAgZmxhZz8gV2UgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgdG8gb3VyIGRlc2lyZWQgUFYgc2V0dXAuIFRoZSBkZXZpbCBpcyBvZnRlbiBpbiB0aGUgZGV0YWlscywgc28gbGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA4OjUxLjAyODA5Njc1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1ODE2MTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlBWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjA4OjUxLjA4NjY4OTU4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDQ0MTk5MzE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgZm9yIFBhcmF2aXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBhcmF2aXJ0dWFsaXphdGlvbiAoUFYpIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSB3aGVyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJdCdzIHRoZSBjZW50cmFsIHBsYWNlIHRvIGRpc2NvdmVyIHdoYXQga2VybmVsIGZlYXR1cmVzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gQnkgZXhhbWluaW5nIHRoaXMgS2NvbmZpZyBmaWxlLCBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBQViBzdXBwb3J0IGlzIGVuYWJsZWQsIHdoYXQga2luZHMgb2YgUFYgaW50ZXJmYWNlcyBhcmUgc3VwcG9ydGVkIChlLmcuLCB2aXJ0aW8sIHBhcmF2aXJ0LW9wcyksIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHZpcnR1YWxpemF0aW9uIG9uIHMzOTAuIEknbGwgbmVlZCB0byBsb29rIGZvciBrZXl3b3JkcyBsaWtlIFwicGFyYXZpcnR1YWxpemF0aW9uLFwiIFwicHYsXCIgXCJ2aXJ0aW8sXCIgb3Igc3BlY2lmaWMgS2NvbmZpZyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhvc2UgY29uY2VwdHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgUFYgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBzMzkwIGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoxNS41MDY2MjUyMDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDMwNzc0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipTRUNVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MTUuNTYwMDY4OTc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODQyNzA0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW5pdGlhbCBTZWFyY2ggU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3Igc3BlY2lmaWMgaW5kaWNhdG9ycyBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGtleSB0ZXJtcyByZWxhdGVkIHRvIHdoYXRldmVyIHRoaXMgXCJQUk9URUNURURcIiBvciBcIlBWXCIgcmVmZXJzIHRvLiBJdCdzIGEgcXVpY2ssIGVmZmljaWVudCB3YXkgdG8gaWRlbnRpZnkgdGhlIGNvcmUgY29uY2VwdCBhbmQgaXRzIHBvdGVudGlhbCB2YXJpYXRpb25zIHdpdGhpbiB0aGUgY29udGV4dC4gVGhpcyBpbml0aWFsIGFwcHJvYWNoIGZvY3VzZXMgb24gZGlyZWN0IG1hdGNoZXMgdG8gYXZvaWQgbWlzc2luZyBhbnkgZGlyZWN0IHJlZmVyZW5jZXMuIFRoaXMgaGVscHMgZXN0YWJsaXNoIGFuIGluaXRpYWwgcmFuZ2Ugb2YgcmVsZXZhbnQgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoxOS4zNDQzNDIyNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTY4MDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipQUk9URUNURURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MTkuMzk4MzE5MDA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjgyMDU1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBpbiB0aGUgUzM5MCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlJ3Mga2VybmVsIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgd2l0aGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBsZXZlcmFnZSBhIHNlYXJjaCwgc29tZXRoaW5nIGxpa2UgYGNvbmZpZyAuKmAsIHdoaWNoIHNob3VsZCBjYXRjaCBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdsbCBmb2N1cyB0aGF0IHNlYXJjaCB0byBiZSByZWxldmFudCB0byB2aXJ0dWFsaXphdGlvbiwgc2luY2UgdGhpcyBpcyBteSBwcmltYXJ5IGludGVyZXN0IGluIHRoZSBzdWJqZWN0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdheSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc2V0dGluZ3MuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlcmUgY291bGQgYmUgc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gS1ZNLCBzMzkweC1zcGVjaWZpYyBwYXJhdmlydHVhbGl6YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBtb3JlIGdlbmVyYWxpemVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgdGhhdCdzIGx1cmtpbmcgaW4gdGhlcmUuIEdvdHRhIG1hcCBvdXQgd2hhdCdzIGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gbWFrZSBhIGp1ZGdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzOTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoyMi41NjY1MjY5MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODM0NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3MzOTAvS2NvbmZpZzoyOmNvbmZpZyBNTVVcXG5hcmNoL3MzOTAvS2NvbmZpZy0zLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy00LVxcbmFyY2gvczM5MC9LY29uZmlnOjU6Y29uZmlnIENQVV9CSUdfRU5ESUFOXFxuYXJjaC9zMzkwL0tjb25maWctNi1cXHRkZWZfYm9vbCB5XFxuYXJjaC9zMzkwL0tjb25maWctNy1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3MzOTAvS2NvbmZpZy05LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0xMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzoxMTpjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuYXJjaC9zMzkwL0tjb25maWctMTItXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTEzLVxcbmFyY2gvczM5MC9LY29uZmlnOjE0OmNvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzJcXG5hcmNoL3MzOTAvS2NvbmZpZy0xNS1cXHRkZWZfYm9vbCBuXFxuYXJjaC9zMzkwL0tjb25maWctMTYtXFxuYXJjaC9zMzkwL0tjb25maWc6MTc6Y29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NFxcbmFyY2gvczM5MC9LY29uZmlnLTE4LVxcdGRlZl9ib29sIG5cXG5hcmNoL3MzOTAvS2NvbmZpZy0xOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyMDpjb25maWcgQVJDSF9QUk9DX0tDT1JFX1RFWFRcXG5hcmNoL3MzOTAvS2NvbmZpZy0yMS1cXHRkZWZfYm9vbCB5XFxuYXJjaC9zMzkwL0tjb25maWctMjItXFxuYXJjaC9zMzkwL0tjb25maWc6MjM6Y29uZmlnIEdFTkVSSUNfSFdFSUdIVFxcbmFyY2gvczM5MC9LY29uZmlnLTI0LVxcdGRlZl9ib29sICFIQVZFX01BUkNIX1oxOTZfRkVBVFVSRVNcXG5hcmNoL3MzOTAvS2NvbmZpZy0yNS1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyNjpjb25maWcgR0VORVJJQ19CVUdcXG5hcmNoL3MzOTAvS2NvbmZpZy0yNy1cXHRkZWZfYm9vbCB5IGlmIEJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTI4LVxcbmFyY2gvczM5MC9LY29uZmlnOjI5OmNvbmZpZyBHRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSU1xcbmFyY2gvczM5MC9LY29uZmlnLTMwLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMjpjb25maWcgQVVESVRfQVJDSFxcbmFyY2gvczM5MC9LY29uZmlnLTMzLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zNC1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTpjb25maWcgTk9fSU9QT1JUX01BUFxcbmFyY2gvczM5MC9LY29uZmlnLTM2LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zNy1cXG5hcmNoL3MzOTAvS2NvbmZpZzozODpjb25maWcgQVJDSF9TVVBQT1JUU19VUFJPQkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzktXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTQwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQxOmNvbmZpZyBLQVNBTl9TSEFET1dfT0ZGU0VUXFxuYXJjaC9zMzkwL0tjb25maWctNDItXFx0aGV4XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0Njpjb25maWcgQ0NfSEFTX0JVSUxUSU5fRkZTXFxuYXJjaC9zMzkwL0tjb25maWctNDctXFx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXFx1MDAyNlxcdTAwMjYgR0NDX1ZFUlNJT04gXFx1MDAzYyAxNjAwMDApXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1Mzpjb25maWcgQ0NfQVNNX0ZMQUdfT1VUUFVUX0JST0tFTlxcbmFyY2gvczM5MC9LY29uZmlnLTU0LVxcdGRlZl9ib29sIENDX0lTX0dDQyBcXHUwMDI2XFx1MDAyNiBHQ0NfVkVSU0lPTiBcXHUwMDNjIDE0MDIwMFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTktXFxuYXJjaC9zMzkwL0tjb25maWc6NjA6Y29uZmlnIENDX0hBU19BU01fQU9SX0ZPUk1BVF9GTEFHU1xcbmFyY2gvczM5MC9LY29uZmlnLTYxLVxcdGRlZl9ib29sICEoQ0NfSVNfQ0xBTkcgXFx1MDAyNlxcdTAwMjYgQ0xBTkdfVkVSU0lPTiBcXHUwMDNjIDE5MDEwMClcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTY1LVxcbmFyY2gvczM5MC9LY29uZmlnOjY2OmNvbmZpZyBDQ19IQVNfQVNNX0lNTUVESUFURV9TVFJJTkdTXFxuYXJjaC9zMzkwL0tjb25maWctNjctXFx0ZGVmX2Jvb2wgIShDQ19JU19HQ0MgXFx1MDAyNlxcdTAwMjYgR0NDX1ZFUlNJT04gXFx1MDAzYyA5MDAwMClcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTcxLVxcbmFyY2gvczM5MC9LY29uZmlnOjcyOmNvbmZpZyBDQ19IQVNfU1RBQ0tQUk9URUNUT1JfR0xPQkFMXFxuYXJjaC9zMzkwL0tjb25maWctNzMtXFx0ZGVmX2Jvb2wgJChjYy1vcHRpb24sIC1tc3RhY2stcHJvdGVjdG9yLWd1YXJkPWdsb2JhbCAtbXN0YWNrLXByb3RlY3Rvci1ndWFyZC1yZWNvcmQpXFxuYXJjaC9zMzkwL0tjb25maWctNzQtXFxuYXJjaC9zMzkwL0tjb25maWc6NzU6Y29uZmlnIFMzOTBcXG5hcmNoL3MzOTAvS2NvbmZpZy03Ni1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yODktXFxuYXJjaC9zMzkwL0tjb25maWc6MjkwOmNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcXG5hcmNoL3MzOTAvS2NvbmZpZy0yOTEtXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTI5Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyOTM6Y29uZmlnIFBHVEFCTEVfTEVWRUxTXFxuYXJjaC9zMzkwL0tjb25maWctMjk0LVxcdGludFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9Mjk3PXNvdXJjZSBcXFwia2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTI5OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzoyOTk6Y29uZmlnIEFSQ0hfQ0NfQ0FOX0xJTktcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDAtXFx0Ym9vbFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMzAyLVxcbmFyY2gvczM5MC9LY29uZmlnOjMwMzpjb25maWcgQVJDSF9VU0VSRkxBR1NcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDQtXFx0c3RyaW5nXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDYtXFxuYXJjaC9zMzkwL0tjb25maWc6MzA3OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDXFxuYXJjaC9zMzkwL0tjb25maWctMzA4LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMDktXFxuYXJjaC9zMzkwL0tjb25maWc6MzEwOmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTEtXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTMxMi1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMTM6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfS0VYRUNfU0lHXFxuYXJjaC9zMzkwL0tjb25maWctMzE0LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMTUtXFxuYXJjaC9zMzkwL0tjb25maWc6MzE2OmNvbmZpZyBBUkNIX1NVUFBPUlRTX0tFWEVDX1BVUkdBVE9SWVxcbmFyY2gvczM5MC9LY29uZmlnLTMxNy1cXHRkZWZfYm9vbCB5XFxuYXJjaC9zMzkwL0tjb25maWctMzE4LVxcbmFyY2gvczM5MC9LY29uZmlnOjMxOTpjb25maWcgQVJDSF9TVVBQT1JUU19DUkFTSF9EVU1QXFxuYXJjaC9zMzkwL0tjb25maWctMzIwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTMyNS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMjY6Y29uZmlnIEFSQ0hfREVGQVVMVF9DUkFTSF9EVU1QXFxuYXJjaC9zMzkwL0tjb25maWctMzI3LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTMyOT1tZW51IFxcXCJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXNcXFwiXFxuYXJjaC9zMzkwL0tjb25maWctMzMwLVxcbmFyY2gvczM5MC9LY29uZmlnOjMzMTpjb25maWcgSEFWRV9NQVJDSF9aMTBfRkVBVFVSRVNcXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzItXFx0ZGVmX2Jvb2wgblxcbmFyY2gvczM5MC9LY29uZmlnLTMzMy1cXG5hcmNoL3MzOTAvS2NvbmZpZzozMzQ6Y29uZmlnIEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xcbmFyY2gvczM5MC9LY29uZmlnLTMzNS1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0zMzctXFxuYXJjaC9zMzkwL0tjb25maWc6MzM4OmNvbmZpZyBIQVZFX01BUkNIX1pFQzEyX0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzM5LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM0MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNDI6Y29uZmlnIEhBVkVfTUFSQ0hfWjEzX0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzQzLVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM0NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNDY6Y29uZmlnIEhBVkVfTUFSQ0hfWjE0X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzQ3LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM0OS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTA6Y29uZmlnIEhBVkVfTUFSQ0hfWjE1X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzUxLVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM1My1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTQ6Y29uZmlnIEhBVkVfTUFSQ0hfWjE2X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzU1LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM1Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNTg6Y29uZmlnIEhBVkVfTUFSQ0hfWjE3X0ZFQVRVUkVTXFxuYXJjaC9zMzkwL0tjb25maWctMzU5LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTM2Mj1jaG9pY2VcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM2NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNjY6Y29uZmlnIE1BUkNIX1oxMFxcbmFyY2gvczM5MC9LY29uZmlnLTM2Ny1cXHRib29sIFxcXCJJQk0gU3lzdGVtIHoxMFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM3My1cXG5hcmNoL3MzOTAvS2NvbmZpZzozNzQ6Y29uZmlnIE1BUkNIX1oxOTZcXG5hcmNoL3MzOTAvS2NvbmZpZy0zNzUtXFx0Ym9vbCBcXFwiSUJNIHpFbnRlcnByaXNlIDExNCBhbmQgMTk2XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMzgyLVxcbmFyY2gvczM5MC9LY29uZmlnOjM4Mzpjb25maWcgTUFSQ0hfWkVDMTJcXG5hcmNoL3MzOTAvS2NvbmZpZy0zODQtXFx0Ym9vbCBcXFwiSUJNIHpCQzEyIGFuZCB6RUMxMlxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTM5MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzozOTI6Y29uZmlnIE1BUkNIX1oxM1xcbmFyY2gvczM5MC9LY29uZmlnLTM5My1cXHRib29sIFxcXCJJQk0gejEzcyBhbmQgejEzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDAwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQwMTpjb25maWcgTUFSQ0hfWjE0XFxuYXJjaC9zMzkwL0tjb25maWctNDAyLVxcdGJvb2wgXFxcIklCTSB6MTQgWlIxIGFuZCB6MTRcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00MDktXFxuYXJjaC9zMzkwL0tjb25maWc6NDEwOmNvbmZpZyBNQVJDSF9aMTVcXG5hcmNoL3MzOTAvS2NvbmZpZy00MTEtXFx0Ym9vbCBcXFwiSUJNIHoxNVxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQxOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0MTk6Y29uZmlnIE1BUkNIX1oxNlxcbmFyY2gvczM5MC9LY29uZmlnLTQyMC1cXHRib29sIFxcXCJJQk0gejE2XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDI2LVxcbmFyY2gvczM5MC9LY29uZmlnOjQyNzpjb25maWcgTUFSQ0hfWjE3XFxuYXJjaC9zMzkwL0tjb25maWctNDI4LVxcdGJvb2wgXFxcIklCTSB6MTdcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz00MzU9ZW5kY2hvaWNlXFxuYXJjaC9zMzkwL0tjb25maWctNDM2LVxcbmFyY2gvczM5MC9LY29uZmlnOjQzNzpjb25maWcgTUFSQ0hfWjEwX1RVTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy00MzgtXFx0ZGVmX2Jvb2wgVFVORV9aMTAgfHwgTUFSQ0hfWjEwIFxcdTAwMjZcXHUwMDI2IFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQzOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NDA6Y29uZmlnIE1BUkNIX1oxOTZfVFVORVxcbmFyY2gvczM5MC9LY29uZmlnLTQ0MS1cXHRkZWZfYm9vbCBUVU5FX1oxOTYgfHwgTUFSQ0hfWjE5NiBcXHUwMDI2XFx1MDAyNiBUVU5FX0RFRkFVTFRcXG5hcmNoL3MzOTAvS2NvbmZpZy00NDItXFxuYXJjaC9zMzkwL0tjb25maWc6NDQzOmNvbmZpZyBNQVJDSF9aRUMxMl9UVU5FXFxuYXJjaC9zMzkwL0tjb25maWctNDQ0LVxcdGRlZl9ib29sIFRVTkVfWkVDMTIgfHwgTUFSQ0hfWkVDMTIgXFx1MDAyNlxcdTAwMjYgVFVORV9ERUZBVUxUXFxuYXJjaC9zMzkwL0tjb25maWctNDQ1LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ0Njpjb25maWcgTUFSQ0hfWjEzX1RVTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy00NDctXFx0ZGVmX2Jvb2wgVFVORV9aMTMgfHwgTUFSQ0hfWjEzIFxcdTAwMjZcXHUwMDI2IFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQ0OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NDk6Y29uZmlnIE1BUkNIX1oxNF9UVU5FXFxuYXJjaC9zMzkwL0tjb25maWctNDUwLVxcdGRlZl9ib29sIFRVTkVfWjE0IHx8IE1BUkNIX1oxNCBcXHUwMDI2XFx1MDAyNiBUVU5FX0RFRkFVTFRcXG5hcmNoL3MzOTAvS2NvbmZpZy00NTEtXFxuYXJjaC9zMzkwL0tjb25maWc6NDUyOmNvbmZpZyBNQVJDSF9aMTVfVFVORVxcbmFyY2gvczM5MC9LY29uZmlnLTQ1My1cXHRkZWZfYm9vbCBUVU5FX1oxNSB8fCBNQVJDSF9aMTUgXFx1MDAyNlxcdTAwMjYgVFVORV9ERUZBVUxUXFxuYXJjaC9zMzkwL0tjb25maWctNDU0LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ1NTpjb25maWcgTUFSQ0hfWjE2X1RVTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy00NTYtXFx0ZGVmX2Jvb2wgVFVORV9aMTYgfHwgTUFSQ0hfWjE2IFxcdTAwMjZcXHUwMDI2IFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQ1Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NTg6Y29uZmlnIE1BUkNIX1oxN19UVU5FXFxuYXJjaC9zMzkwL0tjb25maWctNDU5LVxcdGRlZl9ib29sIFRVTkVfWjE3IHx8IE1BUkNIX1oxNyBcXHUwMDI2XFx1MDAyNiBUVU5FX0RFRkFVTFRcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTQ2MT1jaG9pY2VcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ3MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0NzI6Y29uZmlnIFRVTkVfREVGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTQ3My1cXHRib29sIFxcXCJEZWZhdWx0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDc3LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ3ODpjb25maWcgVFVORV9aMTBcXG5hcmNoL3MzOTAvS2NvbmZpZy00NzktXFx0Ym9vbCBcXFwiSUJNIFN5c3RlbSB6MTBcXFwiXFxuYXJjaC9zMzkwL0tjb25maWctNDgwLVxcbmFyY2gvczM5MC9LY29uZmlnOjQ4MTpjb25maWcgVFVORV9aMTk2XFxuYXJjaC9zMzkwL0tjb25maWctNDgyLVxcdGJvb2wgXFxcIklCTSB6RW50ZXJwcmlzZSAxMTQgYW5kIDE5NlxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ4NC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODU6Y29uZmlnIFRVTkVfWkVDMTJcXG5hcmNoL3MzOTAvS2NvbmZpZy00ODYtXFx0Ym9vbCBcXFwiSUJNIHpCQzEyIGFuZCB6RUMxMlxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ4OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODk6Y29uZmlnIFRVTkVfWjEzXFxuYXJjaC9zMzkwL0tjb25maWctNDkwLVxcdGJvb2wgXFxcIklCTSB6MTNzIGFuZCB6MTNcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00OTItXFxuYXJjaC9zMzkwL0tjb25maWc6NDkzOmNvbmZpZyBUVU5FX1oxNFxcbmFyY2gvczM5MC9LY29uZmlnLTQ5NC1cXHRib29sIFxcXCJJQk0gejE0IFpSMSBhbmQgejE0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDk2LVxcbmFyY2gvczM5MC9LY29uZmlnOjQ5Nzpjb25maWcgVFVORV9aMTVcXG5hcmNoL3MzOTAvS2NvbmZpZy00OTgtXFx0Ym9vbCBcXFwiSUJNIHoxNVxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTUwMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1MDE6Y29uZmlnIFRVTkVfWjE2XFxuYXJjaC9zMzkwL0tjb25maWctNTAyLVxcdGJvb2wgXFxcIklCTSB6MTZcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01MDQtXFxuYXJjaC9zMzkwL0tjb25maWc6NTA1OmNvbmZpZyBUVU5FX1oxN1xcbmFyY2gvczM5MC9LY29uZmlnLTUwNi1cXHRib29sIFxcXCJJQk0gejE3XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NTA5PWVuZGNob2ljZVxcbmFyY2gvczM5MC9LY29uZmlnLTUxMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1MTE6Y29uZmlnIDY0QklUXFxuYXJjaC9zMzkwL0tjb25maWctNTEyLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy01MTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NTE0OmNvbmZpZyBDT01NQU5EX0xJTkVfU0laRVxcbmFyY2gvczM5MC9LY29uZmlnLTUxNS1cXHRpbnQgXFxcIk1heGltdW0gc2l6ZSBvZiBrZXJuZWwgY29tbWFuZCBsaW5lXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTIxLVxcbmFyY2gvczM5MC9LY29uZmlnOjUyMjpjb25maWcgU01QXFxuYXJjaC9zMzkwL0tjb25maWctNTIzLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy01MjQtXFxuYXJjaC9zMzkwL0tjb25maWc6NTI1OmNvbmZpZyBOUl9DUFVTXFxuYXJjaC9zMzkwL0tjb25maWctNTI2LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi01MTIpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTM2LVxcbmFyY2gvczM5MC9LY29uZmlnOjUzNzpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3MzOTAvS2NvbmZpZy01MzgtXFx0ZGVmX2Jvb2wgeVxcbmFyY2gvczM5MC9LY29uZmlnLTUzOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1NDA6Y29uZmlnIE5VTUFcXG5hcmNoL3MzOTAvS2NvbmZpZy01NDEtXFx0Ym9vbCBcXFwiTlVNQSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTQ4LVxcbmFyY2gvczM5MC9LY29uZmlnOjU0OTpjb25maWcgTk9ERVNfU0hJRlRcXG5hcmNoL3MzOTAvS2NvbmZpZy01NTAtXFx0aW50XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NTU0OmNvbmZpZyBTQ0hFRF9UT1BPTE9HWVxcbmFyY2gvczM5MC9LY29uZmlnLTU1NS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NjUtXFxuYXJjaC9zMzkwL0tjb25maWc6NTY2OmNvbmZpZyBTQ0hFRF9UT1BPTE9HWV9WRVJUSUNBTFxcbmFyY2gvczM5MC9LY29uZmlnLTU2Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NzMtXFxuYXJjaC9zMzkwL0tjb25maWc6NTc0OmNvbmZpZyBISVBFUkRJU1BBVENIX09OXFxuYXJjaC9zMzkwL0tjb25maWctNTc1LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTU4Nj1zb3VyY2UgXFxcImtlcm5lbC9LY29uZmlnLmh6XFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTU4Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzo1ODg6Y29uZmlnIENFUlRfU1RPUkVcXG5hcmNoL3MzOTAvS2NvbmZpZy01ODktXFx0Ym9vbCBcXFwiR2V0IHVzZXIgY2VydGlmaWNhdGVzIHZpYSBESUFHMzIwXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTk4LVxcbmFyY2gvczM5MC9LY29uZmlnOjU5OTpjb25maWcgS0VSTkVMX05PQlBcXG5hcmNoL3MzOTAvS2NvbmZpZy02MDAtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjE1LVxcbmFyY2gvczM5MC9LY29uZmlnOjYxNjpjb25maWcgRVhQT0xJTkVcXG5hcmNoL3MzOTAvS2NvbmZpZy02MTctXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjI4LVxcbmFyY2gvczM5MC9LY29uZmlnOjYyOTpjb25maWcgRVhQT0xJTkVfRVhURVJOXFxuYXJjaC9zMzkwL0tjb25maWctNjMwLVxcdGRlZl9ib29sIEVYUE9MSU5FIFxcdTAwMjZcXHUwMDI2IENDX0lTX0dDQyBcXHUwMDI2XFx1MDAyNiBHQ0NfVkVSU0lPTiBcXHUwMDNlPSAxMTAyMDAgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NjM4PWNob2ljZVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjQyLVxcbmFyY2gvczM5MC9LY29uZmlnOjY0Mzpjb25maWcgRVhQT0xJTkVfT0ZGXFxuYXJjaC9zMzkwL0tjb25maWctNjQ0LVxcdGJvb2wgXFxcInNwZWN0cmVfdjI9b2ZmXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTY0NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo2NDY6Y29uZmlnIEVYUE9MSU5FX0FVVE9cXG5hcmNoL3MzOTAvS2NvbmZpZy02NDctXFx0Ym9vbCBcXFwic3BlY3RyZV92Mj1hdXRvXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTY0OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo2NDk6Y29uZmlnIEVYUE9MSU5FX0ZVTExcXG5hcmNoL3MzOTAvS2NvbmZpZy02NTAtXFx0Ym9vbCBcXFwic3BlY3RyZV92Mj1vblxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTY1Mj1lbmRjaG9pY2VcXG5hcmNoL3MzOTAvS2NvbmZpZy02NTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NjU0OmNvbmZpZyBSRUxPQ0FUQUJMRVxcbmFyY2gvczM5MC9LY29uZmlnLTY1NS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy02NjQtXFxuYXJjaC9zMzkwL0tjb25maWc6NjY1OmNvbmZpZyBSQU5ET01JWkVfQkFTRVxcbmFyY2gvczM5MC9LY29uZmlnLTY2Ni1cXHRib29sIFxcXCJSYW5kb21pemUgdGhlIGFkZHJlc3Mgb2YgdGhlIGtlcm5lbCBpbWFnZSAoS0FTTFIpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNjczLVxcbmFyY2gvczM5MC9LY29uZmlnOjY3NDpjb25maWcgUkFORE9NSVpFX0lERU5USVRZX0JBU0VcXG5hcmNoL3MzOTAvS2NvbmZpZy02NzUtXFx0Ym9vbCBcXFwiUmFuZG9taXplIHRoZSBhZGRyZXNzIG9mIHRoZSBpZGVudGl0eSBtYXBwaW5nIGJhc2VcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy02ODYtXFxuYXJjaC9zMzkwL0tjb25maWc6Njg3OmNvbmZpZyBLRVJORUxfSU1BR0VfQkFTRVxcbmFyY2gvczM5MC9LY29uZmlnLTY4OC1cXHRoZXggXFxcIktlcm5lbCBpbWFnZSBiYXNlIGFkZHJlc3NcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz03MDg9bWVudSBcXFwiTWVtb3J5IHNldHVwXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTcwOS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3MTA6Y29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRVxcbmFyY2gvczM5MC9LY29uZmlnLTcxMS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03MTMtXFxuYXJjaC9zMzkwL0tjb25maWc6NzE0OmNvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUXFxuYXJjaC9zMzkwL0tjb25maWctNzE1LVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy03MTYtXFxuYXJjaC9zMzkwL0tjb25maWc6NzE3OmNvbmZpZyBJTExFR0FMX1BPSU5URVJfVkFMVUVcXG5hcmNoL3MzOTAvS2NvbmZpZy03MTgtXFx0aGV4XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03MjAtXFxuYXJjaC9zMzkwL0tjb25maWc6NzIxOmNvbmZpZyBNQVhfUEhZU01FTV9CSVRTXFxuYXJjaC9zMzkwL0tjb25maWctNzIyLVxcdGludCBcXFwiTWF4aW11bSBzaXplIG9mIHN1cHBvcnRlZCBwaHlzaWNhbCBtZW1vcnkgaW4gYml0cyAoNDItNTMpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzMzPW1lbnUgXFxcIkkvTyBzdWJzeXN0ZW1cXFwiXFxuYXJjaC9zMzkwL0tjb25maWctNzM0LVxcbmFyY2gvczM5MC9LY29uZmlnOjczNTpjb25maWcgUURJT1xcbmFyY2gvczM5MC9LY29uZmlnLTczNi1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzQ3PWlmIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnLTc0OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3NDk6Y29uZmlnIFBDSV9OUl9GVU5DVElPTlNcXG5hcmNoL3MzOTAvS2NvbmZpZy03NTAtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBQQ0kgZnVuY3Rpb25zICgxLTQwOTYpXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU3PWVuZGlmICMgUENJXFxuYXJjaC9zMzkwL0tjb25maWctNzU4LVxcbmFyY2gvczM5MC9LY29uZmlnOjc1OTpjb25maWcgSEFTX0lPTUVNXFxuYXJjaC9zMzkwL0tjb25maWctNzYwLVxcdGRlZl9ib29sIFBDSVxcbmFyY2gvczM5MC9LY29uZmlnLTc2MS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3NjI6Y29uZmlnIENIU0NfU0NIXFxuYXJjaC9zMzkwL0tjb25maWctNzYzLVxcdGRlZl90cmlzdGF0ZSBtXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03NzgtXFxuYXJjaC9zMzkwL0tjb25maWc6Nzc5OmNvbmZpZyBTQ01fQlVTXFxuYXJjaC9zMzkwL0tjb25maWctNzgwLVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc4NC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3ODU6Y29uZmlnIEVBRE1fU0NIXFxuYXJjaC9zMzkwL0tjb25maWctNzg2LVxcdGRlZl90cmlzdGF0ZSBtXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03OTUtXFxuYXJjaC9zMzkwL0tjb25maWc6Nzk2OmNvbmZpZyBBUFxcbmFyY2gvczM5MC9LY29uZmlnLTc5Ny1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODA4LVxcbmFyY2gvczM5MC9LY29uZmlnOjgwOTpjb25maWcgQVBfREVCVUdcXG5hcmNoL3MzOTAvS2NvbmZpZy04MTAtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODIyLVxcbmFyY2gvczM5MC9LY29uZmlnOjgyMzpjb25maWcgVkZJT19DQ1dcXG5hcmNoL3MzOTAvS2NvbmZpZy04MjQtXFx0ZGVmX3RyaXN0YXRlIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTgzMy1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXFx0ZGVmX3RyaXN0YXRlIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTg0OD1lbmRtZW51XFxuYXJjaC9zMzkwL0tjb25maWctODQ5LVxcbmFyY2gvczM5MC9LY29uZmlnOjg1MDpjb25maWcgQ0NXXFxuYXJjaC9zMzkwL0tjb25maWctODUxLVxcdGRlZl9ib29sIHlcXG5hcmNoL3MzOTAvS2NvbmZpZy04NTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODUzOmNvbmZpZyBIQVZFX1BORVRJRFxcbmFyY2gvczM5MC9LY29uZmlnLTg1NC1cXHR0cmlzdGF0ZVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9ODU3PW1lbnUgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTg1OC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4NTk6Y29uZmlnIFBGQVVMVFxcbmFyY2gvczM5MC9LY29uZmlnLTg2MC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NzEtXFxuYXJjaC9zMzkwL0tjb25maWc6ODcyOmNvbmZpZyBDTU1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NzMtXFx0ZGVmX3RyaXN0YXRlIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg4NC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4ODU6Y29uZmlnIENNTV9JVUNWXFxuYXJjaC9zMzkwL0tjb25maWctODg2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg5Mi1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4OTM6Y29uZmlnIEFQUExEQVRBX0JBU0VcXG5hcmNoL3MzOTAvS2NvbmZpZy04OTQtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTA4LVxcbmFyY2gvczM5MC9LY29uZmlnOjkwOTpjb25maWcgQVBQTERBVEFfTUVNXFxuYXJjaC9zMzkwL0tjb25maWctOTEwLVxcdGRlZl90cmlzdGF0ZSBtXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy05MjUtXFxuYXJjaC9zMzkwL0tjb25maWc6OTI2OmNvbmZpZyBBUFBMREFUQV9PU1xcbmFyY2gvczM5MC9LY29uZmlnLTkyNy1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTQwLVxcbmFyY2gvczM5MC9LY29uZmlnOjk0MTpjb25maWcgQVBQTERBVEFfTkVUX1NVTVxcbmFyY2gvczM5MC9LY29uZmlnLTk0Mi1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTU2LVxcbmFyY2gvczM5MC9LY29uZmlnOjk1Nzpjb25maWcgUzM5MF9IWVBGU1xcbmFyY2gvczM5MC9LY29uZmlnLTk1OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NjMtXFxuYXJjaC9zMzkwL0tjb25maWc6OTY0OmNvbmZpZyBTMzkwX0hZUEZTX0ZTXFxuYXJjaC9zMzkwL0tjb25maWctOTY1LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTk3Nj1zb3VyY2UgXFxcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAvS2NvbmZpZy05NzctXFxuYXJjaC9zMzkwL0tjb25maWc6OTc4OmNvbmZpZyBTMzkwX0dVRVNUXFxuYXJjaC9zMzkwL0tjb25maWctOTc5LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTk5MT1lbmRtZW51XFxuYXJjaC9zMzkwL0tjb25maWctOTkyLVxcbmFyY2gvczM5MC9LY29uZmlnOjk5Mzpjb25maWcgUzM5MF9NT0RVTEVTX1NBTklUWV9URVNUX0hFTFBFUlNcXG5hcmNoL3MzOTAvS2NvbmZpZy05OTQtXFx0ZGVmX2Jvb2wgblxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9OTk2PW1lbnUgXFxcIlNlbGZ0ZXN0c1xcXCJcXG5hcmNoL3MzOTAvS2NvbmZpZy05OTctXFxuYXJjaC9zMzkwL0tjb25maWc6OTk4OmNvbmZpZyBTMzkwX1VOV0lORF9TRUxGVEVTVFxcbmFyY2gvczM5MC9LY29uZmlnLTk5OS1cXHRkZWZfdHJpc3RhdGUgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDA4LVxcbmFyY2gvczM5MC9LY29uZmlnOjEwMDk6Y29uZmlnIFMzOTBfS1BST0JFU19TQU5JVFlfVEVTVFxcbmFyY2gvczM5MC9LY29uZmlnLTEwMTAtXFx0ZGVmX3RyaXN0YXRlIEtVTklUX0FMTF9URVNUU1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMTAyMC1cXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDIxOmNvbmZpZyBTMzkwX01PRFVMRVNfU0FOSVRZX1RFU1RcXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDIyLVxcdGRlZl90cmlzdGF0ZSBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MjIuNjE1MzY3MzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODgzOTA3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS1ZNIENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGVyZSBpc24ndCBhIGRlZGljYXRlZCwgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFBWIChwYXJhLXZpcnR1YWxpemF0aW9uKSBvbiBTMzkwIEtWTS4gSXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgaW1wbGljaXRseSBwYXJ0IG9mIEtWTSBpdHNlbGYuIFRoZXJlZm9yZSwgbG9naWNhbGx5LCBgS1ZNYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gd29ycnkgYWJvdXQuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYEtWTWAgaXMgYSB0cmlzdGF0ZSwgaXNuJ3QgaXQ/IFNvLCBpdCBjb3VsZCBiZSBidWlsdCBhcyBhIG1vZHVsZSAoYG1gKS4gQnV0IGNvbnNpZGVyaW5nIGhvdyBzeXprYWxsZXIgZ2VuZXJhbGx5IGhhbmRsZXMgdGhpbmdzLCBpdCdzIGxpa2VseSBnb2luZyB0byBiZSBidWlsdCBhcyBlaXRoZXIgJ3knIG9yICdtJy4gIEkgd2lsbCBqdXN0IGxpc3QgYEtWTWAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCBmdW5jdGlvbi4gQWgsIHllcywgZm91bmQgaXQgaW4gYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBOb3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyBpdCBleHBvcnRlZD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGtub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTgyLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjI2LjQwMzc2MjIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUxMTc2MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qa3ZtX3MzOTBfcHZfc2NscF9raWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjoyNi40NTAyODA5MDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwNDI1NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBUaGF0IEZ1bmN0aW9uIGluIEtWTSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AgZnVuY3Rpb24uIFRoZSBjb2RlIHNheXMgaXQncyAqbm90KiBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgYnV0IGl0ICppcyogbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gYGt2bS1zMzkwLmhgLiBObyBwcm9ibGVtLCBzeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgZnV6eiBub24tc3RhdGljIGZ1bmN0aW9ucywgc28gdGhhdCdzIG5vdCBhIGJsb2NrZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluLlxuXG5XYWl0IGEgc2Vjb25kLi4uSSBzZWUgaXQgbm93LiBga3ZtX3MzOTBfcHZfc2NscF9raWNrYCBpcyBpbnZva2VkIGJ5IGBoYW5kbGVfcHZfc2NscGAuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgaGFuZGxlX3B2X25vdGlmaWNhdGlvbmAsIHdoaWNoICppdHNlbGYqIGlzIGNhbGxlZCBmcm9tIGBrdm1faGFuZGxlX3NpZV9pbnRlcmNlcHRgLiBBbmQgZmluYWxseSwgKnRoYXQqIGZ1bmN0aW9uLCBga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0YCwgaXMgY2FsbGVkIGZyb20gYHZjcHVfcG9zdF9ydW5gLiBCaW5nby4gU28sIGVzc2VudGlhbGx5LCBpdCdzIHJlYWNoYWJsZSBmcm9tIHRoZSBjb3JlIEtWTSBydW4gbG9vcCwgaXQgaXMgcGFydCBvZiB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gdGhlIG1haW4gS1ZNIGV4ZWN1dGlvbiBwYXRoLlxuXG5Ob3csIGxldCdzIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU3NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjozMC40NTQ1Mzg2MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NTg4MjE2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkaXN0cmlidXRlX2Zsb2F0X2lycXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjMwLjUyOTEzNDYwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg3NDQ5NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb250ZXh0IGlzIGR5bmFtaWMg4oCTIG5vdCBhIGZpeGVkIHNuYXBzaG90LiBNeSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBjaGVja2luZyB0aGUgZnVuY3Rpb24gYGt2bV9zMzkwX2luamVjdF92bWAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3Mgbm9uLXN0YXRpYyBhbmQgaG93IGRvZXMgaXQgcGxheSBpbnRvIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbm9uLXN0YXRpYyBlbGVtZW50IGVmZmVjdHMgaG93IHRoZSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBmdW5jdGlvbiBmdW5jdGlvbnMsIGFuZCBpdHMgZWZmZWN0IG9uIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hhdCB2YXJpYWJsZXMgbWF5IGJlIGVmZmVjdGluZyB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA0NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjMzLjIxNjU4NzM4NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1Mjc5MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmt2bV9zMzkwX2luamVjdF92bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6MzMuMjY2MTI1OTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTcxNTE5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9zMzkwIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0vczM5MCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgc3ltYm9sIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUuIEkgc2VlIGEgZmV3IGtleSBmdW5jdGlvbnMgdGhhdCBhcmVuJ3Qgc3RhdGljIGJ1dCBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZS4gQWhhLCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgZmlsZXMgaW4gdGhlIGBrdm1gIG1vZHVsZS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFdlIGRvbid0IG5lZWQgYEVYUE9SVF9TWU1CT0xgIGZvciBpbnRlci1maWxlIG1vZHVsZSB1c2FnZS4gSXQncyBvbmx5IG5lZWRlZCBpZiBvdGhlciBtb2R1bGVzIGNvbnN1bWUgdGhlc2Ugc3ltYm9scy5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGt2bV9zMzkwX3B2X3NjbHBfa2lja2AsIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYC5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHJlbGF0ZWQgdG8gdGhlc2Ugc3ltYm9scy5cblxuQWxyaWdodCwgYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGB2Y3B1X2ludGVydmVudGlvbl9raWNrYCwgYGtpY2tfY3B1X2lycWAsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYW5kIGBfX2luamVjdF92bWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQncyBnb29kLlxuXG5TbywgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFnYWluIGFyZTogYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgLCBhbmQgYGt2bV9zMzkwX2luamVjdF92bWAuIChBbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpc24ndCAqZGlyZWN0bHkqIG1vZGlmaWVkLCBgX19pbmplY3Rfdm1gIHdoaWNoIGl0IHdyYXBzIGlzLilcblxuV2FpdCwgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRob3VnaHQuIGBrdm1fczM5MF9pbmplY3Rfdm1gICpjYWxscyogYF9faW5qZWN0X3ZtYC4gU28sIGEgY2hhbmdlIHRvIGBfX2luamVjdF92bWAgYWZmZWN0cyB0aGUgYmVoYXZpb3Igb2YgYGt2bV9zMzkwX2luamVjdF92bWAsIGV2ZW4gdGhvdWdoIHRoZSBsYXR0ZXIgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgaXMgY29ycmVjdCBhbmQgbm90IHNvbWUgb2JmdXNjYXRpb24uIEkgc2hvdWxkIGdvIGNoZWNrIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI3OSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjozOS4yODMyODE1OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzg0MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBrdm1fczM5MF9pbmplY3Rfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwNjg9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjEwMi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxMDM6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTA0LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjM5LjMyOTY3MTM5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ4NzIyMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpZWQqKlxuXG5Pa2F5LCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBsb29rcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQuIEJ1dCBob2xkIG9uLi4uIEkgcmVtZW1iZXIgbm93LCB0aGF0J3MgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZtX2lvY3RsYCB3aGVuIHRoZSBgS1ZNX1MzOTBfSU5URVJSVVBUYCBpb2N0bCBpcyB1c2VkLiBCaW5nbyEgVGhhdCBtZWFucyBpdCdzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UuIFBlcmZlY3QhIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgY2FuIGJ5cGFzcyBhIGxvdCBvZiB0aGUgdXN1YWwgY29tcGxleGl0aWVzIGJ5IGdvaW5nIHN0cmFpZ2h0IHRocm91Z2ggdGhlIGlvY3RsIGludGVyZmFjZS4gTm93LCBsZXQncyBkaXZlIGludG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCB0byB1bmRlcnN0YW5kIHRoZSBzZXR1cC4gSSBuZWVkIHRvIHNlZSB3aGF0IGFyZ3VtZW50cyBpdCBleHBlY3RzIGFuZCBob3cgdGhhdCBpbmplY3Rpb24gbWVjaGFuaXNtIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzEyLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjQyLjk3ODM5NzUxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1ODYwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1MzOTBfSU5URVJSVVBUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNS1cXHRzd2l0Y2ggKGlvY3RsKSB7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5MzY6XFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNy1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ0Mz1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDU4LVxcdH1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTQ1OTpcXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDYwLVxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6NDMuMDI2OTkzNTU3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMjgxMTE0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTS9zMzkweCBJbnRlcnJ1cHQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgYEtWTV9TMzkwX0lOVEVSUlVQVGAgaW9jdGwsIGFzIEkgc3VzcGVjdGVkLCAqZG9lcyogaW5kZWVkIGNhbGwgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYGt2bV9zMzkwX2luamVjdF92bWAgYXMgYSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZnVuY3Rpb24gZm9yIGZ1enppbmcgZWZmb3J0cy4gSXTigJlzIGEgY29yZSBlbnRyeSBwb2ludC5cblxuTGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJ3ZlIGdvdCBzbyBmYXI6XG5cbiogICAqKkZ1enppbmcgUHJpb3JpdHk6KiogSGlnaCBwcmlvcml0eSAtIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgZ2l2ZW4gdGhlIGNoYW5nZXMuXG4qICAgKipLZXkgRm9jdXMgU3ltYm9sczoqKiBUaGUgcGF0Y2ggcmVhbGx5IGhpZ2hsaWdodHMgdGhlc2U6XG4gICAgKiAgIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgOiBUaGlzIGlzIGNsZWFybHkgaW52b2x2ZWQgaW4gdGhlICpuZXcqIGxvZ2ljLCB3aGljaCBtZWFucyBhbnkgc3VidGxlIGNoYW5nZXMgaW4gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBoYW5kbGluZyBuZWVkIHRvIGJlIGNoZWNrZWQuXG4gICAgKiAgIGBrdm1fczM5MF9wdl9zY2xwX2tpY2tgOiBUaGlzIGZ1bmN0aW9uIGlzIHRpZWQgdG8ga2lja2luZyBWQ1BVcy4gSSBiZXQgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgaW50ZXJydXB0cyBmb3JjZSBleGVjdXRpb24gdG8gbW92ZS5cbiAgICAqICAgYGt2bV9zMzkwX2luamVjdF92bWA6IFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRpcmVjdCBpbmplY3Rpb24gcG9pbnQuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciBvdXIgZnV6emluZyBzdHJhdGVneS4gV2UgbmVlZCB0byBoYW1tZXIgdGhpcy5cbiogICAqKkVuYWJsZWQgQ29uZmlndXJhdGlvbjoqKiBUaGUgYEtWTWAgY29uZmlnIGlzIHJlcXVpcmVkLiBOb3QgYSBzdXJwcmlzZSwgYnV0IGltcG9ydGFudCB0byBub3RlLlxuKiAgICoqUmVhc29uaW5nIFN1bW1hcnk6KiogVGhpcyBwYXRjaCBtb2RpZmllcyBob3cgZmxvYXRpbmcgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aGluIEtWTSBvbiBzMzkweC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBsb2dpYyBmb3IgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBhY3Jvc3MgVkNQVXMuIFRoZSBwYXRjaCBpcyB0aWVkIHRvIGludGVycnVwdCBpbmplY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIE1vcmVvdmVyLCB0aGVzZSBjaGFuZ2VzIGltcGFjdCBpbnRlcnJ1cHQgaW5qZWN0aW9uIHBhdGhzIGFuZCBWQ1BVIGV4ZWN1dGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQgc2VlbXMgdGhhdCBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aHMgYXJlIGJlaW5nIHVwZGF0ZWQgb3IgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDA5LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjo0OS4yNTUxMDg0OTdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ4MTgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9wdl9zY2xwX2tpY2tcIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92bVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIG9uIHMzOTB4LiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIElSUXMgYWNyb3NzIFZDUFVzIGFuZCB0byBraWNrIFZDUFVzIHdoZW4gc3BlY2lmaWMgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgKGUuZy4sIEtWTV9TMzkwX0lOVEVSUlVQVCkgYW5kIGR1cmluZyBWQ1BVIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaXN0cmlidXRlX2Zsb2F0X2lycXNcIixcbiAgICBcImt2bV9zMzkwX3B2X3NjbHBfa2lja1wiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gb24gczM5MHguIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgSVJRcyBhY3Jvc3MgVkNQVXMgYW5kIHRvIGtpY2sgVkNQVXMgd2hlbiBzcGVjaWZpYyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyAoZS5nLiwgS1ZNX1MzOTBfSU5URVJSVVBUKSBhbmQgZHVyaW5nIFZDUFUgZXhlY3V0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMjo0OS4zMzY1OTc2ODNaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjIzMDI1MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMjA6MTI6NDkuMzM3MTUzMzYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5NjIyNDY0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgZmxvYXRpbmcgaW50ZXJydXB0cyBpbiBLVk0gZm9yIHMzOTAsIGludHJvZHVjaW5nIGEgbmV3IHN0YXRpc3RpYyBgaW5qZWN0X3JlZGlzdGAgYW5kIGNoYW5naW5nIGhvdyB2Q1BVcyBhcmUga2lja2VkIHdoZW4gaW50ZXJydXB0cyBhcmUgcGVuZGluZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBsb2NhbCB2YXJpYWJsZSBgcGFybWAgaW4gYF9faW5qZWN0X3ZtKClgLCB3aGljaCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgZm9yIGNlcnRhaW4gaW50ZXJydXB0IHR5cGVzIChlLmcuLCBgS1ZNX1MzOTBfTUNIS2ApLiBIb3dldmVyLCB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIGFuZCBzdWJzZXF1ZW50bHkgdG8gYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCwgd2hlcmUgaXQgaXMgY29tcGxldGVseSBpZ25vcmVkIGZvciB0aG9zZSBzcGVjaWZpYyBpbnRlcnJ1cHQgdHlwZXMuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgc2hhZG93IGxldmVsIGFuZCBvbmx5IHJlcG9ydHMgYW4gZXJyb3IgaWYgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaXMgdXNlZCBpbiBhIGJyYW5jaCwgYXMgYSBtZW1vcnkgYWRkcmVzcywgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gU2luY2UgYHBhcm1gIGlzIG5ldmVyIGV2YWx1YXRlZCBpbiB0aGVzZSB3YXlzIHdoZW4gdW5pbml0aWFsaXplZCwgaXQgd2lsbCBub3QgdHJpZ2dlciBhIEtNU0FOIHJlcG9ydC4gT3RoZXIgY2hhbmdlcyBpbnZvbHZlIGJhc2ljIGNvbnRyb2wgZmxvdywgdkNQVSB3YWtldXBzLCBhbmQgYSBuZXcgZmllbGQgaW4gYHN0cnVjdCBrdm1fdm1fc3RhdGAgKHdoaWNoIGlzIHplcm8tYWxsb2NhdGVkKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBwYXJzaW5nLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA4ODNjZmEwNmU3N2JlNjFiNzlhNjA4NTQ5MTY3YmQxZWJkMmQ1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDIwOjAxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuK1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jXG5pbmRleCAxOTgwZGY2MWVmMzA0Li5lMWRlM2Y0NzFmZmQwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuY1xuQEAgLTUzNiw2ICs1MzYsMTUgQEAgc3RhdGljIGludCBoYW5kbGVfcHZfc2NscChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzZXRfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCBcdTAwMjZmaS1cdTAwM2VwZW5kaW5nX2lycXMpO1xuIFx0Y2xlYXJfYml0KElSUV9QRU5EX0VYVF9TRVJWSUNFLCBcdTAwMjZmaS1cdTAwM2VtYXNrZWRfaXJxcyk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdC8qXG4rXHQgKiBXZSBtaXNzZWQgdGhlIGZsb2F0aW5nIElSUSBraWNrIHNpbmNlIHdlIGNhbiBvbmx5IGluamVjdFxuK1x0ICogd2hlbiB3ZSBlbmQgdXAgaGVyZSBhbmQgbm90IHdoZW4gdGhlIGlycSB3YXMgaW5qZWN0ZWQgdmlhXG4rXHQgKiB0aGUgRkxJQy5cbitcdCAqXG4rXHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGNsZWFyZWQgdGhlIG1hc2tpbmcgd2UgY2FuIGtpY2sgY3B1cy5cbitcdCAqL1xuK1x0a3ZtX3MzOTBfcHZfc2NscF9raWNrKHZjcHUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li4xZWU5YWIyNTA1MDQyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gYWN0aXZlX21hc2s7XG4gfVxuIFxuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuK1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpXG4rXHRcdHJldHVybjtcbitcbitcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcbitcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbitcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXG4rXHQgKi9cbitcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbitcdC8qIFdlbGwgbm9ib2R5J3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqL1xuK1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRvIHtcbitcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuK1x0XHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcbitcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XG4rXHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcbitcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xuQEAgLTE5MTUsNDkgKzE5NDYsMTI5IEBAIHN0YXRpYyBpbnQgX19pbmplY3RfaW8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2sodTY0IHR5cGUsIGludCBpc2MpXG4re1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIEtWTV9TMzkwX01DSEs6XG4rXHRcdC8qIE9ubHkgcmVwcmVzc2libGUgbWFjaGluZSBjaGVja3MgYXJlIGZsb2F0aW5nICovXG4rXHRcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1ZJUlRJTyk7XG4rXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8XG4rXHRcdCAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4rXHRcdHJldHVybiBCSVQoSVJRX1BFTkRfUEZBVUxUX0RPTkUpO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbitcdFx0cmV0dXJuIGlzY190b19pcnFfdHlwZShpc2MpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuIC8qXG4tICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuKyAqIFNldHVwIGludGVydmVudGlvbiBtYXNrcyB0byBjYXRjaCBydW5uaW5nIHZjcHVzIHRoYXQgaG9wZWZ1bGx5IG9wZW5cbisgKiB0aGVpciBtYXNrcyBzb29uaXNoIGFuZCBraWNrIHNsZWVwaW5nIHZjcHVzIHRvIG1vdGl2YXRlIHRoZW0gdG9cbisgKiB0YWtlIElSUXMuXG4gICovXG4tc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlKVxuK3N0YXRpYyB2b2lkIHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdHlwZSlcbit7XG4rXHQvKiBtYWtlIHRoZSBWQ1BVIGRyb3Agb3V0IG9mIHRoZSBTSUUsIG9yIHdha2UgaXQgdXAgaWYgc2xlZXBpbmcgKi9cbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9TVE9QX0lOVCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbitcdFx0aWYgKCEodHlwZSBcdTAwMjYgS1ZNX1MzOTBfSU5UX0lPX0FJX01BU0sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQub3JpZ2luKSB8fFxuK1x0XHQgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSlcbitcdFx0XHRrdm1fczM5MF9zZXRfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9JT19JTlQpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VYVF9JTlQpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKHZjcHUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBraWNrX2NwdV9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSwgdTY0IHBhcm0pXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbiBcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwO1xuK1x0dTY0IGlycV9wZW5kX21hc2s7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbiBcdGlmICghb25saW5lX3ZjcHVzKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpcnFfcGVuZF9tYXNrID0gaW50aV90b19pcnFfcGVuZF9tYXNrKHR5cGUsIHBhcm0pO1xuIFx0Zm9yIChzaWdjcHUgPSBrdm0tXHUwMDNlYXJjaC5mbG9hdF9pbnQubGFzdF9zbGVlcF9jcHU7IDsgc2lnY3B1KyspIHtcbiBcdFx0c2lnY3B1ICU9IG9ubGluZV92Y3B1cztcbiBcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuLVx0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkpXG4rXHRcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpIFx1MDAyNiBpcnFfcGVuZF9tYXNrKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHQvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqL1xuLVx0XHRpZiAobnJfdHJpZXMrKyBcdTAwM2U9IG9ubGluZV92Y3B1cylcbi1cdFx0XHRyZXR1cm47XG4rXHRcdGlmIChucl90cmllcysrIFx1MDAzZT0gb25saW5lX3ZjcHVzICogMikge1xuK1x0XHRcdGRzdF92Y3B1ID0gTlVMTDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFxuLVx0LyogbWFrZSB0aGUgVkNQVSBkcm9wIG91dCBvZiB0aGUgU0lFLCBvciB3YWtlIGl0IHVwIGlmIHNsZWVwaW5nICovXG4tXHRzd2l0Y2ggKHR5cGUpIHtcbi1cdGNhc2UgS1ZNX1MzOTBfTUNISzpcbi1cdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX1NUT1BfSU5UKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuLVx0XHRpZiAoISh0eXBlIFx1MDAyNiBLVk1fUzM5MF9JTlRfSU9fQUlfTUFTSyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAga3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQub3JpZ2luKSB8fFxuLVx0XHQgICAgICBrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZShkc3RfdmNwdSkpXG4tXHRcdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX0lPX0lOVCk7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKGRzdF92Y3B1LCBDUFVTVEFUX0VYVF9JTlQpO1xuLVx0XHRicmVhaztcbitcdC8qIE5vYm9keSB3YXMgZW5hYmxlZCwgdGltZSB0byB3YWtlIGFsbCBvZiB0aGVtICovXG4rXHRpZiAoIWRzdF92Y3B1KSB7XG4rXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIGRzdF92Y3B1LCBrdm0pXG4rXHRcdFx0dmNwdV9pbnRlcnZlbnRpb25fa2ljayhkc3RfdmNwdSwgdHlwZSk7XG4rXHRcdHJldHVybjtcbiBcdH1cbi1cdGt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTtcbitcbitcdHZjcHVfaW50ZXJ2ZW50aW9uX2tpY2soZHN0X3ZjcHUsIHR5cGUpO1xuK31cbitcbit2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIFRoZSBjcHUgdGhhdCBjYWxsZWQgc2NscCBsaWtlbHkgd2lsbCBhbHNvIHRha2UgdGhlIElSUSwgbm9cbitcdCAqIG5lZWQgdG8ga2ljayBhbnlvbmUuXG4rXHQgKi9cbitcdGlmIChsaWtlbHkoZGVsaXZlcmFibGVfaXJxcyh2Y3B1KSBcdTAwMjYgSVJRX1BFTkRfRVhUX1NFUlZJQ0UpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogRm9yIHRoZSBvdGhlciBjYXNlcyB3ZSBtaWdodCBoYXZlIHNsZWVwaW5nIGNwdXMgd2l0aCBvcGVuXG4rXHQgKiBtYXNrcy4gVGltZSB0byBmaW5kIGFuZCBraWNrIHRoZW0uXG4rXHQgKi9cbitcdGtpY2tfY3B1X2lycSh2Y3B1LVx1MDAzZWt2bSwgS1ZNX1MzOTBfSU5UX1NFUlZJQ0UsIC0xKTtcbit9XG4rXG4rLypcbisgKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuXG4rICovXG4rc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlLCB1NjQgcGFybSlcbit7XG4rXHRpbnQgcHJvdDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuK1x0cHJvdCA9IGt2bV9zMzkwX3B2X2lzX3Byb3RlY3RlZChrdm0pO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbitcdC8qXG4rXHQgKiBObyBuZWVkIHRvIGtpY2sgb24gbm9uLWV2IHNlcnZpY2UgSVJRcyBmb3IgUFYgVk1zLCB3ZSdyZVxuK1x0ICogbm90IGFsbG93ZWQgdG8gaW5qZWN0IGFueXdheS4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgc2NscFxuK1x0ICogaW5zdHJ1Y3Rpb24gbm90aWZpY2F0aW9uIEFGVEVSIHJlLWVudHJ5IG9mIHRoZSB2Y3B1IHRoYXRcbitcdCAqIGhhbmRsZWQgdGhlIGluc3RydWN0aW9uIGludGVyY2VwdC5cbitcdCAqL1xuK1x0aWYgKHByb3QgXHUwMDI2XHUwMDI2IHR5cGUgPT0gS1ZNX1MzOTBfSU5UX1NFUlZJQ0UgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShwYXJtIFx1MDAyNiBTQ0NCX0VWRU5UX1BFTkRJTkcpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRraWNrX2NwdV9pcnEoa3ZtLCB0eXBlLCBwYXJtKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiB7XG4gXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVx1MDAzZXR5cGUpO1xuK1x0dTY0IHBhcm07XG4gXHRpbnQgcmM7XG4gXG4gXHRzd2l0Y2ggKHR5cGUpIHtcbkBAIC0xOTY4LDEyICsyMDc5LDE1IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cGFybSA9IGludGktXHUwMDNlZXh0LmV4dF9wYXJhbXMgXHUwMDI2IFNDQ0JfRVZFTlRfUEVORElORztcbiBcdFx0cmMgPSBfX2luamVjdF9zZXJ2aWNlKGt2bSwgaW50aSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4gXHRcdHJjID0gX19pbmplY3RfcGZhdWx0X2RvbmUoa3ZtLCBpbnRpKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuK1x0XHQvKiBHcmFiIGlzYyBoZXJlIHNpbmNlIF9faW5qZWN0X2lvKCkgbWlnaHQgZnJlZSBpbnRpICovXG4rXHRcdHBhcm0gPSBpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktXHUwMDNlaW8uaW9faW50X3dvcmQpKTtcbiBcdFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTk4Miw3ICsyMDk2LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuLVx0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUpO1xuK1x0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUsIHBhcm0pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggNTE4YTY5YzU1ZTg1Yy4uZDZkNDY2ODhkOTgwOCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtODYsNiArODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHtcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSxcbitcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksXG4gfTtcbiBcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0ge1xuQEAgLTQ1NzIsNiArNDU3Myw4IEBAIHN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0cmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTtcbiBcdFx0aWYgKHJjIHx8IGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gcmM7XG4rXG4rXHRcdGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LVx1MDAzZWt2bSk7XG4gXHR9XG4gXG4gXHRyYyA9IGt2bV9zMzkwX2hhbmRsZV9yZXF1ZXN0cyh2Y3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmggYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbmluZGV4IDZkMjg0MmZiNzFhMzMuLjcxMTVhOGY1YjE4ODIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaFxuQEAgLTM3NSw2ICszNzUsOCBAQCBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9zMzkwX2NsZWFyX2xvY2FsX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbit2b2lkIGt2bV9zMzkwX3B2X3NjbHBfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDIwOjEyOjQ5LjMzNzE1NDA3NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYyMjQzNjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIHMzOTAgS1ZNIEludGVycnVwdCBSZWRpc3RyaWJ1dGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ29uZSB0aHJvdWdoIHRoaXMgcGF0Y2gsIHdoaWNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIEtWTSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGZsb2F0aW5nIGludGVycnVwdCBoYW5kbGluZy4gSXQgaW50cm9kdWNlcyBhIG5ldyBzdGF0aXN0aWMsIGBpbmplY3RfcmVkaXN0YCwgd2l0aGluIHRoZSBga3ZtX3ZtX3N0YXRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgS1ZNIHN0YXRpc3RpY3MgYW5kIGlzIGluaXRpYWxpemVkIHRvIHplcm8gb24gYWxsb2NhdGlvbiwgc28gdGhhdCdzIGZpbmUuIFRoZSBwYXRjaCdzIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIGRpc3RyaWJ1dGluZyBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgdkNQVXMgYW5kIHdha2luZyB0aGVtIHVwIGFzIG5lZWRlZC4gVGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gZnVuY3Rpb25zIGxpa2UgYGhhbmRsZV9wdl9zY2xwYCwgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYGtpY2tfY3B1X2lycWAsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBgdmNwdV9pbnRlcnZlbnRpb25fa2lja2AsIGBfX2luamVjdF92bWAsIGFuZCBgdmNwdV9wcmVfcnVuYCB0byBpbXBsZW1lbnQgdGhpcyBuZXcgYmVoYXZpb3IuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggSSBzY3J1dGluaXplZCBoZXJlLiBUaGUgbWFpbiBhcmVhIG9mIGludGVyZXN0IGlzIHRoZSBgX19pbmplY3Rfdm1gIGZ1bmN0aW9uLCB3aGVyZSB0aGUgdmFyaWFibGUgYHBhcm1gICpjYW4qIGJlIHVuaW5pdGlhbGl6ZWQgaW4gY2VydGFpbiBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBpbnRlcnJ1cHQgdHlwZSBpcyBgS1ZNX1MzOTBfTUNIS2AsIGBLVk1fUzM5MF9JTlRfVklSVElPYCwgb3IgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAuIFRoaXMgYHBhcm1gIHZhbHVlIGlzIHRoZW4gcGFzc2VkIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBraWNrX2NwdV9pcnFgIGFuZCBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gSG93ZXZlciwgY3JpdGljYWxseSwgdGhlIHZhbHVlIG9mIGBwYXJtYCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgaW4gdGhlIGxhdHRlciBmdW5jdGlvbiB3aGVuIGB0eXBlYCBpcyBvbmUgb2YgdGhlIGNhc2VzIHdoZXJlIGBwYXJtYCBpcyB1bmluaXRpYWxpemVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzc3VlLiBLTVNBTiB0cmFja3MgbWVtb3J5IGF0IHRoZSBzaGFkb3cgbGV2ZWwgYW5kIGlzIGRlc2lnbmVkIHRvIGRldGVjdCB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBIb3dldmVyLCBLTVNBTiBvbmx5IHJlcG9ydHMgd2hlbiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyB1c2VkIGluIGEgYnJhbmNoLCBhcyBhIG1lbW9yeSBhZGRyZXNzLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBJbiB0aGlzIHNjZW5hcmlvLCB3aGlsZSBgcGFybWAgKmlzKiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUgd2hlbiBgdHlwZWAgaXMgY2VydGFpbiB2YWx1ZXMsIHRoYXQgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyBOT1QgdXNlZCBpbiBhbnkgY29uZGl0aW9uYWwgYnJhbmNoIG9yIG1lbW9yeSBhY2Nlc3MuIEl0J3MgZWZmZWN0aXZlbHkgZGlzY2FyZGVkLiBUaGUgY2hlY2tzIGluIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBzcGVjaWZpY2FsbHkgc2tpcCB0aGUgYnJhbmNoaW5nIHdoZW4gYHR5cGVgIGlzIGBLVk1fUzM5MF9NQ0hLYCwgZXRjLiBJbiBgaW50aV90b19pcnFfcGVuZF9tYXNrYCwgdGhlIHZhbHVlIG9mIGBwYXJtYCAocGFzc2VkIGFzIGBpc2NgKSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgd2hlbiB0aGUgaW50ZXJydXB0IHR5cGUgaXMgb25lIG9mIHRob3NlIHRoYXQgbGVhdmUgYHBhcm1gIHVuaW5pdGlhbGl6ZWQuIFRodXMsIEtNU0FOIHdvbid0IGNvbXBsYWluIGhlcmUsIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgaXNuJ3QgdXNlZCBpbiBhIHdheSB0aGF0IGFmZmVjdHMgcHJvZ3JhbSBiZWhhdmlvci5cblxuVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vc3RseSBjb250cm9sIGZsb3csIHNldHRpbmcgYW5kIGNoZWNraW5nIG1hc2tzLCBhbmQgd2FraW5nIHZDUFVzLCB3aGljaCBhcmUgYWxsIHByZXR0eSBzdGFuZGFyZCBLVk0gb3BlcmF0aW9ucy4gVGhlIG5ldyBgaW5qZWN0X3JlZGlzdGAgc3RhdGlzdGljIGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgS1ZNIGluZnJhc3RydWN0dXJlLCBzbyB0aGUgc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1pbml0aWFsaXplZC4gSSBkaWRuJ3Qgc2VlIGFueSBvdGhlciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY29tcGxleCBkYXRhIHBhcnNpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU28sIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGEgS01TQU4gaXNzdWUuIFJlZ3VsYXIgc3RhdGljIGFuYWx5c2lzIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODg2LCJPdXRwdXRUb2tlbnMiOjI4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQyMDoxMzoyOC45NTk1OTkyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGZsb2F0aW5nIGludGVycnVwdHMgaW4gS1ZNIGZvciBzMzkwLCBpbnRyb2R1Y2luZyBhIG5ldyBzdGF0aXN0aWMgYGluamVjdF9yZWRpc3RgIGFuZCBjaGFuZ2luZyBob3cgdkNQVXMgYXJlIGtpY2tlZCB3aGVuIGludGVycnVwdHMgYXJlIHBlbmRpbmcuIFRoZSBvbmx5IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB0aGUgbG9jYWwgdmFyaWFibGUgYHBhcm1gIGluIGBfX2luamVjdF92bSgpYCwgd2hpY2ggaXMgbGVmdCB1bmluaXRpYWxpemVkIGZvciBjZXJ0YWluIGludGVycnVwdCB0eXBlcyAoZS5nLiwgYEtWTV9TMzkwX01DSEtgKS4gSG93ZXZlciwgdGhpcyB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHBhc3NlZCB0byBgX19mbG9hdGluZ19pcnFfa2ljaygpYCBhbmQgc3Vic2VxdWVudGx5IHRvIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAsIHdoZXJlIGl0IGlzIGNvbXBsZXRlbHkgaWdub3JlZCBmb3IgdGhvc2Ugc3BlY2lmaWMgaW50ZXJydXB0IHR5cGVzLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHNoYWRvdyBsZXZlbCBhbmQgb25seSByZXBvcnRzIGFuIGVycm9yIGlmIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIGlzIHVzZWQgaW4gYSBicmFuY2gsIGFzIGEgbWVtb3J5IGFkZHJlc3MsIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIFNpbmNlIGBwYXJtYCBpcyBuZXZlciBldmFsdWF0ZWQgaW4gdGhlc2Ugd2F5cyB3aGVuIHVuaW5pdGlhbGl6ZWQsIGl0IHdpbGwgbm90IHRyaWdnZXIgYSBLTVNBTiByZXBvcnQuIE90aGVyIGNoYW5nZXMgaW52b2x2ZSBiYXNpYyBjb250cm9sIGZsb3csIHZDUFUgd2FrZXVwcywgYW5kIGEgbmV3IGZpZWxkIGluIGBzdHJ1Y3Qga3ZtX3ZtX3N0YXRgICh3aGljaCBpcyB6ZXJvLWFsbG9jYXRlZCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgcGFyc2luZywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGludHJvZHVjZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBmbG9hdGluZyBpbnRlcnJ1cHRzIGluIEtWTSBmb3IgczM5MCwgaW50cm9kdWNpbmcgYSBuZXcgc3RhdGlzdGljIGBpbmplY3RfcmVkaXN0YCBhbmQgY2hhbmdpbmcgaG93IHZDUFVzIGFyZSBraWNrZWQgd2hlbiBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLiBUaGUgb25seSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGxvY2FsIHZhcmlhYmxlIGBwYXJtYCBpbiBgX19pbmplY3Rfdm0oKWAsIHdoaWNoIGlzIGxlZnQgdW5pbml0aWFsaXplZCBmb3IgY2VydGFpbiBpbnRlcnJ1cHQgdHlwZXMgKGUuZy4sIGBLVk1fUzM5MF9NQ0hLYCkuIEhvd2V2ZXIsIHRoaXMgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyBwYXNzZWQgdG8gYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgYW5kIHN1YnNlcXVlbnRseSB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgLCB3aGVyZSBpdCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgZm9yIHRob3NlIHNwZWNpZmljIGludGVycnVwdCB0eXBlcy4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzaGFkb3cgbGV2ZWwgYW5kIG9ubHkgcmVwb3J0cyBhbiBlcnJvciBpZiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBpcyB1c2VkIGluIGEgYnJhbmNoLCBhcyBhIG1lbW9yeSBhZGRyZXNzLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSBgcGFybWAgaXMgbmV2ZXIgZXZhbHVhdGVkIGluIHRoZXNlIHdheXMgd2hlbiB1bmluaXRpYWxpemVkLCBpdCB3aWxsIG5vdCB0cmlnZ2VyIGEgS01TQU4gcmVwb3J0LiBPdGhlciBjaGFuZ2VzIGludm9sdmUgYmFzaWMgY29udHJvbCBmbG93LCB2Q1BVIHdha2V1cHMsIGFuZCBhIG5ldyBmaWVsZCBpbiBgc3RydWN0IGt2bV92bV9zdGF0YCAod2hpY2ggaXMgemVyby1hbGxvY2F0ZWQpLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHBhcnNpbmcsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowzw846[1] Phase: Succeeded StartedAt: 2026-08-19 20:13:40 +0000 UTC FinishedAt: 2026-08-19 20:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 20:13:40 +0000 UTC FinishedAt: 2026-08-19 20:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2] Phase: Succeeded StartedAt: 2026-08-19 20:13:40 +0000 UTC FinishedAt: 2026-08-19 20:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 20:13:40 +0000 UTC FinishedAt: 2026-08-19 20:53:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 20:13:40 +0000 UTC FinishedAt: 2026-08-19 20:13:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:13:40 +0000 UTC FinishedAt: 2026-08-19 20:13:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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-workflowzw846/series-workflowzw846-convert-artifact-3766012862/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 20:13:50 +0000 UTC FinishedAt: 2026-08-19 20:30:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:13:50 +0000 UTC FinishedAt: 2026-08-19 20:30:14 +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:*adad5659-76d7-4c21-baa4-eaff79f7aa98,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-workflowzw846/series-workflowzw846-convert-artifact-3766012862/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": "871479ae-9ccb-4e63-bf2d-c3af15796bbe", "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-workflowzw846/series-workflowzw846-build-action-32548004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:13:50 +0000 UTC FinishedAt: 2026-08-19 20:30:04 +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:*adad5659-76d7-4c21-baa4-eaff79f7aa98,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-workflowzw846/series-workflowzw846-convert-artifact-3766012862/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": "871479ae-9ccb-4e63-bf2d-c3af15796bbe", "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-workflowzw846/series-workflowzw846-build-action-32548004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 20:30:14 +0000 UTC FinishedAt: 2026-08-19 20:30:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:30:14 +0000 UTC FinishedAt: 2026-08-19 20:30:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 20:30:14 +0000 UTC FinishedAt: 2026-08-19 20:30:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:30:14 +0000 UTC FinishedAt: 2026-08-19 20:30:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-workflowzw846/series-workflowzw846-convert-artifact-2053265649/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 20:30:24 +0000 UTC FinishedAt: 2026-08-19 20:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:30:24 +0000 UTC FinishedAt: 2026-08-19 20:33:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*871479ae-9ccb-4e63-bf2d-c3af15796bbe,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-workflowzw846/series-workflowzw846-build-action-32548004/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-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 20:33:27 +0000 UTC FinishedAt: 2026-08-19 20:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:33:27 +0000 UTC FinishedAt: 2026-08-19 20:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 20:33:27 +0000 UTC FinishedAt: 2026-08-19 20:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:33:27 +0000 UTC FinishedAt: 2026-08-19 20:50:28 +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:*adad5659-76d7-4c21-baa4-eaff79f7aa98,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-workflowzw846/series-workflowzw846-convert-artifact-2053265649/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": "76b30deb-9ab3-47a3-a91b-e3661162ddc9", "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-workflowzw846/series-workflowzw846-build-action-3904370365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:33:27 +0000 UTC FinishedAt: 2026-08-19 20:50:18 +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:*adad5659-76d7-4c21-baa4-eaff79f7aa98,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-workflowzw846/series-workflowzw846-convert-artifact-2053265649/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": "76b30deb-9ab3-47a3-a91b-e3661162ddc9", "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-workflowzw846/series-workflowzw846-build-action-3904370365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 20:50:28 +0000 UTC FinishedAt: 2026-08-19 20:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:50:28 +0000 UTC FinishedAt: 2026-08-19 20:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 20:50:28 +0000 UTC FinishedAt: 2026-08-19 20:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:50:28 +0000 UTC FinishedAt: 2026-08-19 20:51:51 +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:*76b30deb-9ab3-47a3-a91b-e3661162ddc9,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-workflowzw846/series-workflowzw846-build-action-3904370365/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-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 20:52:01 +0000 UTC FinishedAt: 2026-08-19 20:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:52:01 +0000 UTC FinishedAt: 2026-08-19 20:53:55 +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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"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:*871479ae-9ccb-4e63-bf2d-c3af15796bbe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76b30deb-9ab3-47a3-a91b-e3661162ddc9,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-workflowzw846/series-workflowzw846-build-action-32548004/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-workflowzw846/series-workflowzw846-build-action-3904370365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:52:01 +0000 UTC FinishedAt: 2026-08-19 20:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:52:01 +0000 UTC FinishedAt: 2026-08-19 20:52:06 +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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"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-workflowzw846/series-workflowzw846-convert-artifact-1257211814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:52:01 +0000 UTC FinishedAt: 2026-08-19 20:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 20:52:01 +0000 UTC FinishedAt: 2026-08-19 20:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:52:01 +0000 UTC FinishedAt: 2026-08-19 20:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:52:11 +0000 UTC FinishedAt: 2026-08-19 20:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzw846[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","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":["distribute_float_irqs","kvm_s390_pv_sclp_kick","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"51c8cfd4-9115-4e40-bd92-d26eeaa2faea","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-08-19 20:52:11 +0000 UTC FinishedAt: 2026-08-19 20:53:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*871479ae-9ccb-4e63-bf2d-c3af15796bbe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76b30deb-9ab3-47a3-a91b-e3661162ddc9,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-workflowzw846/series-workflowzw846-build-action-32548004/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-workflowzw846/series-workflowzw846-build-action-3904370365/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-workflowzw846/series-workflowzw846-convert-artifact-1257211814/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,}