Name: series-workflow6d6cp Phase: Succeeded StartedAt: 2026-09-07 09:08:55 +0000 UTC FinishedAt: 2026-09-07 12:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[0] Phase: Succeeded StartedAt: 2026-09-07 09:08:55 +0000 UTC FinishedAt: 2026-09-07 09:12:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 09:08:55 +0000 UTC FinishedAt: 2026-09-07 09:12:08 +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": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL" ], "series_id": "4e4d880d-a941-4e96-bb8b-96e154f60aa5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_flush_pml_buffer", "kvm_update_cpu_dirty_logging", "svm_update_cpu_dirty_logging", "svm_flush_pml_buffer", "pml_full_interception", "nested_svm_exit_special", "nested_vmcb02_prepare_control", "vmx_update_cpu_dirty_logging", "vmx_flush_pml_buffer" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9mbHVzaF9wbWxfYnVmZmVyJiMzNDssCiAgICAmIzM0O2t2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyYjMzQ7LAogICAgJiMzNDtzdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtwbWxfZnVsbF9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV9leGl0X3NwZWNpYWwmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyYjMzQ7LAogICAgJiMzNDt2bXhfZmx1c2hfcG1sX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXG5cbkFsbCBhbGxvY2F0ZWQgUE1MIGJ1ZmZlciBwYWdlcyBhcmUgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIHZpYSBgX19HRlBfWkVST2AgKGluIGBhbGxvY19wYWdlYCBhbmQgYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChlLmcuIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCBvdXRwdXRzKSwgZG8gbm90IGxlYXZlIGFueSBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29udHJvbC1mbG93IGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb247IHN0YW5kYXJkIEtBU0FOIGFuZCBmdW5jdGlvbmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBkaXJ0eSBsb2dnaW5nIHN1cHBvcnQgZm9yIEFNRCBTVk0gYW5kIHJlZmFjdG9ycyB0aGUgc2hhcmVkIFBNTCBidWZmZXIgZmx1c2hpbmcgYW5kIGRpcnR5IGxvZ2dpbmcgc3RhdGUgbWFjaGluZSBhY3Jvc3MgeDg2IEtWTSwgSW50ZWwgVk1YLCBhbmQgQU1EIFNWTS4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBjb2RlIHBhdGhzIGluIEtWTSBhbmQgYWZmZWN0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgZXhpdCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4YjUzMTI3NzlkZDY0ZGJjNjMxMWEyMzZmZDI2MGEzNDkzODFkZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCBmNzBlZTc0YjVmOTIxLi5jYmZjYzY2YTE4ZTliIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTIzOCw2ICYjNDM7MjM4LDcgQEBcbiAvLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMiYjNDM7MjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFx0XHQoIDgqMzImIzQzOzIyKSAvKiBcJiMzNDt0ZHhfZ3Vlc3RcJiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9QTUxcdFx0XHQoIDgqMzImIzQzOzIzKSAvKiBBTUQgUGFnZSBNb2RpZmljYXRpb24gbG9nZ2luZyAqL1xuIFxuIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDA3OjAgKEVCWCksIHdvcmQgOSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfRlNHU0JBU0VcdFx0KCA5KjMyJiM0MzsgMCkgLyogXCYjMzQ7ZnNnc2Jhc2VcJiMzNDsgUkRGU0JBU0UsIFdSRlNCQVNFLCBSREdTQkFTRSwgV1JHU0JBU0UgaW5zdHJ1Y3Rpb25zKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggM2FmNzM5NWMyNDMwYS4uMmRlYmY2Mjk0MjkwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC03ODksNiAmIzQzOzc4OSw4IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdCAqL1xuIFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9leHRlcm5hbF9zcHRfY2FjaGU7XG4gXG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBtbF9wYWdlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBRRU1VIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0IGVhY2ggaGF2ZSB0aGVpciBvd24gRlBVIHN0YXRlLlxuIFx0ICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuXG5AQCAtMTY3MCw3ICYjNDM7MTY3Miw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHRcdFx0ICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pO1xuIFx0dm9pZCAoKmhhbmRsZV9leGl0X2lycW9mZikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO1x0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7XG4gXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uZTBhNzU0OWE3YzcyNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTE2NSw3ICYjNDM7MTY1LDEwIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiBcdHU4IHJlc2VydmVkXzlbMjJdO1xuIFx0dTY0IGFsbG93ZWRfc2V2X2ZlYXR1cmVzO1x0LyogT2Zmc2V0IDB4MTM4ICovXG4gXHR1NjQgZ3Vlc3Rfc2V2X2ZlYXR1cmVzO1x0XHQvKiBPZmZzZXQgMHgxNDAgKi9cbi1cdHU4IHJlc2VydmVkXzEwWzY2NF07XG4mIzQzO1x0dTggcmVzZXJ2ZWRfMTBbMTI4XTtcbiYjNDM7XHR1NjQgcG1sX2FkZHI7XHRcdFx0LyogT2Zmc2V0IDB4MWM4ICovXG4mIzQzO1x0dTE2IHBtbF9pbmRleDtcdFx0XHQvKiBPZmZzZXQgMHgxZDAgKi9cbiYjNDM7XHR1OCByZXNlcnZlZF8xMVs1MjZdO1xuIFx0LypcbiBcdCAqIE9mZnNldCAweDNlMCwgMzIgYnl0ZXMgcmVzZXJ2ZWRcbiBcdCAqIGZvciB1c2UgYnkgaHlwZXJ2aXNvci9zb2Z0d2FyZS5cbkBAIC0yNDAsMTAgJiM0MzsyNDMsMTEgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xuICNkZWZpbmUgU1ZNX0lPSU9fU0laRV9NQVNLICg3IFx1MDAzY1x1MDAzYyBTVk1fSU9JT19TSVpFX1NISUZUKVxuICNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0lPSU9fQVNJWkVfU0hJRlQpXG4gXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcdFx0QklUKDApXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXHRcdEJJVCgxKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1x0QklUKDIpXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXHRcdEJJVF9VTEwoMClcbiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXHRcdEJJVF9VTEwoMSlcbiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWX0VTXHRcdEJJVF9VTEwoMilcbiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0XHRCSVRfVUxMKDMpXG4mIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1BNTFx0XHRCSVRfVUxMKDExKVxuIFxuICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUlx0QklUX1VMTCgwKVxuICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX1ZNTE9BRF9WTVNBVkVcdEJJVF9VTEwoMSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaFxuaW5kZXggMDEwYTQ1YzlmNjE0Ny4uZTgwNjc2MTg1MDkyMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcbkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJXHRcdDB4NDAxXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXHQweDQwMlxuICNkZWZpbmUgU1ZNX0VYSVRfVk1HRVhJVCAgICAgICAweDQwM1xuJiM0MzsjZGVmaW5lIFNWTV9FWElUX1BNTF9GVUxMXHQweDQwN1xuIFxuIC8qIFNFVi1FUyBzb2Z0d2FyZS1kZWZpbmVkIFZNR0VYSVQgZXZlbnRzICovXG4gI2RlZmluZSBTVk1fVk1HRVhJVF9NTUlPX1JFQURcdFx0XHQweDgwMDAwMDAxdWxsXG5AQCAtMjM2LDYgJiM0MzsyMzcsNyBAQFxuIFx0eyBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJLFx0XHRcJiMzNDthdmljX2luY29tcGxldGVfaXBpXCYjMzQ7IH0sIFxcXG4gXHR7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgXCYjMzQ7YXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc1wmIzM0OyB9LCBcXFxuIFx0eyBTVk1fRVhJVF9WTUdFWElULFx0XHRcJiMzNDt2bWdleGl0XCYjMzQ7IH0sIFxcXG4mIzQzO1x0eyBTVk1fRVhJVF9QTUxfRlVMTCxcdFx0XCYjMzQ7cG1sX2Z1bGxcJiMzNDsgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTU1JT19SRUFELFx0XCYjMzQ7dm1nZXhpdF9tbWlvX3JlYWRcJiMzNDsgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTU1JT19XUklURSxcdFwmIzM0O3ZtZ2V4aXRfbW1pb193cml0ZVwmIzM0OyB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9OTUlfQ09NUExFVEUsXHRcJiMzNDt2bWdleGl0X25taV9jb21wbGV0ZVwmIzM0OyB9LCBcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5iMThjYzljODhkZDU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTU1LDYgJiM0Mzs1NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0ZBU1RfQ1BQQyxcdFx0Q1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DUFBDX1BFUkZfUFJJTyxcdFx0Q1BVSURfRURYLCAxNiwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9NQkEsXHRcdFx0Q1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LFxuJiM0MztcdHsgWDg2X0ZFQVRVUkVfUE1MLFx0XHRcdENQVUlEX0VDWCwgIDQsIDB4ODAwMDAwMGEsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCxcdFx0Q1BVSURfRUNYLCAgNiwgMHg4MDAwMDAwYSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DT0hFUkVOQ1lfU0ZXX05PLFx0XHRDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX1NNQkEsXHRcdFx0Q1BVSURfRUJYLCAgMiwgMHg4MDAwMDAyMCwgMCB9LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCA3M2YzN2IwNTBkMGEwLi5kYTQxN2M0YzU5MTU0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTkwMSw2ICYjNDM7OTAxLDEzIEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0dm1jYjAyLVx1MDAzZWNvbnRyb2wubXNycG1fYmFzZV9wYSA9IHZtY2IwMS1cdTAwM2Vjb250cm9sLm1zcnBtX2Jhc2VfcGE7XG4gXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX1BFUk1fTUFQKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuXG4mIzQzO1x0ICogdW5leHBlY3RlZCBQTUwgd3JpdGUgd291bGQgdHJpZ2dlciBhIFBNTF9GVUxMIFZNLUV4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBtbClcbiYjNDM7XHRcdHZtY2IwMi1cdTAwM2Vjb250cm9sLnBtbF9pbmRleCA9IC0xO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTdGFzaCB2bWNiMDImIzM5O3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbiYjMzk7dCBtb3ZlZCBwYXN0IHRoZSBndWlsdHlcbiBcdCAqIGluc3RydWN0aW9uOyBvdGhlcndpc2UsIHJlc2V0IHRoZSBjb3VudGVyIHRvICYjMzk7MCYjMzk7LlxuQEAgLTE4MjAsNiAmIzQzOzE4MjcsMTMgQEAgaW50IG5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0XHRpZiAobmVzdGVkX3N2bV9pc19sMl90bGJfZmx1c2hfaGNhbGwodmNwdSkpXG4gXHRcdFx0cmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1ZNX0VYSVRfUE1MX0ZVTEw6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWxsIFBNTCBmdWxsIGV4aXRzIGFyZSBoYW5kbGVkIGJ5IEtWTS4gIEtWTSBlbXVsYXRlcyBQTUwgaW5cbiYjNDM7XHRcdCAqIHNvZnR3YXJlIGZvciBMMSwgYnV0IG5ldmVyIGVuYWJsZXMgUE1MIGluIGhhcmR3YXJlIG9uIGJlaGFsZlxuJiM0MztcdFx0ICogb2YgTDEuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiBORVNURURfRVhJVF9IT1NUO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmNmZTk5MGY4MDUwNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDk5NCw3ICYjNDM7NDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcbiBcdCAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmVcbiBcdCAqIHRoZSBDUFUgd2lsbCBpbmNvcnJlY3RseSBzaWduYWwgYW4gUk1QIHZpb2xhdGlvbiAjUEYgaWYgYVxuIFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXG4tXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbiYjNDM7XHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBQTUwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuXG4gXHQgKlxuIFx0ICogQWxsb2NhdGUgb25lIGV4dHJhIHBhZ2UsIGNob29zZSBhIHBhZ2Ugd2hpY2ggaXMgbm90XG4gXHQgKiAyTUItYWxpZ25lZCwgYW5kIGZyZWUgdGhlIG90aGVyLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCA3ZDU5ZDMwMWUxZTU0Li45NTBjMjUwYTc3YjUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTE3OSw2ICYjNDM7MTc5LDkgQEAgbW9kdWxlX3BhcmFtKHZubWksIGJvb2wsIDA0NDQpO1xuIFxuIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcbiBcbiYjNDM7Ym9vbCBfX3JvX2FmdGVyX2luaXQgcG1sID0gdHJ1ZTtcbiYjNDM7bW9kdWxlX3BhcmFtKHBtbCwgYm9vbCwgMDQ0NCk7XG4mIzQzO1xuIHN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCBzdm1fZ3BfZXJyYXR1bV9pbnRlcmNlcHQgPSB0cnVlO1xuIFxuIHN0YXRpYyB1OCByc21faW5zX2J5dGVzW10gPSBcJiMzNDtcXHgwZlxceGFhXCYjMzQ7O1xuQEAgLTEyNjcsNiAmIzQzOzEyNzAsMjMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxuIFx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4gXHRcdHN2bV9zZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0JVU0xPQ0spO1xuIFxuJiM0MztcdGlmIChwbWwpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBQb3B1bGF0ZSB0aGUgcGFnZSBhZGRyZXNzIGFuZCBpbmRleCBoZXJlLCBQTUwgaXMgZW5hYmxlZFxuJiM0MztcdFx0ICogd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgb24gdGhlIG1lbXNsb3QgdGhyb3VnaFxuJiM0MztcdFx0ICogc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZygpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNvbnRyb2wtXHUwMDNlcG1sX2FkZHIgPSAodTY0KV9fc21lX3NldChwYWdlX3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBWTUNCIGNvbnRyb2wgYXJlYSByZW1haW5zIHZhbGlkIGFmdGVyIGFuIGludGVyY2VwdGVkIFNIVVRET1dOXG4mIzQzO1x0XHQgKiAoQU1EIEFQTSBSZXYgMy40NSYjNDM7KSwgc28gb25seSBpbml0aWFsaXplIFBNTCBpbmRleCBvbiByZXNldCB0byBhdm9pZFxuJiM0MztcdFx0ICogZGlzY2FyZGluZyBhbHJlYWR5LWxvZ2dlZCBlbnRyaWVzIHRoYXQgaGF2ZW4mIzM5O3QgYmVlbiBmbHVzaGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWluaXRfZXZlbnQpXG4mIzQzO1x0XHRcdGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4ID0gUE1MX0hFQURfSU5ERVg7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpc19zZXZfZ3Vlc3QodmNwdSkpXG4gXHRcdHNldl9pbml0X3ZtY2Ioc3ZtLCBpbml0X2V2ZW50KTtcbiBcbkBAIC0xMzI2LDkgJiM0MzsxMzQ2LDE1IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdm1jYjAxX3BhZ2UpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmIChwbWwpIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbiYjNDM7XHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBzZXZfdmNwdV9jcmVhdGUodmNwdSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xuJiM0MztcdFx0Z290byBlcnJvcl9mcmVlX3BtbF9wYWdlO1xuIFxuIFx0ZXJyID0gYXZpY19pbml0X3ZjcHUoc3ZtKTtcbiBcdGlmIChlcnIpXG5AQCAtMTM1Myw2ICYjNDM7MTM3OSw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4mIzQzO2Vycm9yX2ZyZWVfcG1sX3BhZ2U6XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG4gXHRfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7XG4gb3V0OlxuQEAgLTEzNzAsNiAmIzQzOzEzOTksOSBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4gXG4mIzQzO1x0aWYgKHBtbCBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuJiM0MztcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbiYjNDM7XG4gXHRfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS1cdTAwM2V2bWNiMDEucGEpKTtcbiBcdHN2bV92Y3B1X2ZyZWVfbXNycG0oc3ZtLVx1MDAzZW1zcnBtKTtcbiB9XG5AQCAtMzM0NCw2ICYjNDM7MzM3Niw0NSBAQCBzdGF0aWMgaW50IHZtbWNhbGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBrdm1fZW11bGF0ZV9oeXBlcmNhbGwodmNwdSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiYjNDM7XHRzdHJ1Y3Qgdm1jYiAqdm1jYjAxID0gc3ZtLVx1MDAzZXZtY2IwMS5wdHI7XG4mIzQzO1xuJiM0MztcdGlmIChlbmFibGUpXG4mIzQzO1x0XHR2bWNiMDEtXHUwMDNlY29udHJvbC5taXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfUE1MO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZtY2IwMS1cdTAwM2Vjb250cm9sLm1pc2NfY3RsIFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9QTUw7XG4mIzQzO1xuJiM0MztcdHZtY2JfbWFya19kaXJ0eSh2bWNiMDEsIFZNQ0JfTlBUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4mIzQzO1x0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbiYjNDM7XG4mIzQzO1x0LyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovXG4mIzQzO1x0aWYgKGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4ID09IFBNTF9IRUFEX0lOREVYKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBjb250cm9sLVx1MDAzZXBtbF9pbmRleCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2V0IHRoZSBQTUwgaW5kZXggKi9cbiYjNDM7XHRjb250cm9sLVx1MDAzZXBtbF9pbmRleCA9IFBNTF9IRUFEX0lOREVYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBtbF9mdWxsX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR0cmFjZV9rdm1fcG1sX2Z1bGwodmNwdS1cdTAwM2V2Y3B1X2lkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQTUwgYnVmZmVyIGlzIGFscmVhZHkgZmx1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN2bV9oYW5kbGVfZXhpdCgpLlxuJiM0MztcdCAqIE5vdGhpbmcgdG8gZG8gaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiBcdFtTVk1fRVhJVF9SRUFEX0NSMF1cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbiBcdFtTVk1fRVhJVF9SRUFEX0NSM11cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbkBAIC0zNDIxLDYgJiM0MzszNDkyLDcgQEAgc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuIFx0W1NWTV9FWElUX1ZNR0VYSVRdXHRcdFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXG4gI2VuZGlmXG4mIzQzO1x0W1NWTV9FWElUX1BNTF9GVUxMXVx0XHRcdD0gcG1sX2Z1bGxfaW50ZXJjZXB0aW9uLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0zNDcwLDggJiM0MzszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRwcl9lcnIoXCYjMzQ7JS0yMHMlMDE2bGx4XFxuXCYjMzQ7LCBcJiMzNDtleGl0X2luZm8yOlwmIzM0OywgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG4gXHRwcl9lcnIoXCYjMzQ7JS0yMHMlMDh4XFxuXCYjMzQ7LCBcJiMzNDtleGl0X2ludF9pbmZvOlwmIzM0OywgY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvKTtcbiBcdHByX2VycihcJiMzNDslLTIwcyUwOHhcXG5cJiMzNDssIFwmIzM0O2V4aXRfaW50X2luZm9fZXJyOlwmIzM0OywgY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvX2Vycik7XG4tXHRwcl9lcnIoXCYjMzQ7JS0yMHMlbGxkXFxuXCYjMzQ7LCBcJiMzNDttaXNjX2N0bDpcJiMzNDssIGNvbnRyb2wtXHUwMDNlbWlzY19jdGwpO1xuJiM0MztcdHByX2VycihcJiMzNDslLTIwcyVsbHhcXG5cJiMzNDssIFwmIzM0O21pc2NfY3RsOlwmIzM0OywgY29udHJvbC1cdTAwM2VtaXNjX2N0bCk7XG4gXHRwcl9lcnIoXCYjMzQ7JS0yMHMlMDE2bGx4XFxuXCYjMzQ7LCBcJiMzNDtuZXN0ZWRfY3IzOlwmIzM0OywgY29udHJvbC1cdTAwM2VuZXN0ZWRfY3IzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBtbCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyUtMjBzJTAxNmxseFxcblwmIzM0OywgXCYjMzQ7cG1sX2FkZHI6XCYjMzQ7LCBjb250cm9sLVx1MDAzZXBtbF9hZGRyKTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslLTIwcyUwNHhcXG5cJiMzNDssIFwmIzM0O3BtbF9pbmRleDpcJiMzNDssIGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cHJfZXJyKFwmIzM0OyUtMjBzJTAxNmxseFxcblwmIzM0OywgXCYjMzQ7YXZpY192YXBpY19iYXI6XCYjMzQ7LCBjb250cm9sLVx1MDAzZWF2aWNfdmFwaWNfYmFyKTtcbiBcdHByX2VycihcJiMzNDslLTIwcyUwMTZsbHhcXG5cJiMzNDssIFwmIzM0O2doY2I6XCYjMzQ7LCBjb250cm9sLVx1MDAzZWdoY2JfZ3BhKTtcbiBcdHByX2VycihcJiMzNDslLTIwcyUwOHhcXG5cJiMzNDssIFwmIzM0O2V2ZW50X2luajpcJiMzNDssIGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qKTtcbkBAIC0zNjQ5LDYgJiM0MzszNzI3LDEzIEBAIGludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSlcbiBcdCAgICAodTY0KWV4aXRfY29kZSAhPSBfX2V4aXRfY29kZSlcbiBcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsXG4mIzQzO1x0ICogZXhpdCBvY2N1cnMgYXMgc29tZXRoaW5nIGlzIGhvcnJpYmx5IHdyb25nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfUE1MX0ZVTEwpKVxuJiM0MztcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORVxuIFx0aWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9NU1IpXG4gXHRcdHJldHVybiBtc3JfaW50ZXJjZXB0aW9uKHZjcHUpO1xuQEAgLTM3MTcsNiAmIzQzOzM4MDIsMTQgQEAgc3RhdGljIGludCBzdm1faGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fcnVuICprdm1fcnVuID0gdmNwdS1cdTAwM2VydW47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcHBvcnR1bmlzdGljYWxseSBmbHVzaCB0aGUgUE1MIGJ1ZmZlciBvbiBWTSBleGl0LiBUaGlzIGtlZXBzIHRoZVxuJiM0MztcdCAqIGRpcnR5IGJpdG1hcCBjdXJyZW50IGJ5IHByb2Nlc3NpbmcgbG9nZ2VkIEdQQXMgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3JcbiYjNDM7XHQgKiBQTUxfRlVMTCBleGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSBcdTAwMjZcdTAwMjYgIWlzX2d1ZXN0X21vZGUodmNwdSkpXG4mIzQzO1x0XHRzdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1KTtcbiYjNDM7XG4gXHRpZiAodW5saWtlbHkoZXhpdF9mYXN0cGF0aCA9PSBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtNTMxMSw2ICYjNDM7NTQwNCw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpXG4gXHRcdGt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTtcbiBcbiYjNDM7XHRpZiAocG1sKVxuJiM0MztcdFx0a3ZtLVx1MDAzZWFyY2guY3B1X2RpcnR5X2xvZ19zaXplID0gUE1MX0xPR19OUl9FTlRSSUVTO1xuJiM0MztcbiBcdHN2bV9zcnNvX3ZtX2luaXQoKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NDI5LDYgJiM0Mzs1NTI1LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCxcbiBcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuJiM0MztcdC51cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcgPSBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nLFxuJiM0MztcbiBcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcbiBcdC5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsXG4gXHQuc2V0dXBfbWNlID0gc3ZtX3NldHVwX21jZSxcbkBAIC01Njg5LDYgJiM0Mzs1Nzg3LDEwIEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFxuIFx0bnJpcHMgPSBucmlwcyBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTtcbiBcbiYjNDM7XHRwbWwgPSBwbWwgXHUwMDI2XHUwMDI2IG5wdF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BNTCk7XG4mIzQzO1x0aWYgKHBtbClcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7UGFnZSBtb2RpZmljYXRpb24gbG9nZ2luZyBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcbiBcdGlmIChsYnJ2KSB7XG4gXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKVxuIFx0XHRcdGxicnYgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC01Myw2ICYjNDM7NTMsNyBAQCBleHRlcm4gaW50IHZnaWY7XG4gZXh0ZXJuIGJvb2wgaW50ZXJjZXB0X3NtaTtcbiBleHRlcm4gYm9vbCB2bm1pO1xuIGV4dGVybiBpbnQgbGJydjtcbiYjNDM7ZXh0ZXJuIGJvb2wgcG1sO1xuIFxuIGV4dGVybiBpbnQgdHNjX2F1eF91cmV0X3Nsb3QgX19yb19hZnRlcl9pbml0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDRjNTJhYjhkMDc4NjkuLmU3N2I1YjczMTI3NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHR2bXhfdmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdC8qXG4gXHQgKiBCYXNpYyBURFggZG9lcyBub3Qgc3VwcG9ydCBmZWF0dXJlIFBNTC4gS1ZNIGRvZXMgbm90IGVuYWJsZSBQTUwgaW5cbkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuJiM0MztcdHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSwgZW5hYmxlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTQ4ODMsMTAgJiM0Mzs0ODgzLDExIEBAIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFxuICNkZWZpbmUgVk1YX1hTU19FWElUX0JJVE1BUCAwXG4gXG4tc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuJiM0MztzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm0gKmt2bSA9IHZteC1cdTAwM2V2Y3B1Lmt2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBrdm1fdm14ICprdm1fdm14ID0gdG9fa3ZtX3ZteChrdm0pO1xuJiM0MztcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0aWYgKG5lc3RlZClcbiBcdFx0bmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKCk7XG5AQCAtNDkxMSw3ICYjNDM7NDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdGlmIChjcHVfaGFzX3RlcnRpYXJ5X2V4ZWNfY3RybHMoKSlcbiBcdFx0dGVydGlhcnlfZXhlY19jb250cm9sc19zZXQodm14LCB2bXhfdGVydGlhcnlfZXhlY19jb250cm9sKHZteCkpO1xuIFxuLVx0aWYgKGVuYWJsZV9hcGljdiBcdTAwMjZcdTAwMjYgbGFwaWNfaW5fa2VybmVsKFx1MDAyNnZteC1cdTAwM2V2Y3B1KSkge1xuJiM0MztcdGlmIChlbmFibGVfYXBpY3YgXHUwMDI2XHUwMDI2IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xuIFx0XHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7XG4gXHRcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTtcbiBcdFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApO1xuQEAgLTQ5MjMsNyAmIzQzOzQ5MjQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdHZtY3Nfd3JpdGU2NChQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoKFx1MDAyNnZteC1cdTAwM2V2dC5waV9kZXNjKSkpO1xuIFx0fVxuIFxuLVx0aWYgKHZteF9jYW5fdXNlX2lwaXYoXHUwMDI2dm14LVx1MDAzZXZjcHUpKSB7XG4mIzQzO1x0aWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIHtcbiBcdFx0dm1jc193cml0ZTY0KFBJRF9QT0lOVEVSX1RBQkxFLCBfX3BhKGt2bV92bXgtXHUwMDNlcGlkX3RhYmxlKSk7XG4gXHRcdHZtY3Nfd3JpdGUxNihMQVNUX1BJRF9QT0lOVEVSX0lOREVYLCBrdm0tXHUwMDNlYXJjaC5tYXhfdmNwdV9pZHMgLSAxKTtcbiBcdH1cbkBAIC00OTU4LDE1ICYjNDM7NDk1OSwxNSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHR2bWNzX3dyaXRlNjQoVk1fRU5UUllfTVNSX0xPQURfQUREUiwgX19wYSh2bXgtXHUwMDNlbXNyX2F1dG9sb2FkLmd1ZXN0LnZhbCkpO1xuIFxuIFx0aWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCBcdTAwMjYgVk1fRU5UUllfTE9BRF9JQTMyX1BBVClcbi1cdFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2bXgtXHUwMDNldmNwdS5hcmNoLnBhdCk7XG4mIzQzO1x0XHR2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZjcHUtXHUwMDNlYXJjaC5wYXQpO1xuIFxuIFx0dm1fZXhpdF9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1leGl0X2N0cmwoKSk7XG4gXG4gXHQvKiAyMi4yLjEsIDIwLjguMSAqL1xuIFx0dm1fZW50cnlfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZW50cnlfY3RybCgpKTtcbiBcbi1cdHZteC1cdTAwM2V2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcbi1cdHZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52bXgtXHUwMDNldmNwdS5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcbiYjNDM7XHR2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dmNwdS1cdTAwM2VhcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTtcbiBcbiBcdHNldF9jcjRfZ3Vlc3RfaG9zdF9tYXNrKHZteCk7XG4gXG5AQCAtNDk3NywxMSAmIzQzOzQ5NzgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0XHR2bWNzX3dyaXRlNjQoWFNTX0VYSVRfQklUTUFQLCBWTVhfWFNTX0VYSVRfQklUTUFQKTtcbiBcbiBcdGlmIChlbmFibGVfcG1sKSB7XG4tXHRcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZteC1cdTAwM2VwbWxfcGcpKTtcbiYjNDM7XHRcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSkpO1xuIFx0XHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XG4gXHR9XG4gXG4tXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKFx1MDAyNnZteC1cdTAwM2V2Y3B1LCBOVUxMKTtcbiYjNDM7XHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKHZjcHUsIE5VTEwpO1xuIFxuIFx0aWYgKHZteF9wdF9tb2RlX2lzX2hvc3RfZ3Vlc3QoKSkge1xuIFx0XHRtZW1zZXQoXHUwMDI2dm14LVx1MDAzZXB0X2Rlc2MsIDAsIHNpemVvZih2bXgtXHUwMDNlcHRfZGVzYykpO1xuQEAgLTQ5OTQsMTMgJiM0Mzs0OTk1LDEzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdHZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VTUCwgMCk7XG4gXHR2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FSVAsIDApO1xuIFxuLVx0dm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKFx1MDAyNnZteC1cdTAwM2V2Y3B1LCAwKTtcbiYjNDM7XHR2bXhfZ3Vlc3RfZGVidWdjdGxfd3JpdGUodmNwdSwgMCk7XG4gXG4gXHRpZiAoY3B1X2hhc192bXhfdHByX3NoYWRvdygpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSLCAwKTtcbi1cdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3coXHUwMDI2dm14LVx1MDAzZXZjcHUpKVxuJiM0MztcdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3codmNwdSkpXG4gXHRcdFx0dm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsXG4tXHRcdFx0XHQgICAgIF9fcGEodm14LVx1MDAzZXZjcHUuYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbiYjNDM7XHRcdFx0XHQgICAgIF9fcGEodmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlcmVncykpO1xuIFx0XHR2bWNzX3dyaXRlMzIoVFBSX1RIUkVTSE9MRCwgMCk7XG4gXHR9XG4gXG5AQCAtNTAxMSw3ICYjNDM7NTAxMiw3IEBAIHN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuLVx0aW5pdF92bWNzKHZteCk7XG4mIzQzO1x0aW5pdF92bWNzKHZjcHUpO1xuIFxuIFx0aWYgKG5lc3RlZCBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtXHUwMDNla3ZtLCBLVk1fWDg2X1FVSVJLX1NUVUZGX0ZFQVRVUkVfTVNSUykpXG5AQCAtNjQxOCw0OCAmIzQzOzY0MTksMjUgQEAgdm9pZCB2bXhfZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxuIFx0XHQqZXJyb3JfY29kZSA9IDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4mIzQzO3N0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGlmICh2bXgtXHUwMDNlcG1sX3BnKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHZteC1cdTAwM2VwbWxfcGcpO1xuLVx0XHR2bXgtXHUwMDNlcG1sX3BnID0gTlVMTDtcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSB7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZSh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpO1xuJiM0MztcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gTlVMTDtcbiBcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgdm14X2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dTE2IHBtbF9pZHgsIHBtbF90YWlsX2luZGV4O1xuLVx0dTY0ICpwbWxfYnVmO1xuLVx0aW50IGk7XG4mIzQzO1x0dTE2IHBtbF9pZHg7XG4gXG4gXHRwbWxfaWR4ID0gdm1jc19yZWFkMTYoR1VFU1RfUE1MX0lOREVYKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xuIFx0aWYgKHBtbF9pZHggPT0gUE1MX0hFQURfSU5ERVgpXG4gXHRcdHJldHVybjtcbi1cdC8qXG4tXHQgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHlcbi1cdCAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuXG4tXHQgKi9cbi1cdHBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggXHUwMDNlPSBQTUxfTE9HX05SX0VOVFJJRVMpID8gMCA6IHBtbF9pZHggJiM0MzsgMTtcbi1cbi1cdC8qXG4tXHQgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExXG4tXHQgKiB0aGVuIHRoZSBlbnRyeSA1MTAsIGFuZCBzbyBvbi5cbi1cdCAqXG4tXHQgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdFxuLVx0ICogdGhlIGRpcnR5IHJpbmcgaXMgZmlsbGVkIGluIHRoZSBzYW1lIG9yZGVyIHRoZSBDUFUgd3JvdGUgdGhlbS5cbi1cdCAqL1xuLVx0cG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2bXgtXHUwMDNlcG1sX3BnKTtcbiBcbi1cdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFx1MDAzZT0gcG1sX3RhaWxfaW5kZXg7IGktLSkge1xuLVx0XHR1NjQgZ3BhO1xuLVxuLVx0XHRncGEgPSBwbWxfYnVmW2ldO1xuLVx0XHRXQVJOX09OKGdwYSBcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcbi1cdFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHR9XG4mIzQzO1x0a3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgcG1sX2lkeCk7XG4gXG4gXHQvKiByZXNldCBQTUwgaW5kZXggKi9cbiBcdHZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTtcbkBAIC03NjQ4LDcgJiM0Mzs3NjI2LDcgQEAgdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0aWYgKGVuYWJsZV9wbWwpXG4tXHRcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcbiYjNDM7XHRcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XG4gXHRmcmVlX3ZwaWQodm14LVx1MDAzZXZwaWQpO1xuIFx0bmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7XG4gXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cdTAwM2Vsb2FkZWRfdm1jcyk7XG5AQCAtNzY4MCw4ICYjNDM7NzY1OCw4IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogZm9yIHRoZSBndWVzdCksIGV0Yy5cbiBcdCAqL1xuIFx0aWYgKGVuYWJsZV9wbWwpIHtcbi1cdFx0dm14LVx1MDAzZXBtbF9wZyA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4tXHRcdGlmICghdm14LVx1MDAzZXBtbF9wZylcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4mIzQzO1x0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbiBcdFx0XHRnb3RvIGZyZWVfdnBpZDtcbiBcdH1cbiBcbkBAIC03NzUyLDcgJiM0Mzs3NzMwLDcgQEAgaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gZnJlZV92bWNzOlxuIFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MpO1xuIGZyZWVfcG1sOlxuLVx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpO1xuJiM0MztcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XG4gZnJlZV92cGlkOlxuIFx0ZnJlZV92cGlkKHZteC1cdTAwM2V2cGlkKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtODQ0MCwyMSAmIzQzOzg0MTgsMTMgQEAgc3RhdGljIHZvaWQgdm14X3VwZGF0ZV9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yY2VfaW1tZWRpYXRlX2V4aXRcbiB9XG4gI2VuZGlmXG4gXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFlbmFibGVfcG1sKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Z3VhcmQodm14X3ZtY3MwMSkodmNwdSk7XG4gXG4tXHQvKlxuLVx0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xuLVx0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbi1cdCAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLlxuLVx0ICovXG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZykpXG4mIzQzO1x0aWYgKGVuYWJsZSlcbiBcdFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG4gXHRlbHNlXG4gXHRcdHNlY29uZGFyeV9leGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbmluZGV4IGRjODUxN2YxNWJjNDYuLjVmNTA1YWQxNGRkZTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5AQCAtMjY1LDEzICYjNDM7MjY1LDYgQEAgc3RydWN0IHZjcHVfdm14IHtcbiBcdHVuc2lnbmVkIGludCBwbGVfd2luZG93O1xuIFx0Ym9vbCBwbGVfd2luZG93X2RpcnR5O1xuIFxuLVx0LyogU3VwcG9ydCBmb3IgUE1MICovXG4tI2RlZmluZSBQTUxfTE9HX05SX0VOVFJJRVNcdDUxMlxuLVx0LyogUE1MIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSB3cml0dGVuIGJ5IHRoZSBDUFUgKi9cbi0jZGVmaW5lIFBNTF9IRUFEX0lOREVYXHRcdChQTUxfTE9HX05SX0VOVFJJRVMtMSlcbi1cbi1cdHN0cnVjdCBwYWdlICpwbWxfcGc7XG4tXG4gXHQvKiBhcGljIGRlYWRsaW5lIHZhbHVlIGluIGhvc3QgdHNjICovXG4gXHR1NjQgaHZfZGVhZGxpbmVfdHNjO1xuIFxuQEAgLTM5Nyw3ICYjNDM7MzkwLDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcbiBcbiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbiBib29sIHZteF9pc192YWxpZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li40ODEwZjliMWIwZmM2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCB1NjQgdm14X2dldF9sMl90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfd3JpdGVfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gaW50IHZteF9zZXRfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3Vlc3RfZGVhZGxpbmVfdHNjLFxuIFx0XHQgICAgIGJvb2wgKmV4cGlyZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzk0MSw2ICYjNDM7Mzk0MSwzNyBAQCB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiBcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4mIzQzO3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeClcbiYjNDM7e1xuJiM0MztcdHUxNiBwbWxfdGFpbF9pbmRleDtcbiYjNDM7XHR1NjQgKnBtbF9idWY7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5XG4mIzQzO1x0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4IFx1MDAzZT0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMVxuJiM0MztcdCAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXRcbiYjNDM7XHQgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLlxuJiM0MztcdCAqL1xuJiM0MztcdHBtbF9idWYgPSBwYWdlX2FkZHJlc3ModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgXHUwMDNlPSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7XG4mIzQzO1x0XHR1NjQgZ3BhO1xuJiM0MztcbiYjNDM7XHRcdGdwYSA9IHBtbF9idWZbaV07XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoZ3BhIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuJiM0MztcdFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZmx1c2hfcG1sX2J1ZmZlcik7XG4mIzQzO1xuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIHtcbkBAIC04MDQyLDYgJiM0Mzs4MDczLDIxIEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV94ODZfY2FsbChzZXRfYXBpY19hY2Nlc3NfcGFnZV9hZGRyKSh2Y3B1KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3RlLCBucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nIGNhbiBiZSBjaGFuZ2VkIGNvbmN1cnJlbnQgd2l0aCB0aGlzXG4mIzQzO1x0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbiYjNDM7XHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUsIGVuYWJsZSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDYWxsZWQgd2l0aGluIGt2bS1cdTAwM2VzcmN1IHJlYWQgc2lkZS5cbiAgKiBSZXR1cm5zIDEgdG8gbGV0IHZjcHVfcnVuKCkgY29udGludWUgdGhlIGd1ZXN0IGV4ZWN1dGlvbiBsb29wIHdpdGhvdXRcbkBAIC04MjA4LDcgJiM0Mzs4MjU0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRrdm1feDg2X2NhbGwocmVjYWxjX2ludGVyY2VwdHMpKHZjcHUpO1xuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfQ1BVX0RJUlRZX0xPR0dJTkcsIHZjcHUpKVxuLVx0XHRcdGt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUpO1xuJiM0MztcdFx0XHRrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFLCB2Y3B1KSkge1xuIFx0XHRcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmQ3NDdjMjA5NjVjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtOTAwLDQgJiM0Mzs5MDAsMTEgQEAgaW50IF9fX19rdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3BsLFxuIFxuIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiYjNDM7LyogU3VwcG9ydCBmb3IgUE1MICovXG4mIzQzOyNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTXHQ1MTJcbiYjNDM7LyogUE1MIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSB3cml0dGVuIGJ5IHRoZSBDUFUgKi9cbiYjNDM7I2RlZmluZSBQTUxfSEVBRF9JTkRFWFx0XHQoUE1MX0xPR19OUl9FTlRSSUVTLTEpXG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpO1xuJiM0MztcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nJiMzNDssCiAgICAmIzM0O3N2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX2ZsdXNoX3BtbF9idWZmZXImIzM0OywKICAgICYjMzQ7cG1sX2Z1bGxfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fZXhpdF9zcGVjaWFsJiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sJiMzNDssCiAgICAmIzM0O3ZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7dm14X2ZsdXNoX3BtbF9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYThiNTMxMjc3OWRkNjRkYmM2MzExYTIzNmZkMjYwYTM0OTM4MWRkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDk6MTA6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAppbmRleCBmNzBlZTc0YjVmOTIxLi5jYmZjYzY2YTE4ZTliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKQEAgLTIzOCw2ICYjNDM7MjM4LDcgQEAKIC8vIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1BWVU5MT0NLICAgICAgICAgICAgICAgKCA4KjMyJiM0MzsyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUCQkoIDgqMzImIzQzOzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1QJCSggOCozMiYjNDM7MjIpIC8qICYjMzQ7dGR4X2d1ZXN0JiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1BNTAkJCSggOCozMiYjNDM7MjMpIC8qIEFNRCBQYWdlIE1vZGlmaWNhdGlvbiBsb2dnaW5nICovCiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDA3OjAgKEVCWCksIHdvcmQgOSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9GU0dTQkFTRQkJKCA5KjMyJiM0MzsgMCkgLyogJiMzNDtmc2dzYmFzZSYjMzQ7IFJERlNCQVNFLCBXUkZTQkFTRSwgUkRHU0JBU0UsIFdSR1NCQVNFIGluc3RydWN0aW9ucyovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAzYWY3Mzk1YzI0MzBhLi4yZGViZjYyOTQyOTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTc4OSw2ICYjNDM7Nzg5LDggQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCSAqLwogCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfZXh0ZXJuYWxfc3B0X2NhY2hlOwogCiYjNDM7CXN0cnVjdCBwYWdlICpwbWxfcGFnZTsKJiM0MzsKIAkvKgogCSAqIFFFTVUgdXNlcnNwYWNlIGFuZCB0aGUgZ3Vlc3QgZWFjaCBoYXZlIHRoZWlyIG93biBGUFUgc3RhdGUuCiAJICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuCkBAIC0xNjcwLDcgJiM0MzsxNjcyLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAkJCSAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTsKIAl2b2lkICgqaGFuZGxlX2V4aXRfaXJxb2ZmKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi0Jdm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsJdm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7CiAKIAl2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqdmNwdV91bmJsb2NraW5nKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBhYTYzNDMxYmE5MmMzLi5lMGE3NTQ5YTdjNzI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaApAQCAtMTY1LDcgJiM0MzsxNjUsMTAgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEgewogCXU4IHJlc2VydmVkXzlbMjJdOwogCXU2NCBhbGxvd2VkX3Nldl9mZWF0dXJlczsJLyogT2Zmc2V0IDB4MTM4ICovCiAJdTY0IGd1ZXN0X3Nldl9mZWF0dXJlczsJCS8qIE9mZnNldCAweDE0MCAqLwotCXU4IHJlc2VydmVkXzEwWzY2NF07CiYjNDM7CXU4IHJlc2VydmVkXzEwWzEyOF07CiYjNDM7CXU2NCBwbWxfYWRkcjsJCQkvKiBPZmZzZXQgMHgxYzggKi8KJiM0MzsJdTE2IHBtbF9pbmRleDsJCQkvKiBPZmZzZXQgMHgxZDAgKi8KJiM0MzsJdTggcmVzZXJ2ZWRfMTFbNTI2XTsKIAkvKgogCSAqIE9mZnNldCAweDNlMCwgMzIgYnl0ZXMgcmVzZXJ2ZWQKIAkgKiBmb3IgdXNlIGJ5IGh5cGVydmlzb3Ivc29mdHdhcmUuCkBAIC0yNDAsMTAgJiM0MzsyNDMsMTEgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEgewogI2RlZmluZSBTVk1fSU9JT19TSVpFX01BU0sgKDcgJmx0OyZsdDsgU1ZNX0lPSU9fU0laRV9TSElGVCkKICNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfTUFTSyAoNyAmbHQ7Jmx0OyBTVk1fSU9JT19BU0laRV9TSElGVCkKIAotI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlAJCUJJVCgwKQotI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWCQlCSVQoMSkKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FUwlCSVQoMikKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX0dNRVQJQklUKDMpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlAJCUJJVF9VTEwoMCkKJiM0MzsjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVYJCUJJVF9VTEwoMSkKJiM0MzsjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZfRVMJCUJJVF9VTEwoMikKJiM0MzsjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUCQlCSVRfVUxMKDMpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfUE1MCQlCSVRfVUxMKDExKQogCiAjZGVmaW5lIFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIJQklUX1VMTCgwKQogI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfVk1MT0FEX1ZNU0FWRQlCSVRfVUxMKDEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaAppbmRleCAwMTBhNDVjOWY2MTQ3Li5lODA2NzYxODUwOTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmgKQEAgLTEwMSw2ICYjNDM7MTAxLDcgQEAKICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSQkJMHg0MDEKICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTUwkweDQwMgogI2RlZmluZSBTVk1fRVhJVF9WTUdFWElUICAgICAgIDB4NDAzCiYjNDM7I2RlZmluZSBTVk1fRVhJVF9QTUxfRlVMTAkweDQwNwogCiAvKiBTRVYtRVMgc29mdHdhcmUtZGVmaW5lZCBWTUdFWElUIGV2ZW50cyAqLwogI2RlZmluZSBTVk1fVk1HRVhJVF9NTUlPX1JFQUQJCQkweDgwMDAwMDAxdWxsCkBAIC0yMzYsNiAmIzQzOzIzNyw3IEBACiAJeyBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJLAkJJiMzNDthdmljX2luY29tcGxldGVfaXBpJiMzNDsgfSwgXAogCXsgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTUywgICAmIzM0O2F2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3MmIzM0OyB9LCBcCiAJeyBTVk1fRVhJVF9WTUdFWElULAkJJiMzNDt2bWdleGl0JiMzNDsgfSwgXAomIzQzOwl7IFNWTV9FWElUX1BNTF9GVUxMLAkJJiMzNDtwbWxfZnVsbCYjMzQ7IH0sIFwKIAl7IFNWTV9WTUdFWElUX01NSU9fUkVBRCwJJiMzNDt2bWdleGl0X21taW9fcmVhZCYjMzQ7IH0sIFwKIAl7IFNWTV9WTUdFWElUX01NSU9fV1JJVEUsCSYjMzQ7dm1nZXhpdF9tbWlvX3dyaXRlJiMzNDsgfSwgXAogCXsgU1ZNX1ZNR0VYSVRfTk1JX0NPTVBMRVRFLAkmIzM0O3ZtZ2V4aXRfbm1pX2NvbXBsZXRlJiMzNDsgfSwgXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKaW5kZXggODY2NWE2NDc0ODA2Yy4uYjE4Y2M5Yzg4ZGQ1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCkBAIC01NSw2ICYjNDM7NTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7CiAJeyBYODZfRkVBVFVSRV9BTURfRkFTVF9DUFBDLAkJQ1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQ1BQQ19QRVJGX1BSSU8sCQlDUFVJRF9FRFgsIDE2LCAweDgwMDAwMDA3LCAwIH0sCiAJeyBYODZfRkVBVFVSRV9NQkEsCQkJQ1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LAomIzQzOwl7IFg4Nl9GRUFUVVJFX1BNTCwJCQlDUFVJRF9FQ1gsICA0LCAweDgwMDAwMDBhLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9YMkFWSUNfRVhULAkJQ1BVSURfRUNYLCAgNiwgMHg4MDAwMDAwYSwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQ09IRVJFTkNZX1NGV19OTywJCUNQVUlEX0VCWCwgMzEsIDB4ODAwMDAwMWYsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX1NNQkEsCQkJQ1BVSURfRUJYLCAgMiwgMHg4MDAwMDAyMCwgMCB9LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKaW5kZXggNzNmMzdiMDUwZDBhMC4uZGE0MTdjNGM1OTE1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCkBAIC05MDEsNiAmIzQzOzkwMSwxMyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAl2bWNiMDItJmd0O2NvbnRyb2wubXNycG1fYmFzZV9wYSA9IHZtY2IwMS0mZ3Q7Y29udHJvbC5tc3JwbV9iYXNlX3BhOwogCXZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfUEVSTV9NQVApOwogCiYjNDM7CS8qCiYjNDM7CSAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuCiYjNDM7CSAqIHVuZXhwZWN0ZWQgUE1MIHdyaXRlIHdvdWxkIHRyaWdnZXIgYSBQTUxfRlVMTCBWTS1FeGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHBtbCkKJiM0MzsJCXZtY2IwMi0mZ3Q7Y29udHJvbC5wbWxfaW5kZXggPSAtMTsKJiM0MzsKIAkvKgogCSAqIFN0YXNoIHZtY2IwMiYjMzk7cyBjb3VudGVyIGlmIHRoZSBndWVzdCBoYXNuJiMzOTt0IG1vdmVkIHBhc3QgdGhlIGd1aWx0eQogCSAqIGluc3RydWN0aW9uOyBvdGhlcndpc2UsIHJlc2V0IHRoZSBjb3VudGVyIHRvICYjMzk7MCYjMzk7LgpAQCAtMTgyMCw2ICYjNDM7MTgyNywxMyBAQCBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJCWlmIChuZXN0ZWRfc3ZtX2lzX2wyX3RsYl9mbHVzaF9oY2FsbCh2Y3B1KSkKIAkJCXJldHVybiBORVNURURfRVhJVF9IT1NUOwogCQlicmVhazsKJiM0MzsJY2FzZSBTVk1fRVhJVF9QTUxfRlVMTDoKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbGwgUE1MIGZ1bGwgZXhpdHMgYXJlIGhhbmRsZWQgYnkgS1ZNLiAgS1ZNIGVtdWxhdGVzIFBNTCBpbgomIzQzOwkJICogc29mdHdhcmUgZm9yIEwxLCBidXQgbmV2ZXIgZW5hYmxlcyBQTUwgaW4gaGFyZHdhcmUgb24gYmVoYWxmCiYjNDM7CQkgKiBvZiBMMS4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNTcwNTcyM2YxZjQxMi4uY2ZlOTkwZjgwNTA0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC00OTk0LDcgJiM0Mzs0OTk0LDcgQEAgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKQogCSAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmUKIAkgKiB0aGUgQ1BVIHdpbGwgaW5jb3JyZWN0bHkgc2lnbmFsIGFuIFJNUCB2aW9sYXRpb24gI1BGIGlmIGEKIAkgKiBodWdlcGFnZSAoMk1CIG9yIDFHQikgY29sbGlkZXMgd2l0aCB0aGUgUk1QIGVudHJ5IG9mIGEKLQkgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBvciBBVklDIGJhY2tpbmcgcGFnZS4KJiM0MzsJICogMk1CLWFsaWduZWQgVk1DQiwgVk1TQSwgUE1MIG9yIEFWSUMgYmFja2luZyBwYWdlLgogCSAqCiAJICogQWxsb2NhdGUgb25lIGV4dHJhIHBhZ2UsIGNob29zZSBhIHBhZ2Ugd2hpY2ggaXMgbm90CiAJICogMk1CLWFsaWduZWQsIGFuZCBmcmVlIHRoZSBvdGhlci4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDdkNTlkMzAxZTFlNTQuLjk1MGMyNTBhNzdiNTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtMTc5LDYgJiM0MzsxNzksOSBAQCBtb2R1bGVfcGFyYW0odm5taSwgYm9vbCwgMDQ0NCk7CiAKIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTsKIAomIzQzO2Jvb2wgX19yb19hZnRlcl9pbml0IHBtbCA9IHRydWU7CiYjNDM7bW9kdWxlX3BhcmFtKHBtbCwgYm9vbCwgMDQ0NCk7CiYjNDM7CiBzdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgc3ZtX2dwX2VycmF0dW1faW50ZXJjZXB0ID0gdHJ1ZTsKIAogc3RhdGljIHU4IHJzbV9pbnNfYnl0ZXNbXSA9ICYjMzQ7XHgwZlx4YWEmIzM0OzsKQEAgLTEyNjcsNiAmIzQzOzEyNzAsMjMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KQogCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpCiAJCXN2bV9zZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0JVU0xPQ0spOwogCiYjNDM7CWlmIChwbWwpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQb3B1bGF0ZSB0aGUgcGFnZSBhZGRyZXNzIGFuZCBpbmRleCBoZXJlLCBQTUwgaXMgZW5hYmxlZAomIzQzOwkJICogd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgb24gdGhlIG1lbXNsb3QgdGhyb3VnaAomIzQzOwkJICogc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZygpCiYjNDM7CQkgKi8KJiM0MzsJCWNvbnRyb2wtJmd0O3BtbF9hZGRyID0gKHU2NClfX3NtZV9zZXQocGFnZV90b19waHlzKHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgVk1DQiBjb250cm9sIGFyZWEgcmVtYWlucyB2YWxpZCBhZnRlciBhbiBpbnRlcmNlcHRlZCBTSFVURE9XTgomIzQzOwkJICogKEFNRCBBUE0gUmV2IDMuNDUmIzQzOyksIHNvIG9ubHkgaW5pdGlhbGl6ZSBQTUwgaW5kZXggb24gcmVzZXQgdG8gYXZvaWQKJiM0MzsJCSAqIGRpc2NhcmRpbmcgYWxyZWFkeS1sb2dnZWQgZW50cmllcyB0aGF0IGhhdmVuJiMzOTt0IGJlZW4gZmx1c2hlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFpbml0X2V2ZW50KQomIzQzOwkJCWNvbnRyb2wtJmd0O3BtbF9pbmRleCA9IFBNTF9IRUFEX0lOREVYOwomIzQzOwl9CiYjNDM7CiAJaWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSkKIAkJc2V2X2luaXRfdm1jYihzdm0sIGluaXRfZXZlbnQpOwogCkBAIC0xMzI2LDkgJiM0MzsxMzQ2LDE1IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIXZtY2IwMV9wYWdlKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAocG1sKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLnBtbF9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpOwomIzQzOwkJaWYgKCF2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQomIzQzOwkJCWdvdG8gZXJyb3JfZnJlZV92bWNiX3BhZ2U7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBzZXZfdmNwdV9jcmVhdGUodmNwdSk7CiAJaWYgKGVycikKLQkJZ290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTsKJiM0MzsJCWdvdG8gZXJyb3JfZnJlZV9wbWxfcGFnZTsKIAogCWVyciA9IGF2aWNfaW5pdF92Y3B1KHN2bSk7CiAJaWYgKGVycikKQEAgLTEzNTMsNiAmIzQzOzEzNzksOSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIGVycm9yX2ZyZWVfc2V2OgogCXNldl9mcmVlX3ZjcHUodmNwdSk7CiYjNDM7ZXJyb3JfZnJlZV9wbWxfcGFnZToKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpCiYjNDM7CQlfX2ZyZWVfcGFnZSh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKIGVycm9yX2ZyZWVfdm1jYl9wYWdlOgogCV9fZnJlZV9wYWdlKHZtY2IwMV9wYWdlKTsKIG91dDoKQEAgLTEzNzAsNiAmIzQzOzEzOTksOSBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCXNldl9mcmVlX3ZjcHUodmNwdSk7CiAKJiM0MzsJaWYgKHBtbCAmYW1wOyZhbXA7IHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpCiYjNDM7CQlfX2ZyZWVfcGFnZSh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKJiM0MzsKIAlfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS0mZ3Q7dm1jYjAxLnBhKSk7CiAJc3ZtX3ZjcHVfZnJlZV9tc3JwbShzdm0tJmd0O21zcnBtKTsKIH0KQEAgLTMzNDQsNiAmIzQzOzMzNzYsNDUgQEAgc3RhdGljIGludCB2bW1jYWxsX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIGt2bV9lbXVsYXRlX2h5cGVyY2FsbCh2Y3B1KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwlzdHJ1Y3Qgdm1jYiAqdm1jYjAxID0gc3ZtLSZndDt2bWNiMDEucHRyOwomIzQzOwomIzQzOwlpZiAoZW5hYmxlKQomIzQzOwkJdm1jYjAxLSZndDtjb250cm9sLm1pc2NfY3RsIHw9IFNWTV9NSVNDX0VOQUJMRV9QTUw7CiYjNDM7CWVsc2UKJiM0MzsJCXZtY2IwMS0mZ3Q7Y29udHJvbC5taXNjX2N0bCAmYW1wOz0gflNWTV9NSVNDX0VOQUJMRV9QTUw7CiYjNDM7CiYjNDM7CXZtY2JfbWFya19kaXJ0eSh2bWNiMDEsIFZNQ0JfTlBUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiYjNDM7CXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZhbXA7c3ZtLSZndDt2bWNiLSZndDtjb250cm9sOwomIzQzOwomIzQzOwkvKiBEbyBub3RoaW5nIGlmIFBNTCBidWZmZXIgaXMgZW1wdHkgKi8KJiM0MzsJaWYgKGNvbnRyb2wtJmd0O3BtbF9pbmRleCA9PSBQTUxfSEVBRF9JTkRFWCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgY29udHJvbC0mZ3Q7cG1sX2luZGV4KTsKJiM0MzsKJiM0MzsJLyogUmVzZXQgdGhlIFBNTCBpbmRleCAqLwomIzQzOwljb250cm9sLSZndDtwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwbWxfZnVsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtJmd0O3ZjcHVfaWQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQTUwgYnVmZmVyIGlzIGFscmVhZHkgZmx1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN2bV9oYW5kbGVfZXhpdCgpLgomIzQzOwkgKiBOb3RoaW5nIHRvIGRvIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHsKIAlbU1ZNX0VYSVRfUkVBRF9DUjBdCQkJPSBjcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1JFQURfQ1IzXQkJCT0gY3JfaW50ZXJjZXB0aW9uLApAQCAtMzQyMSw2ICYjNDM7MzQ5Miw3IEBAIHN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0gewogI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVgogCVtTVk1fRVhJVF9WTUdFWElUXQkJCT0gc2V2X2hhbmRsZV92bWdleGl0LAogI2VuZGlmCiYjNDM7CVtTVk1fRVhJVF9QTUxfRlVMTF0JCQk9IHBtbF9mdWxsX2ludGVyY2VwdGlvbiwKIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0zNDcwLDggJiM0MzszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtleGl0X2luZm8yOiYjMzQ7LCBjb250cm9sLSZndDtleGl0X2luZm9fMik7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDh4XG4mIzM0OywgJiMzNDtleGl0X2ludF9pbmZvOiYjMzQ7LCBjb250cm9sLSZndDtleGl0X2ludF9pbmZvKTsKIAlwcl9lcnIoJiMzNDslLTIwcyUwOHhcbiYjMzQ7LCAmIzM0O2V4aXRfaW50X2luZm9fZXJyOiYjMzQ7LCBjb250cm9sLSZndDtleGl0X2ludF9pbmZvX2Vycik7Ci0JcHJfZXJyKCYjMzQ7JS0yMHMlbGxkXG4mIzM0OywgJiMzNDttaXNjX2N0bDomIzM0OywgY29udHJvbC0mZ3Q7bWlzY19jdGwpOwomIzQzOwlwcl9lcnIoJiMzNDslLTIwcyVsbHhcbiYjMzQ7LCAmIzM0O21pc2NfY3RsOiYjMzQ7LCBjb250cm9sLSZndDttaXNjX2N0bCk7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtuZXN0ZWRfY3IzOiYjMzQ7LCBjb250cm9sLSZndDtuZXN0ZWRfY3IzKTsKJiM0MzsKJiM0MzsJaWYgKHBtbCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtwbWxfYWRkcjomIzM0OywgY29udHJvbC0mZ3Q7cG1sX2FkZHIpOwomIzQzOwkJcHJfZXJyKCYjMzQ7JS0yMHMlMDR4XG4mIzM0OywgJiMzNDtwbWxfaW5kZXg6JiMzNDssIGNvbnRyb2wtJmd0O3BtbF9pbmRleCk7CiYjNDM7CX0KJiM0MzsKIAlwcl9lcnIoJiMzNDslLTIwcyUwMTZsbHhcbiYjMzQ7LCAmIzM0O2F2aWNfdmFwaWNfYmFyOiYjMzQ7LCBjb250cm9sLSZndDthdmljX3ZhcGljX2Jhcik7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtnaGNiOiYjMzQ7LCBjb250cm9sLSZndDtnaGNiX2dwYSk7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDh4XG4mIzM0OywgJiMzNDtldmVudF9pbmo6JiMzNDssIGNvbnRyb2wtJmd0O2V2ZW50X2luaik7CkBAIC0zNjQ5LDYgJiM0MzszNzI3LDEzIEBAIGludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSkKIAkgICAgKHU2NClleGl0X2NvZGUgIT0gX19leGl0X2NvZGUpCiAJCWdvdG8gdW5leHBlY3RlZF92bWV4aXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogUE1MIGlzIG5ldmVyIGVuYWJsZWQgd2hlbiBydW5uaW5nIEwyLCBiYWlsIGltbWVkaWF0ZWx5IGlmIGEgUE1MIGZ1bGwKJiM0MzsJICogZXhpdCBvY2N1cnMgYXMgc29tZXRoaW5nIGlzIGhvcnJpYmx5IHdyb25nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfUE1MX0ZVTEwpKQomIzQzOwkJZ290byB1bmV4cGVjdGVkX3ZtZXhpdDsKJiM0MzsKICNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUKIAlpZiAoZXhpdF9jb2RlID09IFNWTV9FWElUX01TUikKIAkJcmV0dXJuIG1zcl9pbnRlcmNlcHRpb24odmNwdSk7CkBAIC0zNzE3LDYgJiM0MzszODAyLDE0IEBAIHN0YXRpYyBpbnQgc3ZtX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKQogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCBrdm1fcnVuICprdm1fcnVuID0gdmNwdS0mZ3Q7cnVuOwogCiYjNDM7CS8qCiYjNDM7CSAqIE9wcG9ydHVuaXN0aWNhbGx5IGZsdXNoIHRoZSBQTUwgYnVmZmVyIG9uIFZNIGV4aXQuIFRoaXMga2VlcHMgdGhlCiYjNDM7CSAqIGRpcnR5IGJpdG1hcCBjdXJyZW50IGJ5IHByb2Nlc3NpbmcgbG9nZ2VkIEdQQXMgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3IKJiM0MzsJICogUE1MX0ZVTEwgZXhpdC4KJiM0MzsJICovCiYjNDM7CWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2guY3B1X2RpcnR5X2xvZ19zaXplICZhbXA7JmFtcDsgIWlzX2d1ZXN0X21vZGUodmNwdSkpCiYjNDM7CQlzdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1KTsKJiM0MzsKIAlpZiAodW5saWtlbHkoZXhpdF9mYXN0cGF0aCA9PSBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTUzMTEsNiAmIzQzOzU0MDQsOSBAQCBzdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSkKIAlpZiAoIXBhdXNlX2ZpbHRlcl9jb3VudCB8fCAhcGF1c2VfZmlsdGVyX3RocmVzaCkKIAkJa3ZtX2Rpc2FibGVfZXhpdHMoa3ZtLCBLVk1fWDg2X0RJU0FCTEVfRVhJVFNfUEFVU0UpOwogCiYjNDM7CWlmIChwbWwpCiYjNDM7CQlrdm0tJmd0O2FyY2guY3B1X2RpcnR5X2xvZ19zaXplID0gUE1MX0xPR19OUl9FTlRSSUVTOwomIzQzOwogCXN2bV9zcnNvX3ZtX2luaXQoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MjksNiAmIzQzOzU1MjUsOCBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCwKIAkuaGFuZGxlX2V4aXRfaXJxb2ZmID0gc3ZtX2hhbmRsZV9leGl0X2lycW9mZiwKIAomIzQzOwkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZywKJiM0MzsKIAkuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsCiAJLnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSwKIAkuc2V0dXBfbWNlID0gc3ZtX3NldHVwX21jZSwKQEAgLTU2ODksNiAmIzQzOzU3ODcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpCiAKIAlucmlwcyA9IG5yaXBzICZhbXA7JmFtcDsgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTsKIAomIzQzOwlwbWwgPSBwbWwgJmFtcDsmYW1wOyBucHRfZW5hYmxlZCAmYW1wOyZhbXA7IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUE1MKTsKJiM0MzsJaWYgKHBtbCkKJiM0MzsJCXByX2luZm8oJiMzNDtQYWdlIG1vZGlmaWNhdGlvbiBsb2dnaW5nIHN1cHBvcnRlZFxuJiMzNDspOwomIzQzOwogCWlmIChsYnJ2KSB7CiAJCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKQogCQkJbGJydiA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC01Myw2ICYjNDM7NTMsNyBAQCBleHRlcm4gaW50IHZnaWY7CiBleHRlcm4gYm9vbCBpbnRlcmNlcHRfc21pOwogZXh0ZXJuIGJvb2wgdm5taTsKIGV4dGVybiBpbnQgbGJydjsKJiM0MztleHRlcm4gYm9vbCBwbWw7CiAKIGV4dGVybiBpbnQgdHNjX2F1eF91cmV0X3Nsb3QgX19yb19hZnRlcl9pbml0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCmluZGV4IDRjNTJhYjhkMDc4NjkuLmU3N2I1YjczMTI3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC0xMDgsNyAmIzQzOzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJdm14X3ZjcHVfbG9hZCh2Y3B1LCBjcHUpOwogfQogCi1zdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKQogewogCS8qCiAJICogQmFzaWMgVERYIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSBQTUwuIEtWTSBkb2VzIG5vdCBlbmFibGUgUE1MIGluCkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKFdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSkKIAkJcmV0dXJuOwogCi0Jdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTsKJiM0MzsJdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1LCBlbmFibGUpOwogfQogCiBzdGF0aWMgdm9pZCB2dF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTQ4ODMsMTAgJiM0Mzs0ODgzLDExIEBAIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKQogCiAjZGVmaW5lIFZNWF9YU1NfRVhJVF9CSVRNQVAgMAogCi1zdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiYjNDM7c3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtICprdm0gPSB2bXgtJmd0O3ZjcHUua3ZtOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGt2bV92bXggKmt2bV92bXggPSB0b19rdm1fdm14KGt2bSk7CiYjNDM7CXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCiAJaWYgKG5lc3RlZCkKIAkJbmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKCk7CkBAIC00OTExLDcgJiM0Mzs0OTEyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCWlmIChjcHVfaGFzX3RlcnRpYXJ5X2V4ZWNfY3RybHMoKSkKIAkJdGVydGlhcnlfZXhlY19jb250cm9sc19zZXQodm14LCB2bXhfdGVydGlhcnlfZXhlY19jb250cm9sKHZteCkpOwogCi0JaWYgKGVuYWJsZV9hcGljdiAmYW1wOyZhbXA7IGxhcGljX2luX2tlcm5lbCgmYW1wO3ZteC0mZ3Q7dmNwdSkpIHsKJiM0MzsJaWYgKGVuYWJsZV9hcGljdiAmYW1wOyZhbXA7IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkgewogCQl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7CiAJCXZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTsKIAkJdm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApOwpAQCAtNDkyMyw3ICYjNDM7NDkyNCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJdm1jc193cml0ZTY0KFBPU1RFRF9JTlRSX0RFU0NfQUREUiwgX19wYSgoJmFtcDt2bXgtJmd0O3Z0LnBpX2Rlc2MpKSk7CiAJfQogCi0JaWYgKHZteF9jYW5fdXNlX2lwaXYoJmFtcDt2bXgtJmd0O3ZjcHUpKSB7CiYjNDM7CWlmICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpKSB7CiAJCXZtY3Nfd3JpdGU2NChQSURfUE9JTlRFUl9UQUJMRSwgX19wYShrdm1fdm14LSZndDtwaWRfdGFibGUpKTsKIAkJdm1jc193cml0ZTE2KExBU1RfUElEX1BPSU5URVJfSU5ERVgsIGt2bS0mZ3Q7YXJjaC5tYXhfdmNwdV9pZHMgLSAxKTsKIAl9CkBAIC00OTU4LDE1ICYjNDM7NDk1OSwxNSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiAJdm1jc193cml0ZTY0KFZNX0VOVFJZX01TUl9MT0FEX0FERFIsIF9fcGEodm14LSZndDttc3JfYXV0b2xvYWQuZ3Vlc3QudmFsKSk7CiAKIAlpZiAodm1jc19jb25maWcudm1lbnRyeV9jdHJsICZhbXA7IFZNX0VOVFJZX0xPQURfSUEzMl9QQVQpCi0JCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgdm14LSZndDt2Y3B1LmFyY2gucGF0KTsKJiM0MzsJCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgdmNwdS0mZ3Q7YXJjaC5wYXQpOwogCiAJdm1fZXhpdF9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1leGl0X2N0cmwoKSk7CiAKIAkvKiAyMi4yLjEsIDIwLjguMSAqLwogCXZtX2VudHJ5X2NvbnRyb2xzX3NldCh2bXgsIHZteF9nZXRfaW5pdGlhbF92bWVudHJ5X2N0cmwoKSk7CiAKLQl2bXgtJmd0O3ZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyA9IHZteF9sMV9ndWVzdF9vd25lZF9jcjBfYml0cygpOwotCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52bXgtJmd0O3ZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyk7CiYjNDM7CXZjcHUtJmd0O2FyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTsKJiM0MzsJdm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfnZjcHUtJmd0O2FyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpOwogCiAJc2V0X2NyNF9ndWVzdF9ob3N0X21hc2sodm14KTsKIApAQCAtNDk3NywxMSAmIzQzOzQ5NzgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCQl2bWNzX3dyaXRlNjQoWFNTX0VYSVRfQklUTUFQLCBWTVhfWFNTX0VYSVRfQklUTUFQKTsKIAogCWlmIChlbmFibGVfcG1sKSB7Ci0JCXZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZteC0mZ3Q7cG1sX3BnKSk7CiYjNDM7CQl2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKSk7CiAJCXZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTsKIAl9CiAKLQl2bXhfd3JpdGVfZW5jbHNfYml0bWFwKCZhbXA7dm14LSZndDt2Y3B1LCBOVUxMKTsKJiM0MzsJdm14X3dyaXRlX2VuY2xzX2JpdG1hcCh2Y3B1LCBOVUxMKTsKIAogCWlmICh2bXhfcHRfbW9kZV9pc19ob3N0X2d1ZXN0KCkpIHsKIAkJbWVtc2V0KCZhbXA7dm14LSZndDtwdF9kZXNjLCAwLCBzaXplb2Yodm14LSZndDtwdF9kZXNjKSk7CkBAIC00OTk0LDEzICYjNDM7NDk5NSwxMyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiAJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCAwKTsKIAl2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FSVAsIDApOwogCi0Jdm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKCZhbXA7dm14LSZndDt2Y3B1LCAwKTsKJiM0MzsJdm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKHZjcHUsIDApOwogCiAJaWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkgewogCQl2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUiwgMCk7Ci0JCWlmIChjcHVfbmVlZF90cHJfc2hhZG93KCZhbXA7dm14LSZndDt2Y3B1KSkKJiM0MzsJCWlmIChjcHVfbmVlZF90cHJfc2hhZG93KHZjcHUpKQogCQkJdm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsCi0JCQkJICAgICBfX3BhKHZteC0mZ3Q7dmNwdS5hcmNoLmFwaWMtJmd0O3JlZ3MpKTsKJiM0MzsJCQkJICAgICBfX3BhKHZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7cmVncykpOwogCQl2bWNzX3dyaXRlMzIoVFBSX1RIUkVTSE9MRCwgMCk7CiAJfQogCkBAIC01MDExLDcgJiM0Mzs1MDEyLDcgQEAgc3RhdGljIHZvaWQgX192bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKLQlpbml0X3ZtY3Modm14KTsKJiM0MzsJaW5pdF92bWNzKHZjcHUpOwogCiAJaWYgKG5lc3RlZCAmYW1wOyZhbXA7CiAJICAgIGt2bV9jaGVja19oYXNfcXVpcmsodmNwdS0mZ3Q7a3ZtLCBLVk1fWDg2X1FVSVJLX1NUVUZGX0ZFQVRVUkVfTVNSUykpCkBAIC02NDE4LDQ4ICYjNDM7NjQxOSwyNSBAQCB2b2lkIHZteF9nZXRfZW50cnlfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpCiAJCSplcnJvcl9jb2RlID0gMDsKIH0KIAotc3RhdGljIHZvaWQgdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcihzdHJ1Y3QgdmNwdV92bXggKnZteCkKJiM0MztzdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAodm14LSZndDtwbWxfcGcpIHsKLQkJX19mcmVlX3BhZ2Uodm14LSZndDtwbWxfcGcpOwotCQl2bXgtJmd0O3BtbF9wZyA9IE5VTEw7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKSB7CiYjNDM7CQlfX2ZyZWVfcGFnZSh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKJiM0MzsJCXZjcHUtJmd0O2FyY2gucG1sX3BhZ2UgPSBOVUxMOwogCX0KIH0KIAogc3RhdGljIHZvaWQgdm14X2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCXUxNiBwbWxfaWR4LCBwbWxfdGFpbF9pbmRleDsKLQl1NjQgKnBtbF9idWY7Ci0JaW50IGk7CiYjNDM7CXUxNiBwbWxfaWR4OwogCiAJcG1sX2lkeCA9IHZtY3NfcmVhZDE2KEdVRVNUX1BNTF9JTkRFWCk7CiAKIAkvKiBEbyBub3RoaW5nIGlmIFBNTCBidWZmZXIgaXMgZW1wdHkgKi8KIAlpZiAocG1sX2lkeCA9PSBQTUxfSEVBRF9JTkRFWCkKIAkJcmV0dXJuOwotCS8qCi0JICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5Ci0JICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC4KLQkgKi8KLQlwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4ICZndDs9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCAmIzQzOyAxOwotCi0JLyoKLQkgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExCi0JICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uCi0JICoKLQkgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdAotCSAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uCi0JICovCi0JcG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2bXgtJmd0O3BtbF9wZyk7CiAKLQlmb3IgKGkgPSBQTUxfSEVBRF9JTkRFWDsgaSAmZ3Q7PSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7Ci0JCXU2NCBncGE7Ci0KLQkJZ3BhID0gcG1sX2J1ZltpXTsKLQkJV0FSTl9PTihncGEgJmFtcDsgKFBBR0VfU0laRSAtIDEpKTsKLQkJa3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKLQl9CiYjNDM7CWt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIHBtbF9pZHgpOwogCiAJLyogcmVzZXQgUE1MIGluZGV4ICovCiAJdm1jc193cml0ZTE2KEdVRVNUX1BNTF9JTkRFWCwgUE1MX0hFQURfSU5ERVgpOwpAQCAtNzY0OCw3ICYjNDM7NzYyNiw3IEBAIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKIAlpZiAoZW5hYmxlX3BtbCkKLQkJdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpOwomIzQzOwkJdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTsKIAlmcmVlX3ZwaWQodm14LSZndDt2cGlkKTsKIAluZXN0ZWRfdm14X2ZyZWVfdmNwdSh2Y3B1KTsKIAlmcmVlX2xvYWRlZF92bWNzKHZteC0mZ3Q7bG9hZGVkX3ZtY3MpOwpAQCAtNzY4MCw4ICYjNDM7NzY1OCw4IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqIGZvciB0aGUgZ3Vlc3QpLCBldGMuCiAJICovCiAJaWYgKGVuYWJsZV9wbWwpIHsKLQkJdm14LSZndDtwbWxfcGcgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pOwotCQlpZiAoIXZteC0mZ3Q7cG1sX3BnKQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CiYjNDM7CQlpZiAoIXZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpCiAJCQlnb3RvIGZyZWVfdnBpZDsKIAl9CiAKQEAgLTc3NTIsNyAmIzQzOzc3MzAsNyBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGZyZWVfdm1jczoKIAlmcmVlX2xvYWRlZF92bWNzKHZteC0mZ3Q7bG9hZGVkX3ZtY3MpOwogZnJlZV9wbWw6Ci0Jdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpOwomIzQzOwl2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHZjcHUpOwogZnJlZV92cGlkOgogCWZyZWVfdnBpZCh2bXgtJmd0O3ZwaWQpOwogCXJldHVybiBlcnI7CkBAIC04NDQwLDIxICYjNDM7ODQxOCwxMyBAQCBzdGF0aWMgdm9pZCB2bXhfdXBkYXRlX2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JjZV9pbW1lZGlhdGVfZXhpdAogfQogI2VuZGlmCiAKLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKLQlpZiAoV0FSTl9PTl9PTkNFKCFlbmFibGVfcG1sKSkKLQkJcmV0dXJuOwotCiAJZ3VhcmQodm14X3ZtY3MwMSkodmNwdSk7CiAKLQkvKgotCSAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXMKLQkgKiBjb2RlLCBidXQgaW4gdGhhdCBjYXNlIGFub3RoZXIgdXBkYXRlIHJlcXVlc3Qgd2lsbCBiZSBtYWRlIGFuZCBzbwotCSAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLgotCSAqLwotCWlmIChhdG9taWNfcmVhZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZykpCiYjNDM7CWlmIChlbmFibGUpCiAJCXNlY29uZGFyeV9leGVjX2NvbnRyb2xzX3NldGJpdCh2bXgsIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9QTUwpOwogCWVsc2UKIAkJc2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCmluZGV4IGRjODUxN2YxNWJjNDYuLjVmNTA1YWQxNGRkZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaApAQCAtMjY1LDEzICYjNDM7MjY1LDYgQEAgc3RydWN0IHZjcHVfdm14IHsKIAl1bnNpZ25lZCBpbnQgcGxlX3dpbmRvdzsKIAlib29sIHBsZV93aW5kb3dfZGlydHk7CiAKLQkvKiBTdXBwb3J0IGZvciBQTUwgKi8KLSNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTCTUxMgotCS8qIFBNTCBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgd3JpdHRlbiBieSB0aGUgQ1BVICovCi0jZGVmaW5lIFBNTF9IRUFEX0lOREVYCQkoUE1MX0xPR19OUl9FTlRSSUVTLTEpCi0KLQlzdHJ1Y3QgcGFnZSAqcG1sX3BnOwotCiAJLyogYXBpYyBkZWFkbGluZSB2YWx1ZSBpbiBob3N0IHRzYyAqLwogCXU2NCBodl9kZWFkbGluZV90c2M7CiAKQEAgLTM5Nyw3ICYjNDM7MzkwLDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mzt2b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7CiAKIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpOwogYm9vbCB2bXhfaXNfdmFsaWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSwgYm9vbCBob3N0X2luaXRpYXRlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCmluZGV4IDA1NGZkMTRiYjJlMTYuLjQ4MTBmOWIxYjBmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCkBAIC0xMTgsNyAmIzQzOzExOCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF93cml0ZV90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOwogI2lmZGVmIENPTkZJR19YODZfNjQKIGludCB2bXhfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYywKIAkJICAgICBib29sICpleHBpcmVkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA3OTQ2OGRkZmU0NzM2Li42ZDI2ZGU4YjdjM2NjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0zOTQxLDYgJiM0MzszOTQxLDM3IEBAIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KQogCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogfQogCiYjNDM7dm9pZCBrdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBwbWxfaWR4KQomIzQzO3sKJiM0MzsJdTE2IHBtbF90YWlsX2luZGV4OwomIzQzOwl1NjQgKnBtbF9idWY7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHkKJiM0MzsJICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC4KJiM0MzsJICovCiYjNDM7CXBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggJmd0Oz0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICYjNDM7IDE7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBNTCBsb2cgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoZSBDUFUgZmlyc3Qgd3JpdGVzIHRoZSBlbnRyeSA1MTEKJiM0MzsJICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uCiYjNDM7CSAqCiYjNDM7CSAqIFJlYWQgdGhlIGVudHJpZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4sIHRvIGVuc3VyZSB0aGF0CiYjNDM7CSAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uCiYjNDM7CSAqLwomIzQzOwlwbWxfYnVmID0gcGFnZV9hZGRyZXNzKHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpOwomIzQzOwomIzQzOwlmb3IgKGkgPSBQTUxfSEVBRF9JTkRFWDsgaSAmZ3Q7PSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7CiYjNDM7CQl1NjQgZ3BhOwomIzQzOwomIzQzOwkJZ3BhID0gcG1sX2J1ZltpXTsKJiM0MzsJCVdBUk5fT05fT05DRShncGEgJmFtcDsgKFBBR0VfU0laRSAtIDEpKTsKJiM0MzsJCWt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9mbHVzaF9wbWxfYnVmZmVyKTsKJiM0MzsKIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sCiAJCQkgICAgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApCiB7CkBAIC04MDQyLDYgJiM0Mzs4MDczLDIxIEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1feDg2X2NhbGwoc2V0X2FwaWNfYWNjZXNzX3BhZ2VfYWRkcikodmNwdSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXMKJiM0MzsJICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc28KJiM0MzsJICogdGhlIGd1ZXN0IHdpbGwgbmV2ZXIgcnVuIHdpdGggYSBzdGFsZSBQTUwgdmFsdWUuCiYjNDM7CSAqLwomIzQzOwlib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUsIGVuYWJsZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGxlZCB3aXRoaW4ga3ZtLSZndDtzcmN1IHJlYWQgc2lkZS4KICAqIFJldHVybnMgMSB0byBsZXQgdmNwdV9ydW4oKSBjb250aW51ZSB0aGUgZ3Vlc3QgZXhlY3V0aW9uIGxvb3Agd2l0aG91dApAQCAtODIwOCw3ICYjNDM7ODI1NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQlrdm1feDg2X2NhbGwocmVjYWxjX2ludGVyY2VwdHMpKHZjcHUpOwogCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9DUFVfRElSVFlfTE9HR0lORywgdmNwdSkpCi0JCQlrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1KTsKJiM0MzsJCQlrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpOwogCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUsIHZjcHUpKSB7CiAJCQlrdm1fdmNwdV9yZXNldCh2Y3B1LCB0cnVlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaAppbmRleCAwZjU5MTliMDkyZTQ3Li4yZDc0N2MyMDk2NWNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oCkBAIC05MDAsNCAmIzQzOzkwMCwxMSBAQCBpbnQgX19fX2t2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcGwsCiAKIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAomIzQzOy8qIFN1cHBvcnQgZm9yIFBNTCAqLwomIzQzOyNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTCTUxMgomIzQzOy8qIFBNTCBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgd3JpdHRlbiBieSB0aGUgQ1BVICovCiYjNDM7I2RlZmluZSBQTUxfSEVBRF9JTkRFWAkJKFBNTF9MT0dfTlJfRU5UUklFUy0xKQomIzQzOwomIzQzO3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeCk7CiYjNDM7CiAjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIGl0IHNpZ25pZmljYW50bHkgdG91Y2hlcyB0aGUgS1ZNIHg4NiBzdWJzeXN0ZW0g4oCTIGFuZCB3ZSYjMzk7cmUgdGFsa2luZyBib3RoIGdlbmVyaWMgeDg2LCBhcyB3ZWxsIGFzIEFNRCYjMzk7cyBTVk0gYW5kIEludGVsJiMzOTtzIFZNWCBpbXBsZW1lbnRhdGlvbnMuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGFkZCBzdXBwb3J0IGZvciBQTUwgKFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcpIG9uIEFNRCBTVk0sIGluY2x1ZGluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIFNFViAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbikgY29uc2lkZXJhdGlvbnMuIFRoZSB3YXkgaXQgcmVmYWN0b3JzIFBNTCBkaXJ0eSBsb2dnaW5nIGJldHdlZW4gSW50ZWwgVk1YIGFuZCBBTUQgU1ZNIGFsc28gcGlxdWVzIG15IGludGVyZXN0LiBXZSYjMzk7dmUgZ290IGNoYW5nZXMgbW92aW5nIGBwbWxfcGFnZWAgYXJvdW5kLCBnZW5lcmFsaXppbmcgZnVuY3Rpb25zLCBhZGRpbmcgbmV3IGNhbGxiYWNrcyBsaWtlIGBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYCwgYW5kIHNvbWUgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgYXJvdW5kIGhvdyB0aGUgbG9nZ2luZyBpcyBoYW5kbGVkIGluIGJvdGggVk1YIGFuZCBTVk0uIFRoZSBtb2RpZmljYXRpb25zIGluIGBuZXN0ZWQuY2AgZm9yIFNWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGVzcGVjaWFsbHkgaGFuZGxpbmcgYFBNTF9GVUxMYCBleGl0cyBhbmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB2bWNiMDItJmd0O2NvbnRyb2wucG1sX2luZGV4YCwgYXJlIGRlZmluaXRlbHkgd29ydGggZXhhbWluaW5nLiBJJiMzOTttIGFsc28gc2VlaW5nIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgYmVpbmcgYWRkZWQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyB2aWV3cG9pbnQuCgpHaXZlbiB0aGF0IEtWTSBpcyBhIGNlbnRyYWwgdmlydHVhbGl6YXRpb24gY29tcG9uZW50IGFuZCB0aGF0IHN5emthbGxlciBhbHJlYWR5IGhlYXZpbHkgZnV6emVzIGl0IG9uIHg4NiwgdGhpcyBpcyBhIHByaW1lIHRhcmdldC4gV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBleGVjdXRpb24gcGF0aHMgYmVpbmcgdG91Y2hlZDogYHZjcHVfZW50ZXJfZ3Vlc3RgLCBgc3ZtX2hhbmRsZV9leGl0YCwgYHN2bV92Y3B1X2NyZWF0ZWAsIGFuZCBhIGxvdCBvZiB0aGUgbG9nZ2luZyBmdW5jdGlvbnMuIFRoaXMga2luZCBvZiBpbnRlcmFjdGlvbiB3aXRoIE1NVSwgZGlydHkgbG9nZ2luZywgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGEgZ29sZG1pbmUuCgoqKkNvbmNsdXNpb246KiogVGhpcyBpcyBhIGRlZmluaXRlICYjMzQ7WUVTJiMzNDsgaW4gdGVybXMgb2YgZnV6emluZyBwb3RlbnRpYWwgKFdvcnRoRnV6emluZz10cnVlKS4gTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCB1c2UgZ3JlcHBlciB0byBncmFiIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgS1ZNLCBLVk1fQU1ELCBhbmQgS1ZNX0lOVEVMIGFuZCB0aGVuIHN0YXJ0IGNyYWZ0aW5nIHNvbWUgZnV6emluZyBzdHJhdGVnaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBLVk0gQ29tcGlsYXRpb24gZm9yIHg4NioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgS1ZNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBzcGVjaWZpY2FsbHkgZm9yIHg4Ni4gSSYjMzk7dmUgYWxyZWFkeSBiZWVuIGxvb2tpbmcgYXQgc29tZSBvZiB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgc3BlY2lmaWNzIHJlZ2FyZGluZyB3aGljaCBzb3VyY2UgZmlsZXMgZ2V0IGNvbXBpbGVkLCBhbmQgaG93LCB3aXRoaW4gdGhhdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9jZXNzIHRob3JvdWdobHkgdG8gdHJvdWJsZXNob290IHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cbiAgIDQ6XHRjY2ZsYWdzLSQoQ09ORklHX0tWTV9XRVJST1IpICYjNDM7PSAtV2Vycm9yXG4gICA1Olx0XG4gICA2Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgNzpcdFxuICAgODpcdGt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuICAgOTpcdFx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuICAxMDpcdFxuICAxMTpcdGt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG4gIDEyOlx0a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiAgMTM6XHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4gIDE0Olx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbiAgMTU6XHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuICAxNjpcdFxuICAxNzpcdGt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4gIDE4Olx0XHRcdFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cbiAgMTk6XHRcbiAgMjA6XHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXHQmIzQzOz0gdm14L3NneC5vXG4gIDIxOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAyMjpcdGt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuICAyMzpcdFxuICAyNDpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG4gIDI1Olx0XG4gIDI2Olx0a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbiAgMjc6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG4gIDI4Olx0XG4gIDI5Olx0aWZkZWYgQ09ORklHX0hZUEVSVlxuICAzMDpcdGt2bS15XHRcdFx0JiM0Mzs9IGt2bV9vbmh5cGVydi5vXG4gIDMxOlx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbiAgMzI6XHRrdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm1fb25oeXBlcnYub1xuICAzMzpcdGVuZGlmXG4gIDM0Olx0XG4gIDM1Olx0b2JqLSQoQ09ORklHX0tWTV9YODYpXHQmIzQzOz0ga3ZtLm9cbiAgMzY6XHRvYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG4gIDM4Olx0XG4gIDM5Olx0QUZMQUdTX3N2bS92bWVudGVyLm8gICAgOj0gLWlxdW90ZSAkKG9iailcbiAgNDA6XHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBhbmQgU0VWIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgS1ZNX0FNRGAgYW5kIGBLVk1fSU5URUxgLiBUaGVzZSwgb2YgY291cnNlLCBhcmUgYnVpbHQgdXBvbiB0aGUgZm91bmRhdGlvbmFsIGBLVk1fWDg2YCBhbmQgYEtWTWAgbW9kdWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBTRVYgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24pIGludGVncmF0aW9uIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuCgpJIHNlZSB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgbWVudGlvbmVkLCBhbmQgdGhlIGBzZXYuY2Agc291cmNlIGZpbGUgaXMgZmxhZ2dlZCBhcyByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBhIGNvbW1lbnQgY2hhbmdlIGFuZCB0aGUgZnVuY3Rpb24gYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWAgaGF2ZSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYHN2bV92Y3B1X2NyZWF0ZWAgdGhyb3VnaCBgc25wX3NhZmVfYWxsb2NfcGFnZSgpYC4gVGhpcyBtZWFucyB0aGVyZSBtaWdodCBiZSBzb21lIGNydWNpYWwgYWxsb2NhdGlvbiBsb2dpYyByZWxhdGVkIHRvIHNlY3VyZSBtZW1vcnkgaW4gdGhlIEFNRCBLVk0gZW52aXJvbm1lbnQuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbnBfc2FmZV9hbGxvY19wYWdlYCBpdHNlbGYuIEkgbmVlZCB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBib3RoIGBzZXYuY2AgYW5kIGBzdm0uaGAgdG8gdW5kZXJzdGFuZCB0aGUgbG93LWxldmVsIG1lbW9yeSBhbGxvY2F0aW9uIGhhbmRsaW5nIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgU0VWLXNwZWNpZmljIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBLVk0vQU1EIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9zYWZlX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTQ4Nz1pbnQgc3ZtX2FsbG9jYXRlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE0OTMtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE0OTQ6XHR2bWNiMDJfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTQ5NS1cdGlmICghdm1jYjAyX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODYyPWludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3NS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODc2Olx0dm1zYV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc3LVx0aWYgKCF2bXNhX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTQ4PXZvaWQgc2V2X3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5ODU6c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTYxOT1zdGF0aWMgaW50IHN2bV9jcHVfaW5pdChpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI1LVx0bWVtc2V0KHNkLCAwLCBzaXplb2Yoc3RydWN0IHN2bV9jcHVfZGF0YSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo2MjY6XHRzYXZlX2FyZWFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShjcHVfdG9fbm9kZShjcHUpLCBHRlBfS0VSTkVMKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI3LVx0aWYgKCFzYXZlX2FyZWFfcGFnZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTEzMzU9c3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0NC1cdGVyciA9IC1FTk9NRU07XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjEzNDU6XHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0Ni1cdGlmICghdm1jYjAxX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzQ5LVx0aWYgKHBtbCkge1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxMzUwOlx0XHR2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNTEtXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTQxND1zdGF0aWMgdm9pZCAqc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNS17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTY6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNy1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5Mz1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5NzpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5OTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTkte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAwOlx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDIwPXZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIxLSNlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjMte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyNi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjgte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI5Olx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2ODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIEtWTSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHJlbGV2YW50IGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIEtWTSBjb2RlLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gcGljayBub24tdWJpcXVpdG91cywgaGlnaGx5IHRhcmdldGVkIHN5bWJvbHMgZm9yIGFuYWx5c2lzLgoKRmlyc3QsIEkmIzM5O3ZlIGdvdCB0byByZXZpZXcgdGhlIG1vZGlmaWVkIGFuZCBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYWNyb3NzIHRoZSByZWxldmFudCBmaWxlczogYGFyY2gveDg2L2t2bS94ODYuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIC8gYG1haW4uY2AuIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgbGlzdHMgYW5kIGhhdmUgYSBzaG9ydCBsaXN0IG9mIGZ1bmN0aW9uczoKCiogICBga3ZtX2ZsdXNoX3BtbF9idWZmZXJgCiogICBga3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ2AKKiAgIGBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYAoqICAgYHN2bV9mbHVzaF9wbWxfYnVmZmVyYAoqICAgYHBtbF9mdWxsX2ludGVyY2VwdGlvbmAKKiAgIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbGAKKiAgIGBuZXN0ZWRfc3ZtX2V4aXRfc3BlY2lhbGAKKiAgIGB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYAoqICAgYHZteF9mbHVzaF9wbWxfYnVmZmVyYAoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHViaXF1aXRvdXMga2VybmVsIGhvdHNwb3RzLiBUaGV5IGFwcGVhciB0byBiZSBzcGVjaWZpYyB0byBLVk0sIFBNTCwgZGlydHkgbG9nZ2luZywgYW5kIG5lc3RlZCBTVk0uIE5vIG9idmlvdXMgaXNzdWVzIGhlcmUuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBmb2xsb3dpbmcgY29uZmlnczoKCiogICBgS1ZNYAoqICAgYEtWTV9BTURgCiogICBgS1ZNX0lOVEVMYAoqICAgYEtWTV9YODZgCiogICBgVklSVFVBTElaQVRJT05gCgpMb29rcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgdW5kZXIgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBvciBgYXJjaC94ODYvS2NvbmZpZ2AgYW5kIGBhcmNoL0tjb25maWdgLgpXaXRoIHRoZSBzeW1ib2xzIGlkZW50aWZpZWQgYW5kIHZhbGlkYXRlZCwgSSBjYW4gbm93IHByb2NlZWQgdG8gYW5hbHl6ZSB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoS1ZNfFZJUlRVQUxJWkFUSU9OKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9ODMwPXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04MzEtXG5hcmNoL3g4Ni9LY29uZmlnOjgzMjpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTgzMy1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz02PXNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03LVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05LVx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwMgoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIEtWTSBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gYXMgSSBzZWUgaXQuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBldmVyeXRoaW5nIGlzIGNyeXN0YWwgY2xlYXIuIFdlJiMzOTtyZSBkZWZpbml0ZWx5IGZ1enppbmcgdGhpcywgd2hpY2ggaXMgZ29vZC4gVGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYXJlIHNldCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFjcm9zcyBLVk0sIGFuZCBzcGVjaWZpY2FsbHkgZm9yIEFNRCBhbmQgSW50ZWwgaGFyZHdhcmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGUgZm9jdXMgc3ltYm9scyBsaXN0ZWQ7IHRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgaW1wYWN0ZWQsIG9yIGFyZSBhdCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMuCgpCYXNlZCBvbiB0aGUgc3ltYm9scywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nLCBvciBQTUwsIGFuZCBpdCYjMzk7cyBiZWluZyBpbXBsZW1lbnRlZCBhbmQgcmVmYWN0b3JlZCBmb3IgQU1EJiMzOTtzIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgYW5kIHRoZSBleGlzdGluZyBnZW5lcmljIHg4NiBLVk0gY29kZSwgYXMgd2VsbCBhcyBJbnRlbCYjMzk7cyBWTVguIFRoZSBmdW5jdGlvbiBuYW1lcyBwb2ludCB0byBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyBkaXJ0eSBsb2dnaW5nIGlzIGhhbmRsZWQgYWNyb3NzIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gcGF0aHMuIFdlJiMzOTt2ZSBnb3QgbmV3IGV4aXQgaGFuZGxlcnMgZm9yIGhhbmRsaW5nIHNwZWNpZmljIHZpcnR1YWwgbWFjaGluZSBleGl0cywgaW5jbHVkaW5nIG5lc3RlZCBTVk0gZXhpdHMsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gVGhlcmUmIzM5O3MgYWxzbyBidWZmZXIgZmx1c2hpbmcgbG9naWMsIGFuZCB1cGRhdGVzIHRvIHRoZSBkaXJ0eSBsb2dnaW5nIHN0YXRlIGNvbnRyb2wgaW4ga2V5IHZpcnR1YWxpemF0aW9uIHJvdXRpbmVzLiBUaGUgbWFpbiB0aGluZyBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyeSBsb3ctbGV2ZWwgdmlydHVhbGl6YXRpb24gZGV0YWlscyBhbmQgbWFuYWdlbWVudCBvZiBob3cgbWVtb3J5IHBhZ2VzIGFyZSB0cmFja2VkLCBwb3RlbnRpYWxseSB0byBvcHRpbWl6ZSBob3cgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lcyBhcmUgbWFuYWdlZC4KCkkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIGFzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nJiMzNDssCiAgICAmIzM0O3N2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX2ZsdXNoX3BtbF9idWZmZXImIzM0OywKICAgICYjMzQ7cG1sX2Z1bGxfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fZXhpdF9zcGVjaWFsJiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sJiMzNDssCiAgICAmIzM0O3ZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7dm14X2ZsdXNoX3BtbF9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nJiMzNDssCiAgICAmIzM0O3N2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX2ZsdXNoX3BtbF9idWZmZXImIzM0OywKICAgICYjMzQ7cG1sX2Z1bGxfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fZXhpdF9zcGVjaWFsJiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sJiMzNDssCiAgICAmIzM0O3ZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7dm14X2ZsdXNoX3BtbF9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQU1EIFNWTSBzdXBwb3J0IGZvciBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGFuZCBjb25zb2xpZGF0ZXMgc2hhcmVkIFBNTCBoYW5kbGluZyBsb2dpYyBiZXR3ZWVuIEludGVsIFZNWCBhbmQgQU1EIFNWTS5cblxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YjUzMTI3NzlkZDY0ZGJjNjMxMWEyMzZmZDI2MGEzNDkzODFkZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uY2JmY2M2NmExOGU5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC0yMzgsNiAmIzQzOzIzOCw3IEBACiAvLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMiYjNDM7MjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVAkJKCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUCQkoIDgqMzImIzQzOzIyKSAvKiAmIzM0O3RkeF9ndWVzdCYjMzQ7IEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovCiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9QTUwJCQkoIDgqMzImIzQzOzIzKSAvKiBBTUQgUGFnZSBNb2RpZmljYXRpb24gbG9nZ2luZyAqLwogCiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwNzowIChFQlgpLCB3b3JkIDkgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRlNHU0JBU0UJCSggOSozMiYjNDM7IDApIC8qICYjMzQ7ZnNnc2Jhc2UmIzM0OyBSREZTQkFTRSwgV1JGU0JBU0UsIFJER1NCQVNFLCBXUkdTQkFTRSBpbnN0cnVjdGlvbnMqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2FmNzM5NWMyNDMwYS4uMmRlYmY2Mjk0MjkwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC03ODksNiAmIzQzOzc4OSw4IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAkgKi8KIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X2V4dGVybmFsX3NwdF9jYWNoZTsKIAomIzQzOwlzdHJ1Y3QgcGFnZSAqcG1sX3BhZ2U7CiYjNDM7CiAJLyoKIAkgKiBRRU1VIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0IGVhY2ggaGF2ZSB0aGVpciBvd24gRlBVIHN0YXRlLgogCSAqIEluIHZjcHVfcnVuLCB3ZSBzd2l0Y2ggYmV0d2VlbiB0aGUgdXNlciBhbmQgZ3Vlc3QgRlBVIGNvbnRleHRzLgpAQCAtMTY3MCw3ICYjNDM7MTY3Miw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJCQkgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbik7CiAJdm9pZCAoKmhhbmRsZV9leGl0X2lycW9mZikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotCXZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7CXZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOwogCiAJdm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnZjcHVfdW5ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uZTBhNzU0OWE3YzcyNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTE2NSw3ICYjNDM7MTY1LDEwIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHsKIAl1OCByZXNlcnZlZF85WzIyXTsKIAl1NjQgYWxsb3dlZF9zZXZfZmVhdHVyZXM7CS8qIE9mZnNldCAweDEzOCAqLwogCXU2NCBndWVzdF9zZXZfZmVhdHVyZXM7CQkvKiBPZmZzZXQgMHgxNDAgKi8KLQl1OCByZXNlcnZlZF8xMFs2NjRdOwomIzQzOwl1OCByZXNlcnZlZF8xMFsxMjhdOwomIzQzOwl1NjQgcG1sX2FkZHI7CQkJLyogT2Zmc2V0IDB4MWM4ICovCiYjNDM7CXUxNiBwbWxfaW5kZXg7CQkJLyogT2Zmc2V0IDB4MWQwICovCiYjNDM7CXU4IHJlc2VydmVkXzExWzUyNl07CiAJLyoKIAkgKiBPZmZzZXQgMHgzZTAsIDMyIGJ5dGVzIHJlc2VydmVkCiAJICogZm9yIHVzZSBieSBoeXBlcnZpc29yL3NvZnR3YXJlLgpAQCAtMjQwLDEwICYjNDM7MjQzLDExIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHsKICNkZWZpbmUgU1ZNX0lPSU9fU0laRV9NQVNLICg3ICZsdDsmbHQ7IFNWTV9JT0lPX1NJWkVfU0hJRlQpCiAjZGVmaW5lIFNWTV9JT0lPX0FTSVpFX01BU0sgKDcgJmx0OyZsdDsgU1ZNX0lPSU9fQVNJWkVfU0hJRlQpCiAKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QCQlCSVQoMCkKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVgkJQklUKDEpCi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZfRVMJQklUKDIpCi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUCUJJVCgzKQomIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QCQlCSVRfVUxMKDApCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWCQlCSVRfVUxMKDEpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWX0VTCQlCSVRfVUxMKDIpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVAkJQklUX1VMTCgzKQomIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1BNTAkJQklUX1VMTCgxMSkKIAogI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSCUJJVF9VTEwoMCkKICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX1ZNTE9BRF9WTVNBVkUJQklUX1VMTCgxKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmgKaW5kZXggMDEwYTQ1YzlmNjE0Ny4uZTgwNjc2MTg1MDkyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oCkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBACiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfSU5DT01QTEVURV9JUEkJCTB4NDAxCiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MJMHg0MDIKICNkZWZpbmUgU1ZNX0VYSVRfVk1HRVhJVCAgICAgICAweDQwMwomIzQzOyNkZWZpbmUgU1ZNX0VYSVRfUE1MX0ZVTEwJMHg0MDcKIAogLyogU0VWLUVTIHNvZnR3YXJlLWRlZmluZWQgVk1HRVhJVCBldmVudHMgKi8KICNkZWZpbmUgU1ZNX1ZNR0VYSVRfTU1JT19SRUFECQkJMHg4MDAwMDAwMXVsbApAQCAtMjM2LDYgJiM0MzsyMzcsNyBAQAogCXsgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSSwJCSYjMzQ7YXZpY19pbmNvbXBsZXRlX2lwaSYjMzQ7IH0sIFwKIAl7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgJiMzNDthdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzJiMzNDsgfSwgXAogCXsgU1ZNX0VYSVRfVk1HRVhJVCwJCSYjMzQ7dm1nZXhpdCYjMzQ7IH0sIFwKJiM0MzsJeyBTVk1fRVhJVF9QTUxfRlVMTCwJCSYjMzQ7cG1sX2Z1bGwmIzM0OyB9LCBcCiAJeyBTVk1fVk1HRVhJVF9NTUlPX1JFQUQsCSYjMzQ7dm1nZXhpdF9tbWlvX3JlYWQmIzM0OyB9LCBcCiAJeyBTVk1fVk1HRVhJVF9NTUlPX1dSSVRFLAkmIzM0O3ZtZ2V4aXRfbW1pb193cml0ZSYjMzQ7IH0sIFwKIAl7IFNWTV9WTUdFWElUX05NSV9DT01QTEVURSwJJiMzNDt2bWdleGl0X25taV9jb21wbGV0ZSYjMzQ7IH0sIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCmluZGV4IDg2NjVhNjQ3NDgwNmMuLmIxOGNjOWM4OGRkNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwpAQCAtNTUsNiAmIzQzOzU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0gewogCXsgWDg2X0ZFQVRVUkVfQU1EX0ZBU1RfQ1BQQywJCUNQVUlEX0VEWCwgMTUsIDB4ODAwMDAwMDcsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0NQUENfUEVSRl9QUklPLAkJQ1BVSURfRURYLCAxNiwgMHg4MDAwMDAwNywgMCB9LAogCXsgWDg2X0ZFQVRVUkVfTUJBLAkJCUNQVUlEX0VCWCwgIDYsIDB4ODAwMDAwMDgsIDAgfSwKJiM0MzsJeyBYODZfRkVBVFVSRV9QTUwsCQkJQ1BVSURfRUNYLCAgNCwgMHg4MDAwMDAwYSwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCwJCUNQVUlEX0VDWCwgIDYsIDB4ODAwMDAwMGEsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0NPSEVSRU5DWV9TRldfTk8sCQlDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9TTUJBLAkJCUNQVUlEX0VCWCwgIDIsIDB4ODAwMDAwMjAsIDAgfSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCmluZGV4IDczZjM3YjA1MGQwYTAuLmRhNDE3YzRjNTkxNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYwpAQCAtOTAxLDYgJiM0Mzs5MDEsMTMgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJdm1jYjAyLSZndDtjb250cm9sLm1zcnBtX2Jhc2VfcGEgPSB2bWNiMDEtJmd0O2NvbnRyb2wubXNycG1fYmFzZV9wYTsKIAl2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX1BFUk1fTUFQKTsKIAomIzQzOwkvKgomIzQzOwkgKiBQTUwgaXMgbmV2ZXIgZW5hYmxlZCBpbiBoYXJkd2FyZSBmb3IgTDIuICBNYWtlIHN1cmUgdGhhdCBhbgomIzQzOwkgKiB1bmV4cGVjdGVkIFBNTCB3cml0ZSB3b3VsZCB0cmlnZ2VyIGEgUE1MX0ZVTEwgVk0tRXhpdC4KJiM0MzsJICovCiYjNDM7CWlmIChwbWwpCiYjNDM7CQl2bWNiMDItJmd0O2NvbnRyb2wucG1sX2luZGV4ID0gLTE7CiYjNDM7CiAJLyoKIAkgKiBTdGFzaCB2bWNiMDImIzM5O3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbiYjMzk7dCBtb3ZlZCBwYXN0IHRoZSBndWlsdHkKIAkgKiBpbnN0cnVjdGlvbjsgb3RoZXJ3aXNlLCByZXNldCB0aGUgY291bnRlciB0byAmIzM5OzAmIzM5Oy4KQEAgLTE4MjAsNiAmIzQzOzE4MjcsMTMgQEAgaW50IG5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCQlpZiAobmVzdGVkX3N2bV9pc19sMl90bGJfZmx1c2hfaGNhbGwodmNwdSkpCiAJCQlyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgU1ZNX0VYSVRfUE1MX0ZVTEw6CiYjNDM7CQkvKgomIzQzOwkJICogQWxsIFBNTCBmdWxsIGV4aXRzIGFyZSBoYW5kbGVkIGJ5IEtWTS4gIEtWTSBlbXVsYXRlcyBQTUwgaW4KJiM0MzsJCSAqIHNvZnR3YXJlIGZvciBMMSwgYnV0IG5ldmVyIGVuYWJsZXMgUE1MIGluIGhhcmR3YXJlIG9uIGJlaGFsZgomIzQzOwkJICogb2YgTDEuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBORVNURURfRVhJVF9IT1NUOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLmNmZTk5MGY4MDUwNDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDk5NCw3ICYjNDM7NDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcCkKIAkgKiBBbGxvY2F0ZSBhbiBTTlAtc2FmZSBwYWdlIHRvIHdvcmthcm91bmQgdGhlIFNOUCBlcnJhdHVtIHdoZXJlCiAJICogdGhlIENQVSB3aWxsIGluY29ycmVjdGx5IHNpZ25hbCBhbiBSTVAgdmlvbGF0aW9uICNQRiBpZiBhCiAJICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhCi0JICogMk1CLWFsaWduZWQgVk1DQiwgVk1TQSwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuCiYjNDM7CSAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIFBNTCBvciBBVklDIGJhY2tpbmcgcGFnZS4KIAkgKgogCSAqIEFsbG9jYXRlIG9uZSBleHRyYSBwYWdlLCBjaG9vc2UgYSBwYWdlIHdoaWNoIGlzIG5vdAogCSAqIDJNQi1hbGlnbmVkLCBhbmQgZnJlZSB0aGUgb3RoZXIuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCA3ZDU5ZDMwMWUxZTU0Li45NTBjMjUwYTc3YjUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDkgQEAgbW9kdWxlX3BhcmFtKHZubWksIGJvb2wsIDA0NDQpOwogCiBtb2R1bGVfcGFyYW0oZW5hYmxlX21lZGlhdGVkX3BtdSwgYm9vbCwgMDQ0NCk7CiAKJiM0Mztib29sIF9fcm9fYWZ0ZXJfaW5pdCBwbWwgPSB0cnVlOwomIzQzO21vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpOwomIzQzOwogc3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHN2bV9ncF9lcnJhdHVtX2ludGVyY2VwdCA9IHRydWU7CiAKIHN0YXRpYyB1OCByc21faW5zX2J5dGVzW10gPSAmIzM0O1x4MGZceGFhJiMzNDs7CkBAIC0xMjY3LDYgJiM0MzsxMjcwLDIzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCkKIAlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKQogCQlzdm1fc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9CVVNMT0NLKTsKIAomIzQzOwlpZiAocG1sKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUG9wdWxhdGUgdGhlIHBhZ2UgYWRkcmVzcyBhbmQgaW5kZXggaGVyZSwgUE1MIGlzIGVuYWJsZWQKJiM0MzsJCSAqIHdoZW4gZGlydHkgbG9nZ2luZyBpcyBlbmFibGVkIG9uIHRoZSBtZW1zbG90IHRocm91Z2gKJiM0MzsJCSAqIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoKQomIzQzOwkJICovCiYjNDM7CQljb250cm9sLSZndDtwbWxfYWRkciA9ICh1NjQpX19zbWVfc2V0KHBhZ2VfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKSk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIFZNQ0IgY29udHJvbCBhcmVhIHJlbWFpbnMgdmFsaWQgYWZ0ZXIgYW4gaW50ZXJjZXB0ZWQgU0hVVERPV04KJiM0MzsJCSAqIChBTUQgQVBNIFJldiAzLjQ1JiM0MzspLCBzbyBvbmx5IGluaXRpYWxpemUgUE1MIGluZGV4IG9uIHJlc2V0IHRvIGF2b2lkCiYjNDM7CQkgKiBkaXNjYXJkaW5nIGFscmVhZHktbG9nZ2VkIGVudHJpZXMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGZsdXNoZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghaW5pdF9ldmVudCkKJiM0MzsJCQljb250cm9sLSZndDtwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDsKJiM0MzsJfQomIzQzOwogCWlmIChpc19zZXZfZ3Vlc3QodmNwdSkpCiAJCXNldl9pbml0X3ZtY2Ioc3ZtLCBpbml0X2V2ZW50KTsKIApAQCAtMTMyNiw5ICYjNDM7MTM0NiwxNSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKCF2bWNiMDFfcGFnZSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJaWYgKHBtbCkgewomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTsKJiM0MzsJCWlmICghdmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSkKJiM0MzsJCQlnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyb3JfZnJlZV92bWNiX3BhZ2U7CiYjNDM7CQlnb3RvIGVycm9yX2ZyZWVfcG1sX3BhZ2U7CiAKIAllcnIgPSBhdmljX2luaXRfdmNwdShzdm0pOwogCWlmIChlcnIpCkBAIC0xMzUzLDYgJiM0MzsxMzc5LDkgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBlcnJvcl9mcmVlX3NldjoKIAlzZXZfZnJlZV92Y3B1KHZjcHUpOwomIzQzO2Vycm9yX2ZyZWVfcG1sX3BhZ2U6CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQomIzQzOwkJX19mcmVlX3BhZ2UodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSk7CiBlcnJvcl9mcmVlX3ZtY2JfcGFnZToKIAlfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7CiBvdXQ6CkBAIC0xMzcwLDYgJiM0MzsxMzk5LDkgQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlzZXZfZnJlZV92Y3B1KHZjcHUpOwogCiYjNDM7CWlmIChwbWwgJmFtcDsmYW1wOyB2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQomIzQzOwkJX19mcmVlX3BhZ2UodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSk7CiYjNDM7CiAJX19mcmVlX3BhZ2UoX19zbWVfcGFfdG9fcGFnZShzdm0tJmd0O3ZtY2IwMS5wYSkpOwogCXN2bV92Y3B1X2ZyZWVfbXNycG0oc3ZtLSZndDttc3JwbSk7CiB9CkBAIC0zMzQ0LDYgJiM0MzszMzc2LDQ1IEBAIHN0YXRpYyBpbnQgdm1tY2FsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1fZW11bGF0ZV9oeXBlcmNhbGwodmNwdSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsJc3RydWN0IHZtY2IgKnZtY2IwMSA9IHN2bS0mZ3Q7dm1jYjAxLnB0cjsKJiM0MzsKJiM0MzsJaWYgKGVuYWJsZSkKJiM0MzsJCXZtY2IwMS0mZ3Q7Y29udHJvbC5taXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfUE1MOwomIzQzOwllbHNlCiYjNDM7CQl2bWNiMDEtJmd0O2NvbnRyb2wubWlzY19jdGwgJmFtcDs9IH5TVk1fTUlTQ19FTkFCTEVfUE1MOwomIzQzOwomIzQzOwl2bWNiX21hcmtfZGlydHkodm1jYjAxLCBWTUNCX05QVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MzsJLyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovCiYjNDM7CWlmIChjb250cm9sLSZndDtwbWxfaW5kZXggPT0gUE1MX0hFQURfSU5ERVgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIGNvbnRyb2wtJmd0O3BtbF9pbmRleCk7CiYjNDM7CiYjNDM7CS8qIFJlc2V0IHRoZSBQTUwgaW5kZXggKi8KJiM0MzsJY29udHJvbC0mZ3Q7cG1sX2luZGV4ID0gUE1MX0hFQURfSU5ERVg7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcG1sX2Z1bGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LSZndDt2Y3B1X2lkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUE1MIGJ1ZmZlciBpcyBhbHJlYWR5IGZsdXNoZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBzdm1faGFuZGxlX2V4aXQoKS4KJiM0MzsJICogTm90aGluZyB0byBkbyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7CiAJW1NWTV9FWElUX1JFQURfQ1IwXQkJCT0gY3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9SRUFEX0NSM10JCQk9IGNyX2ludGVyY2VwdGlvbiwKQEAgLTM0MjEsNiAmIzQzOzM0OTIsNyBAQCBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHsKICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKIAlbU1ZNX0VYSVRfVk1HRVhJVF0JCQk9IHNldl9oYW5kbGVfdm1nZXhpdCwKICNlbmRpZgomIzQzOwlbU1ZNX0VYSVRfUE1MX0ZVTExdCQkJPSBwbWxfZnVsbF9pbnRlcmNlcHRpb24sCiB9OwogCiBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMzQ3MCw4ICYjNDM7MzU0MiwxNCBAQCBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7ZXhpdF9pbmZvMjomIzM0OywgY29udHJvbC0mZ3Q7ZXhpdF9pbmZvXzIpOwogCXByX2VycigmIzM0OyUtMjBzJTA4eFxuJiMzNDssICYjMzQ7ZXhpdF9pbnRfaW5mbzomIzM0OywgY29udHJvbC0mZ3Q7ZXhpdF9pbnRfaW5mbyk7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDh4XG4mIzM0OywgJiMzNDtleGl0X2ludF9pbmZvX2VycjomIzM0OywgY29udHJvbC0mZ3Q7ZXhpdF9pbnRfaW5mb19lcnIpOwotCXByX2VycigmIzM0OyUtMjBzJWxsZFxuJiMzNDssICYjMzQ7bWlzY19jdGw6JiMzNDssIGNvbnRyb2wtJmd0O21pc2NfY3RsKTsKJiM0MzsJcHJfZXJyKCYjMzQ7JS0yMHMlbGx4XG4mIzM0OywgJiMzNDttaXNjX2N0bDomIzM0OywgY29udHJvbC0mZ3Q7bWlzY19jdGwpOwogCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7bmVzdGVkX2NyMzomIzM0OywgY29udHJvbC0mZ3Q7bmVzdGVkX2NyMyk7CiYjNDM7CiYjNDM7CWlmIChwbWwpIHsKJiM0MzsJCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7cG1sX2FkZHI6JiMzNDssIGNvbnRyb2wtJmd0O3BtbF9hZGRyKTsKJiM0MzsJCXByX2VycigmIzM0OyUtMjBzJTA0eFxuJiMzNDssICYjMzQ7cG1sX2luZGV4OiYjMzQ7LCBjb250cm9sLSZndDtwbWxfaW5kZXgpOwomIzQzOwl9CiYjNDM7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDthdmljX3ZhcGljX2JhcjomIzM0OywgY29udHJvbC0mZ3Q7YXZpY192YXBpY19iYXIpOwogCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7Z2hjYjomIzM0OywgY29udHJvbC0mZ3Q7Z2hjYl9ncGEpOwogCXByX2VycigmIzM0OyUtMjBzJTA4eFxuJiMzNDssICYjMzQ7ZXZlbnRfaW5qOiYjMzQ7LCBjb250cm9sLSZndDtldmVudF9pbmopOwpAQCAtMzY0OSw2ICYjNDM7MzcyNywxMyBAQCBpbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpCiAJICAgICh1NjQpZXhpdF9jb2RlICE9IF9fZXhpdF9jb2RlKQogCQlnb3RvIHVuZXhwZWN0ZWRfdm1leGl0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsCiYjNDM7CSAqIGV4aXQgb2NjdXJzIGFzIHNvbWV0aGluZyBpcyBob3JyaWJseSB3cm9uZy4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpICZhbXA7JmFtcDsgZXhpdF9jb2RlID09IFNWTV9FWElUX1BNTF9GVUxMKSkKJiM0MzsJCWdvdG8gdW5leHBlY3RlZF92bWV4aXQ7CiYjNDM7CiAjaWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FCiAJaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9NU1IpCiAJCXJldHVybiBtc3JfaW50ZXJjZXB0aW9uKHZjcHUpOwpAQCAtMzcxNyw2ICYjNDM7MzgwMiwxNCBAQCBzdGF0aWMgaW50IHN2bV9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtJmd0O3J1bjsKIAomIzQzOwkvKgomIzQzOwkgKiBPcHBvcnR1bmlzdGljYWxseSBmbHVzaCB0aGUgUE1MIGJ1ZmZlciBvbiBWTSBleGl0LiBUaGlzIGtlZXBzIHRoZQomIzQzOwkgKiBkaXJ0eSBiaXRtYXAgY3VycmVudCBieSBwcm9jZXNzaW5nIGxvZ2dlZCBHUEFzIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yCiYjNDM7CSAqIFBNTF9GVUxMIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSAmYW1wOyZhbXA7ICFpc19ndWVzdF9tb2RlKHZjcHUpKQomIzQzOwkJc3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSk7CiYjNDM7CiAJaWYgKHVubGlrZWx5KGV4aXRfZmFzdHBhdGggPT0gRVhJVF9GQVNUUEFUSF9FWElUX1VTRVJTUEFDRSkpCiAJCXJldHVybiAwOwogCkBAIC01MzExLDYgJiM0Mzs1NDA0LDkgQEAgc3RhdGljIGludCBzdm1fdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpCiAJCWt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTsKIAomIzQzOwlpZiAocG1sKQomIzQzOwkJa3ZtLSZndDthcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSA9IFBNTF9MT0dfTlJfRU5UUklFUzsKJiM0MzsKIAlzdm1fc3Jzb192bV9pbml0KCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NDI5LDYgJiM0Mzs1NTI1LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLmNoZWNrX2ludGVyY2VwdCA9IHN2bV9jaGVja19pbnRlcmNlcHQsCiAJLmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsCiAKJiM0MzsJLnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcsCiYjNDM7CiAJLmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LAogCS5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsCiAJLnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsCkBAIC01Njg5LDYgJiM0Mzs1Nzg3LDEwIEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCiAJbnJpcHMgPSBucmlwcyAmYW1wOyZhbXA7IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OUklQUyk7CiAKJiM0MzsJcG1sID0gcG1sICZhbXA7JmFtcDsgbnB0X2VuYWJsZWQgJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BNTCk7CiYjNDM7CWlmIChwbWwpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7UGFnZSBtb2RpZmljYXRpb24gbG9nZ2luZyBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsKIAlpZiAobGJydikgewogCQlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9MQlJWKSkKIAkJCWxicnYgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IGU5NTg5NDNiODE2MjcuLmY1NjZkYWU0NGJiMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtNTMsNiAmIzQzOzUzLDcgQEAgZXh0ZXJuIGludCB2Z2lmOwogZXh0ZXJuIGJvb2wgaW50ZXJjZXB0X3NtaTsKIGV4dGVybiBib29sIHZubWk7CiBleHRlcm4gaW50IGxicnY7CiYjNDM7ZXh0ZXJuIGJvb2wgcG1sOwogCiBleHRlcm4gaW50IHRzY19hdXhfdXJldF9zbG90IF9fcm9fYWZ0ZXJfaW5pdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA0YzUyYWI4ZDA3ODY5Li5lNzdiNWI3MzEyNzVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwpAQCAtMTA4LDcgJiM0MzsxMDgsNyBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCXZteF92Y3B1X2xvYWQodmNwdSwgY3B1KTsKIH0KIAotc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSkKIHsKIAkvKgogCSAqIEJhc2ljIFREWCBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUgUE1MLiBLVk0gZG9lcyBub3QgZW5hYmxlIFBNTCBpbgpAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiAJCXJldHVybjsKIAotCXZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSk7CiYjNDM7CXZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSwgZW5hYmxlKTsKIH0KIAogc3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggNjEyYWIwN2Q0MTAwZi4uYjM3NjhiNGIyMTJmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC00ODgzLDEwICYjNDM7NDg4MywxMSBAQCBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSkKIAogI2RlZmluZSBWTVhfWFNTX0VYSVRfQklUTUFQIDAKIAotc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQomIzQzO3N0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IGt2bSAqa3ZtID0gdm14LSZndDt2Y3B1Lmt2bTsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCXN0cnVjdCBrdm1fdm14ICprdm1fdm14ID0gdG9fa3ZtX3ZteChrdm0pOwomIzQzOwlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCWlmIChuZXN0ZWQpCiAJCW5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcCgpOwpAQCAtNDkxMSw3ICYjNDM7NDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAlpZiAoY3B1X2hhc190ZXJ0aWFyeV9leGVjX2N0cmxzKCkpCiAJCXRlcnRpYXJ5X2V4ZWNfY29udHJvbHNfc2V0KHZteCwgdm14X3RlcnRpYXJ5X2V4ZWNfY29udHJvbCh2bXgpKTsKIAotCWlmIChlbmFibGVfYXBpY3YgJmFtcDsmYW1wOyBsYXBpY19pbl9rZXJuZWwoJmFtcDt2bXgtJmd0O3ZjcHUpKSB7CiYjNDM7CWlmIChlbmFibGVfYXBpY3YgJmFtcDsmYW1wOyBsYXBpY19pbl9rZXJuZWwodmNwdSkpIHsKIAkJdm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDAsIDApOwogCQl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMSwgMCk7CiAJCXZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAyLCAwKTsKQEAgLTQ5MjMsNyAmIzQzOzQ5MjQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiAJCXZtY3Nfd3JpdGU2NChQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoKCZhbXA7dm14LSZndDt2dC5waV9kZXNjKSkpOwogCX0KIAotCWlmICh2bXhfY2FuX3VzZV9pcGl2KCZhbXA7dm14LSZndDt2Y3B1KSkgewomIzQzOwlpZiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSkgewogCQl2bWNzX3dyaXRlNjQoUElEX1BPSU5URVJfVEFCTEUsIF9fcGEoa3ZtX3ZteC0mZ3Q7cGlkX3RhYmxlKSk7CiAJCXZtY3Nfd3JpdGUxNihMQVNUX1BJRF9QT0lOVEVSX0lOREVYLCBrdm0tJmd0O2FyY2gubWF4X3ZjcHVfaWRzIC0gMSk7CiAJfQpAQCAtNDk1OCwxNSAmIzQzOzQ5NTksMTUgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCXZtY3Nfd3JpdGU2NChWTV9FTlRSWV9NU1JfTE9BRF9BRERSLCBfX3BhKHZteC0mZ3Q7bXNyX2F1dG9sb2FkLmd1ZXN0LnZhbCkpOwogCiAJaWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCAmYW1wOyBWTV9FTlRSWV9MT0FEX0lBMzJfUEFUKQotCQl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZteC0mZ3Q7dmNwdS5hcmNoLnBhdCk7CiYjNDM7CQl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZjcHUtJmd0O2FyY2gucGF0KTsKIAogCXZtX2V4aXRfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZXhpdF9jdHJsKCkpOwogCiAJLyogMjIuMi4xLCAyMC44LjEgKi8KIAl2bV9lbnRyeV9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1lbnRyeV9jdHJsKCkpOwogCi0Jdm14LSZndDt2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTsKLQl2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dm14LSZndDt2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpOwomIzQzOwl2Y3B1LSZndDthcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7CiYjNDM7CXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52Y3B1LSZndDthcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTsKIAogCXNldF9jcjRfZ3Vlc3RfaG9zdF9tYXNrKHZteCk7CiAKQEAgLTQ5NzcsMTEgJiM0Mzs0OTc4LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJdm1jc193cml0ZTY0KFhTU19FWElUX0JJVE1BUCwgVk1YX1hTU19FWElUX0JJVE1BUCk7CiAKIAlpZiAoZW5hYmxlX3BtbCkgewotCQl2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2bXgtJmd0O3BtbF9wZykpOwomIzQzOwkJdm1jc193cml0ZTY0KFBNTF9BRERSRVNTLCBwYWdlX3RvX3BoeXModmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSkpOwogCQl2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7CiAJfQogCi0Jdm14X3dyaXRlX2VuY2xzX2JpdG1hcCgmYW1wO3ZteC0mZ3Q7dmNwdSwgTlVMTCk7CiYjNDM7CXZteF93cml0ZV9lbmNsc19iaXRtYXAodmNwdSwgTlVMTCk7CiAKIAlpZiAodm14X3B0X21vZGVfaXNfaG9zdF9ndWVzdCgpKSB7CiAJCW1lbXNldCgmYW1wO3ZteC0mZ3Q7cHRfZGVzYywgMCwgc2l6ZW9mKHZteC0mZ3Q7cHRfZGVzYykpOwpAQCAtNDk5NCwxMyAmIzQzOzQ5OTUsMTMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCXZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VTUCwgMCk7CiAJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTsKIAotCXZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZSgmYW1wO3ZteC0mZ3Q7dmNwdSwgMCk7CiYjNDM7CXZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZSh2Y3B1LCAwKTsKIAogCWlmIChjcHVfaGFzX3ZteF90cHJfc2hhZG93KCkpIHsKIAkJdm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsIDApOwotCQlpZiAoY3B1X25lZWRfdHByX3NoYWRvdygmYW1wO3ZteC0mZ3Q7dmNwdSkpCiYjNDM7CQlpZiAoY3B1X25lZWRfdHByX3NoYWRvdyh2Y3B1KSkKIAkJCXZtY3Nfd3JpdGU2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSLAotCQkJCSAgICAgX19wYSh2bXgtJmd0O3ZjcHUuYXJjaC5hcGljLSZndDtyZWdzKSk7CiYjNDM7CQkJCSAgICAgX19wYSh2Y3B1LSZndDthcmNoLmFwaWMtJmd0O3JlZ3MpKTsKIAkJdm1jc193cml0ZTMyKFRQUl9USFJFU0hPTEQsIDApOwogCX0KIApAQCAtNTAxMSw3ICYjNDM7NTAxMiw3IEBAIHN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCi0JaW5pdF92bWNzKHZteCk7CiYjNDM7CWluaXRfdm1jcyh2Y3B1KTsKIAogCWlmIChuZXN0ZWQgJmFtcDsmYW1wOwogCSAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtJmd0O2t2bSwgS1ZNX1g4Nl9RVUlSS19TVFVGRl9GRUFUVVJFX01TUlMpKQpAQCAtNjQxOCw0OCAmIzQzOzY0MTksMjUgQEAgdm9pZCB2bXhfZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKQogCQkqZXJyb3JfY29kZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IHZjcHVfdm14ICp2bXgpCiYjNDM7c3RhdGljIHZvaWQgdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKHZteC0mZ3Q7cG1sX3BnKSB7Ci0JCV9fZnJlZV9wYWdlKHZteC0mZ3Q7cG1sX3BnKTsKLQkJdm14LSZndDtwbWxfcGcgPSBOVUxMOwomIzQzOwlpZiAodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSkgewomIzQzOwkJX19mcmVlX3BhZ2UodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSk7CiYjNDM7CQl2Y3B1LSZndDthcmNoLnBtbF9wYWdlID0gTlVMTDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHZteF9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1MTYgcG1sX2lkeCwgcG1sX3RhaWxfaW5kZXg7Ci0JdTY0ICpwbWxfYnVmOwotCWludCBpOwomIzQzOwl1MTYgcG1sX2lkeDsKIAogCXBtbF9pZHggPSB2bWNzX3JlYWQxNihHVUVTVF9QTUxfSU5ERVgpOwogCiAJLyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovCiAJaWYgKHBtbF9pZHggPT0gUE1MX0hFQURfSU5ERVgpCiAJCXJldHVybjsKLQkvKgotCSAqIFBNTCBpbmRleCBhbHdheXMgcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBQTUwgYnVmZmVyIGVudGl0eQotCSAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuCi0JICovCi0JcG1sX3RhaWxfaW5kZXggPSAocG1sX2lkeCAmZ3Q7PSBQTUxfTE9HX05SX0VOVFJJRVMpID8gMCA6IHBtbF9pZHggJiM0MzsgMTsKLQotCS8qCi0JICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMQotCSAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLgotCSAqCi0JICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXQKLQkgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLgotCSAqLwotCXBtbF9idWYgPSBwYWdlX2FkZHJlc3Modm14LSZndDtwbWxfcGcpOwogCi0JZm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgJmd0Oz0gcG1sX3RhaWxfaW5kZXg7IGktLSkgewotCQl1NjQgZ3BhOwotCi0JCWdwYSA9IHBtbF9idWZbaV07Ci0JCVdBUk5fT04oZ3BhICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7Ci0JCWt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0JfQomIzQzOwlrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBwbWxfaWR4KTsKIAogCS8qIHJlc2V0IFBNTCBpbmRleCAqLwogCXZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTsKQEAgLTc2NDgsNyAmIzQzOzc2MjYsNyBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCiAJaWYgKGVuYWJsZV9wbWwpCi0JCXZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTsKJiM0MzsJCXZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7CiAJZnJlZV92cGlkKHZteC0mZ3Q7dnBpZCk7CiAJbmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7CiAJZnJlZV9sb2FkZWRfdm1jcyh2bXgtJmd0O2xvYWRlZF92bWNzKTsKQEAgLTc2ODAsOCAmIzQzOzc2NTgsOCBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBmb3IgdGhlIGd1ZXN0KSwgZXRjLgogCSAqLwogCWlmIChlbmFibGVfcG1sKSB7Ci0JCXZteC0mZ3Q7cG1sX3BnID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTsKLQkJaWYgKCF2bXgtJmd0O3BtbF9wZykKJiM0MzsJCXZjcHUtJmd0O2FyY2gucG1sX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pOwomIzQzOwkJaWYgKCF2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQogCQkJZ290byBmcmVlX3ZwaWQ7CiAJfQogCkBAIC03NzUyLDcgJiM0Mzs3NzMwLDcgQEAgaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBmcmVlX3ZtY3M6CiAJZnJlZV9sb2FkZWRfdm1jcyh2bXgtJmd0O2xvYWRlZF92bWNzKTsKIGZyZWVfcG1sOgotCXZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTsKJiM0MzsJdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTsKIGZyZWVfdnBpZDoKIAlmcmVlX3ZwaWQodm14LSZndDt2cGlkKTsKIAlyZXR1cm4gZXJyOwpAQCAtODQ0MCwyMSAmIzQzOzg0MTgsMTMgQEAgc3RhdGljIHZvaWQgdm14X3VwZGF0ZV9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yY2VfaW1tZWRpYXRlX2V4aXQKIH0KICNlbmRpZgogCi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCi0JaWYgKFdBUk5fT05fT05DRSghZW5hYmxlX3BtbCkpCi0JCXJldHVybjsKLQogCWd1YXJkKHZteF92bWNzMDEpKHZjcHUpOwogCi0JLyoKLQkgKiBOb3RlLCBucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nIGNhbiBiZSBjaGFuZ2VkIGNvbmN1cnJlbnQgd2l0aCB0aGlzCi0JICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc28KLQkgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS4KLQkgKi8KLQlpZiAoYXRvbWljX3JlYWQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O25yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpKQomIzQzOwlpZiAoZW5hYmxlKQogCQlzZWNvbmRhcnlfZXhlY19jb250cm9sc19zZXRiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTsKIAllbHNlCiAJCXNlY29uZGFyeV9leGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li41ZjUwNWFkMTRkZGUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTI2NSwxMyAmIzQzOzI2NSw2IEBAIHN0cnVjdCB2Y3B1X3ZteCB7CiAJdW5zaWduZWQgaW50IHBsZV93aW5kb3c7CiAJYm9vbCBwbGVfd2luZG93X2RpcnR5OwogCi0JLyogU3VwcG9ydCBmb3IgUE1MICovCi0jZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFUwk1MTIKLQkvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqLwotI2RlZmluZSBQTUxfSEVBRF9JTkRFWAkJKFBNTF9MT0dfTlJfRU5UUklFUy0xKQotCi0Jc3RydWN0IHBhZ2UgKnBtbF9wZzsKLQogCS8qIGFwaWMgZGVhZGxpbmUgdmFsdWUgaW4gaG9zdCB0c2MgKi8KIAl1NjQgaHZfZGVhZGxpbmVfdHNjOwogCkBAIC0zOTcsNyAmIzQzOzM5MCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIGd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAotdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOwogCiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTsKIGJvb2wgdm14X2lzX3ZhbGlkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsIGJvb2wgaG9zdF9pbml0aWF0ZWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCAwNTRmZDE0YmIyZTE2Li40ODEwZjliMWIwZmM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCB1NjQgdm14X2dldF9sMl90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2bXhfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2bXhfd3JpdGVfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiBpbnQgdm14X3NldF9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF9kZWFkbGluZV90c2MsCiAJCSAgICAgYm9vbCAqZXhwaXJlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMzk0MSw2ICYjNDM7Mzk0MSwzNyBAQCB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCkKIAkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIH0KIAomIzQzO3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeCkKJiM0Mzt7CiYjNDM7CXUxNiBwbWxfdGFpbF9pbmRleDsKJiM0MzsJdTY0ICpwbWxfYnVmOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5CiYjNDM7CSAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuCiYjNDM7CSAqLwomIzQzOwlwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4ICZndDs9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCAmIzQzOyAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExCiYjNDM7CSAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLgomIzQzOwkgKgomIzQzOwkgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdAomIzQzOwkgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLgomIzQzOwkgKi8KJiM0MzsJcG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgJmd0Oz0gcG1sX3RhaWxfaW5kZXg7IGktLSkgewomIzQzOwkJdTY0IGdwYTsKJiM0MzsKJiM0MzsJCWdwYSA9IHBtbF9idWZbaV07CiYjNDM7CQlXQVJOX09OX09OQ0UoZ3BhICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7CiYjNDM7CQlrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZmx1c2hfcG1sX2J1ZmZlcik7CiYjNDM7CiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCQkJICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKQogewpAQCAtODA0Miw2ICYjNDM7ODA3MywyMSBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZWxvYWRfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX3g4Nl9jYWxsKHNldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIpKHZjcHUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBOb3RlLCBucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nIGNhbiBiZSBjaGFuZ2VkIGNvbmN1cnJlbnQgd2l0aCB0aGlzCiYjNDM7CSAqIGNvZGUsIGJ1dCBpbiB0aGF0IGNhc2UgYW5vdGhlciB1cGRhdGUgcmVxdWVzdCB3aWxsIGJlIG1hZGUgYW5kIHNvCiYjNDM7CSAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBlbmFibGUgPSBhdG9taWNfcmVhZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jcHVfZGlydHlfbG9nX3NpemUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1LCBlbmFibGUpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDYWxsZWQgd2l0aGluIGt2bS0mZ3Q7c3JjdSByZWFkIHNpZGUuCiAgKiBSZXR1cm5zIDEgdG8gbGV0IHZjcHVfcnVuKCkgY29udGludWUgdGhlIGd1ZXN0IGV4ZWN1dGlvbiBsb29wIHdpdGhvdXQKQEAgLTgyMDgsNyAmIzQzOzgyNTQsNyBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkJa3ZtX3g4Nl9jYWxsKHJlY2FsY19pbnRlcmNlcHRzKSh2Y3B1KTsKIAogCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfQ1BVX0RJUlRZX0xPR0dJTkcsIHZjcHUpKQotCQkJa3ZtX3g4Nl9jYWxsKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykodmNwdSk7CiYjNDM7CQkJa3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTsKIAogCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFLCB2Y3B1KSkgewogCQkJa3ZtX3ZjcHVfcmVzZXQodmNwdSwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmQ3NDdjMjA5NjVjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtOTAwLDQgJiM0Mzs5MDAsMTEgQEAgaW50IF9fX19rdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3BsLAogCiBpbnQga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKJiM0MzsvKiBTdXBwb3J0IGZvciBQTUwgKi8KJiM0MzsjZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFUwk1MTIKJiM0MzsvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqLwomIzQzOyNkZWZpbmUgUE1MX0hFQURfSU5ERVgJCShQTUxfTE9HX05SX0VOVFJJRVMtMSkKJiM0MzsKJiM0Mzt2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpOwomIzQzOwogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYxNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBBTUQgUE1MIFN1cHBvcnQgaW4gS1ZNIFNWTSoqCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGFkZGluZyBLTVNBTiB0byB0aGUgZnV6emluZyBzZXR1cCBpcyB3YXJyYW50ZWQsIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBpcyBhZGRpbmcgQU1EIFBNTCBzdXBwb3J0IHdpdGhpbiBLVk0gU1ZNIGFuZCByZWZhY3RvcmluZyBzb21lIFBNTCBjb2RlIGJldHdlZW4gVk1YIGFuZCB0aGUgY29tbW9uIHg4NiBLVk0uCgpMZXQgbWUgYnJlYWsgZG93biB0aGUgY2hhbmdlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGludm9sdmVzOgoKKiAgIEFkZGluZyB0aGUgYFg4Nl9GRUFUVVJFX1BNTGAgZmxhZy4KKiAgIE1vdmluZyB0aGUgYHBtbF9wYWdlYCBwb2ludGVyIGludG8gdGhlIGBrdm1fdmNwdV9hcmNoYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgc2lnbmlmaWNhbnQsIGFzIGl0IG5vdyBiZWNvbWVzIHBlci1WQ1BVIHN0YXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhZ2UgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIHplcm9lZCwgb3IgaWYgaXQgbWlnaHQgY29udGFpbiBzdGFsZSBkYXRhLiBUaGF0IGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLgoqICAgQWRkaW5nIGBwbWxfYWRkcmAgYW5kIGBwbWxfaW5kZXhgIHRvIHRoZSBgdm1jYl9jb250cm9sX2FyZWFgLiBUaGVzZSBhZGRpdGlvbnMgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5IGRldGVybWluZSB3aGVyZSB0aGUgUE1MIGRhdGEgd2lsbCBiZSBzdG9yZWQgYW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIHdpdGhpbiB0aGUgYnVmZmVyLiBUaGUgYHBtbF9pbmRleGAgYW5kIGFzc29jaWF0ZWQgb2Zmc2V0cyBhcmUga2V5IGFyZWFzIGZvciBwb3RlbnRpYWwgZXJyb3JzLCBzdWNoIGFzIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGluY29ycmVjdCBpbmRleGluZy4KKiAgIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFNWTV9FWElUX1BNTF9GVUxMYC4gVGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBleGl0IGZyb20gdGhlIGd1ZXN0LiBUaGlzIGV4aXQgaGFuZGxlciBhbmQgYXNzb2NpYXRlZCBkYXRhIG5lZWQgc3BlY2lhbCBhdHRlbnRpb24uCiogICBUaGUgYG1vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpO2AgYW5kIHN1YnNlcXVlbnQgdXNhZ2Ugc3VnZ2VzdHMgYSBydW50aW1lIHN3aXRjaCBmb3IgZW5hYmxpbmcgUE1MLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGVzdGluZyBzdHJhdGVnaWVzLgoqICAgVGhlIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGNhbGwgaW4gYHN2bV92Y3B1X2NyZWF0ZWAgaXMgaW1wb3J0YW50LiBUaGlzIGlzIHdoZXJlIHRoZSBwYWdlIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZDogSXMgaXQgemVyb2VkPyBJZiBub3QsIGlzIHRoZXJlIG90aGVyIGluaXRpYWxpemF0aW9uPwoqICAgVGhlIGBzdm1fZmx1c2hfcG1sX2J1ZmZlcmAgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBga3ZtX2ZsdXNoX3BtbF9idWZmZXJgIGFyZSB2aXRhbC4gVGhpcyBpcyB0aGUgZmx1c2hpbmcgbWVjaGFuaXNtLiBUaGlzIGNvZGUgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsbHkgcmV2aWV3ZWQuCiogICBIYW5kbGluZyBvZiBgU1ZNX0VYSVRfUE1MX0ZVTExgIGV4aXRzLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgUE1MIGZ1bmN0aW9uYWxpdHkuIEVycm9ycyBpbiB0aGlzIGFyZWEgbWlnaHQgbGVhZCB0byBndWVzdCBjcmFzaGVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoqICAgVGhlIHVzZSBvZiBgY3B1X2RpcnR5X2xvZ19zaXplYCBhbmQgaXRzIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIFBNTCBiZWluZyBlbmFibGVkIGlzIGEgY3JpdGljYWwgZmFjdG9yIGZvciBkZXRlY3Rpbmcgd2hpY2ggY29kZSBwYXRocyBhcmUgZ29pbmcgdG8gYmUgZW5hYmxlZC4KCk5vdywgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBhbGxvY2F0aW9uIG9mIGB2Y3B1LSZndDthcmNoLnBtbF9wYWdlYC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIG1lbW9yeSB1c2luZyBncmVwcGVyIG9yIGJ5IHJlYWRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZS4gVGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBoaW5nZSBvbiB3aGV0aGVyIHRoaXMgYWxsb2NhdGVkIHBhZ2UgaXMgY29ycmVjdGx5IHNhbml0aXplZCBvciBpZiB1bmluaXRpYWxpemVkIGRhdGEgbWlnaHQgYmUgcHJlc2VudC4gSW4gcGFydGljdWxhciwgSSBtdXN0IHVuZGVyc3RhbmQgdGhlIGJlaGF2aW91ciB3aXRoIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfc2FmZV9hbGxvY19wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTQ4Nz1pbnQgc3ZtX2FsbG9jYXRlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE0OTMtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE0OTQ6XHR2bWNiMDJfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTQ5NS1cdGlmICghdm1jYjAyX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODYyPWludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3NS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODc2Olx0dm1zYV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc3LVx0aWYgKCF2bXNhX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTQ4PXZvaWQgc2V2X3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5ODU6c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTYxOT1zdGF0aWMgaW50IHN2bV9jcHVfaW5pdChpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI1LVx0bWVtc2V0KHNkLCAwLCBzaXplb2Yoc3RydWN0IHN2bV9jcHVfZGF0YSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo2MjY6XHRzYXZlX2FyZWFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShjcHVfdG9fbm9kZShjcHUpLCBHRlBfS0VSTkVMKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI3LVx0aWYgKCFzYXZlX2FyZWFfcGFnZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTEzMzU9c3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0NC1cdGVyciA9IC1FTk9NRU07XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjEzNDU6XHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0Ni1cdGlmICghdm1jYjAxX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzQ5LVx0aWYgKHBtbCkge1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxMzUwOlx0XHR2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNTEtXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTQxND1zdGF0aWMgdm9pZCAqc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNS17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTY6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNy1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5Mz1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5NzpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5OTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTkte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAwOlx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDIwPXZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIxLSNlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjMte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyNi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjgte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI5Olx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTAzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCoqCgpPa2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgZW52aXJvbm1lbnQsIGFzIHRoaXMgaXMgaG93IEtWTSBoYW5kbGVzIHRoZSBwcm90ZWN0ZWQgVk1zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG5vZGUgYWxsb2NhdGlvbiwgYXMgU0VWIGRlYWxzIHdpdGggbWVtb3J5IGVuY3J5cHRpb24gYW5kIGludGVncml0eSBwcm90ZWN0aW9uIGFuZCB0aGlzIGNhbiBncmVhdGx5IGltcGFjdCBob3cgd2UgaGFuZGxlIHBhZ2UgYWxsb2NhdGlvbi4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3I6CgoqICAgKipQYWdlIFR5cGU6KiogSXMgaXQgYWxsb2NhdGluZyByZWd1bGFyIHBhZ2VzLCBvciBhcmUgdGhlcmUgc3BlY2lhbCBmbGFncyByZWxhdGVkIHRvIFNFViwgc3VjaCBhcyBtZW1vcnkgZW5jcnlwdGlvbiBlbmFibGVtZW50LgoqICAgKipNZW1vcnkgTm9kZToqKiBIb3cgaXMgaXQgZGVhbGluZyB3aXRoIE5VTUEgbm9kZXM/IFNFViBjYW4gaW50cm9kdWNlIGNvbXBsZXhpdGllcyBoZXJlIHNpbmNlIHBhZ2UgcGxhY2VtZW50IG1hdHRlcnMgZm9yIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbm9kZSBhbGxvY2F0aW9uLCBhbnkgY29uc2lkZXJhdGlvbnMgcmVnYXJkaW5nIHRoZSBtZW1vcnkgcG9saWN5IGFuZCB0aGUgY3VycmVudCBOVU1BIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4KKiAgICoqU2FmZXR5OioqIFRoZSBmdW5jdGlvbiBuYW1lIGluY2x1ZGVzICYjMzQ7c2FmZSwmIzM0OyBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2hlY2tzIG9yIG1pdGlnYXRpb25zIHJlbGF0ZWQgdG8gcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgYWxsb2NhdGlvbiBmYWlsdXJlcywgb3Igb3RoZXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgY3JpdGljYWwgaW4gYSBTRVYgZW52aXJvbm1lbnQuIFRoaXMgZnVuY3Rpb24gbXVzdCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBncmFjZWZ1bGx5IGFzIHRob3NlIGNhbiBsZWFrIGluZm9ybWF0aW9uIGFib3V0IHRoZSBWTS4KKiAgICoqU0VWIENvbnRleHQ6KiogSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBTRVYtc3BlY2lmaWMgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgdGhhdCBpdCBtYXkgYmUgdXNpbmcgdG8gbWFuYWdlIGVuY3J5cHRlZCBtZW1vcnkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIEFNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gZmVhdHVyZXMuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBjb2RlLCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIEtWTSYjMzk7cyBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgdGhlIHBhcnRpY3VsYXIgbnVhbmNlcyB0aGF0IFNFViBicmluZ3MgdG8gdGhlIHRhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5ODU6XHRzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG40OTg2Olx0e1xuNDk4NzpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG40OTg4Olx0XHRzdHJ1Y3QgcGFnZSAqcDtcbjQ5ODk6XHRcbjQ5OTA6XHRcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbjQ5OTE6XHRcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfWkVSTywgMCk7XG40OTkyOlx0XG40OTkzOlx0XHQvKlxuNDk5NDpcdFx0ICogQWxsb2NhdGUgYW4gU05QLXNhZmUgcGFnZSB0byB3b3JrYXJvdW5kIHRoZSBTTlAgZXJyYXR1bSB3aGVyZVxuNDk5NTpcdFx0ICogdGhlIENQVSB3aWxsIGluY29ycmVjdGx5IHNpZ25hbCBhbiBSTVAgdmlvbGF0aW9uICNQRiBpZiBhXG40OTk2Olx0XHQgKiBodWdlcGFnZSAoMk1CIG9yIDFHQikgY29sbGlkZXMgd2l0aCB0aGUgUk1QIGVudHJ5IG9mIGFcbjQ5OTc6XHRcdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIFBNTCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbjQ5OTg6XHRcdCAqXG40OTk5Olx0XHQgKiBBbGxvY2F0ZSBvbmUgZXh0cmEgcGFnZSwgY2hvb3NlIGEgcGFnZSB3aGljaCBpcyBub3RcbjUwMDA6XHRcdCAqIDJNQi1hbGlnbmVkLCBhbmQgZnJlZSB0aGUgb3RoZXIuXG41MDAxOlx0XHQgKi9cbjUwMDI6XHRcdHAgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDEpO1xuNTAwMzpcdFx0aWYgKCFwKVxuNTAwNDpcdFx0XHRyZXR1cm4gTlVMTDtcbjUwMDU6XHRcbjUwMDY6XHRcdHNwbGl0X3BhZ2UocCwgMSk7XG41MDA3Olx0XG41MDA4Olx0XHRwZm4gPSBwYWdlX3RvX3BmbihwKTtcbjUwMDk6XHRcdGlmIChJU19BTElHTkVEKHBmbiwgUFRSU19QRVJfUE1EKSlcbjUwMTA6XHRcdFx0X19mcmVlX3BhZ2UocCYjNDM7JiM0MzspO1xuNTAxMTpcdFx0ZWxzZVxuNTAxMjpcdFx0XHRfX2ZyZWVfcGFnZShwICYjNDM7IDEpO1xuNTAxMzpcdFxuNTAxNDpcdFx0cmV0dXJuIHA7XG41MDE1Olx0fVxuNTAxNjpcdFxuNTAxNzpcdHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuNTAxODpcdHtcbjUwMTk6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG41MDIwOlx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjUwMjE6XHRcdGludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7XG41MDIyOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUwMjM6XHRcdGJvb2wgYXNzaWduZWQ7XG41MDI0Olx0XHRrdm1fcGZuX3QgcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAzMQoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA4NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBBTUQgUE1MIFN1cHBvcnQgYW5kIFJlZmFjdG9yaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgY2VudGVyZWQgYXJvdW5kIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGUgaW50cm9kdWN0aW9uIG9mIEFNRCBQTUwgc3VwcG9ydCBhbmQgdGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBQTUwgZmx1c2ggbG9naWMuIEkgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHdlIHdlcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgYXZlbnVlcyBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGNyZWF0aW5nIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuCgpGaXJzdCwgSSBsb29rZWQgYXQgaG93IHRoZSBtZW1vcnkgZm9yIHRoZXNlIFBNTCBidWZmZXJzIGlzIGhhbmRsZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgZHVyaW5nIGFsbG9jYXRpb24gKGBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pYCBpbiBWTVggYW5kIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGVsc2V3aGVyZSkuIFNvLCB0aGUgUE1MIHBhZ2UgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgYWxsZXZpYXRlcyBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgbXkgd29ycmllcy4gVGhlIGhhcmR3YXJlIGl0c2VsZiBsb2dzIEdQQXMgaW50byB0aGlzIHByZS16ZXJvZWQgcGFnZSB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgYWN0aXZlLgoKTmV4dCwgSSB3ZW50IHRocm91Z2ggYSBjaGVja2xpc3Qgb2YgcG90ZW50aWFsIEtNU0FOIHRyaWdnZXJzOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm9wZS4gTm8gbmV3IGlvY3RsIHN0cnVjdHVyZXMsIGBjb3B5X3RvX3VzZXJgIGNhbGxzLCBOZXRsaW5rIG1lc3NhZ2VzLCBvciBzb2NrZXQgb3B0aW9ucyBhcmUgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdGhpcy4gVGhlIGxvZ2ljIGZsb3cgYXBwZWFycyB0byBiZSBzb3VuZCwgd2l0aCBubyBkZWNpc2lvbi1tYWtpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgZ2FyYmFnZSB2YWx1ZXMuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzcz8qKiBBZ2Fpbiwgbm8uIFRoZSBhbGxvY2F0ZWQgcGFnZSBpcyBmdWxseSBpbml0aWFsaXplZC4KNC4gICoqQm91bmRzIGNoZWNrcy9sZW5ndGggaXNzdWVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcz8qKiBUaGUgY29kZSBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBhbnkgc3VjaCB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgYGt2bV9mbHVzaF9wbWxfYnVmZmVyYCBmdW5jdGlvbiwgbW92ZWQgZnJvbSBgdm14X2ZsdXNoX3BtbF9idWZmZXJgLCBpdGVyYXRlcyBiYWNrd2FyZCB0aHJvdWdoIHRoZSBQTUwgYnVmZmVyLCByZWFkaW5nIHRoZSBsb2dnZWQgR1BBcy4gVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgbWVtb3J5IGhhcyBiZWVuIGV4cGxpY2l0bHkgemVyb2VkIGF0IGFsbG9jYXRpb24gdGltZS4KCkdpdmVuIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBQTUwgYnVmZmVycywgdGhlIGFic2VuY2Ugb2Yga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgZXhwb3N1cmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkgYW5kIEtWTSYjMzk7cyBvd24gdW5pdCB0ZXN0cyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIGJvdW5kcywgcGFnZSBtYW5hZ2VtZW50LCBhbmQgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBmdW5jdGlvbiBpcyBzaW1wbHkgdGhlIGxvZ2dpbmcgb2YgdmFsaWQgR1BBcyBpbnRvIGEgemVyb2VkIG1lbW9yeSBhcmVhOyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQU1EIFNWTSBzdXBwb3J0IGZvciBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGFuZCBjb25zb2xpZGF0ZXMgc2hhcmVkIFBNTCBoYW5kbGluZyBsb2dpYyBiZXR3ZWVuIEludGVsIFZNWCBhbmQgQU1EIFNWTS5cblxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXG5cbkFsbCBhbGxvY2F0ZWQgUE1MIGJ1ZmZlciBwYWdlcyBhcmUgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIHZpYSBgX19HRlBfWkVST2AgKGluIGBhbGxvY19wYWdlYCBhbmQgYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChlLmcuIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCBvdXRwdXRzKSwgZG8gbm90IGxlYXZlIGFueSBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29udHJvbC1mbG93IGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb247IHN0YW5kYXJkIEtBU0FOIGFuZCBmdW5jdGlvbmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEwOjUyLjI1MzU4NjA2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTkxMDQxNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2ZsdXNoX3BtbF9idWZmZXJcIixcbiAgICBcImt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJwbWxfZnVsbF9pbnRlcmNlcHRpb25cIixcbiAgICBcIm5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsXCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbFwiLFxuICAgIFwidm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ1wiLFxuICAgIFwidm14X2ZsdXNoX3BtbF9idWZmZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXFxuXFxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgZGlydHkgbG9nZ2luZyBzdXBwb3J0IGZvciBBTUQgU1ZNIGFuZCByZWZhY3RvcnMgdGhlIHNoYXJlZCBQTUwgYnVmZmVyIGZsdXNoaW5nIGFuZCBkaXJ0eSBsb2dnaW5nIHN0YXRlIG1hY2hpbmUgYWNyb3NzIHg4NiBLVk0sIEludGVsIFZNWCwgYW5kIEFNRCBTVk0uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29kZSBwYXRocyBpbiBLVk0gYW5kIGFmZmVjdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIGV4aXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEwOjUyLjI1MzU5Mjg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI1MjE4NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThiNTMxMjc3OWRkNjRkYmM2MzExYTIzNmZkMjYwYTM0OTM4MWRkNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uY2JmY2M2NmExOGU5YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbkBAIC0yMzgsNiArMjM4LDcgQEBcXG4gLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzIrMjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXFx0XFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFxcdFxcdCggOCozMisyMikgLyogXFxcInRkeF9ndWVzdFxcXCIgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cXG4rI2RlZmluZSBYODZfRkVBVFVSRV9QTUxcXHRcXHRcXHQoIDgqMzIrMjMpIC8qIEFNRCBQYWdlIE1vZGlmaWNhdGlvbiBsb2dnaW5nICovXFxuIFxcbiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwNzowIChFQlgpLCB3b3JkIDkgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9GU0dTQkFTRVxcdFxcdCggOSozMisgMCkgLyogXFxcImZzZ3NiYXNlXFxcIiBSREZTQkFTRSwgV1JGU0JBU0UsIFJER1NCQVNFLCBXUkdTQkFTRSBpbnN0cnVjdGlvbnMqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDNhZjczOTVjMjQzMGEuLjJkZWJmNjI5NDI5MDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNzg5LDYgKzc4OSw4IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfZXh0ZXJuYWxfc3B0X2NhY2hlO1xcbiBcXG4rXFx0c3RydWN0IHBhZ2UgKnBtbF9wYWdlO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUUVNVSB1c2Vyc3BhY2UgYW5kIHRoZSBndWVzdCBlYWNoIGhhdmUgdGhlaXIgb3duIEZQVSBzdGF0ZS5cXG4gXFx0ICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuXFxuQEAgLTE2NzAsNyArMTY3Miw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTtcXG4gXFx0dm9pZCAoKmhhbmRsZV9leGl0X2lycW9mZikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuLVxcdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK1xcdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xcbiBcXG4gXFx0dm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5pbmRleCBhYTYzNDMxYmE5MmMzLi5lMGE3NTQ5YTdjNzI3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5AQCAtMTY1LDcgKzE2NSwxMCBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XFxuIFxcdHU4IHJlc2VydmVkXzlbMjJdO1xcbiBcXHR1NjQgYWxsb3dlZF9zZXZfZmVhdHVyZXM7XFx0LyogT2Zmc2V0IDB4MTM4ICovXFxuIFxcdHU2NCBndWVzdF9zZXZfZmVhdHVyZXM7XFx0XFx0LyogT2Zmc2V0IDB4MTQwICovXFxuLVxcdHU4IHJlc2VydmVkXzEwWzY2NF07XFxuK1xcdHU4IHJlc2VydmVkXzEwWzEyOF07XFxuK1xcdHU2NCBwbWxfYWRkcjtcXHRcXHRcXHQvKiBPZmZzZXQgMHgxYzggKi9cXG4rXFx0dTE2IHBtbF9pbmRleDtcXHRcXHRcXHQvKiBPZmZzZXQgMHgxZDAgKi9cXG4rXFx0dTggcmVzZXJ2ZWRfMTFbNTI2XTtcXG4gXFx0LypcXG4gXFx0ICogT2Zmc2V0IDB4M2UwLCAzMiBieXRlcyByZXNlcnZlZFxcbiBcXHQgKiBmb3IgdXNlIGJ5IGh5cGVydmlzb3Ivc29mdHdhcmUuXFxuQEAgLTI0MCwxMCArMjQzLDExIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcXG4gI2RlZmluZSBTVk1fSU9JT19TSVpFX01BU0sgKDcgXFx1MDAzY1xcdTAwM2MgU1ZNX0lPSU9fU0laRV9TSElGVClcXG4gI2RlZmluZSBTVk1fSU9JT19BU0laRV9NQVNLICg3IFxcdTAwM2NcXHUwMDNjIFNWTV9JT0lPX0FTSVpFX1NISUZUKVxcbiBcXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcXHRcXHRCSVQoMClcXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXFx0XFx0QklUKDEpXFxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1xcdEJJVCgyKVxcbi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUXFx0QklUKDMpXFxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXFx0XFx0QklUX1VMTCgwKVxcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZcXHRcXHRCSVRfVUxMKDEpXFxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1xcdFxcdEJJVF9VTEwoMilcXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFxcdFxcdEJJVF9VTEwoMylcXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfUE1MXFx0XFx0QklUX1VMTCgxMSlcXG4gXFxuICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUlxcdEJJVF9VTEwoMClcXG4gI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfVk1MT0FEX1ZNU0FWRVxcdEJJVF9VTEwoMSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcXG5pbmRleCAwMTBhNDVjOWY2MTQ3Li5lODA2NzYxODUwOTIxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXFxuQEAgLTEwMSw2ICsxMDEsNyBAQFxcbiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfSU5DT01QTEVURV9JUElcXHRcXHQweDQwMVxcbiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1NcXHQweDQwMlxcbiAjZGVmaW5lIFNWTV9FWElUX1ZNR0VYSVQgICAgICAgMHg0MDNcXG4rI2RlZmluZSBTVk1fRVhJVF9QTUxfRlVMTFxcdDB4NDA3XFxuIFxcbiAvKiBTRVYtRVMgc29mdHdhcmUtZGVmaW5lZCBWTUdFWElUIGV2ZW50cyAqL1xcbiAjZGVmaW5lIFNWTV9WTUdFWElUX01NSU9fUkVBRFxcdFxcdFxcdDB4ODAwMDAwMDF1bGxcXG5AQCAtMjM2LDYgKzIzNyw3IEBAXFxuIFxcdHsgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSSxcXHRcXHRcXFwiYXZpY19pbmNvbXBsZXRlX2lwaVxcXCIgfSwgXFxcXFxcbiBcXHR7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgXFxcImF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NcXFwiIH0sIFxcXFxcXG4gXFx0eyBTVk1fRVhJVF9WTUdFWElULFxcdFxcdFxcXCJ2bWdleGl0XFxcIiB9LCBcXFxcXFxuK1xcdHsgU1ZNX0VYSVRfUE1MX0ZVTEwsXFx0XFx0XFxcInBtbF9mdWxsXFxcIiB9LCBcXFxcXFxuIFxcdHsgU1ZNX1ZNR0VYSVRfTU1JT19SRUFELFxcdFxcXCJ2bWdleGl0X21taW9fcmVhZFxcXCIgfSwgXFxcXFxcbiBcXHR7IFNWTV9WTUdFWElUX01NSU9fV1JJVEUsXFx0XFxcInZtZ2V4aXRfbW1pb193cml0ZVxcXCIgfSwgXFxcXFxcbiBcXHR7IFNWTV9WTUdFWElUX05NSV9DT01QTEVURSxcXHRcXFwidm1nZXhpdF9ubWlfY29tcGxldGVcXFwiIH0sIFxcXFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5iMThjYzljODhkZDU3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuQEAgLTU1LDYgKzU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9GQVNUX0NQUEMsXFx0XFx0Q1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0NQUENfUEVSRl9QUklPLFxcdFxcdENQVUlEX0VEWCwgMTYsIDB4ODAwMDAwMDcsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9NQkEsXFx0XFx0XFx0Q1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LFxcbitcXHR7IFg4Nl9GRUFUVVJFX1BNTCxcXHRcXHRcXHRDUFVJRF9FQ1gsICA0LCAweDgwMDAwMDBhLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCxcXHRcXHRDUFVJRF9FQ1gsICA2LCAweDgwMDAwMDBhLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQ09IRVJFTkNZX1NGV19OTyxcXHRcXHRDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfU01CQSxcXHRcXHRcXHRDUFVJRF9FQlgsICAyLCAweDgwMDAwMDIwLCAwIH0sXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuaW5kZXggNzNmMzdiMDUwZDBhMC4uZGE0MTdjNGM1OTE1NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xcbkBAIC05MDEsNiArOTAxLDEzIEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHR2bWNiMDItXFx1MDAzZWNvbnRyb2wubXNycG1fYmFzZV9wYSA9IHZtY2IwMS1cXHUwMDNlY29udHJvbC5tc3JwbV9iYXNlX3BhO1xcbiBcXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX1BFUk1fTUFQKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuXFxuK1xcdCAqIHVuZXhwZWN0ZWQgUE1MIHdyaXRlIHdvdWxkIHRyaWdnZXIgYSBQTUxfRlVMTCBWTS1FeGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHBtbClcXG4rXFx0XFx0dm1jYjAyLVxcdTAwM2Vjb250cm9sLnBtbF9pbmRleCA9IC0xO1xcbitcXG4gXFx0LypcXG4gXFx0ICogU3Rhc2ggdm1jYjAyJ3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbid0IG1vdmVkIHBhc3QgdGhlIGd1aWx0eVxcbiBcXHQgKiBpbnN0cnVjdGlvbjsgb3RoZXJ3aXNlLCByZXNldCB0aGUgY291bnRlciB0byAnMCcuXFxuQEAgLTE4MjAsNiArMTgyNywxMyBAQCBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdFxcdGlmIChuZXN0ZWRfc3ZtX2lzX2wyX3RsYl9mbHVzaF9oY2FsbCh2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNWTV9FWElUX1BNTF9GVUxMOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbGwgUE1MIGZ1bGwgZXhpdHMgYXJlIGhhbmRsZWQgYnkgS1ZNLiAgS1ZNIGVtdWxhdGVzIFBNTCBpblxcbitcXHRcXHQgKiBzb2Z0d2FyZSBmb3IgTDEsIGJ1dCBuZXZlciBlbmFibGVzIFBNTCBpbiBoYXJkd2FyZSBvbiBiZWhhbGZcXG4rXFx0XFx0ICogb2YgTDEuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5jZmU5OTBmODA1MDQwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTQ5OTQsNyArNDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4gXFx0ICogQWxsb2NhdGUgYW4gU05QLXNhZmUgcGFnZSB0byB3b3JrYXJvdW5kIHRoZSBTTlAgZXJyYXR1bSB3aGVyZVxcbiBcXHQgKiB0aGUgQ1BVIHdpbGwgaW5jb3JyZWN0bHkgc2lnbmFsIGFuIFJNUCB2aW9sYXRpb24gI1BGIGlmIGFcXG4gXFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXFxuLVxcdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIG9yIEFWSUMgYmFja2luZyBwYWdlLlxcbitcXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBQTUwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuXFxuIFxcdCAqXFxuIFxcdCAqIEFsbG9jYXRlIG9uZSBleHRyYSBwYWdlLCBjaG9vc2UgYSBwYWdlIHdoaWNoIGlzIG5vdFxcbiBcXHQgKiAyTUItYWxpZ25lZCwgYW5kIGZyZWUgdGhlIG90aGVyLlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IDdkNTlkMzAxZTFlNTQuLjk1MGMyNTBhNzdiNTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG5AQCAtMTc5LDYgKzE3OSw5IEBAIG1vZHVsZV9wYXJhbSh2bm1pLCBib29sLCAwNDQ0KTtcXG4gXFxuIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcXG4gXFxuK2Jvb2wgX19yb19hZnRlcl9pbml0IHBtbCA9IHRydWU7XFxuK21vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpO1xcbitcXG4gc3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHN2bV9ncF9lcnJhdHVtX2ludGVyY2VwdCA9IHRydWU7XFxuIFxcbiBzdGF0aWMgdTggcnNtX2luc19ieXRlc1tdID0gXFxcIlxcXFx4MGZcXFxceGFhXFxcIjtcXG5AQCAtMTI2Nyw2ICsxMjcwLDIzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcXG4gXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcXG4gXFx0XFx0c3ZtX3NldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQlVTTE9DSyk7XFxuIFxcbitcXHRpZiAocG1sKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBvcHVsYXRlIHRoZSBwYWdlIGFkZHJlc3MgYW5kIGluZGV4IGhlcmUsIFBNTCBpcyBlbmFibGVkXFxuK1xcdFxcdCAqIHdoZW4gZGlydHkgbG9nZ2luZyBpcyBlbmFibGVkIG9uIHRoZSBtZW1zbG90IHRocm91Z2hcXG4rXFx0XFx0ICogc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZygpXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb250cm9sLVxcdTAwM2VwbWxfYWRkciA9ICh1NjQpX19zbWVfc2V0KHBhZ2VfdG9fcGh5cyh2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlKSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgVk1DQiBjb250cm9sIGFyZWEgcmVtYWlucyB2YWxpZCBhZnRlciBhbiBpbnRlcmNlcHRlZCBTSFVURE9XTlxcbitcXHRcXHQgKiAoQU1EIEFQTSBSZXYgMy40NSspLCBzbyBvbmx5IGluaXRpYWxpemUgUE1MIGluZGV4IG9uIHJlc2V0IHRvIGF2b2lkXFxuK1xcdFxcdCAqIGRpc2NhcmRpbmcgYWxyZWFkeS1sb2dnZWQgZW50cmllcyB0aGF0IGhhdmVuJ3QgYmVlbiBmbHVzaGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFpbml0X2V2ZW50KVxcbitcXHRcXHRcXHRjb250cm9sLVxcdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcXG4gXFx0XFx0c2V2X2luaXRfdm1jYihzdm0sIGluaXRfZXZlbnQpO1xcbiBcXG5AQCAtMTMyNiw5ICsxMzQ2LDE1IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCF2bWNiMDFfcGFnZSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRpZiAocG1sKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuK1xcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4rXFx0XFx0XFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xcbitcXHRcXHRnb3RvIGVycm9yX2ZyZWVfcG1sX3BhZ2U7XFxuIFxcbiBcXHRlcnIgPSBhdmljX2luaXRfdmNwdShzdm0pO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC0xMzUzLDYgKzEzNzksOSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBlcnJvcl9mcmVlX3NldjpcXG4gXFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcXG4rZXJyb3JfZnJlZV9wbWxfcGFnZTpcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpO1xcbiBlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcXG4gXFx0X19mcmVlX3BhZ2Uodm1jYjAxX3BhZ2UpO1xcbiBvdXQ6XFxuQEAgLTEzNzAsNiArMTM5OSw5IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcXG4gXFxuK1xcdGlmIChwbWwgXFx1MDAyNlxcdTAwMjYgdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4rXFx0XFx0X19mcmVlX3BhZ2UodmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSk7XFxuK1xcbiBcXHRfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS1cXHUwMDNldm1jYjAxLnBhKSk7XFxuIFxcdHN2bV92Y3B1X2ZyZWVfbXNycG0oc3ZtLVxcdTAwM2Vtc3JwbSk7XFxuIH1cXG5AQCAtMzM0NCw2ICszMzc2LDQ1IEBAIHN0YXRpYyBpbnQgdm1tY2FsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHZjcHUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuK1xcdHN0cnVjdCB2bWNiICp2bWNiMDEgPSBzdm0tXFx1MDAzZXZtY2IwMS5wdHI7XFxuK1xcbitcXHRpZiAoZW5hYmxlKVxcbitcXHRcXHR2bWNiMDEtXFx1MDAzZWNvbnRyb2wubWlzY19jdGwgfD0gU1ZNX01JU0NfRU5BQkxFX1BNTDtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2bWNiMDEtXFx1MDAzZWNvbnRyb2wubWlzY19jdGwgXFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9QTUw7XFxuK1xcbitcXHR2bWNiX21hcmtfZGlydHkodm1jYjAxLCBWTUNCX05QVCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHN2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK1xcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xcbitcXHRpZiAoY29udHJvbC1cXHUwMDNlcG1sX2luZGV4ID09IFBNTF9IRUFEX0lOREVYKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBjb250cm9sLVxcdTAwM2VwbWxfaW5kZXgpO1xcbitcXG4rXFx0LyogUmVzZXQgdGhlIFBNTCBpbmRleCAqL1xcbitcXHRjb250cm9sLVxcdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwbWxfZnVsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LVxcdTAwM2V2Y3B1X2lkKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBNTCBidWZmZXIgaXMgYWxyZWFkeSBmbHVzaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3ZtX2hhbmRsZV9leGl0KCkuXFxuK1xcdCAqIE5vdGhpbmcgdG8gZG8gaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcXG4gXFx0W1NWTV9FWElUX1JFQURfQ1IwXVxcdFxcdFxcdD0gY3JfaW50ZXJjZXB0aW9uLFxcbiBcXHRbU1ZNX0VYSVRfUkVBRF9DUjNdXFx0XFx0XFx0PSBjcl9pbnRlcmNlcHRpb24sXFxuQEAgLTM0MjEsNiArMzQ5Miw3IEBAIHN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuIFxcdFtTVk1fRVhJVF9WTUdFWElUXVxcdFxcdFxcdD0gc2V2X2hhbmRsZV92bWdleGl0LFxcbiAjZW5kaWZcXG4rXFx0W1NWTV9FWElUX1BNTF9GVUxMXVxcdFxcdFxcdD0gcG1sX2Z1bGxfaW50ZXJjZXB0aW9uLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMzQ3MCw4ICszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDE2bGx4XFxcXG5cXFwiLCBcXFwiZXhpdF9pbmZvMjpcXFwiLCBjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMik7XFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDh4XFxcXG5cXFwiLCBcXFwiZXhpdF9pbnRfaW5mbzpcXFwiLCBjb250cm9sLVxcdTAwM2VleGl0X2ludF9pbmZvKTtcXG4gXFx0cHJfZXJyKFxcXCIlLTIwcyUwOHhcXFxcblxcXCIsIFxcXCJleGl0X2ludF9pbmZvX2VycjpcXFwiLCBjb250cm9sLVxcdTAwM2VleGl0X2ludF9pbmZvX2Vycik7XFxuLVxcdHByX2VycihcXFwiJS0yMHMlbGxkXFxcXG5cXFwiLCBcXFwibWlzY19jdGw6XFxcIiwgY29udHJvbC1cXHUwMDNlbWlzY19jdGwpO1xcbitcXHRwcl9lcnIoXFxcIiUtMjBzJWxseFxcXFxuXFxcIiwgXFxcIm1pc2NfY3RsOlxcXCIsIGNvbnRyb2wtXFx1MDAzZW1pc2NfY3RsKTtcXG4gXFx0cHJfZXJyKFxcXCIlLTIwcyUwMTZsbHhcXFxcblxcXCIsIFxcXCJuZXN0ZWRfY3IzOlxcXCIsIGNvbnRyb2wtXFx1MDAzZW5lc3RlZF9jcjMpO1xcbitcXG4rXFx0aWYgKHBtbCkge1xcbitcXHRcXHRwcl9lcnIoXFxcIiUtMjBzJTAxNmxseFxcXFxuXFxcIiwgXFxcInBtbF9hZGRyOlxcXCIsIGNvbnRyb2wtXFx1MDAzZXBtbF9hZGRyKTtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlLTIwcyUwNHhcXFxcblxcXCIsIFxcXCJwbWxfaW5kZXg6XFxcIiwgY29udHJvbC1cXHUwMDNlcG1sX2luZGV4KTtcXG4rXFx0fVxcbitcXG4gXFx0cHJfZXJyKFxcXCIlLTIwcyUwMTZsbHhcXFxcblxcXCIsIFxcXCJhdmljX3ZhcGljX2JhcjpcXFwiLCBjb250cm9sLVxcdTAwM2VhdmljX3ZhcGljX2Jhcik7XFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDE2bGx4XFxcXG5cXFwiLCBcXFwiZ2hjYjpcXFwiLCBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSk7XFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDh4XFxcXG5cXFwiLCBcXFwiZXZlbnRfaW5qOlxcXCIsIGNvbnRyb2wtXFx1MDAzZWV2ZW50X2luaik7XFxuQEAgLTM2NDksNiArMzcyNywxMyBAQCBpbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpXFxuIFxcdCAgICAodTY0KWV4aXRfY29kZSAhPSBfX2V4aXRfY29kZSlcXG4gXFx0XFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsXFxuK1xcdCAqIGV4aXQgb2NjdXJzIGFzIHNvbWV0aGluZyBpcyBob3JyaWJseSB3cm9uZy5cXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2IGV4aXRfY29kZSA9PSBTVk1fRVhJVF9QTUxfRlVMTCkpXFxuK1xcdFxcdGdvdG8gdW5leHBlY3RlZF92bWV4aXQ7XFxuK1xcbiAjaWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXFxuIFxcdGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfTVNSKVxcbiBcXHRcXHRyZXR1cm4gbXNyX2ludGVyY2VwdGlvbih2Y3B1KTtcXG5AQCAtMzcxNyw2ICszODAyLDE0IEBAIHN0YXRpYyBpbnQgc3ZtX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0c3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuIFxcbitcXHQvKlxcbitcXHQgKiBPcHBvcnR1bmlzdGljYWxseSBmbHVzaCB0aGUgUE1MIGJ1ZmZlciBvbiBWTSBleGl0LiBUaGlzIGtlZXBzIHRoZVxcbitcXHQgKiBkaXJ0eSBiaXRtYXAgY3VycmVudCBieSBwcm9jZXNzaW5nIGxvZ2dlZCBHUEFzIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yXFxuK1xcdCAqIFBNTF9GVUxMIGV4aXQuXFxuK1xcdCAqL1xcbitcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSBcXHUwMDI2XFx1MDAyNiAhaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcXG4rXFx0XFx0c3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkoZXhpdF9mYXN0cGF0aCA9PSBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC01MzExLDYgKzU0MDQsOSBAQCBzdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0aWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpXFxuIFxcdFxcdGt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTtcXG4gXFxuK1xcdGlmIChwbWwpXFxuK1xcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUgPSBQTUxfTE9HX05SX0VOVFJJRVM7XFxuK1xcbiBcXHRzdm1fc3Jzb192bV9pbml0KCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU0MjksNiArNTUyNSw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCxcXG4gXFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuIFxcbitcXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyxcXG4rXFxuIFxcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcXG4gXFx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcXG4gXFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXFxuQEAgLTU2ODksNiArNTc4NywxMCBAQCBzdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFxuIFxcdG5yaXBzID0gbnJpcHMgXFx1MDAyNlxcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTtcXG4gXFxuK1xcdHBtbCA9IHBtbCBcXHUwMDI2XFx1MDAyNiBucHRfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BNTCk7XFxuK1xcdGlmIChwbWwpXFxuK1xcdFxcdHByX2luZm8oXFxcIlBhZ2UgbW9kaWZpY2F0aW9uIGxvZ2dpbmcgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFxuIFxcdGlmIChsYnJ2KSB7XFxuIFxcdFxcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKVxcbiBcXHRcXHRcXHRsYnJ2ID0gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC01Myw2ICs1Myw3IEBAIGV4dGVybiBpbnQgdmdpZjtcXG4gZXh0ZXJuIGJvb2wgaW50ZXJjZXB0X3NtaTtcXG4gZXh0ZXJuIGJvb2wgdm5taTtcXG4gZXh0ZXJuIGludCBsYnJ2O1xcbitleHRlcm4gYm9vbCBwbWw7XFxuIFxcbiBleHRlcm4gaW50IHRzY19hdXhfdXJldF9zbG90IF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li5lNzdiNWI3MzEyNzVjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5AQCAtMTA4LDcgKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdHZteF92Y3B1X2xvYWQodmNwdSwgY3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogQmFzaWMgVERYIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSBQTUwuIEtWTSBkb2VzIG5vdCBlbmFibGUgUE1MIGluXFxuQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xcbitcXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUsIGVuYWJsZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHZ0X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTQ4ODMsMTAgKzQ4ODMsMTEgQEAgaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiAjZGVmaW5lIFZNWF9YU1NfRVhJVF9CSVRNQVAgMFxcbiBcXG4tc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbitzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHN0cnVjdCBrdm0gKmt2bSA9IHZteC1cXHUwMDNldmNwdS5rdm07XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0c3RydWN0IGt2bV92bXggKmt2bV92bXggPSB0b19rdm1fdm14KGt2bSk7XFxuK1xcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG4gXFx0aWYgKG5lc3RlZClcXG4gXFx0XFx0bmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKCk7XFxuQEAgLTQ5MTEsNyArNDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gXFx0aWYgKGNwdV9oYXNfdGVydGlhcnlfZXhlY19jdHJscygpKVxcbiBcXHRcXHR0ZXJ0aWFyeV9leGVjX2NvbnRyb2xzX3NldCh2bXgsIHZteF90ZXJ0aWFyeV9leGVjX2NvbnRyb2wodm14KSk7XFxuIFxcbi1cXHRpZiAoZW5hYmxlX2FwaWN2IFxcdTAwMjZcXHUwMDI2IGxhcGljX2luX2tlcm5lbChcXHUwMDI2dm14LVxcdTAwM2V2Y3B1KSkge1xcbitcXHRpZiAoZW5hYmxlX2FwaWN2IFxcdTAwMjZcXHUwMDI2IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbiBcXHRcXHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7XFxuIFxcdFxcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTtcXG4gXFx0XFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApO1xcbkBAIC00OTIzLDcgKzQ5MjQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuIFxcdFxcdHZtY3Nfd3JpdGU2NChQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoKFxcdTAwMjZ2bXgtXFx1MDAzZXZ0LnBpX2Rlc2MpKSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh2bXhfY2FuX3VzZV9pcGl2KFxcdTAwMjZ2bXgtXFx1MDAzZXZjcHUpKSB7XFxuK1xcdGlmICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpKSB7XFxuIFxcdFxcdHZtY3Nfd3JpdGU2NChQSURfUE9JTlRFUl9UQUJMRSwgX19wYShrdm1fdm14LVxcdTAwM2VwaWRfdGFibGUpKTtcXG4gXFx0XFx0dm1jc193cml0ZTE2KExBU1RfUElEX1BPSU5URVJfSU5ERVgsIGt2bS1cXHUwMDNlYXJjaC5tYXhfdmNwdV9pZHMgLSAxKTtcXG4gXFx0fVxcbkBAIC00OTU4LDE1ICs0OTU5LDE1IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gXFx0dm1jc193cml0ZTY0KFZNX0VOVFJZX01TUl9MT0FEX0FERFIsIF9fcGEodm14LVxcdTAwM2Vtc3JfYXV0b2xvYWQuZ3Vlc3QudmFsKSk7XFxuIFxcbiBcXHRpZiAodm1jc19jb25maWcudm1lbnRyeV9jdHJsIFxcdTAwMjYgVk1fRU5UUllfTE9BRF9JQTMyX1BBVClcXG4tXFx0XFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2bXgtXFx1MDAzZXZjcHUuYXJjaC5wYXQpO1xcbitcXHRcXHR2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZjcHUtXFx1MDAzZWFyY2gucGF0KTtcXG4gXFxuIFxcdHZtX2V4aXRfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZXhpdF9jdHJsKCkpO1xcbiBcXG4gXFx0LyogMjIuMi4xLCAyMC44LjEgKi9cXG4gXFx0dm1fZW50cnlfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZW50cnlfY3RybCgpKTtcXG4gXFxuLVxcdHZteC1cXHUwMDNldmNwdS5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7XFxuLVxcdHZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52bXgtXFx1MDAzZXZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyk7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcXG4rXFx0dm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfnZjcHUtXFx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpO1xcbiBcXG4gXFx0c2V0X2NyNF9ndWVzdF9ob3N0X21hc2sodm14KTtcXG4gXFxuQEAgLTQ5NzcsMTEgKzQ5NzgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbiBcXHRcXHR2bWNzX3dyaXRlNjQoWFNTX0VYSVRfQklUTUFQLCBWTVhfWFNTX0VYSVRfQklUTUFQKTtcXG4gXFxuIFxcdGlmIChlbmFibGVfcG1sKSB7XFxuLVxcdFxcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZteC1cXHUwMDNlcG1sX3BnKSk7XFxuK1xcdFxcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpKTtcXG4gXFx0XFx0dm1jc193cml0ZTE2KEdVRVNUX1BNTF9JTkRFWCwgUE1MX0hFQURfSU5ERVgpO1xcbiBcXHR9XFxuIFxcbi1cXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKFxcdTAwMjZ2bXgtXFx1MDAzZXZjcHUsIE5VTEwpO1xcbitcXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKHZjcHUsIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHZteF9wdF9tb2RlX2lzX2hvc3RfZ3Vlc3QoKSkge1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNnZteC1cXHUwMDNlcHRfZGVzYywgMCwgc2l6ZW9mKHZteC1cXHUwMDNlcHRfZGVzYykpO1xcbkBAIC00OTk0LDEzICs0OTk1LDEzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gXFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCAwKTtcXG4gXFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTtcXG4gXFxuLVxcdHZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZShcXHUwMDI2dm14LVxcdTAwM2V2Y3B1LCAwKTtcXG4rXFx0dm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKHZjcHUsIDApO1xcbiBcXG4gXFx0aWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkge1xcbiBcXHRcXHR2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUiwgMCk7XFxuLVxcdFxcdGlmIChjcHVfbmVlZF90cHJfc2hhZG93KFxcdTAwMjZ2bXgtXFx1MDAzZXZjcHUpKVxcbitcXHRcXHRpZiAoY3B1X25lZWRfdHByX3NoYWRvdyh2Y3B1KSlcXG4gXFx0XFx0XFx0dm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsXFxuLVxcdFxcdFxcdFxcdCAgICAgX19wYSh2bXgtXFx1MDAzZXZjcHUuYXJjaC5hcGljLVxcdTAwM2VyZWdzKSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgX19wYSh2Y3B1LVxcdTAwM2VhcmNoLmFwaWMtXFx1MDAzZXJlZ3MpKTtcXG4gXFx0XFx0dm1jc193cml0ZTMyKFRQUl9USFJFU0hPTEQsIDApO1xcbiBcXHR9XFxuIFxcbkBAIC01MDExLDcgKzUwMTIsNyBAQCBzdGF0aWMgdm9pZCBfX3ZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gXFxuLVxcdGluaXRfdm1jcyh2bXgpO1xcbitcXHRpbml0X3ZtY3ModmNwdSk7XFxuIFxcbiBcXHRpZiAobmVzdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtXFx1MDAzZWt2bSwgS1ZNX1g4Nl9RVUlSS19TVFVGRl9GRUFUVVJFX01TUlMpKVxcbkBAIC02NDE4LDQ4ICs2NDE5LDI1IEBAIHZvaWQgdm14X2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcXG4gXFx0XFx0KmVycm9yX2NvZGUgPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbitzdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRpZiAodm14LVxcdTAwM2VwbWxfcGcpIHtcXG4tXFx0XFx0X19mcmVlX3BhZ2Uodm14LVxcdTAwM2VwbWxfcGcpO1xcbi1cXHRcXHR2bXgtXFx1MDAzZXBtbF9wZyA9IE5VTEw7XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlKSB7XFxuK1xcdFxcdF9fZnJlZV9wYWdlKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpO1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlID0gTlVMTDtcXG4gXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2bXhfZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XFxuLVxcdHUxNiBwbWxfaWR4LCBwbWxfdGFpbF9pbmRleDtcXG4tXFx0dTY0ICpwbWxfYnVmO1xcbi1cXHRpbnQgaTtcXG4rXFx0dTE2IHBtbF9pZHg7XFxuIFxcbiBcXHRwbWxfaWR4ID0gdm1jc19yZWFkMTYoR1VFU1RfUE1MX0lOREVYKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xcbiBcXHRpZiAocG1sX2lkeCA9PSBQTUxfSEVBRF9JTkRFWClcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHQvKlxcbi1cXHQgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHlcXG4tXFx0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cXG4tXFx0ICovXFxuLVxcdHBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggXFx1MDAzZT0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICsgMTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFBNTCBsb2cgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoZSBDUFUgZmlyc3Qgd3JpdGVzIHRoZSBlbnRyeSA1MTFcXG4tXFx0ICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uXFxuLVxcdCAqXFxuLVxcdCAqIFJlYWQgdGhlIGVudHJpZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4sIHRvIGVuc3VyZSB0aGF0XFxuLVxcdCAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uXFxuLVxcdCAqL1xcbi1cXHRwbWxfYnVmID0gcGFnZV9hZGRyZXNzKHZteC1cXHUwMDNlcG1sX3BnKTtcXG4gXFxuLVxcdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFxcdTAwM2U9IHBtbF90YWlsX2luZGV4OyBpLS0pIHtcXG4tXFx0XFx0dTY0IGdwYTtcXG4tXFxuLVxcdFxcdGdwYSA9IHBtbF9idWZbaV07XFxuLVxcdFxcdFdBUk5fT04oZ3BhIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcXG4tXFx0XFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4tXFx0fVxcbitcXHRrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBwbWxfaWR4KTtcXG4gXFxuIFxcdC8qIHJlc2V0IFBNTCBpbmRleCAqL1xcbiBcXHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XFxuQEAgLTc2NDgsNyArNzYyNiw3IEBAIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG4gXFx0aWYgKGVuYWJsZV9wbWwpXFxuLVxcdFxcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcXG4rXFx0XFx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTtcXG4gXFx0ZnJlZV92cGlkKHZteC1cXHUwMDNldnBpZCk7XFxuIFxcdG5lc3RlZF92bXhfZnJlZV92Y3B1KHZjcHUpO1xcbiBcXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cXHUwMDNlbG9hZGVkX3ZtY3MpO1xcbkBAIC03NjgwLDggKzc2NTgsOCBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogZm9yIHRoZSBndWVzdCksIGV0Yy5cXG4gXFx0ICovXFxuIFxcdGlmIChlbmFibGVfcG1sKSB7XFxuLVxcdFxcdHZteC1cXHUwMDNlcG1sX3BnID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcXG4tXFx0XFx0aWYgKCF2bXgtXFx1MDAzZXBtbF9wZylcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XFxuK1xcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4gXFx0XFx0XFx0Z290byBmcmVlX3ZwaWQ7XFxuIFxcdH1cXG4gXFxuQEAgLTc3NTIsNyArNzczMCw3IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBmcmVlX3ZtY3M6XFxuIFxcdGZyZWVfbG9hZGVkX3ZtY3Modm14LVxcdTAwM2Vsb2FkZWRfdm1jcyk7XFxuIGZyZWVfcG1sOlxcbi1cXHR2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHZteCk7XFxuK1xcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XFxuIGZyZWVfdnBpZDpcXG4gXFx0ZnJlZV92cGlkKHZteC1cXHUwMDNldnBpZCk7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTg0NDAsMjEgKzg0MTgsMTMgQEAgc3RhdGljIHZvaWQgdm14X3VwZGF0ZV9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yY2VfaW1tZWRpYXRlX2V4aXRcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghZW5hYmxlX3BtbCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGd1YXJkKHZteF92bWNzMDEpKHZjcHUpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xcbi1cXHQgKiBjb2RlLCBidXQgaW4gdGhhdCBjYXNlIGFub3RoZXIgdXBkYXRlIHJlcXVlc3Qgd2lsbCBiZSBtYWRlIGFuZCBzb1xcbi1cXHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cXG4tXFx0ICovXFxuLVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSlcXG4rXFx0aWYgKGVuYWJsZSlcXG4gXFx0XFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li41ZjUwNWFkMTRkZGUxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTI2NSwxMyArMjY1LDYgQEAgc3RydWN0IHZjcHVfdm14IHtcXG4gXFx0dW5zaWduZWQgaW50IHBsZV93aW5kb3c7XFxuIFxcdGJvb2wgcGxlX3dpbmRvd19kaXJ0eTtcXG4gXFxuLVxcdC8qIFN1cHBvcnQgZm9yIFBNTCAqL1xcbi0jZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1xcdDUxMlxcbi1cXHQvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xcbi0jZGVmaW5lIFBNTF9IRUFEX0lOREVYXFx0XFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxcbi1cXG4tXFx0c3RydWN0IHBhZ2UgKnBtbF9wZztcXG4tXFxuIFxcdC8qIGFwaWMgZGVhZGxpbmUgdmFsdWUgaW4gaG9zdCB0c2MgKi9cXG4gXFx0dTY0IGh2X2RlYWRsaW5lX3RzYztcXG4gXFxuQEAgLTM5Nyw3ICszOTAsNyBAQCB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcXG4gXFxuIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xcbiBib29sIHZteF9pc192YWxpZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLCBib29sIGhvc3RfaW5pdGlhdGVkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbmluZGV4IDA1NGZkMTRiYjJlMTYuLjQ4MTBmOWIxYjBmYzYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbkBAIC0xMTgsNyArMTE4LDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdm14X3dyaXRlX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7XFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIGludCB2bXhfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYyxcXG4gXFx0XFx0ICAgICBib29sICpleHBpcmVkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMzk0MSw2ICszOTQxLDM3IEBAIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxcbiBcXHRcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiB9XFxuIFxcbit2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpXFxuK3tcXG4rXFx0dTE2IHBtbF90YWlsX2luZGV4O1xcbitcXHR1NjQgKnBtbF9idWY7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5XFxuK1xcdCAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuXFxuK1xcdCAqL1xcbitcXHRwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4IFxcdTAwM2U9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCArIDE7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExXFxuK1xcdCAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLlxcbitcXHQgKlxcbitcXHQgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdFxcbitcXHQgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLlxcbitcXHQgKi9cXG4rXFx0cG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlKTtcXG4rXFxuK1xcdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFxcdTAwM2U9IHBtbF90YWlsX2luZGV4OyBpLS0pIHtcXG4rXFx0XFx0dTY0IGdwYTtcXG4rXFxuK1xcdFxcdGdwYSA9IHBtbF9idWZbaV07XFxuK1xcdFxcdFdBUk5fT05fT05DRShncGEgXFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xcbitcXHRcXHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9mbHVzaF9wbWxfYnVmZmVyKTtcXG4rXFxuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4ge1xcbkBAIC04MDQyLDYgKzgwNzMsMjEgQEAgc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRrdm1feDg2X2NhbGwoc2V0X2FwaWNfYWNjZXNzX3BhZ2VfYWRkcikodmNwdSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXNcXG4rXFx0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cXG4rXFx0ICogdGhlIGd1ZXN0IHdpbGwgbmV2ZXIgcnVuIHdpdGggYSBzdGFsZSBQTUwgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHRib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUsIGVuYWJsZSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIENhbGxlZCB3aXRoaW4ga3ZtLVxcdTAwM2VzcmN1IHJlYWQgc2lkZS5cXG4gICogUmV0dXJucyAxIHRvIGxldCB2Y3B1X3J1bigpIGNvbnRpbnVlIHRoZSBndWVzdCBleGVjdXRpb24gbG9vcCB3aXRob3V0XFxuQEAgLTgyMDgsNyArODI1NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdGt2bV94ODZfY2FsbChyZWNhbGNfaW50ZXJjZXB0cykodmNwdSk7XFxuIFxcbiBcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfQ1BVX0RJUlRZX0xPR0dJTkcsIHZjcHUpKVxcbi1cXHRcXHRcXHRrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1KTtcXG4rXFx0XFx0XFx0a3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTtcXG4gXFxuIFxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUsIHZjcHUpKSB7XFxuIFxcdFxcdFxcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5pbmRleCAwZjU5MTliMDkyZTQ3Li4yZDc0N2MyMDk2NWNlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxcbkBAIC05MDAsNCArOTAwLDExIEBAIGludCBfX19fa3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwbCxcXG4gXFxuIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuKy8qIFN1cHBvcnQgZm9yIFBNTCAqL1xcbisjZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1xcdDUxMlxcbisvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xcbisjZGVmaW5lIFBNTF9IRUFEX0lOREVYXFx0XFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxcbitcXG4rdm9pZCBrdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBwbWxfaWR4KTtcXG4rXFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMDo1My4xODIwNTQyOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5MDU1MTQyOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2ZsdXNoX3BtbF9idWZmZXJcIixcbiAgICBcImt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJwbWxfZnVsbF9pbnRlcmNlcHRpb25cIixcbiAgICBcIm5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsXCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbFwiLFxuICAgIFwidm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ1wiLFxuICAgIFwidm14X2ZsdXNoX3BtbF9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgZGlydHkgbG9nZ2luZyBzdXBwb3J0IGZvciBBTUQgU1ZNIGFuZCByZWZhY3RvcnMgdGhlIHNoYXJlZCBQTUwgYnVmZmVyIGZsdXNoaW5nIGFuZCBkaXJ0eSBsb2dnaW5nIHN0YXRlIG1hY2hpbmUgYWNyb3NzIHg4NiBLVk0sIEludGVsIFZNWCwgYW5kIEFNRCBTVk0uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29kZSBwYXRocyBpbiBLVk0gYW5kIGFmZmVjdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIGV4aXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThiNTMxMjc3OWRkNjRkYmM2MzExYTIzNmZkMjYwYTM0OTM4MWRkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6MTA6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uY2JmY2M2NmExOGU5YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC0yMzgsNiArMjM4LDcgQEBcbiAvLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMisyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVFx0XHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcdFx0KCA4KjMyKzIyKSAvKiBcInRkeF9ndWVzdFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9QTUxcdFx0XHQoIDgqMzIrMjMpIC8qIEFNRCBQYWdlIE1vZGlmaWNhdGlvbiBsb2dnaW5nICovXG4gXG4gLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDc6MCAoRUJYKSwgd29yZCA5ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9GU0dTQkFTRVx0XHQoIDkqMzIrIDApIC8qIFwiZnNnc2Jhc2VcIiBSREZTQkFTRSwgV1JGU0JBU0UsIFJER1NCQVNFLCBXUkdTQkFTRSBpbnN0cnVjdGlvbnMqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAzYWY3Mzk1YzI0MzBhLi4yZGViZjYyOTQyOTA5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTc4OSw2ICs3ODksOCBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHQgKi9cbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfZXh0ZXJuYWxfc3B0X2NhY2hlO1xuIFxuK1x0c3RydWN0IHBhZ2UgKnBtbF9wYWdlO1xuK1xuIFx0LypcbiBcdCAqIFFFTVUgdXNlcnNwYWNlIGFuZCB0aGUgZ3Vlc3QgZWFjaCBoYXZlIHRoZWlyIG93biBGUFUgc3RhdGUuXG4gXHQgKiBJbiB2Y3B1X3J1biwgd2Ugc3dpdGNoIGJldHdlZW4gdGhlIHVzZXIgYW5kIGd1ZXN0IEZQVSBjb250ZXh0cy5cbkBAIC0xNjcwLDcgKzE2NzIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0XHRcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTtcbiBcdHZvaWQgKCpoYW5kbGVfZXhpdF9pcnFvZmYpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4tXHR2b2lkICgqdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK1x0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7XG4gXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uZTBhNzU0OWE3YzcyNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTE2NSw3ICsxNjUsMTAgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xuIFx0dTggcmVzZXJ2ZWRfOVsyMl07XG4gXHR1NjQgYWxsb3dlZF9zZXZfZmVhdHVyZXM7XHQvKiBPZmZzZXQgMHgxMzggKi9cbiBcdHU2NCBndWVzdF9zZXZfZmVhdHVyZXM7XHRcdC8qIE9mZnNldCAweDE0MCAqL1xuLVx0dTggcmVzZXJ2ZWRfMTBbNjY0XTtcbitcdHU4IHJlc2VydmVkXzEwWzEyOF07XG4rXHR1NjQgcG1sX2FkZHI7XHRcdFx0LyogT2Zmc2V0IDB4MWM4ICovXG4rXHR1MTYgcG1sX2luZGV4O1x0XHRcdC8qIE9mZnNldCAweDFkMCAqL1xuK1x0dTggcmVzZXJ2ZWRfMTFbNTI2XTtcbiBcdC8qXG4gXHQgKiBPZmZzZXQgMHgzZTAsIDMyIGJ5dGVzIHJlc2VydmVkXG4gXHQgKiBmb3IgdXNlIGJ5IGh5cGVydmlzb3Ivc29mdHdhcmUuXG5AQCAtMjQwLDEwICsyNDMsMTEgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xuICNkZWZpbmUgU1ZNX0lPSU9fU0laRV9NQVNLICg3IFx1MDAzY1x1MDAzYyBTVk1fSU9JT19TSVpFX1NISUZUKVxuICNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0lPSU9fQVNJWkVfU0hJRlQpXG4gXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcdFx0QklUKDApXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXHRcdEJJVCgxKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1x0QklUKDIpXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0QklUKDMpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcdFx0QklUX1VMTCgwKVxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVlx0XHRCSVRfVUxMKDEpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWX0VTXHRcdEJJVF9VTEwoMilcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUXHRcdEJJVF9VTEwoMylcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9QTUxcdFx0QklUX1VMTCgxMSlcbiBcbiAjZGVmaW5lIFNWTV9NSVNDMl9FTkFCTEVfVl9MQlJcdEJJVF9VTEwoMClcbiAjZGVmaW5lIFNWTV9NSVNDMl9FTkFCTEVfVl9WTUxPQURfVk1TQVZFXHRCSVRfVUxMKDEpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcbmluZGV4IDAxMGE0NWM5ZjYxNDcuLmU4MDY3NjE4NTA5MjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXG5AQCAtMTAxLDYgKzEwMSw3IEBAXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJXHRcdDB4NDAxXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXHQweDQwMlxuICNkZWZpbmUgU1ZNX0VYSVRfVk1HRVhJVCAgICAgICAweDQwM1xuKyNkZWZpbmUgU1ZNX0VYSVRfUE1MX0ZVTExcdDB4NDA3XG4gXG4gLyogU0VWLUVTIHNvZnR3YXJlLWRlZmluZWQgVk1HRVhJVCBldmVudHMgKi9cbiAjZGVmaW5lIFNWTV9WTUdFWElUX01NSU9fUkVBRFx0XHRcdDB4ODAwMDAwMDF1bGxcbkBAIC0yMzYsNiArMjM3LDcgQEBcbiBcdHsgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSSxcdFx0XCJhdmljX2luY29tcGxldGVfaXBpXCIgfSwgXFxcbiBcdHsgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTUywgICBcImF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NcIiB9LCBcXFxuIFx0eyBTVk1fRVhJVF9WTUdFWElULFx0XHRcInZtZ2V4aXRcIiB9LCBcXFxuK1x0eyBTVk1fRVhJVF9QTUxfRlVMTCxcdFx0XCJwbWxfZnVsbFwiIH0sIFxcXG4gXHR7IFNWTV9WTUdFWElUX01NSU9fUkVBRCxcdFwidm1nZXhpdF9tbWlvX3JlYWRcIiB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9NTUlPX1dSSVRFLFx0XCJ2bWdleGl0X21taW9fd3JpdGVcIiB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9OTUlfQ09NUExFVEUsXHRcInZtZ2V4aXRfbm1pX2NvbXBsZXRlXCIgfSwgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggODY2NWE2NDc0ODA2Yy4uYjE4Y2M5Yzg4ZGQ1NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC01NSw2ICs1NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0ZBU1RfQ1BQQyxcdFx0Q1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DUFBDX1BFUkZfUFJJTyxcdFx0Q1BVSURfRURYLCAxNiwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9NQkEsXHRcdFx0Q1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LFxuK1x0eyBYODZfRkVBVFVSRV9QTUwsXHRcdFx0Q1BVSURfRUNYLCAgNCwgMHg4MDAwMDAwYSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9YMkFWSUNfRVhULFx0XHRDUFVJRF9FQ1gsICA2LCAweDgwMDAwMDBhLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0NPSEVSRU5DWV9TRldfTk8sXHRcdENQVUlEX0VCWCwgMzEsIDB4ODAwMDAwMWYsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfU01CQSxcdFx0XHRDUFVJRF9FQlgsICAyLCAweDgwMDAwMDIwLCAwIH0sXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbmluZGV4IDczZjM3YjA1MGQwYTAuLmRhNDE3YzRjNTkxNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5AQCAtOTAxLDYgKzkwMSwxMyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHZtY2IwMi1cdTAwM2Vjb250cm9sLm1zcnBtX2Jhc2VfcGEgPSB2bWNiMDEtXHUwMDNlY29udHJvbC5tc3JwbV9iYXNlX3BhO1xuIFx0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9QRVJNX01BUCk7XG4gXG4rXHQvKlxuK1x0ICogUE1MIGlzIG5ldmVyIGVuYWJsZWQgaW4gaGFyZHdhcmUgZm9yIEwyLiAgTWFrZSBzdXJlIHRoYXQgYW5cbitcdCAqIHVuZXhwZWN0ZWQgUE1MIHdyaXRlIHdvdWxkIHRyaWdnZXIgYSBQTUxfRlVMTCBWTS1FeGl0LlxuK1x0ICovXG4rXHRpZiAocG1sKVxuK1x0XHR2bWNiMDItXHUwMDNlY29udHJvbC5wbWxfaW5kZXggPSAtMTtcbitcbiBcdC8qXG4gXHQgKiBTdGFzaCB2bWNiMDIncyBjb3VudGVyIGlmIHRoZSBndWVzdCBoYXNuJ3QgbW92ZWQgcGFzdCB0aGUgZ3VpbHR5XG4gXHQgKiBpbnN0cnVjdGlvbjsgb3RoZXJ3aXNlLCByZXNldCB0aGUgY291bnRlciB0byAnMCcuXG5AQCAtMTgyMCw2ICsxODI3LDEzIEBAIGludCBuZXN0ZWRfc3ZtX2V4aXRfc3BlY2lhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdFx0aWYgKG5lc3RlZF9zdm1faXNfbDJfdGxiX2ZsdXNoX2hjYWxsKHZjcHUpKVxuIFx0XHRcdHJldHVybiBORVNURURfRVhJVF9IT1NUO1xuIFx0XHRicmVhaztcbitcdGNhc2UgU1ZNX0VYSVRfUE1MX0ZVTEw6XG4rXHRcdC8qXG4rXHRcdCAqIEFsbCBQTUwgZnVsbCBleGl0cyBhcmUgaGFuZGxlZCBieSBLVk0uICBLVk0gZW11bGF0ZXMgUE1MIGluXG4rXHRcdCAqIHNvZnR3YXJlIGZvciBMMSwgYnV0IG5ldmVyIGVuYWJsZXMgUE1MIGluIGhhcmR3YXJlIG9uIGJlaGFsZlxuK1x0XHQgKiBvZiBMMS5cbitcdFx0ICovXG4rXHRcdHJldHVybiBORVNURURfRVhJVF9IT1NUO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmNmZTk5MGY4MDUwNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDk5NCw3ICs0OTk0LDcgQEAgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuIFx0ICogQWxsb2NhdGUgYW4gU05QLXNhZmUgcGFnZSB0byB3b3JrYXJvdW5kIHRoZSBTTlAgZXJyYXR1bSB3aGVyZVxuIFx0ICogdGhlIENQVSB3aWxsIGluY29ycmVjdGx5IHNpZ25hbCBhbiBSTVAgdmlvbGF0aW9uICNQRiBpZiBhXG4gXHQgKiBodWdlcGFnZSAoMk1CIG9yIDFHQikgY29sbGlkZXMgd2l0aCB0aGUgUk1QIGVudHJ5IG9mIGFcbi1cdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIG9yIEFWSUMgYmFja2luZyBwYWdlLlxuK1x0ICogMk1CLWFsaWduZWQgVk1DQiwgVk1TQSwgUE1MIG9yIEFWSUMgYmFja2luZyBwYWdlLlxuIFx0ICpcbiBcdCAqIEFsbG9jYXRlIG9uZSBleHRyYSBwYWdlLCBjaG9vc2UgYSBwYWdlIHdoaWNoIGlzIG5vdFxuIFx0ICogMk1CLWFsaWduZWQsIGFuZCBmcmVlIHRoZSBvdGhlci5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggN2Q1OWQzMDFlMWU1NC4uOTUwYzI1MGE3N2I1MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0xNzksNiArMTc5LDkgQEAgbW9kdWxlX3BhcmFtKHZubWksIGJvb2wsIDA0NDQpO1xuIFxuIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcbiBcbitib29sIF9fcm9fYWZ0ZXJfaW5pdCBwbWwgPSB0cnVlO1xuK21vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpO1xuK1xuIHN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCBzdm1fZ3BfZXJyYXR1bV9pbnRlcmNlcHQgPSB0cnVlO1xuIFxuIHN0YXRpYyB1OCByc21faW5zX2J5dGVzW10gPSBcIlxceDBmXFx4YWFcIjtcbkBAIC0xMjY3LDYgKzEyNzAsMjMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxuIFx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4gXHRcdHN2bV9zZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0JVU0xPQ0spO1xuIFxuK1x0aWYgKHBtbCkge1xuK1x0XHQvKlxuK1x0XHQgKiBQb3B1bGF0ZSB0aGUgcGFnZSBhZGRyZXNzIGFuZCBpbmRleCBoZXJlLCBQTUwgaXMgZW5hYmxlZFxuK1x0XHQgKiB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgZW5hYmxlZCBvbiB0aGUgbWVtc2xvdCB0aHJvdWdoXG4rXHRcdCAqIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoKVxuK1x0XHQgKi9cbitcdFx0Y29udHJvbC1cdTAwM2VwbWxfYWRkciA9ICh1NjQpX19zbWVfc2V0KHBhZ2VfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpKTtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIFZNQ0IgY29udHJvbCBhcmVhIHJlbWFpbnMgdmFsaWQgYWZ0ZXIgYW4gaW50ZXJjZXB0ZWQgU0hVVERPV05cbitcdFx0ICogKEFNRCBBUE0gUmV2IDMuNDUrKSwgc28gb25seSBpbml0aWFsaXplIFBNTCBpbmRleCBvbiByZXNldCB0byBhdm9pZFxuK1x0XHQgKiBkaXNjYXJkaW5nIGFscmVhZHktbG9nZ2VkIGVudHJpZXMgdGhhdCBoYXZlbid0IGJlZW4gZmx1c2hlZC5cbitcdFx0ICovXG4rXHRcdGlmICghaW5pdF9ldmVudClcbitcdFx0XHRjb250cm9sLVx1MDAzZXBtbF9pbmRleCA9IFBNTF9IRUFEX0lOREVYO1xuK1x0fVxuK1xuIFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcbiBcdFx0c2V2X2luaXRfdm1jYihzdm0sIGluaXRfZXZlbnQpO1xuIFxuQEAgLTEzMjYsOSArMTM0NiwxNSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIXZtY2IwMV9wYWdlKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGlmIChwbWwpIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xuK1x0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbitcdFx0XHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xuK1x0fVxuK1xuIFx0ZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcbitcdFx0Z290byBlcnJvcl9mcmVlX3BtbF9wYWdlO1xuIFxuIFx0ZXJyID0gYXZpY19pbml0X3ZjcHUoc3ZtKTtcbiBcdGlmIChlcnIpXG5AQCAtMTM1Myw2ICsxMzc5LDkgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGVycm9yX2ZyZWVfc2V2OlxuIFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcbitlcnJvcl9mcmVlX3BtbF9wYWdlOlxuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbitcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbiBlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcbiBcdF9fZnJlZV9wYWdlKHZtY2IwMV9wYWdlKTtcbiBvdXQ6XG5AQCAtMTM3MCw2ICsxMzk5LDkgQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xuIFxuK1x0aWYgKHBtbCBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuK1x0XHRfX2ZyZWVfcGFnZSh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpO1xuK1xuIFx0X19mcmVlX3BhZ2UoX19zbWVfcGFfdG9fcGFnZShzdm0tXHUwMDNldm1jYjAxLnBhKSk7XG4gXHRzdm1fdmNwdV9mcmVlX21zcnBtKHN2bS1cdTAwM2Vtc3JwbSk7XG4gfVxuQEAgLTMzNDQsNiArMzM3Niw0NSBAQCBzdGF0aWMgaW50IHZtbWNhbGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBrdm1fZW11bGF0ZV9oeXBlcmNhbGwodmNwdSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdHN0cnVjdCB2bWNiICp2bWNiMDEgPSBzdm0tXHUwMDNldm1jYjAxLnB0cjtcbitcbitcdGlmIChlbmFibGUpXG4rXHRcdHZtY2IwMS1cdTAwM2Vjb250cm9sLm1pc2NfY3RsIHw9IFNWTV9NSVNDX0VOQUJMRV9QTUw7XG4rXHRlbHNlXG4rXHRcdHZtY2IwMS1cdTAwM2Vjb250cm9sLm1pc2NfY3RsIFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9QTUw7XG4rXG4rXHR2bWNiX21hcmtfZGlydHkodm1jYjAxLCBWTUNCX05QVCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHN2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG4rXG4rXHQvKiBEbyBub3RoaW5nIGlmIFBNTCBidWZmZXIgaXMgZW1wdHkgKi9cbitcdGlmIChjb250cm9sLVx1MDAzZXBtbF9pbmRleCA9PSBQTUxfSEVBRF9JTkRFWClcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgY29udHJvbC1cdTAwM2VwbWxfaW5kZXgpO1xuK1xuK1x0LyogUmVzZXQgdGhlIFBNTCBpbmRleCAqL1xuK1x0Y29udHJvbC1cdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcbit9XG4rXG4rc3RhdGljIGludCBwbWxfZnVsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuK1xuK1x0LypcbitcdCAqIFBNTCBidWZmZXIgaXMgYWxyZWFkeSBmbHVzaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3ZtX2hhbmRsZV9leGl0KCkuXG4rXHQgKiBOb3RoaW5nIHRvIGRvIGhlcmUuXG4rXHQgKi9cbitcdHJldHVybiAxO1xuK31cbitcbiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiBcdFtTVk1fRVhJVF9SRUFEX0NSMF1cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbiBcdFtTVk1fRVhJVF9SRUFEX0NSM11cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbkBAIC0zNDIxLDYgKzM0OTIsNyBAQCBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4gXHRbU1ZNX0VYSVRfVk1HRVhJVF1cdFx0XHQ9IHNldl9oYW5kbGVfdm1nZXhpdCxcbiAjZW5kaWZcbitcdFtTVk1fRVhJVF9QTUxfRlVMTF1cdFx0XHQ9IHBtbF9mdWxsX2ludGVyY2VwdGlvbixcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMzQ3MCw4ICszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRwcl9lcnIoXCIlLTIwcyUwMTZsbHhcXG5cIiwgXCJleGl0X2luZm8yOlwiLCBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18yKTtcbiBcdHByX2VycihcIiUtMjBzJTA4eFxcblwiLCBcImV4aXRfaW50X2luZm86XCIsIGNvbnRyb2wtXHUwMDNlZXhpdF9pbnRfaW5mbyk7XG4gXHRwcl9lcnIoXCIlLTIwcyUwOHhcXG5cIiwgXCJleGl0X2ludF9pbmZvX2VycjpcIiwgY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvX2Vycik7XG4tXHRwcl9lcnIoXCIlLTIwcyVsbGRcXG5cIiwgXCJtaXNjX2N0bDpcIiwgY29udHJvbC1cdTAwM2VtaXNjX2N0bCk7XG4rXHRwcl9lcnIoXCIlLTIwcyVsbHhcXG5cIiwgXCJtaXNjX2N0bDpcIiwgY29udHJvbC1cdTAwM2VtaXNjX2N0bCk7XG4gXHRwcl9lcnIoXCIlLTIwcyUwMTZsbHhcXG5cIiwgXCJuZXN0ZWRfY3IzOlwiLCBjb250cm9sLVx1MDAzZW5lc3RlZF9jcjMpO1xuK1xuK1x0aWYgKHBtbCkge1xuK1x0XHRwcl9lcnIoXCIlLTIwcyUwMTZsbHhcXG5cIiwgXCJwbWxfYWRkcjpcIiwgY29udHJvbC1cdTAwM2VwbWxfYWRkcik7XG4rXHRcdHByX2VycihcIiUtMjBzJTA0eFxcblwiLCBcInBtbF9pbmRleDpcIiwgY29udHJvbC1cdTAwM2VwbWxfaW5kZXgpO1xuK1x0fVxuK1xuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwiYXZpY192YXBpY19iYXI6XCIsIGNvbnRyb2wtXHUwMDNlYXZpY192YXBpY19iYXIpO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwiZ2hjYjpcIiwgY29udHJvbC1cdTAwM2VnaGNiX2dwYSk7XG4gXHRwcl9lcnIoXCIlLTIwcyUwOHhcXG5cIiwgXCJldmVudF9pbmo6XCIsIGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qKTtcbkBAIC0zNjQ5LDYgKzM3MjcsMTMgQEAgaW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxuIFx0ICAgICh1NjQpZXhpdF9jb2RlICE9IF9fZXhpdF9jb2RlKVxuIFx0XHRnb3RvIHVuZXhwZWN0ZWRfdm1leGl0O1xuIFxuK1x0LypcbitcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsXG4rXHQgKiBleGl0IG9jY3VycyBhcyBzb21ldGhpbmcgaXMgaG9ycmlibHkgd3JvbmcuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfUE1MX0ZVTEwpKVxuK1x0XHRnb3RvIHVuZXhwZWN0ZWRfdm1leGl0O1xuK1xuICNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkVcbiBcdGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfTVNSKVxuIFx0XHRyZXR1cm4gbXNyX2ludGVyY2VwdGlvbih2Y3B1KTtcbkBAIC0zNzE3LDYgKzM4MDIsMTQgQEAgc3RhdGljIGludCBzdm1faGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fcnVuICprdm1fcnVuID0gdmNwdS1cdTAwM2VydW47XG4gXG4rXHQvKlxuK1x0ICogT3Bwb3J0dW5pc3RpY2FsbHkgZmx1c2ggdGhlIFBNTCBidWZmZXIgb24gVk0gZXhpdC4gVGhpcyBrZWVwcyB0aGVcbitcdCAqIGRpcnR5IGJpdG1hcCBjdXJyZW50IGJ5IHByb2Nlc3NpbmcgbG9nZ2VkIEdQQXMgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3JcbitcdCAqIFBNTF9GVUxMIGV4aXQuXG4rXHQgKi9cbitcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSBcdTAwMjZcdTAwMjYgIWlzX2d1ZXN0X21vZGUodmNwdSkpXG4rXHRcdHN2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUpO1xuK1xuIFx0aWYgKHVubGlrZWx5KGV4aXRfZmFzdHBhdGggPT0gRVhJVF9GQVNUUEFUSF9FWElUX1VTRVJTUEFDRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTUzMTEsNiArNTQwNCw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpXG4gXHRcdGt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTtcbiBcbitcdGlmIChwbWwpXG4rXHRcdGt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSA9IFBNTF9MT0dfTlJfRU5UUklFUztcbitcbiBcdHN2bV9zcnNvX3ZtX2luaXQoKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NDI5LDYgKzU1MjUsOCBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5jaGVja19pbnRlcmNlcHQgPSBzdm1fY2hlY2tfaW50ZXJjZXB0LFxuIFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsXG4gXG4rXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyxcbitcbiBcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcbiBcdC5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsXG4gXHQuc2V0dXBfbWNlID0gc3ZtX3NldHVwX21jZSxcbkBAIC01Njg5LDYgKzU3ODcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHRucmlwcyA9IG5yaXBzIFx1MDAyNlx1MDAyNiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlJJUFMpO1xuIFxuK1x0cG1sID0gcG1sIFx1MDAyNlx1MDAyNiBucHRfZW5hYmxlZCBcdTAwMjZcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9QTUwpO1xuK1x0aWYgKHBtbClcbitcdFx0cHJfaW5mbyhcIlBhZ2UgbW9kaWZpY2F0aW9uIGxvZ2dpbmcgc3VwcG9ydGVkXFxuXCIpO1xuK1xuIFx0aWYgKGxicnYpIHtcbiBcdFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEJSVikpXG4gXHRcdFx0bGJydiA9IGZhbHNlO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBlOTU4OTQzYjgxNjI3Li5mNTY2ZGFlNDRiYjBmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTUzLDYgKzUzLDcgQEAgZXh0ZXJuIGludCB2Z2lmO1xuIGV4dGVybiBib29sIGludGVyY2VwdF9zbWk7XG4gZXh0ZXJuIGJvb2wgdm5taTtcbiBleHRlcm4gaW50IGxicnY7XG4rZXh0ZXJuIGJvb2wgcG1sO1xuIFxuIGV4dGVybiBpbnQgdHNjX2F1eF91cmV0X3Nsb3QgX19yb19hZnRlcl9pbml0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDRjNTJhYjhkMDc4NjkuLmU3N2I1YjczMTI3NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIHZvaWQgdnRfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdHZteF92Y3B1X2xvYWQodmNwdSwgY3B1KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSlcbiB7XG4gXHQvKlxuIFx0ICogQmFzaWMgVERYIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSBQTUwuIEtWTSBkb2VzIG5vdCBlbmFibGUgUE1MIGluXG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuK1x0dm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1LCBlbmFibGUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2dF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDYxMmFiMDdkNDEwMGYuLmIzNzY4YjRiMjEyZmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNDg4MywxMCArNDg4MywxMSBAQCBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiAjZGVmaW5lIFZNWF9YU1NfRVhJVF9CSVRNQVAgMFxuIFxuLXN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbitzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm0gKmt2bSA9IHZteC1cdTAwM2V2Y3B1Lmt2bTtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0c3RydWN0IGt2bV92bXggKmt2bV92bXggPSB0b19rdm1fdm14KGt2bSk7XG4rXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcbiBcdGlmIChuZXN0ZWQpXG4gXHRcdG5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcCgpO1xuQEAgLTQ5MTEsNyArNDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdGlmIChjcHVfaGFzX3RlcnRpYXJ5X2V4ZWNfY3RybHMoKSlcbiBcdFx0dGVydGlhcnlfZXhlY19jb250cm9sc19zZXQodm14LCB2bXhfdGVydGlhcnlfZXhlY19jb250cm9sKHZteCkpO1xuIFxuLVx0aWYgKGVuYWJsZV9hcGljdiBcdTAwMjZcdTAwMjYgbGFwaWNfaW5fa2VybmVsKFx1MDAyNnZteC1cdTAwM2V2Y3B1KSkge1xuK1x0aWYgKGVuYWJsZV9hcGljdiBcdTAwMjZcdTAwMjYgbGFwaWNfaW5fa2VybmVsKHZjcHUpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAwLCAwKTtcbiBcdFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDEsIDApO1xuIFx0XHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMiwgMCk7XG5AQCAtNDkyMyw3ICs0OTI0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0XHR2bWNzX3dyaXRlNjQoUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKChcdTAwMjZ2bXgtXHUwMDNldnQucGlfZGVzYykpKTtcbiBcdH1cbiBcbi1cdGlmICh2bXhfY2FuX3VzZV9pcGl2KFx1MDAyNnZteC1cdTAwM2V2Y3B1KSkge1xuK1x0aWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIHtcbiBcdFx0dm1jc193cml0ZTY0KFBJRF9QT0lOVEVSX1RBQkxFLCBfX3BhKGt2bV92bXgtXHUwMDNlcGlkX3RhYmxlKSk7XG4gXHRcdHZtY3Nfd3JpdGUxNihMQVNUX1BJRF9QT0lOVEVSX0lOREVYLCBrdm0tXHUwMDNlYXJjaC5tYXhfdmNwdV9pZHMgLSAxKTtcbiBcdH1cbkBAIC00OTU4LDE1ICs0OTU5LDE1IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdHZtY3Nfd3JpdGU2NChWTV9FTlRSWV9NU1JfTE9BRF9BRERSLCBfX3BhKHZteC1cdTAwM2Vtc3JfYXV0b2xvYWQuZ3Vlc3QudmFsKSk7XG4gXG4gXHRpZiAodm1jc19jb25maWcudm1lbnRyeV9jdHJsIFx1MDAyNiBWTV9FTlRSWV9MT0FEX0lBMzJfUEFUKVxuLVx0XHR2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZteC1cdTAwM2V2Y3B1LmFyY2gucGF0KTtcbitcdFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2Y3B1LVx1MDAzZWFyY2gucGF0KTtcbiBcbiBcdHZtX2V4aXRfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZXhpdF9jdHJsKCkpO1xuIFxuIFx0LyogMjIuMi4xLCAyMC44LjEgKi9cbiBcdHZtX2VudHJ5X2NvbnRyb2xzX3NldCh2bXgsIHZteF9nZXRfaW5pdGlhbF92bWVudHJ5X2N0cmwoKSk7XG4gXG4tXHR2bXgtXHUwMDNldmNwdS5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7XG4tXHR2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dm14LVx1MDAzZXZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyk7XG4rXHR2Y3B1LVx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcbitcdHZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52Y3B1LVx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpO1xuIFxuIFx0c2V0X2NyNF9ndWVzdF9ob3N0X21hc2sodm14KTtcbiBcbkBAIC00OTc3LDExICs0OTc4LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdFx0dm1jc193cml0ZTY0KFhTU19FWElUX0JJVE1BUCwgVk1YX1hTU19FWElUX0JJVE1BUCk7XG4gXG4gXHRpZiAoZW5hYmxlX3BtbCkge1xuLVx0XHR2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2bXgtXHUwMDNlcG1sX3BnKSk7XG4rXHRcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSkpO1xuIFx0XHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XG4gXHR9XG4gXG4tXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKFx1MDAyNnZteC1cdTAwM2V2Y3B1LCBOVUxMKTtcbitcdHZteF93cml0ZV9lbmNsc19iaXRtYXAodmNwdSwgTlVMTCk7XG4gXG4gXHRpZiAodm14X3B0X21vZGVfaXNfaG9zdF9ndWVzdCgpKSB7XG4gXHRcdG1lbXNldChcdTAwMjZ2bXgtXHUwMDNlcHRfZGVzYywgMCwgc2l6ZW9mKHZteC1cdTAwM2VwdF9kZXNjKSk7XG5AQCAtNDk5NCwxMyArNDk5NSwxMyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHR2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FU1AsIDApO1xuIFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTtcbiBcbi1cdHZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZShcdTAwMjZ2bXgtXHUwMDNldmNwdSwgMCk7XG4rXHR2bXhfZ3Vlc3RfZGVidWdjdGxfd3JpdGUodmNwdSwgMCk7XG4gXG4gXHRpZiAoY3B1X2hhc192bXhfdHByX3NoYWRvdygpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSLCAwKTtcbi1cdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3coXHUwMDI2dm14LVx1MDAzZXZjcHUpKVxuK1x0XHRpZiAoY3B1X25lZWRfdHByX3NoYWRvdyh2Y3B1KSlcbiBcdFx0XHR2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUixcbi1cdFx0XHRcdCAgICAgX19wYSh2bXgtXHUwMDNldmNwdS5hcmNoLmFwaWMtXHUwMDNlcmVncykpO1xuK1x0XHRcdFx0ICAgICBfX3BhKHZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbiBcdFx0dm1jc193cml0ZTMyKFRQUl9USFJFU0hPTEQsIDApO1xuIFx0fVxuIFxuQEAgLTUwMTEsNyArNTAxMiw3IEBAIHN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuLVx0aW5pdF92bWNzKHZteCk7XG4rXHRpbml0X3ZtY3ModmNwdSk7XG4gXG4gXHRpZiAobmVzdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9jaGVja19oYXNfcXVpcmsodmNwdS1cdTAwM2Vrdm0sIEtWTV9YODZfUVVJUktfU1RVRkZfRkVBVFVSRV9NU1JTKSlcbkBAIC02NDE4LDQ4ICs2NDE5LDI1IEBAIHZvaWQgdm14X2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcbiBcdFx0KmVycm9yX2NvZGUgPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuK3N0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGlmICh2bXgtXHUwMDNlcG1sX3BnKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHZteC1cdTAwM2VwbWxfcGcpO1xuLVx0XHR2bXgtXHUwMDNlcG1sX3BnID0gTlVMTDtcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpIHtcbitcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gTlVMTDtcbiBcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgdm14X2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dTE2IHBtbF9pZHgsIHBtbF90YWlsX2luZGV4O1xuLVx0dTY0ICpwbWxfYnVmO1xuLVx0aW50IGk7XG4rXHR1MTYgcG1sX2lkeDtcbiBcbiBcdHBtbF9pZHggPSB2bWNzX3JlYWQxNihHVUVTVF9QTUxfSU5ERVgpO1xuIFxuIFx0LyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovXG4gXHRpZiAocG1sX2lkeCA9PSBQTUxfSEVBRF9JTkRFWClcbiBcdFx0cmV0dXJuO1xuLVx0Lypcbi1cdCAqIFBNTCBpbmRleCBhbHdheXMgcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBQTUwgYnVmZmVyIGVudGl0eVxuLVx0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cbi1cdCAqL1xuLVx0cG1sX3RhaWxfaW5kZXggPSAocG1sX2lkeCBcdTAwM2U9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCArIDE7XG4tXG4tXHQvKlxuLVx0ICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMVxuLVx0ICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uXG4tXHQgKlxuLVx0ICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXRcbi1cdCAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uXG4tXHQgKi9cbi1cdHBtbF9idWYgPSBwYWdlX2FkZHJlc3Modm14LVx1MDAzZXBtbF9wZyk7XG4gXG4tXHRmb3IgKGkgPSBQTUxfSEVBRF9JTkRFWDsgaSBcdTAwM2U9IHBtbF90YWlsX2luZGV4OyBpLS0pIHtcbi1cdFx0dTY0IGdwYTtcbi1cbi1cdFx0Z3BhID0gcG1sX2J1ZltpXTtcbi1cdFx0V0FSTl9PTihncGEgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSk7XG4tXHRcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0fVxuK1x0a3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgcG1sX2lkeCk7XG4gXG4gXHQvKiByZXNldCBQTUwgaW5kZXggKi9cbiBcdHZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTtcbkBAIC03NjQ4LDcgKzc2MjYsNyBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4gXHRpZiAoZW5hYmxlX3BtbClcbi1cdFx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpO1xuK1x0XHR2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHZjcHUpO1xuIFx0ZnJlZV92cGlkKHZteC1cdTAwM2V2cGlkKTtcbiBcdG5lc3RlZF92bXhfZnJlZV92Y3B1KHZjcHUpO1xuIFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MpO1xuQEAgLTc2ODAsOCArNzY1OCw4IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogZm9yIHRoZSBndWVzdCksIGV0Yy5cbiBcdCAqL1xuIFx0aWYgKGVuYWJsZV9wbWwpIHtcbi1cdFx0dm14LVx1MDAzZXBtbF9wZyA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4tXHRcdGlmICghdm14LVx1MDAzZXBtbF9wZylcbitcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbitcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpXG4gXHRcdFx0Z290byBmcmVlX3ZwaWQ7XG4gXHR9XG4gXG5AQCAtNzc1Miw3ICs3NzMwLDcgQEAgaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gZnJlZV92bWNzOlxuIFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MpO1xuIGZyZWVfcG1sOlxuLVx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpO1xuK1x0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTtcbiBmcmVlX3ZwaWQ6XG4gXHRmcmVlX3ZwaWQodm14LVx1MDAzZXZwaWQpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC04NDQwLDIxICs4NDE4LDEzIEBAIHN0YXRpYyB2b2lkIHZteF91cGRhdGVfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcmNlX2ltbWVkaWF0ZV9leGl0XG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFlbmFibGVfcG1sKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Z3VhcmQodm14X3ZtY3MwMSkodmNwdSk7XG4gXG4tXHQvKlxuLVx0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xuLVx0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbi1cdCAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLlxuLVx0ICovXG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZykpXG4rXHRpZiAoZW5hYmxlKVxuIFx0XHRzZWNvbmRhcnlfZXhlY19jb250cm9sc19zZXRiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTtcbiBcdGVsc2VcbiBcdFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuaW5kZXggZGM4NTE3ZjE1YmM0Ni4uNWY1MDVhZDE0ZGRlMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbkBAIC0yNjUsMTMgKzI2NSw2IEBAIHN0cnVjdCB2Y3B1X3ZteCB7XG4gXHR1bnNpZ25lZCBpbnQgcGxlX3dpbmRvdztcbiBcdGJvb2wgcGxlX3dpbmRvd19kaXJ0eTtcbiBcbi1cdC8qIFN1cHBvcnQgZm9yIFBNTCAqL1xuLSNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTXHQ1MTJcbi1cdC8qIFBNTCBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgd3JpdHRlbiBieSB0aGUgQ1BVICovXG4tI2RlZmluZSBQTUxfSEVBRF9JTkRFWFx0XHQoUE1MX0xPR19OUl9FTlRSSUVTLTEpXG4tXG4tXHRzdHJ1Y3QgcGFnZSAqcG1sX3BnO1xuLVxuIFx0LyogYXBpYyBkZWFkbGluZSB2YWx1ZSBpbiBob3N0IHRzYyAqL1xuIFx0dTY0IGh2X2RlYWRsaW5lX3RzYztcbiBcbkBAIC0zOTcsNyArMzkwLDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuIFxuIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xuIGJvb2wgdm14X2lzX3ZhbGlkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDA1NGZkMTRiYjJlMTYuLjQ4MTBmOWIxYjBmYzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0xMTgsNyArMTE4LDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3dyaXRlX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gaW50IHZteF9zZXRfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3Vlc3RfZGVhZGxpbmVfdHNjLFxuIFx0XHQgICAgIGJvb2wgKmV4cGlyZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzk0MSw2ICszOTQxLDM3IEBAIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIFx0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbit2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpXG4re1xuK1x0dTE2IHBtbF90YWlsX2luZGV4O1xuK1x0dTY0ICpwbWxfYnVmO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5XG4rXHQgKiB1bmxlc3MgUE1MIGxvZyBoYXMganVzdCBvdmVyZmxvd2VkLlxuK1x0ICovXG4rXHRwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4IFx1MDAzZT0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICsgMTtcbitcbitcdC8qXG4rXHQgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExXG4rXHQgKiB0aGVuIHRoZSBlbnRyeSA1MTAsIGFuZCBzbyBvbi5cbitcdCAqXG4rXHQgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdFxuK1x0ICogdGhlIGRpcnR5IHJpbmcgaXMgZmlsbGVkIGluIHRoZSBzYW1lIG9yZGVyIHRoZSBDUFUgd3JvdGUgdGhlbS5cbitcdCAqL1xuK1x0cG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpO1xuK1xuK1x0Zm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgXHUwMDNlPSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7XG4rXHRcdHU2NCBncGE7XG4rXG4rXHRcdGdwYSA9IHBtbF9idWZbaV07XG4rXHRcdFdBUk5fT05fT05DRShncGEgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSk7XG4rXHRcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2ZsdXNoX3BtbF9idWZmZXIpO1xuK1xuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIHtcbkBAIC04MDQyLDYgKzgwNzMsMjEgQEAgc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX3g4Nl9jYWxsKHNldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIpKHZjcHUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHQvKlxuK1x0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xuK1x0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbitcdCAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLlxuK1x0ICovXG4rXHRib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1LCBlbmFibGUpO1xuK31cbitcbiAvKlxuICAqIENhbGxlZCB3aXRoaW4ga3ZtLVx1MDAzZXNyY3UgcmVhZCBzaWRlLlxuICAqIFJldHVybnMgMSB0byBsZXQgdmNwdV9ydW4oKSBjb250aW51ZSB0aGUgZ3Vlc3QgZXhlY3V0aW9uIGxvb3Agd2l0aG91dFxuQEAgLTgyMDgsNyArODI1NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0a3ZtX3g4Nl9jYWxsKHJlY2FsY19pbnRlcmNlcHRzKSh2Y3B1KTtcbiBcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVVBEQVRFX0NQVV9ESVJUWV9MT0dHSU5HLCB2Y3B1KSlcbi1cdFx0XHRrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1KTtcbitcdFx0XHRrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFLCB2Y3B1KSkge1xuIFx0XHRcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmQ3NDdjMjA5NjVjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtOTAwLDQgKzkwMCwxMSBAQCBpbnQgX19fX2t2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcGwsXG4gXG4gaW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuKy8qIFN1cHBvcnQgZm9yIFBNTCAqL1xuKyNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTXHQ1MTJcbisvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xuKyNkZWZpbmUgUE1MX0hFQURfSU5ERVhcdFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxuK1xuK3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeCk7XG4rXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMDo1My4xODIwNTY2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTk5OTU4MjYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIGl0IHNpZ25pZmljYW50bHkgdG91Y2hlcyB0aGUgS1ZNIHg4NiBzdWJzeXN0ZW0g4oCTIGFuZCB3ZSdyZSB0YWxraW5nIGJvdGggZ2VuZXJpYyB4ODYsIGFzIHdlbGwgYXMgQU1EJ3MgU1ZNIGFuZCBJbnRlbCdzIFZNWCBpbXBsZW1lbnRhdGlvbnMuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYWRkIHN1cHBvcnQgZm9yIFBNTCAoUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZykgb24gQU1EIFNWTSwgaW5jbHVkaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgU0VWIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uKSBjb25zaWRlcmF0aW9ucy4gVGhlIHdheSBpdCByZWZhY3RvcnMgUE1MIGRpcnR5IGxvZ2dpbmcgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0gYWxzbyBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdlJ3ZlIGdvdCBjaGFuZ2VzIG1vdmluZyBgcG1sX3BhZ2VgIGFyb3VuZCwgZ2VuZXJhbGl6aW5nIGZ1bmN0aW9ucywgYWRkaW5nIG5ldyBjYWxsYmFja3MgbGlrZSBgc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ2AsIGFuZCBzb21lIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIGFyb3VuZCBob3cgdGhlIGxvZ2dpbmcgaXMgaGFuZGxlZCBpbiBib3RoIFZNWCBhbmQgU1ZNLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbmVzdGVkLmNgIGZvciBTVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBlc3BlY2lhbGx5IGhhbmRsaW5nIGBQTUxfRlVMTGAgZXhpdHMgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgdm1jYjAyLVx1MDAzZWNvbnRyb2wucG1sX2luZGV4YCwgYXJlIGRlZmluaXRlbHkgd29ydGggZXhhbWluaW5nLiBJJ20gYWxzbyBzZWVpbmcgbmV3IGBXQVJOX09OX09OQ0VgIGNoZWNrcyBiZWluZyBhZGRlZCwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHZpZXdwb2ludC5cblxuR2l2ZW4gdGhhdCBLVk0gaXMgYSBjZW50cmFsIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCBhbmQgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplcyBpdCBvbiB4ODYsIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuIFdlJ3JlIHRhbGtpbmcgY29yZSBleGVjdXRpb24gcGF0aHMgYmVpbmcgdG91Y2hlZDogYHZjcHVfZW50ZXJfZ3Vlc3RgLCBgc3ZtX2hhbmRsZV9leGl0YCwgYHN2bV92Y3B1X2NyZWF0ZWAsIGFuZCBhIGxvdCBvZiB0aGUgbG9nZ2luZyBmdW5jdGlvbnMuIFRoaXMga2luZCBvZiBpbnRlcmFjdGlvbiB3aXRoIE1NVSwgZGlydHkgbG9nZ2luZywgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGEgZ29sZG1pbmUuXG5cbioqQ29uY2x1c2lvbjoqKiBUaGlzIGlzIGEgZGVmaW5pdGUgXCJZRVNcIiBpbiB0ZXJtcyBvZiBmdXp6aW5nIHBvdGVudGlhbCAoV29ydGhGdXp6aW5nPXRydWUpLiBOb3csIGxldCdzIHNlZSBhYm91dCB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSSdsbCB1c2UgZ3JlcHBlciB0byBncmFiIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgS1ZNLCBLVk1fQU1ELCBhbmQgS1ZNX0lOVEVMIGFuZCB0aGVuIHN0YXJ0IGNyYWZ0aW5nIHNvbWUgZnV6emluZyBzdHJhdGVnaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjA5LjE4MTY0MTk3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjUxNTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTowOS4yNTQxNjM4MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTM3OTA1NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLVk0gQ29tcGlsYXRpb24gZm9yIHg4NioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZXNlIEtWTSBjb21wb25lbnRzIGFyZSBjb21waWxlZCwgc3BlY2lmaWNhbGx5IGZvciB4ODYuIEkndmUgYWxyZWFkeSBiZWVuIGxvb2tpbmcgYXQgc29tZSBvZiB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBzcGVjaWZpY3MgcmVnYXJkaW5nIHdoaWNoIHNvdXJjZSBmaWxlcyBnZXQgY29tcGlsZWQsIGFuZCBob3csIHdpdGhpbiB0aGF0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgdGhvcm91Z2hseSB0byB0cm91Ymxlc2hvb3QgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MTAuNzkyMDczNDM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjY2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cXG4gICA0OlxcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgKz0gLVdlcnJvclxcbiAgIDU6XFx0XFxuICAgNjpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgNzpcXHRcXG4gICA4OlxcdGt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRrdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuICAxMjpcXHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuICAxMzpcXHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG4gIDE0OlxcdGt2bS0kKENPTkZJR19LVk1fWEVOKVxcdCs9IHhlbi5vXFxuICAxNTpcXHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4gIDE5OlxcdFxcbiAgMjA6XFx0a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbiAgMjE6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMjI6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbiAgMjU6XFx0XFxuICAyNjpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbiAgMjc6XFx0a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRpZmRlZiBDT05GSUdfSFlQRVJWXFxuICAzMDpcXHRrdm0teVxcdFxcdFxcdCs9IGt2bV9vbmh5cGVydi5vXFxuICAzMTpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG4gIDMyOlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm1fb25oeXBlcnYub1xcbiAgMzM6XFx0ZW5kaWZcXG4gIDM0OlxcdFxcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9YODYpXFx0Kz0ga3ZtLm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19LVk1fQU1EKVxcdCs9IGt2bS1hbWQub1xcbiAgMzg6XFx0XFxuICAzOTpcXHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbiAgNDA6XFx0JChvYmopL3N2bS92bWVudGVyLm86ICQob2JqKS9rdm0tYXNtLW9mZnNldHMuaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMToxMC43OTIxNDQzMDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODMzNDkwOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gYW5kIFNFViBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBLVk1fQU1EYCBhbmQgYEtWTV9JTlRFTGAuIFRoZXNlLCBvZiBjb3Vyc2UsIGFyZSBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uYWwgYEtWTV9YODZgIGFuZCBgS1ZNYCBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNFViAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbikgaW50ZWdyYXRpb24gZml0cyBpbnRvIHRoaXMgcGljdHVyZS5cblxuSSBzZWUgdGhhdCBgS1ZNX0FNRF9TRVZgIGlzIG1lbnRpb25lZCwgYW5kIHRoZSBgc2V2LmNgIHNvdXJjZSBmaWxlIGlzIGZsYWdnZWQgYXMgcmVsZXZhbnQuIFNwZWNpZmljYWxseSwgYSBjb21tZW50IGNoYW5nZSBhbmQgdGhlIGZ1bmN0aW9uIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgIGhhdmUgcGlxdWVkIG15IGludGVyZXN0LiBUaGF0IGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIGBzdm1fdmNwdV9jcmVhdGVgIHRocm91Z2ggYHNucF9zYWZlX2FsbG9jX3BhZ2UoKWAuIFRoaXMgbWVhbnMgdGhlcmUgbWlnaHQgYmUgc29tZSBjcnVjaWFsIGFsbG9jYXRpb24gbG9naWMgcmVsYXRlZCB0byBzZWN1cmUgbWVtb3J5IGluIHRoZSBBTUQgS1ZNIGVudmlyb25tZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbnBfc2FmZV9hbGxvY19wYWdlYCBpdHNlbGYuIEkgbmVlZCB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBib3RoIGBzZXYuY2AgYW5kIGBzdm0uaGAgdG8gdW5kZXJzdGFuZCB0aGUgbG93LWxldmVsIG1lbW9yeSBhbGxvY2F0aW9uIGhhbmRsaW5nIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgU0VWLXNwZWNpZmljIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBLVk0vQU1EIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjE3LjYyNTY0MDgwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU2MjEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbnBfc2FmZV9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xNDg3PWludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNDkzLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTQ5NDpcXHR2bWNiMDJfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE0OTUtXFx0aWYgKCF2bWNiMDJfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg2Mj1pbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3NS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ4NzY6XFx0dm1zYV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3Ny1cXHRpZiAoIXZtc2FfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDk0OD12b2lkIHNldl92Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTg1OnN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODYte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz02MTk9c3RhdGljIGludCBzdm1fY3B1X2luaXQoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI1LVxcdG1lbXNldChzZCwgMCwgc2l6ZW9mKHN0cnVjdCBzdm1fY3B1X2RhdGEpKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjYyNjpcXHRzYXZlX2FyZWFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShjcHVfdG9fbm9kZShjcHUpLCBHRlBfS0VSTkVMKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTYyNy1cXHRpZiAoIXNhdmVfYXJlYV9wYWdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xMzM1PXN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0NC1cXHRlcnIgPSAtRU5PTUVNO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MTM0NTpcXHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNDYtXFx0aWYgKCF2bWNiMDFfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0OS1cXHRpZiAocG1sKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxMzUwOlxcdFxcdHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzUxLVxcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTQxND1zdGF0aWMgdm9pZCAqc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTUte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQxNjpcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5Mz1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5NzpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTk4OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5OS17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAwOlxcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDAxLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAyMD12b2lkIHNldl9mcmVlX2RlY3J5cHRlZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp2bXNhKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjEtI2Vsc2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyOC17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI5OlxcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MTcuNzAyMjA3NjY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ2NTUzODQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIGZvciBLVk0gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgZm9jdXMgc3ltYm9scywgZ2l2ZW4gdGhlc2UgcmVjZW50IG1vZGlmaWNhdGlvbnMgYW5kIGFkZGl0aW9ucyB0byB0aGUgS1ZNIGNvZGUuIE15IHByaW1hcnkgZ29hbCBpcyB0byBwaWNrIG5vbi11YmlxdWl0b3VzLCBoaWdobHkgdGFyZ2V0ZWQgc3ltYm9scyBmb3IgYW5hbHlzaXMuXG5cbkZpcnN0LCBJJ3ZlIGdvdCB0byByZXZpZXcgdGhlIG1vZGlmaWVkIGFuZCBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYWNyb3NzIHRoZSByZWxldmFudCBmaWxlczogYGFyY2gveDg2L2t2bS94ODYuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIC8gYG1haW4uY2AuIEkndmUgZ29uZSB0aHJvdWdoIHRoZSBsaXN0cyBhbmQgaGF2ZSBhIHNob3J0IGxpc3Qgb2YgZnVuY3Rpb25zOlxuXG4qICAgYGt2bV9mbHVzaF9wbWxfYnVmZmVyYFxuKiAgIGBrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYFxuKiAgIGBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYFxuKiAgIGBzdm1fZmx1c2hfcG1sX2J1ZmZlcmBcbiogICBgcG1sX2Z1bGxfaW50ZXJjZXB0aW9uYFxuKiAgIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbGBcbiogICBgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWxgXG4qICAgYHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdgXG4qICAgYHZteF9mbHVzaF9wbWxfYnVmZmVyYFxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgdWJpcXVpdG91cyBrZXJuZWwgaG90c3BvdHMuIFRoZXkgYXBwZWFyIHRvIGJlIHNwZWNpZmljIHRvIEtWTSwgUE1MLCBkaXJ0eSBsb2dnaW5nLCBhbmQgbmVzdGVkIFNWTS4gTm8gb2J2aW91cyBpc3N1ZXMgaGVyZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGZvbGxvd2luZyBjb25maWdzOlxuXG4qICAgYEtWTWBcbiogICBgS1ZNX0FNRGBcbiogICBgS1ZNX0lOVEVMYFxuKiAgIGBLVk1fWDg2YFxuKiAgIGBWSVJUVUFMSVpBVElPTmBcblxuTG9va3MgbGlrZSBldmVyeXRoaW5nIGlzIHVuZGVyIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2Agb3IgYGFyY2gveDg2L0tjb25maWdgIGFuZCBgYXJjaC9LY29uZmlnYC5cbldpdGggdGhlIHN5bWJvbHMgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkLCBJIGNhbiBub3cgcHJvY2VlZCB0byBhbmFseXplIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2ODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjI3LjE2Nzc1MDUwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNzcxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAoS1ZNfFZJUlRVQUxJWkFUSU9OKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTgzMD1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODMxLVxcbmFyY2gveDg2L0tjb25maWc6ODMyOmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjI3LjI5ODUyNzExMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODA0MDMxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdC4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGV2ZXJ5dGhpbmcgaXMgY3J5c3RhbCBjbGVhci4gV2UncmUgZGVmaW5pdGVseSBmdXp6aW5nIHRoaXMsIHdoaWNoIGlzIGdvb2QuIFRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBzZXQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBhY3Jvc3MgS1ZNLCBhbmQgc3BlY2lmaWNhbGx5IGZvciBBTUQgYW5kIEludGVsIGhhcmR3YXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIGZvY3VzIHN5bWJvbHMgbGlzdGVkOyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGltcGFjdGVkLCBvciBhcmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLlxuXG5CYXNlZCBvbiB0aGUgc3ltYm9scywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nLCBvciBQTUwsIGFuZCBpdCdzIGJlaW5nIGltcGxlbWVudGVkIGFuZCByZWZhY3RvcmVkIGZvciBBTUQncyBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGFuZCB0aGUgZXhpc3RpbmcgZ2VuZXJpYyB4ODYgS1ZNIGNvZGUsIGFzIHdlbGwgYXMgSW50ZWwncyBWTVguIFRoZSBmdW5jdGlvbiBuYW1lcyBwb2ludCB0byBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyBkaXJ0eSBsb2dnaW5nIGlzIGhhbmRsZWQgYWNyb3NzIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gcGF0aHMuIFdlJ3ZlIGdvdCBuZXcgZXhpdCBoYW5kbGVycyBmb3IgaGFuZGxpbmcgc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lIGV4aXRzLCBpbmNsdWRpbmcgbmVzdGVkIFNWTSBleGl0cywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBUaGVyZSdzIGFsc28gYnVmZmVyIGZsdXNoaW5nIGxvZ2ljLCBhbmQgdXBkYXRlcyB0byB0aGUgZGlydHkgbG9nZ2luZyBzdGF0ZSBjb250cm9sIGluIGtleSB2aXJ0dWFsaXphdGlvbiByb3V0aW5lcy4gVGhlIG1haW4gdGhpbmcgaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdmVyeSBsb3ctbGV2ZWwgdmlydHVhbGl6YXRpb24gZGV0YWlscyBhbmQgbWFuYWdlbWVudCBvZiBob3cgbWVtb3J5IHBhZ2VzIGFyZSB0cmFja2VkLCBwb3RlbnRpYWxseSB0byBvcHRpbWl6ZSBob3cgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lcyBhcmUgbWFuYWdlZC5cblxuSSdtIHJlYWR5IHRvIG1hcmsgdGhpcyBhcyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwMiwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzIuMTAyNTYxNzg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjI4NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nXCIsXG4gICAgXCJzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nXCIsXG4gICAgXCJzdm1fZmx1c2hfcG1sX2J1ZmZlclwiLFxuICAgIFwicG1sX2Z1bGxfaW50ZXJjZXB0aW9uXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2V4aXRfc3BlY2lhbFwiLFxuICAgIFwibmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2xcIixcbiAgICBcInZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInZteF9mbHVzaF9wbWxfYnVmZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2ZsdXNoX3BtbF9idWZmZXJcIixcbiAgICBcImt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJwbWxfZnVsbF9pbnRlcmNlcHRpb25cIixcbiAgICBcIm5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsXCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbFwiLFxuICAgIFwidm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ1wiLFxuICAgIFwidm14X2ZsdXNoX3BtbF9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgZGlydHkgbG9nZ2luZyBzdXBwb3J0IGZvciBBTUQgU1ZNIGFuZCByZWZhY3RvcnMgdGhlIHNoYXJlZCBQTUwgYnVmZmVyIGZsdXNoaW5nIGFuZCBkaXJ0eSBsb2dnaW5nIHN0YXRlIG1hY2hpbmUgYWNyb3NzIHg4NiBLVk0sIEludGVsIFZNWCwgYW5kIEFNRCBTVk0uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29kZSBwYXRocyBpbiBLVk0gYW5kIGFmZmVjdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIGV4aXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjMyLjIzNzIwNTI1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDc0MDY0NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTozMi4yMzgzMDEzNjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDYwNjMwMjczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQU1EIFNWTSBzdXBwb3J0IGZvciBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGFuZCBjb25zb2xpZGF0ZXMgc2hhcmVkIFBNTCBoYW5kbGluZyBsb2dpYyBiZXR3ZWVuIEludGVsIFZNWCBhbmQgQU1EIFNWTS5cXG5cXG5BbGwgYWxsb2NhdGVkIFBNTCBidWZmZXIgcGFnZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24gdGltZSB2aWEgYF9fR0ZQX1pFUk9gIChpbiBgYWxsb2NfcGFnZWAgYW5kIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoZS5nLiBgY29weV90b191c2VyYCwgaW9jdGwgb3V0cHV0cyksIGRvIG5vdCBsZWF2ZSBhbnkgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbnRyb2wtZmxvdyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uOyBzdGFuZGFyZCBLQVNBTiBhbmQgZnVuY3Rpb25hbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4YjUzMTI3NzlkZDY0ZGJjNjMxMWEyMzZmZDI2MGEzNDkzODFkZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLmNiZmNjNjZhMThlOWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtMjM4LDYgKzIzOCw3IEBAXG4gLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzIrMjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMisyMikgLyogXCJ0ZHhfZ3Vlc3RcIiBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUE1MXHRcdFx0KCA4KjMyKzIzKSAvKiBBTUQgUGFnZSBNb2RpZmljYXRpb24gbG9nZ2luZyAqL1xuIFxuIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDA3OjAgKEVCWCksIHdvcmQgOSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfRlNHU0JBU0VcdFx0KCA5KjMyKyAwKSAvKiBcImZzZ3NiYXNlXCIgUkRGU0JBU0UsIFdSRlNCQVNFLCBSREdTQkFTRSwgV1JHU0JBU0UgaW5zdHJ1Y3Rpb25zKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggM2FmNzM5NWMyNDMwYS4uMmRlYmY2Mjk0MjkwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC03ODksNiArNzg5LDggQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X2V4dGVybmFsX3NwdF9jYWNoZTtcbiBcbitcdHN0cnVjdCBwYWdlICpwbWxfcGFnZTtcbitcbiBcdC8qXG4gXHQgKiBRRU1VIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0IGVhY2ggaGF2ZSB0aGVpciBvd24gRlBVIHN0YXRlLlxuIFx0ICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuXG5AQCAtMTY3MCw3ICsxNjcyLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdFx0XHQgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbik7XG4gXHR2b2lkICgqaGFuZGxlX2V4aXRfaXJxb2ZmKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuLVx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitcdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuIFxuIFx0dm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXHR2b2lkICgqdmNwdV91bmJsb2NraW5nKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGFhNjM0MzFiYTkyYzMuLmUwYTc1NDlhN2M3MjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC0xNjUsNyArMTY1LDEwIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiBcdHU4IHJlc2VydmVkXzlbMjJdO1xuIFx0dTY0IGFsbG93ZWRfc2V2X2ZlYXR1cmVzO1x0LyogT2Zmc2V0IDB4MTM4ICovXG4gXHR1NjQgZ3Vlc3Rfc2V2X2ZlYXR1cmVzO1x0XHQvKiBPZmZzZXQgMHgxNDAgKi9cbi1cdHU4IHJlc2VydmVkXzEwWzY2NF07XG4rXHR1OCByZXNlcnZlZF8xMFsxMjhdO1xuK1x0dTY0IHBtbF9hZGRyO1x0XHRcdC8qIE9mZnNldCAweDFjOCAqL1xuK1x0dTE2IHBtbF9pbmRleDtcdFx0XHQvKiBPZmZzZXQgMHgxZDAgKi9cbitcdHU4IHJlc2VydmVkXzExWzUyNl07XG4gXHQvKlxuIFx0ICogT2Zmc2V0IDB4M2UwLCAzMiBieXRlcyByZXNlcnZlZFxuIFx0ICogZm9yIHVzZSBieSBoeXBlcnZpc29yL3NvZnR3YXJlLlxuQEAgLTI0MCwxMCArMjQzLDExIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiAjZGVmaW5lIFNWTV9JT0lPX1NJWkVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0lPSU9fU0laRV9TSElGVClcbiAjZGVmaW5lIFNWTV9JT0lPX0FTSVpFX01BU0sgKDcgXHUwMDNjXHUwMDNjIFNWTV9JT0lPX0FTSVpFX1NISUZUKVxuIFxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXHRcdEJJVCgwKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVlx0XHRCSVQoMSlcbi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZfRVNcdEJJVCgyKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX0dNRVRcdEJJVCgzKVxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXHRcdEJJVF9VTEwoMClcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZcdFx0QklUX1VMTCgxKVxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1x0XHRCSVRfVUxMKDIpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0XHRCSVRfVUxMKDMpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfUE1MXHRcdEJJVF9VTEwoMTEpXG4gXG4gI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSXHRCSVRfVUxMKDApXG4gI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfVk1MT0FEX1ZNU0FWRVx0QklUX1VMTCgxKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXG5pbmRleCAwMTBhNDVjOWY2MTQ3Li5lODA2NzYxODUwOTIxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaFxuQEAgLTEwMSw2ICsxMDEsNyBAQFxuICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSVx0XHQweDQwMVxuICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTU1x0MHg0MDJcbiAjZGVmaW5lIFNWTV9FWElUX1ZNR0VYSVQgICAgICAgMHg0MDNcbisjZGVmaW5lIFNWTV9FWElUX1BNTF9GVUxMXHQweDQwN1xuIFxuIC8qIFNFVi1FUyBzb2Z0d2FyZS1kZWZpbmVkIFZNR0VYSVQgZXZlbnRzICovXG4gI2RlZmluZSBTVk1fVk1HRVhJVF9NTUlPX1JFQURcdFx0XHQweDgwMDAwMDAxdWxsXG5AQCAtMjM2LDYgKzIzNyw3IEBAXG4gXHR7IFNWTV9FWElUX0FWSUNfSU5DT01QTEVURV9JUEksXHRcdFwiYXZpY19pbmNvbXBsZXRlX2lwaVwiIH0sIFxcXG4gXHR7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgXCJhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzXCIgfSwgXFxcbiBcdHsgU1ZNX0VYSVRfVk1HRVhJVCxcdFx0XCJ2bWdleGl0XCIgfSwgXFxcbitcdHsgU1ZNX0VYSVRfUE1MX0ZVTEwsXHRcdFwicG1sX2Z1bGxcIiB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9NTUlPX1JFQUQsXHRcInZtZ2V4aXRfbW1pb19yZWFkXCIgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTU1JT19XUklURSxcdFwidm1nZXhpdF9tbWlvX3dyaXRlXCIgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTk1JX0NPTVBMRVRFLFx0XCJ2bWdleGl0X25taV9jb21wbGV0ZVwiIH0sIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbmluZGV4IDg2NjVhNjQ3NDgwNmMuLmIxOGNjOWM4OGRkNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5AQCAtNTUsNiArNTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7XG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9GQVNUX0NQUEMsXHRcdENQVUlEX0VEWCwgMTUsIDB4ODAwMDAwMDcsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQ1BQQ19QRVJGX1BSSU8sXHRcdENQVUlEX0VEWCwgMTYsIDB4ODAwMDAwMDcsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfTUJBLFx0XHRcdENQVUlEX0VCWCwgIDYsIDB4ODAwMDAwMDgsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUE1MLFx0XHRcdENQVUlEX0VDWCwgIDQsIDB4ODAwMDAwMGEsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCxcdFx0Q1BVSURfRUNYLCAgNiwgMHg4MDAwMDAwYSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DT0hFUkVOQ1lfU0ZXX05PLFx0XHRDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX1NNQkEsXHRcdFx0Q1BVSURfRUJYLCAgMiwgMHg4MDAwMDAyMCwgMCB9LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCA3M2YzN2IwNTBkMGEwLi5kYTQxN2M0YzU5MTU0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTkwMSw2ICs5MDEsMTMgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHR2bWNiMDItXHUwMDNlY29udHJvbC5tc3JwbV9iYXNlX3BhID0gdm1jYjAxLVx1MDAzZWNvbnRyb2wubXNycG1fYmFzZV9wYTtcbiBcdHZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfUEVSTV9NQVApO1xuIFxuK1x0LypcbitcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuXG4rXHQgKiB1bmV4cGVjdGVkIFBNTCB3cml0ZSB3b3VsZCB0cmlnZ2VyIGEgUE1MX0ZVTEwgVk0tRXhpdC5cbitcdCAqL1xuK1x0aWYgKHBtbClcbitcdFx0dm1jYjAyLVx1MDAzZWNvbnRyb2wucG1sX2luZGV4ID0gLTE7XG4rXG4gXHQvKlxuIFx0ICogU3Rhc2ggdm1jYjAyJ3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbid0IG1vdmVkIHBhc3QgdGhlIGd1aWx0eVxuIFx0ICogaW5zdHJ1Y3Rpb247IG90aGVyd2lzZSwgcmVzZXQgdGhlIGNvdW50ZXIgdG8gJzAnLlxuQEAgLTE4MjAsNiArMTgyNywxMyBAQCBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdGlmIChuZXN0ZWRfc3ZtX2lzX2wyX3RsYl9mbHVzaF9oY2FsbCh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFNWTV9FWElUX1BNTF9GVUxMOlxuK1x0XHQvKlxuK1x0XHQgKiBBbGwgUE1MIGZ1bGwgZXhpdHMgYXJlIGhhbmRsZWQgYnkgS1ZNLiAgS1ZNIGVtdWxhdGVzIFBNTCBpblxuK1x0XHQgKiBzb2Z0d2FyZSBmb3IgTDEsIGJ1dCBuZXZlciBlbmFibGVzIFBNTCBpbiBoYXJkd2FyZSBvbiBiZWhhbGZcbitcdFx0ICogb2YgTDEuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5jZmU5OTBmODA1MDQwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTQ5OTQsNyArNDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcbiBcdCAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmVcbiBcdCAqIHRoZSBDUFUgd2lsbCBpbmNvcnJlY3RseSBzaWduYWwgYW4gUk1QIHZpb2xhdGlvbiAjUEYgaWYgYVxuIFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXG4tXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbitcdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIFBNTCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbiBcdCAqXG4gXHQgKiBBbGxvY2F0ZSBvbmUgZXh0cmEgcGFnZSwgY2hvb3NlIGEgcGFnZSB3aGljaCBpcyBub3RcbiBcdCAqIDJNQi1hbGlnbmVkLCBhbmQgZnJlZSB0aGUgb3RoZXIuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IDdkNTlkMzAxZTFlNTQuLjk1MGMyNTBhNzdiNTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTc5LDYgKzE3OSw5IEBAIG1vZHVsZV9wYXJhbSh2bm1pLCBib29sLCAwNDQ0KTtcbiBcbiBtb2R1bGVfcGFyYW0oZW5hYmxlX21lZGlhdGVkX3BtdSwgYm9vbCwgMDQ0NCk7XG4gXG4rYm9vbCBfX3JvX2FmdGVyX2luaXQgcG1sID0gdHJ1ZTtcbittb2R1bGVfcGFyYW0ocG1sLCBib29sLCAwNDQ0KTtcbitcbiBzdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgc3ZtX2dwX2VycmF0dW1faW50ZXJjZXB0ID0gdHJ1ZTtcbiBcbiBzdGF0aWMgdTggcnNtX2luc19ieXRlc1tdID0gXCJcXHgwZlxceGFhXCI7XG5AQCAtMTI2Nyw2ICsxMjcwLDIzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcbiBcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKVxuIFx0XHRzdm1fc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9CVVNMT0NLKTtcbiBcbitcdGlmIChwbWwpIHtcbitcdFx0LypcbitcdFx0ICogUG9wdWxhdGUgdGhlIHBhZ2UgYWRkcmVzcyBhbmQgaW5kZXggaGVyZSwgUE1MIGlzIGVuYWJsZWRcbitcdFx0ICogd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgb24gdGhlIG1lbXNsb3QgdGhyb3VnaFxuK1x0XHQgKiBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKClcbitcdFx0ICovXG4rXHRcdGNvbnRyb2wtXHUwMDNlcG1sX2FkZHIgPSAodTY0KV9fc21lX3NldChwYWdlX3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBWTUNCIGNvbnRyb2wgYXJlYSByZW1haW5zIHZhbGlkIGFmdGVyIGFuIGludGVyY2VwdGVkIFNIVVRET1dOXG4rXHRcdCAqIChBTUQgQVBNIFJldiAzLjQ1KyksIHNvIG9ubHkgaW5pdGlhbGl6ZSBQTUwgaW5kZXggb24gcmVzZXQgdG8gYXZvaWRcbitcdFx0ICogZGlzY2FyZGluZyBhbHJlYWR5LWxvZ2dlZCBlbnRyaWVzIHRoYXQgaGF2ZW4ndCBiZWVuIGZsdXNoZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluaXRfZXZlbnQpXG4rXHRcdFx0Y29udHJvbC1cdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcbitcdH1cbitcbiBcdGlmIChpc19zZXZfZ3Vlc3QodmNwdSkpXG4gXHRcdHNldl9pbml0X3ZtY2Ioc3ZtLCBpbml0X2V2ZW50KTtcbiBcbkBAIC0xMzI2LDkgKzEzNDYsMTUgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2bWNiMDFfcGFnZSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRpZiAocG1sKSB7XG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbitcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpXG4rXHRcdFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcbitcdH1cbitcbiBcdGVyciA9IHNldl92Y3B1X2NyZWF0ZSh2Y3B1KTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyb3JfZnJlZV92bWNiX3BhZ2U7XG4rXHRcdGdvdG8gZXJyb3JfZnJlZV9wbWxfcGFnZTtcbiBcbiBcdGVyciA9IGF2aWNfaW5pdF92Y3B1KHN2bSk7XG4gXHRpZiAoZXJyKVxuQEAgLTEzNTMsNiArMTM3OSw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4rZXJyb3JfZnJlZV9wbWxfcGFnZTpcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpXG4rXHRcdF9fZnJlZV9wYWdlKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG4gXHRfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7XG4gb3V0OlxuQEAgLTEzNzAsNiArMTM5OSw5IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcbiBcbitcdGlmIChwbWwgXHUwMDI2XHUwMDI2IHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbitcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbitcbiBcdF9fZnJlZV9wYWdlKF9fc21lX3BhX3RvX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IwMS5wYSkpO1xuIFx0c3ZtX3ZjcHVfZnJlZV9tc3JwbShzdm0tXHUwMDNlbXNycG0pO1xuIH1cbkBAIC0zMzQ0LDYgKzMzNzYsNDUgQEAgc3RhdGljIGludCB2bW1jYWxsX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHZjcHUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4rXHRzdHJ1Y3Qgdm1jYiAqdm1jYjAxID0gc3ZtLVx1MDAzZXZtY2IwMS5wdHI7XG4rXG4rXHRpZiAoZW5hYmxlKVxuK1x0XHR2bWNiMDEtXHUwMDNlY29udHJvbC5taXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfUE1MO1xuK1x0ZWxzZVxuK1x0XHR2bWNiMDEtXHUwMDNlY29udHJvbC5taXNjX2N0bCBcdTAwMjY9IH5TVk1fTUlTQ19FTkFCTEVfUE1MO1xuK1xuK1x0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMSwgVk1DQl9OUFQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4rXHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sO1xuK1xuK1x0LyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovXG4rXHRpZiAoY29udHJvbC1cdTAwM2VwbWxfaW5kZXggPT0gUE1MX0hFQURfSU5ERVgpXG4rXHRcdHJldHVybjtcbitcbitcdGt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4KTtcbitcbitcdC8qIFJlc2V0IHRoZSBQTUwgaW5kZXggKi9cbitcdGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4ID0gUE1MX0hFQURfSU5ERVg7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG1sX2Z1bGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR0cmFjZV9rdm1fcG1sX2Z1bGwodmNwdS1cdTAwM2V2Y3B1X2lkKTtcbitcbitcdC8qXG4rXHQgKiBQTUwgYnVmZmVyIGlzIGFscmVhZHkgZmx1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN2bV9oYW5kbGVfZXhpdCgpLlxuK1x0ICogTm90aGluZyB0byBkbyBoZXJlLlxuK1x0ICovXG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4gXHRbU1ZNX0VYSVRfUkVBRF9DUjBdXHRcdFx0PSBjcl9pbnRlcmNlcHRpb24sXG4gXHRbU1ZNX0VYSVRfUkVBRF9DUjNdXHRcdFx0PSBjcl9pbnRlcmNlcHRpb24sXG5AQCAtMzQyMSw2ICszNDkyLDcgQEAgc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuIFx0W1NWTV9FWElUX1ZNR0VYSVRdXHRcdFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXG4gI2VuZGlmXG4rXHRbU1ZNX0VYSVRfUE1MX0ZVTExdXHRcdFx0PSBwbWxfZnVsbF9pbnRlcmNlcHRpb24sXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTM0NzAsOCArMzU0MiwxNCBAQCBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwiZXhpdF9pbmZvMjpcIiwgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG4gXHRwcl9lcnIoXCIlLTIwcyUwOHhcXG5cIiwgXCJleGl0X2ludF9pbmZvOlwiLCBjb250cm9sLVx1MDAzZWV4aXRfaW50X2luZm8pO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDh4XFxuXCIsIFwiZXhpdF9pbnRfaW5mb19lcnI6XCIsIGNvbnRyb2wtXHUwMDNlZXhpdF9pbnRfaW5mb19lcnIpO1xuLVx0cHJfZXJyKFwiJS0yMHMlbGxkXFxuXCIsIFwibWlzY19jdGw6XCIsIGNvbnRyb2wtXHUwMDNlbWlzY19jdGwpO1xuK1x0cHJfZXJyKFwiJS0yMHMlbGx4XFxuXCIsIFwibWlzY19jdGw6XCIsIGNvbnRyb2wtXHUwMDNlbWlzY19jdGwpO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwibmVzdGVkX2NyMzpcIiwgY29udHJvbC1cdTAwM2VuZXN0ZWRfY3IzKTtcbitcbitcdGlmIChwbWwpIHtcbitcdFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwicG1sX2FkZHI6XCIsIGNvbnRyb2wtXHUwMDNlcG1sX2FkZHIpO1xuK1x0XHRwcl9lcnIoXCIlLTIwcyUwNHhcXG5cIiwgXCJwbWxfaW5kZXg6XCIsIGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4KTtcbitcdH1cbitcbiBcdHByX2VycihcIiUtMjBzJTAxNmxseFxcblwiLCBcImF2aWNfdmFwaWNfYmFyOlwiLCBjb250cm9sLVx1MDAzZWF2aWNfdmFwaWNfYmFyKTtcbiBcdHByX2VycihcIiUtMjBzJTAxNmxseFxcblwiLCBcImdoY2I6XCIsIGNvbnRyb2wtXHUwMDNlZ2hjYl9ncGEpO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDh4XFxuXCIsIFwiZXZlbnRfaW5qOlwiLCBjb250cm9sLVx1MDAzZWV2ZW50X2luaik7XG5AQCAtMzY0OSw2ICszNzI3LDEzIEBAIGludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSlcbiBcdCAgICAodTY0KWV4aXRfY29kZSAhPSBfX2V4aXRfY29kZSlcbiBcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbiBcbitcdC8qXG4rXHQgKiBQTUwgaXMgbmV2ZXIgZW5hYmxlZCB3aGVuIHJ1bm5pbmcgTDIsIGJhaWwgaW1tZWRpYXRlbHkgaWYgYSBQTUwgZnVsbFxuK1x0ICogZXhpdCBvY2N1cnMgYXMgc29tZXRoaW5nIGlzIGhvcnJpYmx5IHdyb25nLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgZXhpdF9jb2RlID09IFNWTV9FWElUX1BNTF9GVUxMKSlcbitcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbitcbiAjaWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXG4gXHRpZiAoZXhpdF9jb2RlID09IFNWTV9FWElUX01TUilcbiBcdFx0cmV0dXJuIG1zcl9pbnRlcmNlcHRpb24odmNwdSk7XG5AQCAtMzcxNyw2ICszODAyLDE0IEBAIHN0YXRpYyBpbnQgc3ZtX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtXHUwMDNlcnVuO1xuIFxuK1x0LypcbitcdCAqIE9wcG9ydHVuaXN0aWNhbGx5IGZsdXNoIHRoZSBQTUwgYnVmZmVyIG9uIFZNIGV4aXQuIFRoaXMga2VlcHMgdGhlXG4rXHQgKiBkaXJ0eSBiaXRtYXAgY3VycmVudCBieSBwcm9jZXNzaW5nIGxvZ2dlZCBHUEFzIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yXG4rXHQgKiBQTUxfRlVMTCBleGl0LlxuK1x0ICovXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUgXHUwMDI2XHUwMDI2ICFpc19ndWVzdF9tb2RlKHZjcHUpKVxuK1x0XHRzdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1KTtcbitcbiBcdGlmICh1bmxpa2VseShleGl0X2Zhc3RwYXRoID09IEVYSVRfRkFTVFBBVEhfRVhJVF9VU0VSU1BBQ0UpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC01MzExLDYgKzU0MDQsOSBAQCBzdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICghcGF1c2VfZmlsdGVyX2NvdW50IHx8ICFwYXVzZV9maWx0ZXJfdGhyZXNoKVxuIFx0XHRrdm1fZGlzYWJsZV9leGl0cyhrdm0sIEtWTV9YODZfRElTQUJMRV9FWElUU19QQVVTRSk7XG4gXG4rXHRpZiAocG1sKVxuK1x0XHRrdm0tXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUgPSBQTUxfTE9HX05SX0VOVFJJRVM7XG4rXG4gXHRzdm1fc3Jzb192bV9pbml0KCk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQyOSw2ICs1NTI1LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCxcbiBcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuK1x0LnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcsXG4rXG4gXHQuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsXG4gXHQucGlfdXBkYXRlX2lydGUgPSBhdmljX3BpX3VwZGF0ZV9pcnRlLFxuIFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXG5AQCAtNTY4OSw2ICs1Nzg3LDEwIEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFxuIFx0bnJpcHMgPSBucmlwcyBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTtcbiBcbitcdHBtbCA9IHBtbCBcdTAwMjZcdTAwMjYgbnB0X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUE1MKTtcbitcdGlmIChwbWwpXG4rXHRcdHByX2luZm8oXCJQYWdlIG1vZGlmaWNhdGlvbiBsb2dnaW5nIHN1cHBvcnRlZFxcblwiKTtcbitcbiBcdGlmIChsYnJ2KSB7XG4gXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKVxuIFx0XHRcdGxicnYgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC01Myw2ICs1Myw3IEBAIGV4dGVybiBpbnQgdmdpZjtcbiBleHRlcm4gYm9vbCBpbnRlcmNlcHRfc21pO1xuIGV4dGVybiBib29sIHZubWk7XG4gZXh0ZXJuIGludCBsYnJ2O1xuK2V4dGVybiBib29sIHBtbDtcbiBcbiBleHRlcm4gaW50IHRzY19hdXhfdXJldF9zbG90IF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li5lNzdiNWI3MzEyNzVjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTA4LDcgKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHR2bXhfdmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4ge1xuIFx0LypcbiBcdCAqIEJhc2ljIFREWCBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUgUE1MLiBLVk0gZG9lcyBub3QgZW5hYmxlIFBNTCBpblxuQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKFdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTtcbitcdHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSwgZW5hYmxlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTQ4ODMsMTAgKzQ4ODMsMTEgQEAgaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gI2RlZmluZSBWTVhfWFNTX0VYSVRfQklUTUFQIDBcbiBcbi1zdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4rc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtICprdm0gPSB2bXgtXHUwMDNldmNwdS5rdm07XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBrdm1fdm14ICprdm1fdm14ID0gdG9fa3ZtX3ZteChrdm0pO1xuK1x0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4gXHRpZiAobmVzdGVkKVxuIFx0XHRuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAoKTtcbkBAIC00OTExLDcgKzQ5MTIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRpZiAoY3B1X2hhc190ZXJ0aWFyeV9leGVjX2N0cmxzKCkpXG4gXHRcdHRlcnRpYXJ5X2V4ZWNfY29udHJvbHNfc2V0KHZteCwgdm14X3RlcnRpYXJ5X2V4ZWNfY29udHJvbCh2bXgpKTtcbiBcbi1cdGlmIChlbmFibGVfYXBpY3YgXHUwMDI2XHUwMDI2IGxhcGljX2luX2tlcm5lbChcdTAwMjZ2bXgtXHUwMDNldmNwdSkpIHtcbitcdGlmIChlbmFibGVfYXBpY3YgXHUwMDI2XHUwMDI2IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xuIFx0XHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7XG4gXHRcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTtcbiBcdFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApO1xuQEAgLTQ5MjMsNyArNDkyNCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdFx0dm1jc193cml0ZTY0KFBPU1RFRF9JTlRSX0RFU0NfQUREUiwgX19wYSgoXHUwMDI2dm14LVx1MDAzZXZ0LnBpX2Rlc2MpKSk7XG4gXHR9XG4gXG4tXHRpZiAodm14X2Nhbl91c2VfaXBpdihcdTAwMjZ2bXgtXHUwMDNldmNwdSkpIHtcbitcdGlmICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChQSURfUE9JTlRFUl9UQUJMRSwgX19wYShrdm1fdm14LVx1MDAzZXBpZF90YWJsZSkpO1xuIFx0XHR2bWNzX3dyaXRlMTYoTEFTVF9QSURfUE9JTlRFUl9JTkRFWCwga3ZtLVx1MDAzZWFyY2gubWF4X3ZjcHVfaWRzIC0gMSk7XG4gXHR9XG5AQCAtNDk1OCwxNSArNDk1OSwxNSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHR2bWNzX3dyaXRlNjQoVk1fRU5UUllfTVNSX0xPQURfQUREUiwgX19wYSh2bXgtXHUwMDNlbXNyX2F1dG9sb2FkLmd1ZXN0LnZhbCkpO1xuIFxuIFx0aWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCBcdTAwMjYgVk1fRU5UUllfTE9BRF9JQTMyX1BBVClcbi1cdFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2bXgtXHUwMDNldmNwdS5hcmNoLnBhdCk7XG4rXHRcdHZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgdmNwdS1cdTAwM2VhcmNoLnBhdCk7XG4gXG4gXHR2bV9leGl0X2NvbnRyb2xzX3NldCh2bXgsIHZteF9nZXRfaW5pdGlhbF92bWV4aXRfY3RybCgpKTtcbiBcbiBcdC8qIDIyLjIuMSwgMjAuOC4xICovXG4gXHR2bV9lbnRyeV9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1lbnRyeV9jdHJsKCkpO1xuIFxuLVx0dm14LVx1MDAzZXZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyA9IHZteF9sMV9ndWVzdF9vd25lZF9jcjBfYml0cygpO1xuLVx0dm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfnZteC1cdTAwM2V2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7XG4rXHR2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dmNwdS1cdTAwM2VhcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTtcbiBcbiBcdHNldF9jcjRfZ3Vlc3RfaG9zdF9tYXNrKHZteCk7XG4gXG5AQCAtNDk3NywxMSArNDk3OCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdHZtY3Nfd3JpdGU2NChYU1NfRVhJVF9CSVRNQVAsIFZNWF9YU1NfRVhJVF9CSVRNQVApO1xuIFxuIFx0aWYgKGVuYWJsZV9wbWwpIHtcbi1cdFx0dm1jc193cml0ZTY0KFBNTF9BRERSRVNTLCBwYWdlX3RvX3BoeXModm14LVx1MDAzZXBtbF9wZykpO1xuK1x0XHR2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpKTtcbiBcdFx0dm1jc193cml0ZTE2KEdVRVNUX1BNTF9JTkRFWCwgUE1MX0hFQURfSU5ERVgpO1xuIFx0fVxuIFxuLVx0dm14X3dyaXRlX2VuY2xzX2JpdG1hcChcdTAwMjZ2bXgtXHUwMDNldmNwdSwgTlVMTCk7XG4rXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKHZjcHUsIE5VTEwpO1xuIFxuIFx0aWYgKHZteF9wdF9tb2RlX2lzX2hvc3RfZ3Vlc3QoKSkge1xuIFx0XHRtZW1zZXQoXHUwMDI2dm14LVx1MDAzZXB0X2Rlc2MsIDAsIHNpemVvZih2bXgtXHUwMDNlcHRfZGVzYykpO1xuQEAgLTQ5OTQsMTMgKzQ5OTUsMTMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCAwKTtcbiBcdHZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VJUCwgMCk7XG4gXG4tXHR2bXhfZ3Vlc3RfZGVidWdjdGxfd3JpdGUoXHUwMDI2dm14LVx1MDAzZXZjcHUsIDApO1xuK1x0dm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKHZjcHUsIDApO1xuIFxuIFx0aWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkge1xuIFx0XHR2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUiwgMCk7XG4tXHRcdGlmIChjcHVfbmVlZF90cHJfc2hhZG93KFx1MDAyNnZteC1cdTAwM2V2Y3B1KSlcbitcdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3codmNwdSkpXG4gXHRcdFx0dm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsXG4tXHRcdFx0XHQgICAgIF9fcGEodm14LVx1MDAzZXZjcHUuYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbitcdFx0XHRcdCAgICAgX19wYSh2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VyZWdzKSk7XG4gXHRcdHZtY3Nfd3JpdGUzMihUUFJfVEhSRVNIT0xELCAwKTtcbiBcdH1cbiBcbkBAIC01MDExLDcgKzUwMTIsNyBAQCBzdGF0aWMgdm9pZCBfX3ZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcbi1cdGluaXRfdm1jcyh2bXgpO1xuK1x0aW5pdF92bWNzKHZjcHUpO1xuIFxuIFx0aWYgKG5lc3RlZCBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtXHUwMDNla3ZtLCBLVk1fWDg2X1FVSVJLX1NUVUZGX0ZFQVRVUkVfTVNSUykpXG5AQCAtNjQxOCw0OCArNjQxOSwyNSBAQCB2b2lkIHZteF9nZXRfZW50cnlfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpXG4gXHRcdCplcnJvcl9jb2RlID0gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcihzdHJ1Y3QgdmNwdV92bXggKnZteClcbitzdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodm14LVx1MDAzZXBtbF9wZykge1xuLVx0XHRfX2ZyZWVfcGFnZSh2bXgtXHUwMDNlcG1sX3BnKTtcbi1cdFx0dm14LVx1MDAzZXBtbF9wZyA9IE5VTEw7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSB7XG4rXHRcdF9fZnJlZV9wYWdlKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSk7XG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IE5VTEw7XG4gXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZteF9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbi1cdHUxNiBwbWxfaWR4LCBwbWxfdGFpbF9pbmRleDtcbi1cdHU2NCAqcG1sX2J1Zjtcbi1cdGludCBpO1xuK1x0dTE2IHBtbF9pZHg7XG4gXG4gXHRwbWxfaWR4ID0gdm1jc19yZWFkMTYoR1VFU1RfUE1MX0lOREVYKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xuIFx0aWYgKHBtbF9pZHggPT0gUE1MX0hFQURfSU5ERVgpXG4gXHRcdHJldHVybjtcbi1cdC8qXG4tXHQgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHlcbi1cdCAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuXG4tXHQgKi9cbi1cdHBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggXHUwMDNlPSBQTUxfTE9HX05SX0VOVFJJRVMpID8gMCA6IHBtbF9pZHggKyAxO1xuLVxuLVx0Lypcbi1cdCAqIFBNTCBsb2cgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoZSBDUFUgZmlyc3Qgd3JpdGVzIHRoZSBlbnRyeSA1MTFcbi1cdCAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLlxuLVx0ICpcbi1cdCAqIFJlYWQgdGhlIGVudHJpZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4sIHRvIGVuc3VyZSB0aGF0XG4tXHQgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLlxuLVx0ICovXG4tXHRwbWxfYnVmID0gcGFnZV9hZGRyZXNzKHZteC1cdTAwM2VwbWxfcGcpO1xuIFxuLVx0Zm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgXHUwMDNlPSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7XG4tXHRcdHU2NCBncGE7XG4tXG4tXHRcdGdwYSA9IHBtbF9idWZbaV07XG4tXHRcdFdBUk5fT04oZ3BhIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuLVx0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdH1cbitcdGt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIHBtbF9pZHgpO1xuIFxuIFx0LyogcmVzZXQgUE1MIGluZGV4ICovXG4gXHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XG5AQCAtNzY0OCw3ICs3NjI2LDcgQEAgdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0aWYgKGVuYWJsZV9wbWwpXG4tXHRcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcbitcdFx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTtcbiBcdGZyZWVfdnBpZCh2bXgtXHUwMDNldnBpZCk7XG4gXHRuZXN0ZWRfdm14X2ZyZWVfdmNwdSh2Y3B1KTtcbiBcdGZyZWVfbG9hZGVkX3ZtY3Modm14LVx1MDAzZWxvYWRlZF92bWNzKTtcbkBAIC03NjgwLDggKzc2NTgsOCBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGZvciB0aGUgZ3Vlc3QpLCBldGMuXG4gXHQgKi9cbiBcdGlmIChlbmFibGVfcG1sKSB7XG4tXHRcdHZteC1cdTAwM2VwbWxfcGcgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuLVx0XHRpZiAoIXZteC1cdTAwM2VwbWxfcGcpXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4rXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuIFx0XHRcdGdvdG8gZnJlZV92cGlkO1xuIFx0fVxuIFxuQEAgLTc3NTIsNyArNzczMCw3IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGZyZWVfdm1jczpcbiBcdGZyZWVfbG9hZGVkX3ZtY3Modm14LVx1MDAzZWxvYWRlZF92bWNzKTtcbiBmcmVlX3BtbDpcbi1cdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcbitcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XG4gZnJlZV92cGlkOlxuIFx0ZnJlZV92cGlkKHZteC1cdTAwM2V2cGlkKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtODQ0MCwyMSArODQxOCwxMyBAQCBzdGF0aWMgdm9pZCB2bXhfdXBkYXRlX2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JjZV9pbW1lZGlhdGVfZXhpdFxuIH1cbiAjZW5kaWZcbiBcbi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghZW5hYmxlX3BtbCkpXG4tXHRcdHJldHVybjtcbi1cbiBcdGd1YXJkKHZteF92bWNzMDEpKHZjcHUpO1xuIFxuLVx0Lypcbi1cdCAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXNcbi1cdCAqIGNvZGUsIGJ1dCBpbiB0aGF0IGNhc2UgYW5vdGhlciB1cGRhdGUgcmVxdWVzdCB3aWxsIGJlIG1hZGUgYW5kIHNvXG4tXHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cbi1cdCAqL1xuLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpKVxuK1x0aWYgKGVuYWJsZSlcbiBcdFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG4gXHRlbHNlXG4gXHRcdHNlY29uZGFyeV9leGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbmluZGV4IGRjODUxN2YxNWJjNDYuLjVmNTA1YWQxNGRkZTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5AQCAtMjY1LDEzICsyNjUsNiBAQCBzdHJ1Y3QgdmNwdV92bXgge1xuIFx0dW5zaWduZWQgaW50IHBsZV93aW5kb3c7XG4gXHRib29sIHBsZV93aW5kb3dfZGlydHk7XG4gXG4tXHQvKiBTdXBwb3J0IGZvciBQTUwgKi9cbi0jZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1x0NTEyXG4tXHQvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xuLSNkZWZpbmUgUE1MX0hFQURfSU5ERVhcdFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxuLVxuLVx0c3RydWN0IHBhZ2UgKnBtbF9wZztcbi1cbiBcdC8qIGFwaWMgZGVhZGxpbmUgdmFsdWUgaW4gaG9zdCB0c2MgKi9cbiBcdHU2NCBodl9kZWFkbGluZV90c2M7XG4gXG5AQCAtMzk3LDcgKzM5MCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcbiBcbiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbiBib29sIHZteF9pc192YWxpZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li40ODEwZjliMWIwZmM2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMTE4LDcgKzExOCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3dyaXRlX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF93cml0ZV90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIGludCB2bXhfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYyxcbiBcdFx0ICAgICBib29sICpleHBpcmVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjZkMjZkZThiN2MzY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTM5NDEsNiArMzk0MSwzNyBAQCB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiBcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4rdm9pZCBrdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBwbWxfaWR4KVxuK3tcbitcdHUxNiBwbWxfdGFpbF9pbmRleDtcbitcdHU2NCAqcG1sX2J1ZjtcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIFBNTCBpbmRleCBhbHdheXMgcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBQTUwgYnVmZmVyIGVudGl0eVxuK1x0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cbitcdCAqL1xuK1x0cG1sX3RhaWxfaW5kZXggPSAocG1sX2lkeCBcdTAwM2U9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCArIDE7XG4rXG4rXHQvKlxuK1x0ICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMVxuK1x0ICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uXG4rXHQgKlxuK1x0ICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXRcbitcdCAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uXG4rXHQgKi9cbitcdHBtbF9idWYgPSBwYWdlX2FkZHJlc3ModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbitcbitcdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFx1MDAzZT0gcG1sX3RhaWxfaW5kZXg7IGktLSkge1xuK1x0XHR1NjQgZ3BhO1xuK1xuK1x0XHRncGEgPSBwbWxfYnVmW2ldO1xuK1x0XHRXQVJOX09OX09OQ0UoZ3BhIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuK1x0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9mbHVzaF9wbWxfYnVmZmVyKTtcbitcbiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiB7XG5AQCAtODA0Miw2ICs4MDczLDIxIEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV94ODZfY2FsbChzZXRfYXBpY19hY2Nlc3NfcGFnZV9hZGRyKSh2Y3B1KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQga3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXNcbitcdCAqIGNvZGUsIGJ1dCBpbiB0aGF0IGNhc2UgYW5vdGhlciB1cGRhdGUgcmVxdWVzdCB3aWxsIGJlIG1hZGUgYW5kIHNvXG4rXHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cbitcdCAqL1xuK1x0Ym9vbCBlbmFibGUgPSBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKTtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3B1X2RpcnR5X2xvZ19zaXplKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX3g4Nl9jYWxsKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykodmNwdSwgZW5hYmxlKTtcbit9XG4rXG4gLypcbiAgKiBDYWxsZWQgd2l0aGluIGt2bS1cdTAwM2VzcmN1IHJlYWQgc2lkZS5cbiAgKiBSZXR1cm5zIDEgdG8gbGV0IHZjcHVfcnVuKCkgY29udGludWUgdGhlIGd1ZXN0IGV4ZWN1dGlvbiBsb29wIHdpdGhvdXRcbkBAIC04MjA4LDcgKzgyNTQsNyBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGt2bV94ODZfY2FsbChyZWNhbGNfaW50ZXJjZXB0cykodmNwdSk7XG4gXG4gXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9DUFVfRElSVFlfTE9HR0lORywgdmNwdSkpXG4tXHRcdFx0a3ZtX3g4Nl9jYWxsKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykodmNwdSk7XG4rXHRcdFx0a3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTtcbiBcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVVBEQVRFX1BST1RFQ1RFRF9HVUVTVF9TVEFURSwgdmNwdSkpIHtcbiBcdFx0XHRrdm1fdmNwdV9yZXNldCh2Y3B1LCB0cnVlKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkNzQ3YzIwOTY1Y2UgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTkwMCw0ICs5MDAsMTEgQEAgaW50IF9fX19rdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3BsLFxuIFxuIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbisvKiBTdXBwb3J0IGZvciBQTUwgKi9cbisjZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1x0NTEyXG4rLyogUE1MIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSB3cml0dGVuIGJ5IHRoZSBDUFUgKi9cbisjZGVmaW5lIFBNTF9IRUFEX0lOREVYXHRcdChQTUxfTE9HX05SX0VOVFJJRVMtMSlcbitcbit2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpO1xuK1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzIuMjM4MzA3MzIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2ODY5MDY3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBBTUQgUE1MIFN1cHBvcnQgaW4gS1ZNIFNWTSoqXG5cbk9rYXksIGxldCdzIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhZGRpbmcgS01TQU4gdG8gdGhlIGZ1enppbmcgc2V0dXAgaXMgd2FycmFudGVkLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoJ3MgY29yZSBpcyBhZGRpbmcgQU1EIFBNTCBzdXBwb3J0IHdpdGhpbiBLVk0gU1ZNIGFuZCByZWZhY3RvcmluZyBzb21lIFBNTCBjb2RlIGJldHdlZW4gVk1YIGFuZCB0aGUgY29tbW9uIHg4NiBLVk0uXG5cbkxldCBtZSBicmVhayBkb3duIHRoZSBjaGFuZ2VzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW52b2x2ZXM6XG5cbiogICBBZGRpbmcgdGhlIGBYODZfRkVBVFVSRV9QTUxgIGZsYWcuXG4qICAgTW92aW5nIHRoZSBgcG1sX3BhZ2VgIHBvaW50ZXIgaW50byB0aGUgYGt2bV92Y3B1X2FyY2hgIHN0cnVjdHVyZS4gVGhpcyBpcyBzaWduaWZpY2FudCwgYXMgaXQgbm93IGJlY29tZXMgcGVyLVZDUFUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgcGFnZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgemVyb2VkLCBvciBpZiBpdCBtaWdodCBjb250YWluIHN0YWxlIGRhdGEuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgcHJvYmxlbXMuXG4qICAgQWRkaW5nIGBwbWxfYWRkcmAgYW5kIGBwbWxfaW5kZXhgIHRvIHRoZSBgdm1jYl9jb250cm9sX2FyZWFgLiBUaGVzZSBhZGRpdGlvbnMgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5IGRldGVybWluZSB3aGVyZSB0aGUgUE1MIGRhdGEgd2lsbCBiZSBzdG9yZWQgYW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIHdpdGhpbiB0aGUgYnVmZmVyLiBUaGUgYHBtbF9pbmRleGAgYW5kIGFzc29jaWF0ZWQgb2Zmc2V0cyBhcmUga2V5IGFyZWFzIGZvciBwb3RlbnRpYWwgZXJyb3JzLCBzdWNoIGFzIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGluY29ycmVjdCBpbmRleGluZy5cbiogICBUaGUgaW50cm9kdWN0aW9uIG9mIGBTVk1fRVhJVF9QTUxfRlVMTGAuIFRoaXMgaW5kaWNhdGVzIGEgc3BlY2lmaWMgZXhpdCBmcm9tIHRoZSBndWVzdC4gVGhpcyBleGl0IGhhbmRsZXIgYW5kIGFzc29jaWF0ZWQgZGF0YSBuZWVkIHNwZWNpYWwgYXR0ZW50aW9uLlxuKiAgIFRoZSBgbW9kdWxlX3BhcmFtKHBtbCwgYm9vbCwgMDQ0NCk7YCBhbmQgc3Vic2VxdWVudCB1c2FnZSBzdWdnZXN0cyBhIHJ1bnRpbWUgc3dpdGNoIGZvciBlbmFibGluZyBQTUwuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0ZXN0aW5nIHN0cmF0ZWdpZXMuXG4qICAgVGhlIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGNhbGwgaW4gYHN2bV92Y3B1X2NyZWF0ZWAgaXMgaW1wb3J0YW50LiBUaGlzIGlzIHdoZXJlIHRoZSBwYWdlIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGluaXRpYWxpemVkOiBJcyBpdCB6ZXJvZWQ/IElmIG5vdCwgaXMgdGhlcmUgb3RoZXIgaW5pdGlhbGl6YXRpb24/XG4qICAgVGhlIGBzdm1fZmx1c2hfcG1sX2J1ZmZlcmAgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBga3ZtX2ZsdXNoX3BtbF9idWZmZXJgIGFyZSB2aXRhbC4gVGhpcyBpcyB0aGUgZmx1c2hpbmcgbWVjaGFuaXNtLiBUaGlzIGNvZGUgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsbHkgcmV2aWV3ZWQuXG4qICAgSGFuZGxpbmcgb2YgYFNWTV9FWElUX1BNTF9GVUxMYCBleGl0cy4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIFBNTCBmdW5jdGlvbmFsaXR5LiBFcnJvcnMgaW4gdGhpcyBhcmVhIG1pZ2h0IGxlYWQgdG8gZ3Vlc3QgY3Jhc2hlcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbiogICBUaGUgdXNlIG9mIGBjcHVfZGlydHlfbG9nX3NpemVgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gUE1MIGJlaW5nIGVuYWJsZWQgaXMgYSBjcml0aWNhbCBmYWN0b3IgZm9yIGRldGVjdGluZyB3aGljaCBjb2RlIHBhdGhzIGFyZSBnb2luZyB0byBiZSBlbmFibGVkLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoZSBhbGxvY2F0aW9uIG9mIGB2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2VgLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgbWVtb3J5IHVzaW5nIGdyZXBwZXIgb3IgYnkgcmVhZGluZyB0aGUgY29ycmVzcG9uZGluZyBmaWxlLiBUaGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGhpbmdlIG9uIHdoZXRoZXIgdGhpcyBhbGxvY2F0ZWQgcGFnZSBpcyBjb3JyZWN0bHkgc2FuaXRpemVkIG9yIGlmIHVuaW5pdGlhbGl6ZWQgZGF0YSBtaWdodCBiZSBwcmVzZW50LiBJbiBwYXJ0aWN1bGFyLCBJIG11c3QgdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3VyIHdpdGggYHNucF9zYWZlX2FsbG9jX3BhZ2UoKWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjE0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjM5LjkyNTIxODk4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MzI4Nzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbnBfc2FmZV9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTQ4Nz1pbnQgc3ZtX2FsbG9jYXRlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTQ5My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE0OTQ6XFx0dm1jYjAyX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNDk1LVxcdGlmICghdm1jYjAyX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4NjI9aW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NzUtXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODc2OlxcdHZtc2FfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NzctXFx0aWYgKCF2bXNhX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5NDg9dm9pZCBzZXZfdmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4NTpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NjE5PXN0YXRpYyBpbnQgc3ZtX2NwdV9pbml0KGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTYyNS1cXHRtZW1zZXQoc2QsIDAsIHNpemVvZihzdHJ1Y3Qgc3ZtX2NwdV9kYXRhKSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo2MjY6XFx0c2F2ZV9hcmVhX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoY3B1X3RvX25vZGUoY3B1KSwgR0ZQX0tFUk5FTCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy02MjctXFx0aWYgKCFzYXZlX2FyZWFfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTMzNT1zdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNDQtXFx0ZXJyID0gLUVOT01FTTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjEzNDU6XFx0dm1jYjAxX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzQ2LVxcdGlmICghdm1jYjAxX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNDktXFx0aWYgKHBtbCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MTM1MDpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM1MS1cXHRcXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU0MTQ9c3RhdGljIHZvaWQgKnN2bV9hbGxvY19hcGljX2JhY2tpbmdfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE1LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTY6XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05OTM9aW50IHNldl9oYW5kbGVfdm1nZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5OTc6c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTkte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAwMDpcXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwMS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEwMjA9dm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIxLSNlbHNlXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDIyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjgte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAyOTpcXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjQyLjM3ODUxNTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNjUwMjIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AqKlxuXG5Pa2F5LCBJJ20gZGl2aW5nIGludG8gYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBBTUQncyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGVudmlyb25tZW50LCBhcyB0aGlzIGlzIGhvdyBLVk0gaGFuZGxlcyB0aGUgcHJvdGVjdGVkIFZNcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG5vZGUgYWxsb2NhdGlvbiwgYXMgU0VWIGRlYWxzIHdpdGggbWVtb3J5IGVuY3J5cHRpb24gYW5kIGludGVncml0eSBwcm90ZWN0aW9uIGFuZCB0aGlzIGNhbiBncmVhdGx5IGltcGFjdCBob3cgd2UgaGFuZGxlIHBhZ2UgYWxsb2NhdGlvbi5cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yOlxuXG4qICAgKipQYWdlIFR5cGU6KiogSXMgaXQgYWxsb2NhdGluZyByZWd1bGFyIHBhZ2VzLCBvciBhcmUgdGhlcmUgc3BlY2lhbCBmbGFncyByZWxhdGVkIHRvIFNFViwgc3VjaCBhcyBtZW1vcnkgZW5jcnlwdGlvbiBlbmFibGVtZW50LlxuKiAgICoqTWVtb3J5IE5vZGU6KiogSG93IGlzIGl0IGRlYWxpbmcgd2l0aCBOVU1BIG5vZGVzPyBTRVYgY2FuIGludHJvZHVjZSBjb21wbGV4aXRpZXMgaGVyZSBzaW5jZSBwYWdlIHBsYWNlbWVudCBtYXR0ZXJzIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5vZGUgYWxsb2NhdGlvbiwgYW55IGNvbnNpZGVyYXRpb25zIHJlZ2FyZGluZyB0aGUgbWVtb3J5IHBvbGljeSBhbmQgdGhlIGN1cnJlbnQgTlVNQSBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uXG4qICAgKipTYWZldHk6KiogVGhlIGZ1bmN0aW9uIG5hbWUgaW5jbHVkZXMgXCJzYWZlLFwiIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNoZWNrcyBvciBtaXRpZ2F0aW9ucyByZWxhdGVkIHRvIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIG90aGVyIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIGNyaXRpY2FsIGluIGEgU0VWIGVudmlyb25tZW50LiBUaGlzIGZ1bmN0aW9uIG11c3QgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseSBhcyB0aG9zZSBjYW4gbGVhayBpbmZvcm1hdGlvbiBhYm91dCB0aGUgVk0uXG4qICAgKipTRVYgQ29udGV4dDoqKiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gU0VWLXNwZWNpZmljIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHRoYXQgaXQgbWF5IGJlIHVzaW5nIHRvIG1hbmFnZSBlbmNyeXB0ZWQgbWVtb3J5LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIEFNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gZmVhdHVyZXMuXG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBhbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggS1ZNJ3Mgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgYW5kIHRoZSBwYXJ0aWN1bGFyIG51YW5jZXMgdGhhdCBTRVYgYnJpbmdzIHRvIHRoZSB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo0NS42NDM1NDE4MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDk4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDk4NTpcXHRzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXFxuNDk4NjpcXHR7XFxuNDk4NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG40OTg4OlxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbjQ5ODk6XFx0XFxuNDk5MDpcXHRcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuNDk5MTpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcXG40OTkyOlxcdFxcbjQ5OTM6XFx0XFx0LypcXG40OTk0OlxcdFxcdCAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmVcXG40OTk1OlxcdFxcdCAqIHRoZSBDUFUgd2lsbCBpbmNvcnJlY3RseSBzaWduYWwgYW4gUk1QIHZpb2xhdGlvbiAjUEYgaWYgYVxcbjQ5OTY6XFx0XFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXFxuNDk5NzpcXHRcXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBQTUwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuXFxuNDk5ODpcXHRcXHQgKlxcbjQ5OTk6XFx0XFx0ICogQWxsb2NhdGUgb25lIGV4dHJhIHBhZ2UsIGNob29zZSBhIHBhZ2Ugd2hpY2ggaXMgbm90XFxuNTAwMDpcXHRcXHQgKiAyTUItYWxpZ25lZCwgYW5kIGZyZWUgdGhlIG90aGVyLlxcbjUwMDE6XFx0XFx0ICovXFxuNTAwMjpcXHRcXHRwID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAxKTtcXG41MDAzOlxcdFxcdGlmICghcClcXG41MDA0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjUwMDU6XFx0XFxuNTAwNjpcXHRcXHRzcGxpdF9wYWdlKHAsIDEpO1xcbjUwMDc6XFx0XFxuNTAwODpcXHRcXHRwZm4gPSBwYWdlX3RvX3BmbihwKTtcXG41MDA5OlxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUFRSU19QRVJfUE1EKSlcXG41MDEwOlxcdFxcdFxcdF9fZnJlZV9wYWdlKHArKyk7XFxuNTAxMTpcXHRcXHRlbHNlXFxuNTAxMjpcXHRcXHRcXHRfX2ZyZWVfcGFnZShwICsgMSk7XFxuNTAxMzpcXHRcXG41MDE0OlxcdFxcdHJldHVybiBwO1xcbjUwMTU6XFx0fVxcbjUwMTY6XFx0XFxuNTAxNzpcXHR2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcXG41MDE4OlxcdHtcXG41MDE5OlxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuNTAyMDpcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuNTAyMTpcXHRcXHRpbnQgb3JkZXIsIHJtcF9sZXZlbCwgcmV0O1xcbjUwMjI6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNTAyMzpcXHRcXHRib29sIGFzc2lnbmVkO1xcbjUwMjQ6XFx0XFx0a3ZtX3Bmbl90IHBmbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6NDUuNjQzODIxMjc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjAwNzUwNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgQU1EIFBNTCBTdXBwb3J0IGFuZCBSZWZhY3RvcmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgcG90ZW50aWFsIEtNU0FOIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoZSBpbnRyb2R1Y3Rpb24gb2YgQU1EIFBNTCBzdXBwb3J0IGFuZCB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlIFBNTCBmbHVzaCBsb2dpYy4gSSBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgd2Ugd2VyZW4ndCBpbnRyb2R1Y2luZyBhbnkgbmV3IGF2ZW51ZXMgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBjcmVhdGluZyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLlxuXG5GaXJzdCwgSSBsb29rZWQgYXQgaG93IHRoZSBtZW1vcnkgZm9yIHRoZXNlIFBNTCBidWZmZXJzIGlzIGhhbmRsZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgZHVyaW5nIGFsbG9jYXRpb24gKGBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pYCBpbiBWTVggYW5kIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGVsc2V3aGVyZSkuIFNvLCB0aGUgUE1MIHBhZ2UgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgYWxsZXZpYXRlcyBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgbXkgd29ycmllcy4gVGhlIGhhcmR3YXJlIGl0c2VsZiBsb2dzIEdQQXMgaW50byB0aGlzIHByZS16ZXJvZWQgcGFnZSB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgYWN0aXZlLlxuXG5OZXh0LCBJIHdlbnQgdGhyb3VnaCBhIGNoZWNrbGlzdCBvZiBwb3RlbnRpYWwgS01TQU4gdHJpZ2dlcnM6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vcGUuIE5vIG5ldyBpb2N0bCBzdHJ1Y3R1cmVzLCBgY29weV90b191c2VyYCBjYWxscywgTmV0bGluayBtZXNzYWdlcywgb3Igc29ja2V0IG9wdGlvbnMgYXJlIGludHJvZHVjZWQgdGhhdCBtaWdodCBpbmFkdmVydGVudGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIHNlZSBubyBldmlkZW5jZSBvZiB0aGlzLiBUaGUgbG9naWMgZmxvdyBhcHBlYXJzIHRvIGJlIHNvdW5kLCB3aXRoIG5vIGRlY2lzaW9uLW1ha2luZyBiYXNlZCBvbiBwb3RlbnRpYWxseSBnYXJiYWdlIHZhbHVlcy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzcz8qKiBBZ2Fpbiwgbm8uIFRoZSBhbGxvY2F0ZWQgcGFnZSBpcyBmdWxseSBpbml0aWFsaXplZC5cbjQuICAqKkJvdW5kcyBjaGVja3MvbGVuZ3RoIGlzc3VlcyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3M/KiogVGhlIGNvZGUgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgYW55IHN1Y2ggdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgYGt2bV9mbHVzaF9wbWxfYnVmZmVyYCBmdW5jdGlvbiwgbW92ZWQgZnJvbSBgdm14X2ZsdXNoX3BtbF9idWZmZXJgLCBpdGVyYXRlcyBiYWNrd2FyZCB0aHJvdWdoIHRoZSBQTUwgYnVmZmVyLCByZWFkaW5nIHRoZSBsb2dnZWQgR1BBcy4gVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgbWVtb3J5IGhhcyBiZWVuIGV4cGxpY2l0bHkgemVyb2VkIGF0IGFsbG9jYXRpb24gdGltZS5cblxuR2l2ZW4gdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIFBNTCBidWZmZXJzLCB0aGUgYWJzZW5jZSBvZiBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIG1lbW9yeSBleHBvc3VyZSwgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApIGFuZCBLVk0ncyBvd24gdW5pdCB0ZXN0cyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIGJvdW5kcywgcGFnZSBtYW5hZ2VtZW50LCBhbmQgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBUaGUgcGF0Y2gncyBjb3JlIGZ1bmN0aW9uIGlzIHNpbXBseSB0aGUgbG9nZ2luZyBvZiB2YWxpZCBHUEFzIGludG8gYSB6ZXJvZWQgbWVtb3J5IGFyZWE7IEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAzMSwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo1Ni44NDQ1NzU1NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXFxuXFxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBTUQgU1ZNIHN1cHBvcnQgZm9yIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgYW5kIGNvbnNvbGlkYXRlcyBzaGFyZWQgUE1MIGhhbmRsaW5nIGxvZ2ljIGJldHdlZW4gSW50ZWwgVk1YIGFuZCBBTUQgU1ZNLlxcblxcbkFsbCBhbGxvY2F0ZWQgUE1MIGJ1ZmZlciBwYWdlcyBhcmUgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIHZpYSBgX19HRlBfWkVST2AgKGluIGBhbGxvY19wYWdlYCBhbmQgYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChlLmcuIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCBvdXRwdXRzKSwgZG8gbm90IGxlYXZlIGFueSBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29udHJvbC1mbG93IGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb247IHN0YW5kYXJkIEtBU0FOIGFuZCBmdW5jdGlvbmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 09:08:55 +0000 UTC FinishedAt: 2026-09-07 09:11:58 +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": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL" ], "series_id": "4e4d880d-a941-4e96-bb8b-96e154f60aa5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_flush_pml_buffer", "kvm_update_cpu_dirty_logging", "svm_update_cpu_dirty_logging", "svm_flush_pml_buffer", "pml_full_interception", "nested_svm_exit_special", "nested_vmcb02_prepare_control", "vmx_update_cpu_dirty_logging", "vmx_flush_pml_buffer" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9mbHVzaF9wbWxfYnVmZmVyJiMzNDssCiAgICAmIzM0O2t2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyYjMzQ7LAogICAgJiMzNDtzdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtwbWxfZnVsbF9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV9leGl0X3NwZWNpYWwmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyYjMzQ7LAogICAgJiMzNDt2bXhfZmx1c2hfcG1sX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXG5cbkFsbCBhbGxvY2F0ZWQgUE1MIGJ1ZmZlciBwYWdlcyBhcmUgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIHZpYSBgX19HRlBfWkVST2AgKGluIGBhbGxvY19wYWdlYCBhbmQgYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChlLmcuIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCBvdXRwdXRzKSwgZG8gbm90IGxlYXZlIGFueSBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29udHJvbC1mbG93IGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb247IHN0YW5kYXJkIEtBU0FOIGFuZCBmdW5jdGlvbmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBkaXJ0eSBsb2dnaW5nIHN1cHBvcnQgZm9yIEFNRCBTVk0gYW5kIHJlZmFjdG9ycyB0aGUgc2hhcmVkIFBNTCBidWZmZXIgZmx1c2hpbmcgYW5kIGRpcnR5IGxvZ2dpbmcgc3RhdGUgbWFjaGluZSBhY3Jvc3MgeDg2IEtWTSwgSW50ZWwgVk1YLCBhbmQgQU1EIFNWTS4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBjb2RlIHBhdGhzIGluIEtWTSBhbmQgYWZmZWN0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgZXhpdCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE4YjUzMTI3NzlkZDY0ZGJjNjMxMWEyMzZmZDI2MGEzNDkzODFkZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCBmNzBlZTc0YjVmOTIxLi5jYmZjYzY2YTE4ZTliIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTIzOCw2ICYjNDM7MjM4LDcgQEBcbiAvLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMiYjNDM7MjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFx0XHQoIDgqMzImIzQzOzIyKSAvKiBcJiMzNDt0ZHhfZ3Vlc3RcJiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9QTUxcdFx0XHQoIDgqMzImIzQzOzIzKSAvKiBBTUQgUGFnZSBNb2RpZmljYXRpb24gbG9nZ2luZyAqL1xuIFxuIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDA3OjAgKEVCWCksIHdvcmQgOSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfRlNHU0JBU0VcdFx0KCA5KjMyJiM0MzsgMCkgLyogXCYjMzQ7ZnNnc2Jhc2VcJiMzNDsgUkRGU0JBU0UsIFdSRlNCQVNFLCBSREdTQkFTRSwgV1JHU0JBU0UgaW5zdHJ1Y3Rpb25zKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggM2FmNzM5NWMyNDMwYS4uMmRlYmY2Mjk0MjkwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC03ODksNiAmIzQzOzc4OSw4IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdCAqL1xuIFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9leHRlcm5hbF9zcHRfY2FjaGU7XG4gXG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBtbF9wYWdlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBRRU1VIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0IGVhY2ggaGF2ZSB0aGVpciBvd24gRlBVIHN0YXRlLlxuIFx0ICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuXG5AQCAtMTY3MCw3ICYjNDM7MTY3Miw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHRcdFx0ICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pO1xuIFx0dm9pZCAoKmhhbmRsZV9leGl0X2lycW9mZikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO1x0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7XG4gXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uZTBhNzU0OWE3YzcyNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTE2NSw3ICYjNDM7MTY1LDEwIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiBcdHU4IHJlc2VydmVkXzlbMjJdO1xuIFx0dTY0IGFsbG93ZWRfc2V2X2ZlYXR1cmVzO1x0LyogT2Zmc2V0IDB4MTM4ICovXG4gXHR1NjQgZ3Vlc3Rfc2V2X2ZlYXR1cmVzO1x0XHQvKiBPZmZzZXQgMHgxNDAgKi9cbi1cdHU4IHJlc2VydmVkXzEwWzY2NF07XG4mIzQzO1x0dTggcmVzZXJ2ZWRfMTBbMTI4XTtcbiYjNDM7XHR1NjQgcG1sX2FkZHI7XHRcdFx0LyogT2Zmc2V0IDB4MWM4ICovXG4mIzQzO1x0dTE2IHBtbF9pbmRleDtcdFx0XHQvKiBPZmZzZXQgMHgxZDAgKi9cbiYjNDM7XHR1OCByZXNlcnZlZF8xMVs1MjZdO1xuIFx0LypcbiBcdCAqIE9mZnNldCAweDNlMCwgMzIgYnl0ZXMgcmVzZXJ2ZWRcbiBcdCAqIGZvciB1c2UgYnkgaHlwZXJ2aXNvci9zb2Z0d2FyZS5cbkBAIC0yNDAsMTAgJiM0MzsyNDMsMTEgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xuICNkZWZpbmUgU1ZNX0lPSU9fU0laRV9NQVNLICg3IFx1MDAzY1x1MDAzYyBTVk1fSU9JT19TSVpFX1NISUZUKVxuICNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0lPSU9fQVNJWkVfU0hJRlQpXG4gXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcdFx0QklUKDApXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXHRcdEJJVCgxKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1x0QklUKDIpXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXHRcdEJJVF9VTEwoMClcbiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXHRcdEJJVF9VTEwoMSlcbiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWX0VTXHRcdEJJVF9VTEwoMilcbiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0XHRCSVRfVUxMKDMpXG4mIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1BNTFx0XHRCSVRfVUxMKDExKVxuIFxuICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUlx0QklUX1VMTCgwKVxuICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX1ZNTE9BRF9WTVNBVkVcdEJJVF9VTEwoMSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaFxuaW5kZXggMDEwYTQ1YzlmNjE0Ny4uZTgwNjc2MTg1MDkyMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcbkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJXHRcdDB4NDAxXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXHQweDQwMlxuICNkZWZpbmUgU1ZNX0VYSVRfVk1HRVhJVCAgICAgICAweDQwM1xuJiM0MzsjZGVmaW5lIFNWTV9FWElUX1BNTF9GVUxMXHQweDQwN1xuIFxuIC8qIFNFVi1FUyBzb2Z0d2FyZS1kZWZpbmVkIFZNR0VYSVQgZXZlbnRzICovXG4gI2RlZmluZSBTVk1fVk1HRVhJVF9NTUlPX1JFQURcdFx0XHQweDgwMDAwMDAxdWxsXG5AQCAtMjM2LDYgJiM0MzsyMzcsNyBAQFxuIFx0eyBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJLFx0XHRcJiMzNDthdmljX2luY29tcGxldGVfaXBpXCYjMzQ7IH0sIFxcXG4gXHR7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgXCYjMzQ7YXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc1wmIzM0OyB9LCBcXFxuIFx0eyBTVk1fRVhJVF9WTUdFWElULFx0XHRcJiMzNDt2bWdleGl0XCYjMzQ7IH0sIFxcXG4mIzQzO1x0eyBTVk1fRVhJVF9QTUxfRlVMTCxcdFx0XCYjMzQ7cG1sX2Z1bGxcJiMzNDsgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTU1JT19SRUFELFx0XCYjMzQ7dm1nZXhpdF9tbWlvX3JlYWRcJiMzNDsgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTU1JT19XUklURSxcdFwmIzM0O3ZtZ2V4aXRfbW1pb193cml0ZVwmIzM0OyB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9OTUlfQ09NUExFVEUsXHRcJiMzNDt2bWdleGl0X25taV9jb21wbGV0ZVwmIzM0OyB9LCBcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5iMThjYzljODhkZDU3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTU1LDYgJiM0Mzs1NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0ZBU1RfQ1BQQyxcdFx0Q1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DUFBDX1BFUkZfUFJJTyxcdFx0Q1BVSURfRURYLCAxNiwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9NQkEsXHRcdFx0Q1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LFxuJiM0MztcdHsgWDg2X0ZFQVRVUkVfUE1MLFx0XHRcdENQVUlEX0VDWCwgIDQsIDB4ODAwMDAwMGEsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCxcdFx0Q1BVSURfRUNYLCAgNiwgMHg4MDAwMDAwYSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DT0hFUkVOQ1lfU0ZXX05PLFx0XHRDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX1NNQkEsXHRcdFx0Q1BVSURfRUJYLCAgMiwgMHg4MDAwMDAyMCwgMCB9LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCA3M2YzN2IwNTBkMGEwLi5kYTQxN2M0YzU5MTU0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTkwMSw2ICYjNDM7OTAxLDEzIEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0dm1jYjAyLVx1MDAzZWNvbnRyb2wubXNycG1fYmFzZV9wYSA9IHZtY2IwMS1cdTAwM2Vjb250cm9sLm1zcnBtX2Jhc2VfcGE7XG4gXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX1BFUk1fTUFQKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuXG4mIzQzO1x0ICogdW5leHBlY3RlZCBQTUwgd3JpdGUgd291bGQgdHJpZ2dlciBhIFBNTF9GVUxMIFZNLUV4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBtbClcbiYjNDM7XHRcdHZtY2IwMi1cdTAwM2Vjb250cm9sLnBtbF9pbmRleCA9IC0xO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTdGFzaCB2bWNiMDImIzM5O3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbiYjMzk7dCBtb3ZlZCBwYXN0IHRoZSBndWlsdHlcbiBcdCAqIGluc3RydWN0aW9uOyBvdGhlcndpc2UsIHJlc2V0IHRoZSBjb3VudGVyIHRvICYjMzk7MCYjMzk7LlxuQEAgLTE4MjAsNiAmIzQzOzE4MjcsMTMgQEAgaW50IG5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuIFx0XHRpZiAobmVzdGVkX3N2bV9pc19sMl90bGJfZmx1c2hfaGNhbGwodmNwdSkpXG4gXHRcdFx0cmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1ZNX0VYSVRfUE1MX0ZVTEw6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWxsIFBNTCBmdWxsIGV4aXRzIGFyZSBoYW5kbGVkIGJ5IEtWTS4gIEtWTSBlbXVsYXRlcyBQTUwgaW5cbiYjNDM7XHRcdCAqIHNvZnR3YXJlIGZvciBMMSwgYnV0IG5ldmVyIGVuYWJsZXMgUE1MIGluIGhhcmR3YXJlIG9uIGJlaGFsZlxuJiM0MztcdFx0ICogb2YgTDEuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiBORVNURURfRVhJVF9IT1NUO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmNmZTk5MGY4MDUwNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDk5NCw3ICYjNDM7NDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcbiBcdCAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmVcbiBcdCAqIHRoZSBDUFUgd2lsbCBpbmNvcnJlY3RseSBzaWduYWwgYW4gUk1QIHZpb2xhdGlvbiAjUEYgaWYgYVxuIFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXG4tXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbiYjNDM7XHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBQTUwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuXG4gXHQgKlxuIFx0ICogQWxsb2NhdGUgb25lIGV4dHJhIHBhZ2UsIGNob29zZSBhIHBhZ2Ugd2hpY2ggaXMgbm90XG4gXHQgKiAyTUItYWxpZ25lZCwgYW5kIGZyZWUgdGhlIG90aGVyLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCA3ZDU5ZDMwMWUxZTU0Li45NTBjMjUwYTc3YjUxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTE3OSw2ICYjNDM7MTc5LDkgQEAgbW9kdWxlX3BhcmFtKHZubWksIGJvb2wsIDA0NDQpO1xuIFxuIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcbiBcbiYjNDM7Ym9vbCBfX3JvX2FmdGVyX2luaXQgcG1sID0gdHJ1ZTtcbiYjNDM7bW9kdWxlX3BhcmFtKHBtbCwgYm9vbCwgMDQ0NCk7XG4mIzQzO1xuIHN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCBzdm1fZ3BfZXJyYXR1bV9pbnRlcmNlcHQgPSB0cnVlO1xuIFxuIHN0YXRpYyB1OCByc21faW5zX2J5dGVzW10gPSBcJiMzNDtcXHgwZlxceGFhXCYjMzQ7O1xuQEAgLTEyNjcsNiAmIzQzOzEyNzAsMjMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxuIFx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4gXHRcdHN2bV9zZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0JVU0xPQ0spO1xuIFxuJiM0MztcdGlmIChwbWwpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBQb3B1bGF0ZSB0aGUgcGFnZSBhZGRyZXNzIGFuZCBpbmRleCBoZXJlLCBQTUwgaXMgZW5hYmxlZFxuJiM0MztcdFx0ICogd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgb24gdGhlIG1lbXNsb3QgdGhyb3VnaFxuJiM0MztcdFx0ICogc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZygpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNvbnRyb2wtXHUwMDNlcG1sX2FkZHIgPSAodTY0KV9fc21lX3NldChwYWdlX3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBWTUNCIGNvbnRyb2wgYXJlYSByZW1haW5zIHZhbGlkIGFmdGVyIGFuIGludGVyY2VwdGVkIFNIVVRET1dOXG4mIzQzO1x0XHQgKiAoQU1EIEFQTSBSZXYgMy40NSYjNDM7KSwgc28gb25seSBpbml0aWFsaXplIFBNTCBpbmRleCBvbiByZXNldCB0byBhdm9pZFxuJiM0MztcdFx0ICogZGlzY2FyZGluZyBhbHJlYWR5LWxvZ2dlZCBlbnRyaWVzIHRoYXQgaGF2ZW4mIzM5O3QgYmVlbiBmbHVzaGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWluaXRfZXZlbnQpXG4mIzQzO1x0XHRcdGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4ID0gUE1MX0hFQURfSU5ERVg7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpc19zZXZfZ3Vlc3QodmNwdSkpXG4gXHRcdHNldl9pbml0X3ZtY2Ioc3ZtLCBpbml0X2V2ZW50KTtcbiBcbkBAIC0xMzI2LDkgJiM0MzsxMzQ2LDE1IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdm1jYjAxX3BhZ2UpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmIChwbWwpIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbiYjNDM7XHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBzZXZfdmNwdV9jcmVhdGUodmNwdSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xuJiM0MztcdFx0Z290byBlcnJvcl9mcmVlX3BtbF9wYWdlO1xuIFxuIFx0ZXJyID0gYXZpY19pbml0X3ZjcHUoc3ZtKTtcbiBcdGlmIChlcnIpXG5AQCAtMTM1Myw2ICYjNDM7MTM3OSw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4mIzQzO2Vycm9yX2ZyZWVfcG1sX3BhZ2U6XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG4gXHRfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7XG4gb3V0OlxuQEAgLTEzNzAsNiAmIzQzOzEzOTksOSBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4gXG4mIzQzO1x0aWYgKHBtbCBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuJiM0MztcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbiYjNDM7XG4gXHRfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS1cdTAwM2V2bWNiMDEucGEpKTtcbiBcdHN2bV92Y3B1X2ZyZWVfbXNycG0oc3ZtLVx1MDAzZW1zcnBtKTtcbiB9XG5AQCAtMzM0NCw2ICYjNDM7MzM3Niw0NSBAQCBzdGF0aWMgaW50IHZtbWNhbGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBrdm1fZW11bGF0ZV9oeXBlcmNhbGwodmNwdSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiYjNDM7XHRzdHJ1Y3Qgdm1jYiAqdm1jYjAxID0gc3ZtLVx1MDAzZXZtY2IwMS5wdHI7XG4mIzQzO1xuJiM0MztcdGlmIChlbmFibGUpXG4mIzQzO1x0XHR2bWNiMDEtXHUwMDNlY29udHJvbC5taXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfUE1MO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZtY2IwMS1cdTAwM2Vjb250cm9sLm1pc2NfY3RsIFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9QTUw7XG4mIzQzO1xuJiM0MztcdHZtY2JfbWFya19kaXJ0eSh2bWNiMDEsIFZNQ0JfTlBUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4mIzQzO1x0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbiYjNDM7XG4mIzQzO1x0LyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovXG4mIzQzO1x0aWYgKGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4ID09IFBNTF9IRUFEX0lOREVYKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBjb250cm9sLVx1MDAzZXBtbF9pbmRleCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2V0IHRoZSBQTUwgaW5kZXggKi9cbiYjNDM7XHRjb250cm9sLVx1MDAzZXBtbF9pbmRleCA9IFBNTF9IRUFEX0lOREVYO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBtbF9mdWxsX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHR0cmFjZV9rdm1fcG1sX2Z1bGwodmNwdS1cdTAwM2V2Y3B1X2lkKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQTUwgYnVmZmVyIGlzIGFscmVhZHkgZmx1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN2bV9oYW5kbGVfZXhpdCgpLlxuJiM0MztcdCAqIE5vdGhpbmcgdG8gZG8gaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiBcdFtTVk1fRVhJVF9SRUFEX0NSMF1cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbiBcdFtTVk1fRVhJVF9SRUFEX0NSM11cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbkBAIC0zNDIxLDYgJiM0MzszNDkyLDcgQEAgc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuIFx0W1NWTV9FWElUX1ZNR0VYSVRdXHRcdFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXG4gI2VuZGlmXG4mIzQzO1x0W1NWTV9FWElUX1BNTF9GVUxMXVx0XHRcdD0gcG1sX2Z1bGxfaW50ZXJjZXB0aW9uLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0zNDcwLDggJiM0MzszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRwcl9lcnIoXCYjMzQ7JS0yMHMlMDE2bGx4XFxuXCYjMzQ7LCBcJiMzNDtleGl0X2luZm8yOlwmIzM0OywgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG4gXHRwcl9lcnIoXCYjMzQ7JS0yMHMlMDh4XFxuXCYjMzQ7LCBcJiMzNDtleGl0X2ludF9pbmZvOlwmIzM0OywgY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvKTtcbiBcdHByX2VycihcJiMzNDslLTIwcyUwOHhcXG5cJiMzNDssIFwmIzM0O2V4aXRfaW50X2luZm9fZXJyOlwmIzM0OywgY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvX2Vycik7XG4tXHRwcl9lcnIoXCYjMzQ7JS0yMHMlbGxkXFxuXCYjMzQ7LCBcJiMzNDttaXNjX2N0bDpcJiMzNDssIGNvbnRyb2wtXHUwMDNlbWlzY19jdGwpO1xuJiM0MztcdHByX2VycihcJiMzNDslLTIwcyVsbHhcXG5cJiMzNDssIFwmIzM0O21pc2NfY3RsOlwmIzM0OywgY29udHJvbC1cdTAwM2VtaXNjX2N0bCk7XG4gXHRwcl9lcnIoXCYjMzQ7JS0yMHMlMDE2bGx4XFxuXCYjMzQ7LCBcJiMzNDtuZXN0ZWRfY3IzOlwmIzM0OywgY29udHJvbC1cdTAwM2VuZXN0ZWRfY3IzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBtbCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyUtMjBzJTAxNmxseFxcblwmIzM0OywgXCYjMzQ7cG1sX2FkZHI6XCYjMzQ7LCBjb250cm9sLVx1MDAzZXBtbF9hZGRyKTtcbiYjNDM7XHRcdHByX2VycihcJiMzNDslLTIwcyUwNHhcXG5cJiMzNDssIFwmIzM0O3BtbF9pbmRleDpcJiMzNDssIGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cHJfZXJyKFwmIzM0OyUtMjBzJTAxNmxseFxcblwmIzM0OywgXCYjMzQ7YXZpY192YXBpY19iYXI6XCYjMzQ7LCBjb250cm9sLVx1MDAzZWF2aWNfdmFwaWNfYmFyKTtcbiBcdHByX2VycihcJiMzNDslLTIwcyUwMTZsbHhcXG5cJiMzNDssIFwmIzM0O2doY2I6XCYjMzQ7LCBjb250cm9sLVx1MDAzZWdoY2JfZ3BhKTtcbiBcdHByX2VycihcJiMzNDslLTIwcyUwOHhcXG5cJiMzNDssIFwmIzM0O2V2ZW50X2luajpcJiMzNDssIGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qKTtcbkBAIC0zNjQ5LDYgJiM0MzszNzI3LDEzIEBAIGludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSlcbiBcdCAgICAodTY0KWV4aXRfY29kZSAhPSBfX2V4aXRfY29kZSlcbiBcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsXG4mIzQzO1x0ICogZXhpdCBvY2N1cnMgYXMgc29tZXRoaW5nIGlzIGhvcnJpYmx5IHdyb25nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfUE1MX0ZVTEwpKVxuJiM0MztcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORVxuIFx0aWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9NU1IpXG4gXHRcdHJldHVybiBtc3JfaW50ZXJjZXB0aW9uKHZjcHUpO1xuQEAgLTM3MTcsNiAmIzQzOzM4MDIsMTQgQEAgc3RhdGljIGludCBzdm1faGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fcnVuICprdm1fcnVuID0gdmNwdS1cdTAwM2VydW47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcHBvcnR1bmlzdGljYWxseSBmbHVzaCB0aGUgUE1MIGJ1ZmZlciBvbiBWTSBleGl0LiBUaGlzIGtlZXBzIHRoZVxuJiM0MztcdCAqIGRpcnR5IGJpdG1hcCBjdXJyZW50IGJ5IHByb2Nlc3NpbmcgbG9nZ2VkIEdQQXMgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3JcbiYjNDM7XHQgKiBQTUxfRlVMTCBleGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSBcdTAwMjZcdTAwMjYgIWlzX2d1ZXN0X21vZGUodmNwdSkpXG4mIzQzO1x0XHRzdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1KTtcbiYjNDM7XG4gXHRpZiAodW5saWtlbHkoZXhpdF9mYXN0cGF0aCA9PSBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtNTMxMSw2ICYjNDM7NTQwNCw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpXG4gXHRcdGt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTtcbiBcbiYjNDM7XHRpZiAocG1sKVxuJiM0MztcdFx0a3ZtLVx1MDAzZWFyY2guY3B1X2RpcnR5X2xvZ19zaXplID0gUE1MX0xPR19OUl9FTlRSSUVTO1xuJiM0MztcbiBcdHN2bV9zcnNvX3ZtX2luaXQoKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NDI5LDYgJiM0Mzs1NTI1LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCxcbiBcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuJiM0MztcdC51cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcgPSBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nLFxuJiM0MztcbiBcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcbiBcdC5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsXG4gXHQuc2V0dXBfbWNlID0gc3ZtX3NldHVwX21jZSxcbkBAIC01Njg5LDYgJiM0Mzs1Nzg3LDEwIEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFxuIFx0bnJpcHMgPSBucmlwcyBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTtcbiBcbiYjNDM7XHRwbWwgPSBwbWwgXHUwMDI2XHUwMDI2IG5wdF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BNTCk7XG4mIzQzO1x0aWYgKHBtbClcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7UGFnZSBtb2RpZmljYXRpb24gbG9nZ2luZyBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuJiM0MztcbiBcdGlmIChsYnJ2KSB7XG4gXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKVxuIFx0XHRcdGxicnYgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC01Myw2ICYjNDM7NTMsNyBAQCBleHRlcm4gaW50IHZnaWY7XG4gZXh0ZXJuIGJvb2wgaW50ZXJjZXB0X3NtaTtcbiBleHRlcm4gYm9vbCB2bm1pO1xuIGV4dGVybiBpbnQgbGJydjtcbiYjNDM7ZXh0ZXJuIGJvb2wgcG1sO1xuIFxuIGV4dGVybiBpbnQgdHNjX2F1eF91cmV0X3Nsb3QgX19yb19hZnRlcl9pbml0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDRjNTJhYjhkMDc4NjkuLmU3N2I1YjczMTI3NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHR2bXhfdmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdC8qXG4gXHQgKiBCYXNpYyBURFggZG9lcyBub3Qgc3VwcG9ydCBmZWF0dXJlIFBNTC4gS1ZNIGRvZXMgbm90IGVuYWJsZSBQTUwgaW5cbkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuJiM0MztcdHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSwgZW5hYmxlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTQ4ODMsMTAgJiM0Mzs0ODgzLDExIEBAIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFxuICNkZWZpbmUgVk1YX1hTU19FWElUX0JJVE1BUCAwXG4gXG4tc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuJiM0MztzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm0gKmt2bSA9IHZteC1cdTAwM2V2Y3B1Lmt2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBrdm1fdm14ICprdm1fdm14ID0gdG9fa3ZtX3ZteChrdm0pO1xuJiM0MztcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0aWYgKG5lc3RlZClcbiBcdFx0bmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKCk7XG5AQCAtNDkxMSw3ICYjNDM7NDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdGlmIChjcHVfaGFzX3RlcnRpYXJ5X2V4ZWNfY3RybHMoKSlcbiBcdFx0dGVydGlhcnlfZXhlY19jb250cm9sc19zZXQodm14LCB2bXhfdGVydGlhcnlfZXhlY19jb250cm9sKHZteCkpO1xuIFxuLVx0aWYgKGVuYWJsZV9hcGljdiBcdTAwMjZcdTAwMjYgbGFwaWNfaW5fa2VybmVsKFx1MDAyNnZteC1cdTAwM2V2Y3B1KSkge1xuJiM0MztcdGlmIChlbmFibGVfYXBpY3YgXHUwMDI2XHUwMDI2IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xuIFx0XHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7XG4gXHRcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTtcbiBcdFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApO1xuQEAgLTQ5MjMsNyAmIzQzOzQ5MjQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdHZtY3Nfd3JpdGU2NChQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoKFx1MDAyNnZteC1cdTAwM2V2dC5waV9kZXNjKSkpO1xuIFx0fVxuIFxuLVx0aWYgKHZteF9jYW5fdXNlX2lwaXYoXHUwMDI2dm14LVx1MDAzZXZjcHUpKSB7XG4mIzQzO1x0aWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIHtcbiBcdFx0dm1jc193cml0ZTY0KFBJRF9QT0lOVEVSX1RBQkxFLCBfX3BhKGt2bV92bXgtXHUwMDNlcGlkX3RhYmxlKSk7XG4gXHRcdHZtY3Nfd3JpdGUxNihMQVNUX1BJRF9QT0lOVEVSX0lOREVYLCBrdm0tXHUwMDNlYXJjaC5tYXhfdmNwdV9pZHMgLSAxKTtcbiBcdH1cbkBAIC00OTU4LDE1ICYjNDM7NDk1OSwxNSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHR2bWNzX3dyaXRlNjQoVk1fRU5UUllfTVNSX0xPQURfQUREUiwgX19wYSh2bXgtXHUwMDNlbXNyX2F1dG9sb2FkLmd1ZXN0LnZhbCkpO1xuIFxuIFx0aWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCBcdTAwMjYgVk1fRU5UUllfTE9BRF9JQTMyX1BBVClcbi1cdFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2bXgtXHUwMDNldmNwdS5hcmNoLnBhdCk7XG4mIzQzO1x0XHR2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZjcHUtXHUwMDNlYXJjaC5wYXQpO1xuIFxuIFx0dm1fZXhpdF9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1leGl0X2N0cmwoKSk7XG4gXG4gXHQvKiAyMi4yLjEsIDIwLjguMSAqL1xuIFx0dm1fZW50cnlfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZW50cnlfY3RybCgpKTtcbiBcbi1cdHZteC1cdTAwM2V2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcbi1cdHZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52bXgtXHUwMDNldmNwdS5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcbiYjNDM7XHR2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dmNwdS1cdTAwM2VhcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTtcbiBcbiBcdHNldF9jcjRfZ3Vlc3RfaG9zdF9tYXNrKHZteCk7XG4gXG5AQCAtNDk3NywxMSAmIzQzOzQ5NzgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0XHR2bWNzX3dyaXRlNjQoWFNTX0VYSVRfQklUTUFQLCBWTVhfWFNTX0VYSVRfQklUTUFQKTtcbiBcbiBcdGlmIChlbmFibGVfcG1sKSB7XG4tXHRcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZteC1cdTAwM2VwbWxfcGcpKTtcbiYjNDM7XHRcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSkpO1xuIFx0XHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XG4gXHR9XG4gXG4tXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKFx1MDAyNnZteC1cdTAwM2V2Y3B1LCBOVUxMKTtcbiYjNDM7XHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKHZjcHUsIE5VTEwpO1xuIFxuIFx0aWYgKHZteF9wdF9tb2RlX2lzX2hvc3RfZ3Vlc3QoKSkge1xuIFx0XHRtZW1zZXQoXHUwMDI2dm14LVx1MDAzZXB0X2Rlc2MsIDAsIHNpemVvZih2bXgtXHUwMDNlcHRfZGVzYykpO1xuQEAgLTQ5OTQsMTMgJiM0Mzs0OTk1LDEzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdHZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VTUCwgMCk7XG4gXHR2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FSVAsIDApO1xuIFxuLVx0dm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKFx1MDAyNnZteC1cdTAwM2V2Y3B1LCAwKTtcbiYjNDM7XHR2bXhfZ3Vlc3RfZGVidWdjdGxfd3JpdGUodmNwdSwgMCk7XG4gXG4gXHRpZiAoY3B1X2hhc192bXhfdHByX3NoYWRvdygpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSLCAwKTtcbi1cdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3coXHUwMDI2dm14LVx1MDAzZXZjcHUpKVxuJiM0MztcdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3codmNwdSkpXG4gXHRcdFx0dm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsXG4tXHRcdFx0XHQgICAgIF9fcGEodm14LVx1MDAzZXZjcHUuYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbiYjNDM7XHRcdFx0XHQgICAgIF9fcGEodmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlcmVncykpO1xuIFx0XHR2bWNzX3dyaXRlMzIoVFBSX1RIUkVTSE9MRCwgMCk7XG4gXHR9XG4gXG5AQCAtNTAxMSw3ICYjNDM7NTAxMiw3IEBAIHN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuLVx0aW5pdF92bWNzKHZteCk7XG4mIzQzO1x0aW5pdF92bWNzKHZjcHUpO1xuIFxuIFx0aWYgKG5lc3RlZCBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtXHUwMDNla3ZtLCBLVk1fWDg2X1FVSVJLX1NUVUZGX0ZFQVRVUkVfTVNSUykpXG5AQCAtNjQxOCw0OCAmIzQzOzY0MTksMjUgQEAgdm9pZCB2bXhfZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKVxuIFx0XHQqZXJyb3JfY29kZSA9IDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4mIzQzO3N0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGlmICh2bXgtXHUwMDNlcG1sX3BnKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHZteC1cdTAwM2VwbWxfcGcpO1xuLVx0XHR2bXgtXHUwMDNlcG1sX3BnID0gTlVMTDtcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSB7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZSh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpO1xuJiM0MztcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gTlVMTDtcbiBcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgdm14X2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dTE2IHBtbF9pZHgsIHBtbF90YWlsX2luZGV4O1xuLVx0dTY0ICpwbWxfYnVmO1xuLVx0aW50IGk7XG4mIzQzO1x0dTE2IHBtbF9pZHg7XG4gXG4gXHRwbWxfaWR4ID0gdm1jc19yZWFkMTYoR1VFU1RfUE1MX0lOREVYKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xuIFx0aWYgKHBtbF9pZHggPT0gUE1MX0hFQURfSU5ERVgpXG4gXHRcdHJldHVybjtcbi1cdC8qXG4tXHQgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHlcbi1cdCAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuXG4tXHQgKi9cbi1cdHBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggXHUwMDNlPSBQTUxfTE9HX05SX0VOVFJJRVMpID8gMCA6IHBtbF9pZHggJiM0MzsgMTtcbi1cbi1cdC8qXG4tXHQgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExXG4tXHQgKiB0aGVuIHRoZSBlbnRyeSA1MTAsIGFuZCBzbyBvbi5cbi1cdCAqXG4tXHQgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdFxuLVx0ICogdGhlIGRpcnR5IHJpbmcgaXMgZmlsbGVkIGluIHRoZSBzYW1lIG9yZGVyIHRoZSBDUFUgd3JvdGUgdGhlbS5cbi1cdCAqL1xuLVx0cG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2bXgtXHUwMDNlcG1sX3BnKTtcbiBcbi1cdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFx1MDAzZT0gcG1sX3RhaWxfaW5kZXg7IGktLSkge1xuLVx0XHR1NjQgZ3BhO1xuLVxuLVx0XHRncGEgPSBwbWxfYnVmW2ldO1xuLVx0XHRXQVJOX09OKGdwYSBcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcbi1cdFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHR9XG4mIzQzO1x0a3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgcG1sX2lkeCk7XG4gXG4gXHQvKiByZXNldCBQTUwgaW5kZXggKi9cbiBcdHZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTtcbkBAIC03NjQ4LDcgJiM0Mzs3NjI2LDcgQEAgdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0aWYgKGVuYWJsZV9wbWwpXG4tXHRcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcbiYjNDM7XHRcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XG4gXHRmcmVlX3ZwaWQodm14LVx1MDAzZXZwaWQpO1xuIFx0bmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7XG4gXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cdTAwM2Vsb2FkZWRfdm1jcyk7XG5AQCAtNzY4MCw4ICYjNDM7NzY1OCw4IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogZm9yIHRoZSBndWVzdCksIGV0Yy5cbiBcdCAqL1xuIFx0aWYgKGVuYWJsZV9wbWwpIHtcbi1cdFx0dm14LVx1MDAzZXBtbF9wZyA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4tXHRcdGlmICghdm14LVx1MDAzZXBtbF9wZylcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4mIzQzO1x0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbiBcdFx0XHRnb3RvIGZyZWVfdnBpZDtcbiBcdH1cbiBcbkBAIC03NzUyLDcgJiM0Mzs3NzMwLDcgQEAgaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gZnJlZV92bWNzOlxuIFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MpO1xuIGZyZWVfcG1sOlxuLVx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpO1xuJiM0MztcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XG4gZnJlZV92cGlkOlxuIFx0ZnJlZV92cGlkKHZteC1cdTAwM2V2cGlkKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtODQ0MCwyMSAmIzQzOzg0MTgsMTMgQEAgc3RhdGljIHZvaWQgdm14X3VwZGF0ZV9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yY2VfaW1tZWRpYXRlX2V4aXRcbiB9XG4gI2VuZGlmXG4gXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFlbmFibGVfcG1sKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Z3VhcmQodm14X3ZtY3MwMSkodmNwdSk7XG4gXG4tXHQvKlxuLVx0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xuLVx0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbi1cdCAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLlxuLVx0ICovXG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZykpXG4mIzQzO1x0aWYgKGVuYWJsZSlcbiBcdFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG4gXHRlbHNlXG4gXHRcdHNlY29uZGFyeV9leGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbmluZGV4IGRjODUxN2YxNWJjNDYuLjVmNTA1YWQxNGRkZTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5AQCAtMjY1LDEzICYjNDM7MjY1LDYgQEAgc3RydWN0IHZjcHVfdm14IHtcbiBcdHVuc2lnbmVkIGludCBwbGVfd2luZG93O1xuIFx0Ym9vbCBwbGVfd2luZG93X2RpcnR5O1xuIFxuLVx0LyogU3VwcG9ydCBmb3IgUE1MICovXG4tI2RlZmluZSBQTUxfTE9HX05SX0VOVFJJRVNcdDUxMlxuLVx0LyogUE1MIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSB3cml0dGVuIGJ5IHRoZSBDUFUgKi9cbi0jZGVmaW5lIFBNTF9IRUFEX0lOREVYXHRcdChQTUxfTE9HX05SX0VOVFJJRVMtMSlcbi1cbi1cdHN0cnVjdCBwYWdlICpwbWxfcGc7XG4tXG4gXHQvKiBhcGljIGRlYWRsaW5lIHZhbHVlIGluIGhvc3QgdHNjICovXG4gXHR1NjQgaHZfZGVhZGxpbmVfdHNjO1xuIFxuQEAgLTM5Nyw3ICYjNDM7MzkwLDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcbiBcbiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbiBib29sIHZteF9pc192YWxpZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li40ODEwZjliMWIwZmM2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCB1NjQgdm14X2dldF9sMl90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfd3JpdGVfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gaW50IHZteF9zZXRfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3Vlc3RfZGVhZGxpbmVfdHNjLFxuIFx0XHQgICAgIGJvb2wgKmV4cGlyZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzk0MSw2ICYjNDM7Mzk0MSwzNyBAQCB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiBcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4mIzQzO3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeClcbiYjNDM7e1xuJiM0MztcdHUxNiBwbWxfdGFpbF9pbmRleDtcbiYjNDM7XHR1NjQgKnBtbF9idWY7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5XG4mIzQzO1x0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4IFx1MDAzZT0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMVxuJiM0MztcdCAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXRcbiYjNDM7XHQgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLlxuJiM0MztcdCAqL1xuJiM0MztcdHBtbF9idWYgPSBwYWdlX2FkZHJlc3ModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgXHUwMDNlPSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7XG4mIzQzO1x0XHR1NjQgZ3BhO1xuJiM0MztcbiYjNDM7XHRcdGdwYSA9IHBtbF9idWZbaV07XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoZ3BhIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuJiM0MztcdFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZmx1c2hfcG1sX2J1ZmZlcik7XG4mIzQzO1xuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIHtcbkBAIC04MDQyLDYgJiM0Mzs4MDczLDIxIEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV94ODZfY2FsbChzZXRfYXBpY19hY2Nlc3NfcGFnZV9hZGRyKSh2Y3B1KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3RlLCBucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nIGNhbiBiZSBjaGFuZ2VkIGNvbmN1cnJlbnQgd2l0aCB0aGlzXG4mIzQzO1x0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbiYjNDM7XHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUsIGVuYWJsZSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDYWxsZWQgd2l0aGluIGt2bS1cdTAwM2VzcmN1IHJlYWQgc2lkZS5cbiAgKiBSZXR1cm5zIDEgdG8gbGV0IHZjcHVfcnVuKCkgY29udGludWUgdGhlIGd1ZXN0IGV4ZWN1dGlvbiBsb29wIHdpdGhvdXRcbkBAIC04MjA4LDcgJiM0Mzs4MjU0LDcgQEAgc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0XHRrdm1feDg2X2NhbGwocmVjYWxjX2ludGVyY2VwdHMpKHZjcHUpO1xuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfQ1BVX0RJUlRZX0xPR0dJTkcsIHZjcHUpKVxuLVx0XHRcdGt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUpO1xuJiM0MztcdFx0XHRrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFLCB2Y3B1KSkge1xuIFx0XHRcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmQ3NDdjMjA5NjVjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtOTAwLDQgJiM0Mzs5MDAsMTEgQEAgaW50IF9fX19rdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3BsLFxuIFxuIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiYjNDM7LyogU3VwcG9ydCBmb3IgUE1MICovXG4mIzQzOyNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTXHQ1MTJcbiYjNDM7LyogUE1MIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSB3cml0dGVuIGJ5IHRoZSBDUFUgKi9cbiYjNDM7I2RlZmluZSBQTUxfSEVBRF9JTkRFWFx0XHQoUE1MX0xPR19OUl9FTlRSSUVTLTEpXG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpO1xuJiM0MztcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nJiMzNDssCiAgICAmIzM0O3N2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX2ZsdXNoX3BtbF9idWZmZXImIzM0OywKICAgICYjMzQ7cG1sX2Z1bGxfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fZXhpdF9zcGVjaWFsJiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sJiMzNDssCiAgICAmIzM0O3ZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7dm14X2ZsdXNoX3BtbF9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYThiNTMxMjc3OWRkNjRkYmM2MzExYTIzNmZkMjYwYTM0OTM4MWRkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDk6MTA6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAppbmRleCBmNzBlZTc0YjVmOTIxLi5jYmZjYzY2YTE4ZTliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKQEAgLTIzOCw2ICYjNDM7MjM4LDcgQEAKIC8vIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1BWVU5MT0NLICAgICAgICAgICAgICAgKCA4KjMyJiM0MzsyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUCQkoIDgqMzImIzQzOzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1QJCSggOCozMiYjNDM7MjIpIC8qICYjMzQ7dGR4X2d1ZXN0JiMzNDsgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1BNTAkJCSggOCozMiYjNDM7MjMpIC8qIEFNRCBQYWdlIE1vZGlmaWNhdGlvbiBsb2dnaW5nICovCiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDA3OjAgKEVCWCksIHdvcmQgOSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9GU0dTQkFTRQkJKCA5KjMyJiM0MzsgMCkgLyogJiMzNDtmc2dzYmFzZSYjMzQ7IFJERlNCQVNFLCBXUkZTQkFTRSwgUkRHU0JBU0UsIFdSR1NCQVNFIGluc3RydWN0aW9ucyovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAzYWY3Mzk1YzI0MzBhLi4yZGViZjYyOTQyOTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTc4OSw2ICYjNDM7Nzg5LDggQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCSAqLwogCXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfZXh0ZXJuYWxfc3B0X2NhY2hlOwogCiYjNDM7CXN0cnVjdCBwYWdlICpwbWxfcGFnZTsKJiM0MzsKIAkvKgogCSAqIFFFTVUgdXNlcnNwYWNlIGFuZCB0aGUgZ3Vlc3QgZWFjaCBoYXZlIHRoZWlyIG93biBGUFUgc3RhdGUuCiAJICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuCkBAIC0xNjcwLDcgJiM0MzsxNjcyLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAkJCSAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTsKIAl2b2lkICgqaGFuZGxlX2V4aXRfaXJxb2ZmKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi0Jdm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsJdm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7CiAKIAl2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqdmNwdV91bmJsb2NraW5nKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBhYTYzNDMxYmE5MmMzLi5lMGE3NTQ5YTdjNzI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaApAQCAtMTY1LDcgJiM0MzsxNjUsMTAgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEgewogCXU4IHJlc2VydmVkXzlbMjJdOwogCXU2NCBhbGxvd2VkX3Nldl9mZWF0dXJlczsJLyogT2Zmc2V0IDB4MTM4ICovCiAJdTY0IGd1ZXN0X3Nldl9mZWF0dXJlczsJCS8qIE9mZnNldCAweDE0MCAqLwotCXU4IHJlc2VydmVkXzEwWzY2NF07CiYjNDM7CXU4IHJlc2VydmVkXzEwWzEyOF07CiYjNDM7CXU2NCBwbWxfYWRkcjsJCQkvKiBPZmZzZXQgMHgxYzggKi8KJiM0MzsJdTE2IHBtbF9pbmRleDsJCQkvKiBPZmZzZXQgMHgxZDAgKi8KJiM0MzsJdTggcmVzZXJ2ZWRfMTFbNTI2XTsKIAkvKgogCSAqIE9mZnNldCAweDNlMCwgMzIgYnl0ZXMgcmVzZXJ2ZWQKIAkgKiBmb3IgdXNlIGJ5IGh5cGVydmlzb3Ivc29mdHdhcmUuCkBAIC0yNDAsMTAgJiM0MzsyNDMsMTEgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEgewogI2RlZmluZSBTVk1fSU9JT19TSVpFX01BU0sgKDcgJmx0OyZsdDsgU1ZNX0lPSU9fU0laRV9TSElGVCkKICNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfTUFTSyAoNyAmbHQ7Jmx0OyBTVk1fSU9JT19BU0laRV9TSElGVCkKIAotI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlAJCUJJVCgwKQotI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWCQlCSVQoMSkKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FUwlCSVQoMikKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX0dNRVQJQklUKDMpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlAJCUJJVF9VTEwoMCkKJiM0MzsjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVYJCUJJVF9VTEwoMSkKJiM0MzsjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZfRVMJCUJJVF9VTEwoMikKJiM0MzsjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUCQlCSVRfVUxMKDMpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfUE1MCQlCSVRfVUxMKDExKQogCiAjZGVmaW5lIFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIJQklUX1VMTCgwKQogI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfVk1MT0FEX1ZNU0FWRQlCSVRfVUxMKDEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaAppbmRleCAwMTBhNDVjOWY2MTQ3Li5lODA2NzYxODUwOTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmgKQEAgLTEwMSw2ICYjNDM7MTAxLDcgQEAKICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSQkJMHg0MDEKICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTUwkweDQwMgogI2RlZmluZSBTVk1fRVhJVF9WTUdFWElUICAgICAgIDB4NDAzCiYjNDM7I2RlZmluZSBTVk1fRVhJVF9QTUxfRlVMTAkweDQwNwogCiAvKiBTRVYtRVMgc29mdHdhcmUtZGVmaW5lZCBWTUdFWElUIGV2ZW50cyAqLwogI2RlZmluZSBTVk1fVk1HRVhJVF9NTUlPX1JFQUQJCQkweDgwMDAwMDAxdWxsCkBAIC0yMzYsNiAmIzQzOzIzNyw3IEBACiAJeyBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJLAkJJiMzNDthdmljX2luY29tcGxldGVfaXBpJiMzNDsgfSwgXAogCXsgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTUywgICAmIzM0O2F2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3MmIzM0OyB9LCBcCiAJeyBTVk1fRVhJVF9WTUdFWElULAkJJiMzNDt2bWdleGl0JiMzNDsgfSwgXAomIzQzOwl7IFNWTV9FWElUX1BNTF9GVUxMLAkJJiMzNDtwbWxfZnVsbCYjMzQ7IH0sIFwKIAl7IFNWTV9WTUdFWElUX01NSU9fUkVBRCwJJiMzNDt2bWdleGl0X21taW9fcmVhZCYjMzQ7IH0sIFwKIAl7IFNWTV9WTUdFWElUX01NSU9fV1JJVEUsCSYjMzQ7dm1nZXhpdF9tbWlvX3dyaXRlJiMzNDsgfSwgXAogCXsgU1ZNX1ZNR0VYSVRfTk1JX0NPTVBMRVRFLAkmIzM0O3ZtZ2V4aXRfbm1pX2NvbXBsZXRlJiMzNDsgfSwgXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKaW5kZXggODY2NWE2NDc0ODA2Yy4uYjE4Y2M5Yzg4ZGQ1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCkBAIC01NSw2ICYjNDM7NTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7CiAJeyBYODZfRkVBVFVSRV9BTURfRkFTVF9DUFBDLAkJQ1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQ1BQQ19QRVJGX1BSSU8sCQlDUFVJRF9FRFgsIDE2LCAweDgwMDAwMDA3LCAwIH0sCiAJeyBYODZfRkVBVFVSRV9NQkEsCQkJQ1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LAomIzQzOwl7IFg4Nl9GRUFUVVJFX1BNTCwJCQlDUFVJRF9FQ1gsICA0LCAweDgwMDAwMDBhLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9YMkFWSUNfRVhULAkJQ1BVSURfRUNYLCAgNiwgMHg4MDAwMDAwYSwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQ09IRVJFTkNZX1NGV19OTywJCUNQVUlEX0VCWCwgMzEsIDB4ODAwMDAwMWYsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX1NNQkEsCQkJQ1BVSURfRUJYLCAgMiwgMHg4MDAwMDAyMCwgMCB9LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKaW5kZXggNzNmMzdiMDUwZDBhMC4uZGE0MTdjNGM1OTE1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCkBAIC05MDEsNiAmIzQzOzkwMSwxMyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAl2bWNiMDItJmd0O2NvbnRyb2wubXNycG1fYmFzZV9wYSA9IHZtY2IwMS0mZ3Q7Y29udHJvbC5tc3JwbV9iYXNlX3BhOwogCXZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfUEVSTV9NQVApOwogCiYjNDM7CS8qCiYjNDM7CSAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuCiYjNDM7CSAqIHVuZXhwZWN0ZWQgUE1MIHdyaXRlIHdvdWxkIHRyaWdnZXIgYSBQTUxfRlVMTCBWTS1FeGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHBtbCkKJiM0MzsJCXZtY2IwMi0mZ3Q7Y29udHJvbC5wbWxfaW5kZXggPSAtMTsKJiM0MzsKIAkvKgogCSAqIFN0YXNoIHZtY2IwMiYjMzk7cyBjb3VudGVyIGlmIHRoZSBndWVzdCBoYXNuJiMzOTt0IG1vdmVkIHBhc3QgdGhlIGd1aWx0eQogCSAqIGluc3RydWN0aW9uOyBvdGhlcndpc2UsIHJlc2V0IHRoZSBjb3VudGVyIHRvICYjMzk7MCYjMzk7LgpAQCAtMTgyMCw2ICYjNDM7MTgyNywxMyBAQCBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJCWlmIChuZXN0ZWRfc3ZtX2lzX2wyX3RsYl9mbHVzaF9oY2FsbCh2Y3B1KSkKIAkJCXJldHVybiBORVNURURfRVhJVF9IT1NUOwogCQlicmVhazsKJiM0MzsJY2FzZSBTVk1fRVhJVF9QTUxfRlVMTDoKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbGwgUE1MIGZ1bGwgZXhpdHMgYXJlIGhhbmRsZWQgYnkgS1ZNLiAgS1ZNIGVtdWxhdGVzIFBNTCBpbgomIzQzOwkJICogc29mdHdhcmUgZm9yIEwxLCBidXQgbmV2ZXIgZW5hYmxlcyBQTUwgaW4gaGFyZHdhcmUgb24gYmVoYWxmCiYjNDM7CQkgKiBvZiBMMS4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNTcwNTcyM2YxZjQxMi4uY2ZlOTkwZjgwNTA0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC00OTk0LDcgJiM0Mzs0OTk0LDcgQEAgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKQogCSAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmUKIAkgKiB0aGUgQ1BVIHdpbGwgaW5jb3JyZWN0bHkgc2lnbmFsIGFuIFJNUCB2aW9sYXRpb24gI1BGIGlmIGEKIAkgKiBodWdlcGFnZSAoMk1CIG9yIDFHQikgY29sbGlkZXMgd2l0aCB0aGUgUk1QIGVudHJ5IG9mIGEKLQkgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBvciBBVklDIGJhY2tpbmcgcGFnZS4KJiM0MzsJICogMk1CLWFsaWduZWQgVk1DQiwgVk1TQSwgUE1MIG9yIEFWSUMgYmFja2luZyBwYWdlLgogCSAqCiAJICogQWxsb2NhdGUgb25lIGV4dHJhIHBhZ2UsIGNob29zZSBhIHBhZ2Ugd2hpY2ggaXMgbm90CiAJICogMk1CLWFsaWduZWQsIGFuZCBmcmVlIHRoZSBvdGhlci4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDdkNTlkMzAxZTFlNTQuLjk1MGMyNTBhNzdiNTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtMTc5LDYgJiM0MzsxNzksOSBAQCBtb2R1bGVfcGFyYW0odm5taSwgYm9vbCwgMDQ0NCk7CiAKIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTsKIAomIzQzO2Jvb2wgX19yb19hZnRlcl9pbml0IHBtbCA9IHRydWU7CiYjNDM7bW9kdWxlX3BhcmFtKHBtbCwgYm9vbCwgMDQ0NCk7CiYjNDM7CiBzdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgc3ZtX2dwX2VycmF0dW1faW50ZXJjZXB0ID0gdHJ1ZTsKIAogc3RhdGljIHU4IHJzbV9pbnNfYnl0ZXNbXSA9ICYjMzQ7XHgwZlx4YWEmIzM0OzsKQEAgLTEyNjcsNiAmIzQzOzEyNzAsMjMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KQogCWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpCiAJCXN2bV9zZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0JVU0xPQ0spOwogCiYjNDM7CWlmIChwbWwpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQb3B1bGF0ZSB0aGUgcGFnZSBhZGRyZXNzIGFuZCBpbmRleCBoZXJlLCBQTUwgaXMgZW5hYmxlZAomIzQzOwkJICogd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgb24gdGhlIG1lbXNsb3QgdGhyb3VnaAomIzQzOwkJICogc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZygpCiYjNDM7CQkgKi8KJiM0MzsJCWNvbnRyb2wtJmd0O3BtbF9hZGRyID0gKHU2NClfX3NtZV9zZXQocGFnZV90b19waHlzKHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgVk1DQiBjb250cm9sIGFyZWEgcmVtYWlucyB2YWxpZCBhZnRlciBhbiBpbnRlcmNlcHRlZCBTSFVURE9XTgomIzQzOwkJICogKEFNRCBBUE0gUmV2IDMuNDUmIzQzOyksIHNvIG9ubHkgaW5pdGlhbGl6ZSBQTUwgaW5kZXggb24gcmVzZXQgdG8gYXZvaWQKJiM0MzsJCSAqIGRpc2NhcmRpbmcgYWxyZWFkeS1sb2dnZWQgZW50cmllcyB0aGF0IGhhdmVuJiMzOTt0IGJlZW4gZmx1c2hlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFpbml0X2V2ZW50KQomIzQzOwkJCWNvbnRyb2wtJmd0O3BtbF9pbmRleCA9IFBNTF9IRUFEX0lOREVYOwomIzQzOwl9CiYjNDM7CiAJaWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSkKIAkJc2V2X2luaXRfdm1jYihzdm0sIGluaXRfZXZlbnQpOwogCkBAIC0xMzI2LDkgJiM0MzsxMzQ2LDE1IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIXZtY2IwMV9wYWdlKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAocG1sKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLnBtbF9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpOwomIzQzOwkJaWYgKCF2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQomIzQzOwkJCWdvdG8gZXJyb3JfZnJlZV92bWNiX3BhZ2U7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBzZXZfdmNwdV9jcmVhdGUodmNwdSk7CiAJaWYgKGVycikKLQkJZ290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTsKJiM0MzsJCWdvdG8gZXJyb3JfZnJlZV9wbWxfcGFnZTsKIAogCWVyciA9IGF2aWNfaW5pdF92Y3B1KHN2bSk7CiAJaWYgKGVycikKQEAgLTEzNTMsNiAmIzQzOzEzNzksOSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIGVycm9yX2ZyZWVfc2V2OgogCXNldl9mcmVlX3ZjcHUodmNwdSk7CiYjNDM7ZXJyb3JfZnJlZV9wbWxfcGFnZToKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpCiYjNDM7CQlfX2ZyZWVfcGFnZSh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKIGVycm9yX2ZyZWVfdm1jYl9wYWdlOgogCV9fZnJlZV9wYWdlKHZtY2IwMV9wYWdlKTsKIG91dDoKQEAgLTEzNzAsNiAmIzQzOzEzOTksOSBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCXNldl9mcmVlX3ZjcHUodmNwdSk7CiAKJiM0MzsJaWYgKHBtbCAmYW1wOyZhbXA7IHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpCiYjNDM7CQlfX2ZyZWVfcGFnZSh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKJiM0MzsKIAlfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS0mZ3Q7dm1jYjAxLnBhKSk7CiAJc3ZtX3ZjcHVfZnJlZV9tc3JwbShzdm0tJmd0O21zcnBtKTsKIH0KQEAgLTMzNDQsNiAmIzQzOzMzNzYsNDUgQEAgc3RhdGljIGludCB2bW1jYWxsX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIGt2bV9lbXVsYXRlX2h5cGVyY2FsbCh2Y3B1KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwlzdHJ1Y3Qgdm1jYiAqdm1jYjAxID0gc3ZtLSZndDt2bWNiMDEucHRyOwomIzQzOwomIzQzOwlpZiAoZW5hYmxlKQomIzQzOwkJdm1jYjAxLSZndDtjb250cm9sLm1pc2NfY3RsIHw9IFNWTV9NSVNDX0VOQUJMRV9QTUw7CiYjNDM7CWVsc2UKJiM0MzsJCXZtY2IwMS0mZ3Q7Y29udHJvbC5taXNjX2N0bCAmYW1wOz0gflNWTV9NSVNDX0VOQUJMRV9QTUw7CiYjNDM7CiYjNDM7CXZtY2JfbWFya19kaXJ0eSh2bWNiMDEsIFZNQ0JfTlBUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiYjNDM7CXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZhbXA7c3ZtLSZndDt2bWNiLSZndDtjb250cm9sOwomIzQzOwomIzQzOwkvKiBEbyBub3RoaW5nIGlmIFBNTCBidWZmZXIgaXMgZW1wdHkgKi8KJiM0MzsJaWYgKGNvbnRyb2wtJmd0O3BtbF9pbmRleCA9PSBQTUxfSEVBRF9JTkRFWCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgY29udHJvbC0mZ3Q7cG1sX2luZGV4KTsKJiM0MzsKJiM0MzsJLyogUmVzZXQgdGhlIFBNTCBpbmRleCAqLwomIzQzOwljb250cm9sLSZndDtwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwbWxfZnVsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJdHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtJmd0O3ZjcHVfaWQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQTUwgYnVmZmVyIGlzIGFscmVhZHkgZmx1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN2bV9oYW5kbGVfZXhpdCgpLgomIzQzOwkgKiBOb3RoaW5nIHRvIGRvIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHsKIAlbU1ZNX0VYSVRfUkVBRF9DUjBdCQkJPSBjcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1JFQURfQ1IzXQkJCT0gY3JfaW50ZXJjZXB0aW9uLApAQCAtMzQyMSw2ICYjNDM7MzQ5Miw3IEBAIHN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0gewogI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVgogCVtTVk1fRVhJVF9WTUdFWElUXQkJCT0gc2V2X2hhbmRsZV92bWdleGl0LAogI2VuZGlmCiYjNDM7CVtTVk1fRVhJVF9QTUxfRlVMTF0JCQk9IHBtbF9mdWxsX2ludGVyY2VwdGlvbiwKIH07CiAKIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0zNDcwLDggJiM0MzszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtleGl0X2luZm8yOiYjMzQ7LCBjb250cm9sLSZndDtleGl0X2luZm9fMik7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDh4XG4mIzM0OywgJiMzNDtleGl0X2ludF9pbmZvOiYjMzQ7LCBjb250cm9sLSZndDtleGl0X2ludF9pbmZvKTsKIAlwcl9lcnIoJiMzNDslLTIwcyUwOHhcbiYjMzQ7LCAmIzM0O2V4aXRfaW50X2luZm9fZXJyOiYjMzQ7LCBjb250cm9sLSZndDtleGl0X2ludF9pbmZvX2Vycik7Ci0JcHJfZXJyKCYjMzQ7JS0yMHMlbGxkXG4mIzM0OywgJiMzNDttaXNjX2N0bDomIzM0OywgY29udHJvbC0mZ3Q7bWlzY19jdGwpOwomIzQzOwlwcl9lcnIoJiMzNDslLTIwcyVsbHhcbiYjMzQ7LCAmIzM0O21pc2NfY3RsOiYjMzQ7LCBjb250cm9sLSZndDttaXNjX2N0bCk7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtuZXN0ZWRfY3IzOiYjMzQ7LCBjb250cm9sLSZndDtuZXN0ZWRfY3IzKTsKJiM0MzsKJiM0MzsJaWYgKHBtbCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtwbWxfYWRkcjomIzM0OywgY29udHJvbC0mZ3Q7cG1sX2FkZHIpOwomIzQzOwkJcHJfZXJyKCYjMzQ7JS0yMHMlMDR4XG4mIzM0OywgJiMzNDtwbWxfaW5kZXg6JiMzNDssIGNvbnRyb2wtJmd0O3BtbF9pbmRleCk7CiYjNDM7CX0KJiM0MzsKIAlwcl9lcnIoJiMzNDslLTIwcyUwMTZsbHhcbiYjMzQ7LCAmIzM0O2F2aWNfdmFwaWNfYmFyOiYjMzQ7LCBjb250cm9sLSZndDthdmljX3ZhcGljX2Jhcik7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDtnaGNiOiYjMzQ7LCBjb250cm9sLSZndDtnaGNiX2dwYSk7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDh4XG4mIzM0OywgJiMzNDtldmVudF9pbmo6JiMzNDssIGNvbnRyb2wtJmd0O2V2ZW50X2luaik7CkBAIC0zNjQ5LDYgJiM0MzszNzI3LDEzIEBAIGludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSkKIAkgICAgKHU2NClleGl0X2NvZGUgIT0gX19leGl0X2NvZGUpCiAJCWdvdG8gdW5leHBlY3RlZF92bWV4aXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogUE1MIGlzIG5ldmVyIGVuYWJsZWQgd2hlbiBydW5uaW5nIEwyLCBiYWlsIGltbWVkaWF0ZWx5IGlmIGEgUE1MIGZ1bGwKJiM0MzsJICogZXhpdCBvY2N1cnMgYXMgc29tZXRoaW5nIGlzIGhvcnJpYmx5IHdyb25nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfUE1MX0ZVTEwpKQomIzQzOwkJZ290byB1bmV4cGVjdGVkX3ZtZXhpdDsKJiM0MzsKICNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUKIAlpZiAoZXhpdF9jb2RlID09IFNWTV9FWElUX01TUikKIAkJcmV0dXJuIG1zcl9pbnRlcmNlcHRpb24odmNwdSk7CkBAIC0zNzE3LDYgJiM0MzszODAyLDE0IEBAIHN0YXRpYyBpbnQgc3ZtX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKQogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCBrdm1fcnVuICprdm1fcnVuID0gdmNwdS0mZ3Q7cnVuOwogCiYjNDM7CS8qCiYjNDM7CSAqIE9wcG9ydHVuaXN0aWNhbGx5IGZsdXNoIHRoZSBQTUwgYnVmZmVyIG9uIFZNIGV4aXQuIFRoaXMga2VlcHMgdGhlCiYjNDM7CSAqIGRpcnR5IGJpdG1hcCBjdXJyZW50IGJ5IHByb2Nlc3NpbmcgbG9nZ2VkIEdQQXMgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3IKJiM0MzsJICogUE1MX0ZVTEwgZXhpdC4KJiM0MzsJICovCiYjNDM7CWlmICh2Y3B1LSZndDtrdm0tJmd0O2FyY2guY3B1X2RpcnR5X2xvZ19zaXplICZhbXA7JmFtcDsgIWlzX2d1ZXN0X21vZGUodmNwdSkpCiYjNDM7CQlzdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1KTsKJiM0MzsKIAlpZiAodW5saWtlbHkoZXhpdF9mYXN0cGF0aCA9PSBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTUzMTEsNiAmIzQzOzU0MDQsOSBAQCBzdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSkKIAlpZiAoIXBhdXNlX2ZpbHRlcl9jb3VudCB8fCAhcGF1c2VfZmlsdGVyX3RocmVzaCkKIAkJa3ZtX2Rpc2FibGVfZXhpdHMoa3ZtLCBLVk1fWDg2X0RJU0FCTEVfRVhJVFNfUEFVU0UpOwogCiYjNDM7CWlmIChwbWwpCiYjNDM7CQlrdm0tJmd0O2FyY2guY3B1X2RpcnR5X2xvZ19zaXplID0gUE1MX0xPR19OUl9FTlRSSUVTOwomIzQzOwogCXN2bV9zcnNvX3ZtX2luaXQoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MjksNiAmIzQzOzU1MjUsOCBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKIAkuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCwKIAkuaGFuZGxlX2V4aXRfaXJxb2ZmID0gc3ZtX2hhbmRsZV9leGl0X2lycW9mZiwKIAomIzQzOwkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZywKJiM0MzsKIAkuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsCiAJLnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSwKIAkuc2V0dXBfbWNlID0gc3ZtX3NldHVwX21jZSwKQEAgLTU2ODksNiAmIzQzOzU3ODcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpCiAKIAlucmlwcyA9IG5yaXBzICZhbXA7JmFtcDsgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTsKIAomIzQzOwlwbWwgPSBwbWwgJmFtcDsmYW1wOyBucHRfZW5hYmxlZCAmYW1wOyZhbXA7IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUE1MKTsKJiM0MzsJaWYgKHBtbCkKJiM0MzsJCXByX2luZm8oJiMzNDtQYWdlIG1vZGlmaWNhdGlvbiBsb2dnaW5nIHN1cHBvcnRlZFxuJiMzNDspOwomIzQzOwogCWlmIChsYnJ2KSB7CiAJCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKQogCQkJbGJydiA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCkBAIC01Myw2ICYjNDM7NTMsNyBAQCBleHRlcm4gaW50IHZnaWY7CiBleHRlcm4gYm9vbCBpbnRlcmNlcHRfc21pOwogZXh0ZXJuIGJvb2wgdm5taTsKIGV4dGVybiBpbnQgbGJydjsKJiM0MztleHRlcm4gYm9vbCBwbWw7CiAKIGV4dGVybiBpbnQgdHNjX2F1eF91cmV0X3Nsb3QgX19yb19hZnRlcl9pbml0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCmluZGV4IDRjNTJhYjhkMDc4NjkuLmU3N2I1YjczMTI3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC0xMDgsNyAmIzQzOzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJdm14X3ZjcHVfbG9hZCh2Y3B1LCBjcHUpOwogfQogCi1zdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKQogewogCS8qCiAJICogQmFzaWMgVERYIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSBQTUwuIEtWTSBkb2VzIG5vdCBlbmFibGUgUE1MIGluCkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKFdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSkKIAkJcmV0dXJuOwogCi0Jdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTsKJiM0MzsJdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1LCBlbmFibGUpOwogfQogCiBzdGF0aWMgdm9pZCB2dF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTQ4ODMsMTAgJiM0Mzs0ODgzLDExIEBAIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKQogCiAjZGVmaW5lIFZNWF9YU1NfRVhJVF9CSVRNQVAgMAogCi1zdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiYjNDM7c3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtICprdm0gPSB2bXgtJmd0O3ZjcHUua3ZtOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGt2bV92bXggKmt2bV92bXggPSB0b19rdm1fdm14KGt2bSk7CiYjNDM7CXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCiAJaWYgKG5lc3RlZCkKIAkJbmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKCk7CkBAIC00OTExLDcgJiM0Mzs0OTEyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCWlmIChjcHVfaGFzX3RlcnRpYXJ5X2V4ZWNfY3RybHMoKSkKIAkJdGVydGlhcnlfZXhlY19jb250cm9sc19zZXQodm14LCB2bXhfdGVydGlhcnlfZXhlY19jb250cm9sKHZteCkpOwogCi0JaWYgKGVuYWJsZV9hcGljdiAmYW1wOyZhbXA7IGxhcGljX2luX2tlcm5lbCgmYW1wO3ZteC0mZ3Q7dmNwdSkpIHsKJiM0MzsJaWYgKGVuYWJsZV9hcGljdiAmYW1wOyZhbXA7IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkgewogCQl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7CiAJCXZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTsKIAkJdm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApOwpAQCAtNDkyMyw3ICYjNDM7NDkyNCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJdm1jc193cml0ZTY0KFBPU1RFRF9JTlRSX0RFU0NfQUREUiwgX19wYSgoJmFtcDt2bXgtJmd0O3Z0LnBpX2Rlc2MpKSk7CiAJfQogCi0JaWYgKHZteF9jYW5fdXNlX2lwaXYoJmFtcDt2bXgtJmd0O3ZjcHUpKSB7CiYjNDM7CWlmICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpKSB7CiAJCXZtY3Nfd3JpdGU2NChQSURfUE9JTlRFUl9UQUJMRSwgX19wYShrdm1fdm14LSZndDtwaWRfdGFibGUpKTsKIAkJdm1jc193cml0ZTE2KExBU1RfUElEX1BPSU5URVJfSU5ERVgsIGt2bS0mZ3Q7YXJjaC5tYXhfdmNwdV9pZHMgLSAxKTsKIAl9CkBAIC00OTU4LDE1ICYjNDM7NDk1OSwxNSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiAJdm1jc193cml0ZTY0KFZNX0VOVFJZX01TUl9MT0FEX0FERFIsIF9fcGEodm14LSZndDttc3JfYXV0b2xvYWQuZ3Vlc3QudmFsKSk7CiAKIAlpZiAodm1jc19jb25maWcudm1lbnRyeV9jdHJsICZhbXA7IFZNX0VOVFJZX0xPQURfSUEzMl9QQVQpCi0JCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgdm14LSZndDt2Y3B1LmFyY2gucGF0KTsKJiM0MzsJCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgdmNwdS0mZ3Q7YXJjaC5wYXQpOwogCiAJdm1fZXhpdF9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1leGl0X2N0cmwoKSk7CiAKIAkvKiAyMi4yLjEsIDIwLjguMSAqLwogCXZtX2VudHJ5X2NvbnRyb2xzX3NldCh2bXgsIHZteF9nZXRfaW5pdGlhbF92bWVudHJ5X2N0cmwoKSk7CiAKLQl2bXgtJmd0O3ZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyA9IHZteF9sMV9ndWVzdF9vd25lZF9jcjBfYml0cygpOwotCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52bXgtJmd0O3ZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyk7CiYjNDM7CXZjcHUtJmd0O2FyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTsKJiM0MzsJdm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfnZjcHUtJmd0O2FyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpOwogCiAJc2V0X2NyNF9ndWVzdF9ob3N0X21hc2sodm14KTsKIApAQCAtNDk3NywxMSAmIzQzOzQ5NzgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCQl2bWNzX3dyaXRlNjQoWFNTX0VYSVRfQklUTUFQLCBWTVhfWFNTX0VYSVRfQklUTUFQKTsKIAogCWlmIChlbmFibGVfcG1sKSB7Ci0JCXZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZteC0mZ3Q7cG1sX3BnKSk7CiYjNDM7CQl2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKSk7CiAJCXZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTsKIAl9CiAKLQl2bXhfd3JpdGVfZW5jbHNfYml0bWFwKCZhbXA7dm14LSZndDt2Y3B1LCBOVUxMKTsKJiM0MzsJdm14X3dyaXRlX2VuY2xzX2JpdG1hcCh2Y3B1LCBOVUxMKTsKIAogCWlmICh2bXhfcHRfbW9kZV9pc19ob3N0X2d1ZXN0KCkpIHsKIAkJbWVtc2V0KCZhbXA7dm14LSZndDtwdF9kZXNjLCAwLCBzaXplb2Yodm14LSZndDtwdF9kZXNjKSk7CkBAIC00OTk0LDEzICYjNDM7NDk5NSwxMyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiAJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCAwKTsKIAl2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FSVAsIDApOwogCi0Jdm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKCZhbXA7dm14LSZndDt2Y3B1LCAwKTsKJiM0MzsJdm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKHZjcHUsIDApOwogCiAJaWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkgewogCQl2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUiwgMCk7Ci0JCWlmIChjcHVfbmVlZF90cHJfc2hhZG93KCZhbXA7dm14LSZndDt2Y3B1KSkKJiM0MzsJCWlmIChjcHVfbmVlZF90cHJfc2hhZG93KHZjcHUpKQogCQkJdm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsCi0JCQkJICAgICBfX3BhKHZteC0mZ3Q7dmNwdS5hcmNoLmFwaWMtJmd0O3JlZ3MpKTsKJiM0MzsJCQkJICAgICBfX3BhKHZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7cmVncykpOwogCQl2bWNzX3dyaXRlMzIoVFBSX1RIUkVTSE9MRCwgMCk7CiAJfQogCkBAIC01MDExLDcgJiM0Mzs1MDEyLDcgQEAgc3RhdGljIHZvaWQgX192bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKLQlpbml0X3ZtY3Modm14KTsKJiM0MzsJaW5pdF92bWNzKHZjcHUpOwogCiAJaWYgKG5lc3RlZCAmYW1wOyZhbXA7CiAJICAgIGt2bV9jaGVja19oYXNfcXVpcmsodmNwdS0mZ3Q7a3ZtLCBLVk1fWDg2X1FVSVJLX1NUVUZGX0ZFQVRVUkVfTVNSUykpCkBAIC02NDE4LDQ4ICYjNDM7NjQxOSwyNSBAQCB2b2lkIHZteF9nZXRfZW50cnlfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpCiAJCSplcnJvcl9jb2RlID0gMDsKIH0KIAotc3RhdGljIHZvaWQgdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcihzdHJ1Y3QgdmNwdV92bXggKnZteCkKJiM0MztzdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAodm14LSZndDtwbWxfcGcpIHsKLQkJX19mcmVlX3BhZ2Uodm14LSZndDtwbWxfcGcpOwotCQl2bXgtJmd0O3BtbF9wZyA9IE5VTEw7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKSB7CiYjNDM7CQlfX2ZyZWVfcGFnZSh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKJiM0MzsJCXZjcHUtJmd0O2FyY2gucG1sX3BhZ2UgPSBOVUxMOwogCX0KIH0KIAogc3RhdGljIHZvaWQgdm14X2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCXUxNiBwbWxfaWR4LCBwbWxfdGFpbF9pbmRleDsKLQl1NjQgKnBtbF9idWY7Ci0JaW50IGk7CiYjNDM7CXUxNiBwbWxfaWR4OwogCiAJcG1sX2lkeCA9IHZtY3NfcmVhZDE2KEdVRVNUX1BNTF9JTkRFWCk7CiAKIAkvKiBEbyBub3RoaW5nIGlmIFBNTCBidWZmZXIgaXMgZW1wdHkgKi8KIAlpZiAocG1sX2lkeCA9PSBQTUxfSEVBRF9JTkRFWCkKIAkJcmV0dXJuOwotCS8qCi0JICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5Ci0JICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC4KLQkgKi8KLQlwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4ICZndDs9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCAmIzQzOyAxOwotCi0JLyoKLQkgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExCi0JICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uCi0JICoKLQkgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdAotCSAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uCi0JICovCi0JcG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2bXgtJmd0O3BtbF9wZyk7CiAKLQlmb3IgKGkgPSBQTUxfSEVBRF9JTkRFWDsgaSAmZ3Q7PSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7Ci0JCXU2NCBncGE7Ci0KLQkJZ3BhID0gcG1sX2J1ZltpXTsKLQkJV0FSTl9PTihncGEgJmFtcDsgKFBBR0VfU0laRSAtIDEpKTsKLQkJa3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKLQl9CiYjNDM7CWt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIHBtbF9pZHgpOwogCiAJLyogcmVzZXQgUE1MIGluZGV4ICovCiAJdm1jc193cml0ZTE2KEdVRVNUX1BNTF9JTkRFWCwgUE1MX0hFQURfSU5ERVgpOwpAQCAtNzY0OCw3ICYjNDM7NzYyNiw3IEBAIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKIAlpZiAoZW5hYmxlX3BtbCkKLQkJdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpOwomIzQzOwkJdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTsKIAlmcmVlX3ZwaWQodm14LSZndDt2cGlkKTsKIAluZXN0ZWRfdm14X2ZyZWVfdmNwdSh2Y3B1KTsKIAlmcmVlX2xvYWRlZF92bWNzKHZteC0mZ3Q7bG9hZGVkX3ZtY3MpOwpAQCAtNzY4MCw4ICYjNDM7NzY1OCw4IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAqIGZvciB0aGUgZ3Vlc3QpLCBldGMuCiAJICovCiAJaWYgKGVuYWJsZV9wbWwpIHsKLQkJdm14LSZndDtwbWxfcGcgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pOwotCQlpZiAoIXZteC0mZ3Q7cG1sX3BnKQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CiYjNDM7CQlpZiAoIXZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpCiAJCQlnb3RvIGZyZWVfdnBpZDsKIAl9CiAKQEAgLTc3NTIsNyAmIzQzOzc3MzAsNyBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGZyZWVfdm1jczoKIAlmcmVlX2xvYWRlZF92bWNzKHZteC0mZ3Q7bG9hZGVkX3ZtY3MpOwogZnJlZV9wbWw6Ci0Jdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpOwomIzQzOwl2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHZjcHUpOwogZnJlZV92cGlkOgogCWZyZWVfdnBpZCh2bXgtJmd0O3ZwaWQpOwogCXJldHVybiBlcnI7CkBAIC04NDQwLDIxICYjNDM7ODQxOCwxMyBAQCBzdGF0aWMgdm9pZCB2bXhfdXBkYXRlX2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JjZV9pbW1lZGlhdGVfZXhpdAogfQogI2VuZGlmCiAKLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKLQlpZiAoV0FSTl9PTl9PTkNFKCFlbmFibGVfcG1sKSkKLQkJcmV0dXJuOwotCiAJZ3VhcmQodm14X3ZtY3MwMSkodmNwdSk7CiAKLQkvKgotCSAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXMKLQkgKiBjb2RlLCBidXQgaW4gdGhhdCBjYXNlIGFub3RoZXIgdXBkYXRlIHJlcXVlc3Qgd2lsbCBiZSBtYWRlIGFuZCBzbwotCSAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLgotCSAqLwotCWlmIChhdG9taWNfcmVhZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZykpCiYjNDM7CWlmIChlbmFibGUpCiAJCXNlY29uZGFyeV9leGVjX2NvbnRyb2xzX3NldGJpdCh2bXgsIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9QTUwpOwogCWVsc2UKIAkJc2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCmluZGV4IGRjODUxN2YxNWJjNDYuLjVmNTA1YWQxNGRkZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaApAQCAtMjY1LDEzICYjNDM7MjY1LDYgQEAgc3RydWN0IHZjcHVfdm14IHsKIAl1bnNpZ25lZCBpbnQgcGxlX3dpbmRvdzsKIAlib29sIHBsZV93aW5kb3dfZGlydHk7CiAKLQkvKiBTdXBwb3J0IGZvciBQTUwgKi8KLSNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTCTUxMgotCS8qIFBNTCBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgd3JpdHRlbiBieSB0aGUgQ1BVICovCi0jZGVmaW5lIFBNTF9IRUFEX0lOREVYCQkoUE1MX0xPR19OUl9FTlRSSUVTLTEpCi0KLQlzdHJ1Y3QgcGFnZSAqcG1sX3BnOwotCiAJLyogYXBpYyBkZWFkbGluZSB2YWx1ZSBpbiBob3N0IHRzYyAqLwogCXU2NCBodl9kZWFkbGluZV90c2M7CiAKQEAgLTM5Nyw3ICYjNDM7MzkwLDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mzt2b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7CiAKIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpOwogYm9vbCB2bXhfaXNfdmFsaWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSwgYm9vbCBob3N0X2luaXRpYXRlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCmluZGV4IDA1NGZkMTRiYjJlMTYuLjQ4MTBmOWIxYjBmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oCkBAIC0xMTgsNyAmIzQzOzExOCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF93cml0ZV90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOwogI2lmZGVmIENPTkZJR19YODZfNjQKIGludCB2bXhfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYywKIAkJICAgICBib29sICpleHBpcmVkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA3OTQ2OGRkZmU0NzM2Li42ZDI2ZGU4YjdjM2NjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0zOTQxLDYgJiM0MzszOTQxLDM3IEBAIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KQogCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogfQogCiYjNDM7dm9pZCBrdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBwbWxfaWR4KQomIzQzO3sKJiM0MzsJdTE2IHBtbF90YWlsX2luZGV4OwomIzQzOwl1NjQgKnBtbF9idWY7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHkKJiM0MzsJICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC4KJiM0MzsJICovCiYjNDM7CXBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggJmd0Oz0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICYjNDM7IDE7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBNTCBsb2cgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoZSBDUFUgZmlyc3Qgd3JpdGVzIHRoZSBlbnRyeSA1MTEKJiM0MzsJICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uCiYjNDM7CSAqCiYjNDM7CSAqIFJlYWQgdGhlIGVudHJpZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4sIHRvIGVuc3VyZSB0aGF0CiYjNDM7CSAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uCiYjNDM7CSAqLwomIzQzOwlwbWxfYnVmID0gcGFnZV9hZGRyZXNzKHZjcHUtJmd0O2FyY2gucG1sX3BhZ2UpOwomIzQzOwomIzQzOwlmb3IgKGkgPSBQTUxfSEVBRF9JTkRFWDsgaSAmZ3Q7PSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7CiYjNDM7CQl1NjQgZ3BhOwomIzQzOwomIzQzOwkJZ3BhID0gcG1sX2J1ZltpXTsKJiM0MzsJCVdBUk5fT05fT05DRShncGEgJmFtcDsgKFBBR0VfU0laRSAtIDEpKTsKJiM0MzsJCWt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgJmd0OyZndDsgUEFHRV9TSElGVCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9mbHVzaF9wbWxfYnVmZmVyKTsKJiM0MzsKIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sCiAJCQkgICAgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApCiB7CkBAIC04MDQyLDYgJiM0Mzs4MDczLDIxIEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlrdm1feDg2X2NhbGwoc2V0X2FwaWNfYWNjZXNzX3BhZ2VfYWRkcikodmNwdSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXMKJiM0MzsJICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc28KJiM0MzsJICogdGhlIGd1ZXN0IHdpbGwgbmV2ZXIgcnVuIHdpdGggYSBzdGFsZSBQTUwgdmFsdWUuCiYjNDM7CSAqLwomIzQzOwlib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUsIGVuYWJsZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGxlZCB3aXRoaW4ga3ZtLSZndDtzcmN1IHJlYWQgc2lkZS4KICAqIFJldHVybnMgMSB0byBsZXQgdmNwdV9ydW4oKSBjb250aW51ZSB0aGUgZ3Vlc3QgZXhlY3V0aW9uIGxvb3Agd2l0aG91dApAQCAtODIwOCw3ICYjNDM7ODI1NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCQlrdm1feDg2X2NhbGwocmVjYWxjX2ludGVyY2VwdHMpKHZjcHUpOwogCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9DUFVfRElSVFlfTE9HR0lORywgdmNwdSkpCi0JCQlrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1KTsKJiM0MzsJCQlrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpOwogCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUsIHZjcHUpKSB7CiAJCQlrdm1fdmNwdV9yZXNldCh2Y3B1LCB0cnVlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaAppbmRleCAwZjU5MTliMDkyZTQ3Li4yZDc0N2MyMDk2NWNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5oCkBAIC05MDAsNCAmIzQzOzkwMCwxMSBAQCBpbnQgX19fX2t2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcGwsCiAKIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAomIzQzOy8qIFN1cHBvcnQgZm9yIFBNTCAqLwomIzQzOyNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTCTUxMgomIzQzOy8qIFBNTCBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgd3JpdHRlbiBieSB0aGUgQ1BVICovCiYjNDM7I2RlZmluZSBQTUxfSEVBRF9JTkRFWAkJKFBNTF9MT0dfTlJfRU5UUklFUy0xKQomIzQzOwomIzQzO3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeCk7CiYjNDM7CiAjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIGl0IHNpZ25pZmljYW50bHkgdG91Y2hlcyB0aGUgS1ZNIHg4NiBzdWJzeXN0ZW0g4oCTIGFuZCB3ZSYjMzk7cmUgdGFsa2luZyBib3RoIGdlbmVyaWMgeDg2LCBhcyB3ZWxsIGFzIEFNRCYjMzk7cyBTVk0gYW5kIEludGVsJiMzOTtzIFZNWCBpbXBsZW1lbnRhdGlvbnMuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGFkZCBzdXBwb3J0IGZvciBQTUwgKFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcpIG9uIEFNRCBTVk0sIGluY2x1ZGluZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIFNFViAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbikgY29uc2lkZXJhdGlvbnMuIFRoZSB3YXkgaXQgcmVmYWN0b3JzIFBNTCBkaXJ0eSBsb2dnaW5nIGJldHdlZW4gSW50ZWwgVk1YIGFuZCBBTUQgU1ZNIGFsc28gcGlxdWVzIG15IGludGVyZXN0LiBXZSYjMzk7dmUgZ290IGNoYW5nZXMgbW92aW5nIGBwbWxfcGFnZWAgYXJvdW5kLCBnZW5lcmFsaXppbmcgZnVuY3Rpb25zLCBhZGRpbmcgbmV3IGNhbGxiYWNrcyBsaWtlIGBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYCwgYW5kIHNvbWUgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgYXJvdW5kIGhvdyB0aGUgbG9nZ2luZyBpcyBoYW5kbGVkIGluIGJvdGggVk1YIGFuZCBTVk0uIFRoZSBtb2RpZmljYXRpb25zIGluIGBuZXN0ZWQuY2AgZm9yIFNWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGVzcGVjaWFsbHkgaGFuZGxpbmcgYFBNTF9GVUxMYCBleGl0cyBhbmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB2bWNiMDItJmd0O2NvbnRyb2wucG1sX2luZGV4YCwgYXJlIGRlZmluaXRlbHkgd29ydGggZXhhbWluaW5nLiBJJiMzOTttIGFsc28gc2VlaW5nIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVja3MgYmVpbmcgYWRkZWQsIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyB2aWV3cG9pbnQuCgpHaXZlbiB0aGF0IEtWTSBpcyBhIGNlbnRyYWwgdmlydHVhbGl6YXRpb24gY29tcG9uZW50IGFuZCB0aGF0IHN5emthbGxlciBhbHJlYWR5IGhlYXZpbHkgZnV6emVzIGl0IG9uIHg4NiwgdGhpcyBpcyBhIHByaW1lIHRhcmdldC4gV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBleGVjdXRpb24gcGF0aHMgYmVpbmcgdG91Y2hlZDogYHZjcHVfZW50ZXJfZ3Vlc3RgLCBgc3ZtX2hhbmRsZV9leGl0YCwgYHN2bV92Y3B1X2NyZWF0ZWAsIGFuZCBhIGxvdCBvZiB0aGUgbG9nZ2luZyBmdW5jdGlvbnMuIFRoaXMga2luZCBvZiBpbnRlcmFjdGlvbiB3aXRoIE1NVSwgZGlydHkgbG9nZ2luZywgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGEgZ29sZG1pbmUuCgoqKkNvbmNsdXNpb246KiogVGhpcyBpcyBhIGRlZmluaXRlICYjMzQ7WUVTJiMzNDsgaW4gdGVybXMgb2YgZnV6emluZyBwb3RlbnRpYWwgKFdvcnRoRnV6emluZz10cnVlKS4gTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCB1c2UgZ3JlcHBlciB0byBncmFiIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgS1ZNLCBLVk1fQU1ELCBhbmQgS1ZNX0lOVEVMIGFuZCB0aGVuIHN0YXJ0IGNyYWZ0aW5nIHNvbWUgZnV6emluZyBzdHJhdGVnaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBLVk0gQ29tcGlsYXRpb24gZm9yIHg4NioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgS1ZNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBzcGVjaWZpY2FsbHkgZm9yIHg4Ni4gSSYjMzk7dmUgYWxyZWFkeSBiZWVuIGxvb2tpbmcgYXQgc29tZSBvZiB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgc3BlY2lmaWNzIHJlZ2FyZGluZyB3aGljaCBzb3VyY2UgZmlsZXMgZ2V0IGNvbXBpbGVkLCBhbmQgaG93LCB3aXRoaW4gdGhhdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9jZXNzIHRob3JvdWdobHkgdG8gdHJvdWJsZXNob290IHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cbiAgIDQ6XHRjY2ZsYWdzLSQoQ09ORklHX0tWTV9XRVJST1IpICYjNDM7PSAtV2Vycm9yXG4gICA1Olx0XG4gICA2Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgNzpcdFxuICAgODpcdGt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuICAgOTpcdFx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuICAxMDpcdFxuICAxMTpcdGt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG4gIDEyOlx0a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiAgMTM6XHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4gIDE0Olx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbiAgMTU6XHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuICAxNjpcdFxuICAxNzpcdGt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4gIDE4Olx0XHRcdFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cbiAgMTk6XHRcbiAgMjA6XHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXHQmIzQzOz0gdm14L3NneC5vXG4gIDIxOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAyMjpcdGt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuICAyMzpcdFxuICAyNDpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG4gIDI1Olx0XG4gIDI2Olx0a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbiAgMjc6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG4gIDI4Olx0XG4gIDI5Olx0aWZkZWYgQ09ORklHX0hZUEVSVlxuICAzMDpcdGt2bS15XHRcdFx0JiM0Mzs9IGt2bV9vbmh5cGVydi5vXG4gIDMxOlx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbiAgMzI6XHRrdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm1fb25oeXBlcnYub1xuICAzMzpcdGVuZGlmXG4gIDM0Olx0XG4gIDM1Olx0b2JqLSQoQ09ORklHX0tWTV9YODYpXHQmIzQzOz0ga3ZtLm9cbiAgMzY6XHRvYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG4gIDM4Olx0XG4gIDM5Olx0QUZMQUdTX3N2bS92bWVudGVyLm8gICAgOj0gLWlxdW90ZSAkKG9iailcbiAgNDA6XHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBhbmQgU0VWIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgS1ZNX0FNRGAgYW5kIGBLVk1fSU5URUxgLiBUaGVzZSwgb2YgY291cnNlLCBhcmUgYnVpbHQgdXBvbiB0aGUgZm91bmRhdGlvbmFsIGBLVk1fWDg2YCBhbmQgYEtWTWAgbW9kdWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBTRVYgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24pIGludGVncmF0aW9uIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuCgpJIHNlZSB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgbWVudGlvbmVkLCBhbmQgdGhlIGBzZXYuY2Agc291cmNlIGZpbGUgaXMgZmxhZ2dlZCBhcyByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBhIGNvbW1lbnQgY2hhbmdlIGFuZCB0aGUgZnVuY3Rpb24gYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWAgaGF2ZSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYHN2bV92Y3B1X2NyZWF0ZWAgdGhyb3VnaCBgc25wX3NhZmVfYWxsb2NfcGFnZSgpYC4gVGhpcyBtZWFucyB0aGVyZSBtaWdodCBiZSBzb21lIGNydWNpYWwgYWxsb2NhdGlvbiBsb2dpYyByZWxhdGVkIHRvIHNlY3VyZSBtZW1vcnkgaW4gdGhlIEFNRCBLVk0gZW52aXJvbm1lbnQuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbnBfc2FmZV9hbGxvY19wYWdlYCBpdHNlbGYuIEkgbmVlZCB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBib3RoIGBzZXYuY2AgYW5kIGBzdm0uaGAgdG8gdW5kZXJzdGFuZCB0aGUgbG93LWxldmVsIG1lbW9yeSBhbGxvY2F0aW9uIGhhbmRsaW5nIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgU0VWLXNwZWNpZmljIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBLVk0vQU1EIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9zYWZlX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTQ4Nz1pbnQgc3ZtX2FsbG9jYXRlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE0OTMtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE0OTQ6XHR2bWNiMDJfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTQ5NS1cdGlmICghdm1jYjAyX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODYyPWludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3NS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODc2Olx0dm1zYV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc3LVx0aWYgKCF2bXNhX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTQ4PXZvaWQgc2V2X3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5ODU6c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTYxOT1zdGF0aWMgaW50IHN2bV9jcHVfaW5pdChpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI1LVx0bWVtc2V0KHNkLCAwLCBzaXplb2Yoc3RydWN0IHN2bV9jcHVfZGF0YSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo2MjY6XHRzYXZlX2FyZWFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShjcHVfdG9fbm9kZShjcHUpLCBHRlBfS0VSTkVMKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI3LVx0aWYgKCFzYXZlX2FyZWFfcGFnZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTEzMzU9c3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0NC1cdGVyciA9IC1FTk9NRU07XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjEzNDU6XHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0Ni1cdGlmICghdm1jYjAxX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzQ5LVx0aWYgKHBtbCkge1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxMzUwOlx0XHR2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNTEtXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTQxND1zdGF0aWMgdm9pZCAqc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNS17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTY6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNy1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5Mz1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5NzpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5OTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTkte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAwOlx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDIwPXZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIxLSNlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjMte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyNi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjgte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI5Olx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2ODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIEtWTSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHJlbGV2YW50IGZvY3VzIHN5bWJvbHMsIGdpdmVuIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIEtWTSBjb2RlLiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gcGljayBub24tdWJpcXVpdG91cywgaGlnaGx5IHRhcmdldGVkIHN5bWJvbHMgZm9yIGFuYWx5c2lzLgoKRmlyc3QsIEkmIzM5O3ZlIGdvdCB0byByZXZpZXcgdGhlIG1vZGlmaWVkIGFuZCBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYWNyb3NzIHRoZSByZWxldmFudCBmaWxlczogYGFyY2gveDg2L2t2bS94ODYuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIC8gYG1haW4uY2AuIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgbGlzdHMgYW5kIGhhdmUgYSBzaG9ydCBsaXN0IG9mIGZ1bmN0aW9uczoKCiogICBga3ZtX2ZsdXNoX3BtbF9idWZmZXJgCiogICBga3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ2AKKiAgIGBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYAoqICAgYHN2bV9mbHVzaF9wbWxfYnVmZmVyYAoqICAgYHBtbF9mdWxsX2ludGVyY2VwdGlvbmAKKiAgIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbGAKKiAgIGBuZXN0ZWRfc3ZtX2V4aXRfc3BlY2lhbGAKKiAgIGB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYAoqICAgYHZteF9mbHVzaF9wbWxfYnVmZmVyYAoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHViaXF1aXRvdXMga2VybmVsIGhvdHNwb3RzLiBUaGV5IGFwcGVhciB0byBiZSBzcGVjaWZpYyB0byBLVk0sIFBNTCwgZGlydHkgbG9nZ2luZywgYW5kIG5lc3RlZCBTVk0uIE5vIG9idmlvdXMgaXNzdWVzIGhlcmUuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBmb2xsb3dpbmcgY29uZmlnczoKCiogICBgS1ZNYAoqICAgYEtWTV9BTURgCiogICBgS1ZNX0lOVEVMYAoqICAgYEtWTV9YODZgCiogICBgVklSVFVBTElaQVRJT05gCgpMb29rcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgdW5kZXIgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBvciBgYXJjaC94ODYvS2NvbmZpZ2AgYW5kIGBhcmNoL0tjb25maWdgLgpXaXRoIHRoZSBzeW1ib2xzIGlkZW50aWZpZWQgYW5kIHZhbGlkYXRlZCwgSSBjYW4gbm93IHByb2NlZWQgdG8gYW5hbHl6ZSB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoS1ZNfFZJUlRVQUxJWkFUSU9OKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9ODMwPXNvdXJjZSBcJiMzNDthcmNoL3g4Ni94ZW4vS2NvbmZpZ1wmIzM0O1xuYXJjaC94ODYvS2NvbmZpZy04MzEtXG5hcmNoL3g4Ni9LY29uZmlnOjgzMjpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTgzMy1cdGJvb2wgXCYjMzQ7S1ZNIEd1ZXN0IHN1cHBvcnQgKGluY2x1ZGluZyBrdm1jbG9jaylcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz02PXNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03LVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05LVx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cdGJvb2wgXCYjMzQ7U3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVx0Ym9vbFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwMgoJCQkJCQkJb3V0cHV0OiAyMTgKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIEtWTSBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gYXMgSSBzZWUgaXQuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBldmVyeXRoaW5nIGlzIGNyeXN0YWwgY2xlYXIuIFdlJiMzOTtyZSBkZWZpbml0ZWx5IGZ1enppbmcgdGhpcywgd2hpY2ggaXMgZ29vZC4gVGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYXJlIHNldCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFjcm9zcyBLVk0sIGFuZCBzcGVjaWZpY2FsbHkgZm9yIEFNRCBhbmQgSW50ZWwgaGFyZHdhcmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGUgZm9jdXMgc3ltYm9scyBsaXN0ZWQ7IHRoZXNlIGFyZSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgaW1wYWN0ZWQsIG9yIGFyZSBhdCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMuCgpCYXNlZCBvbiB0aGUgc3ltYm9scywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nLCBvciBQTUwsIGFuZCBpdCYjMzk7cyBiZWluZyBpbXBsZW1lbnRlZCBhbmQgcmVmYWN0b3JlZCBmb3IgQU1EJiMzOTtzIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgYW5kIHRoZSBleGlzdGluZyBnZW5lcmljIHg4NiBLVk0gY29kZSwgYXMgd2VsbCBhcyBJbnRlbCYjMzk7cyBWTVguIFRoZSBmdW5jdGlvbiBuYW1lcyBwb2ludCB0byBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyBkaXJ0eSBsb2dnaW5nIGlzIGhhbmRsZWQgYWNyb3NzIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gcGF0aHMuIFdlJiMzOTt2ZSBnb3QgbmV3IGV4aXQgaGFuZGxlcnMgZm9yIGhhbmRsaW5nIHNwZWNpZmljIHZpcnR1YWwgbWFjaGluZSBleGl0cywgaW5jbHVkaW5nIG5lc3RlZCBTVk0gZXhpdHMsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gVGhlcmUmIzM5O3MgYWxzbyBidWZmZXIgZmx1c2hpbmcgbG9naWMsIGFuZCB1cGRhdGVzIHRvIHRoZSBkaXJ0eSBsb2dnaW5nIHN0YXRlIGNvbnRyb2wgaW4ga2V5IHZpcnR1YWxpemF0aW9uIHJvdXRpbmVzLiBUaGUgbWFpbiB0aGluZyBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyeSBsb3ctbGV2ZWwgdmlydHVhbGl6YXRpb24gZGV0YWlscyBhbmQgbWFuYWdlbWVudCBvZiBob3cgbWVtb3J5IHBhZ2VzIGFyZSB0cmFja2VkLCBwb3RlbnRpYWxseSB0byBvcHRpbWl6ZSBob3cgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lcyBhcmUgbWFuYWdlZC4KCkkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIGFzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nJiMzNDssCiAgICAmIzM0O3N2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX2ZsdXNoX3BtbF9idWZmZXImIzM0OywKICAgICYjMzQ7cG1sX2Z1bGxfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fZXhpdF9zcGVjaWFsJiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sJiMzNDssCiAgICAmIzM0O3ZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7dm14X2ZsdXNoX3BtbF9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZmx1c2hfcG1sX2J1ZmZlciYjMzQ7LAogICAgJiMzNDtrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nJiMzNDssCiAgICAmIzM0O3N2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7c3ZtX2ZsdXNoX3BtbF9idWZmZXImIzM0OywKICAgICYjMzQ7cG1sX2Z1bGxfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fZXhpdF9zcGVjaWFsJiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sJiMzNDssCiAgICAmIzM0O3ZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcmIzM0OywKICAgICYjMzQ7dm14X2ZsdXNoX3BtbF9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQU1EIFNWTSBzdXBwb3J0IGZvciBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGFuZCBjb25zb2xpZGF0ZXMgc2hhcmVkIFBNTCBoYW5kbGluZyBsb2dpYyBiZXR3ZWVuIEludGVsIFZNWCBhbmQgQU1EIFNWTS5cblxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4YjUzMTI3NzlkZDY0ZGJjNjMxMWEyMzZmZDI2MGEzNDkzODFkZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uY2JmY2M2NmExOGU5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC0yMzgsNiAmIzQzOzIzOCw3IEBACiAvLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMiYjNDM7MjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVAkJKCA4KjMyJiM0MzsyMSkgLyogUFYgdmNwdV9pc19wcmVlbXB0ZWQgZnVuY3Rpb24gKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUCQkoIDgqMzImIzQzOzIyKSAvKiAmIzM0O3RkeF9ndWVzdCYjMzQ7IEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovCiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9QTUwJCQkoIDgqMzImIzQzOzIzKSAvKiBBTUQgUGFnZSBNb2RpZmljYXRpb24gbG9nZ2luZyAqLwogCiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwNzowIChFQlgpLCB3b3JkIDkgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRlNHU0JBU0UJCSggOSozMiYjNDM7IDApIC8qICYjMzQ7ZnNnc2Jhc2UmIzM0OyBSREZTQkFTRSwgV1JGU0JBU0UsIFJER1NCQVNFLCBXUkdTQkFTRSBpbnN0cnVjdGlvbnMqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2FmNzM5NWMyNDMwYS4uMmRlYmY2Mjk0MjkwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC03ODksNiAmIzQzOzc4OSw4IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHsKIAkgKi8KIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X2V4dGVybmFsX3NwdF9jYWNoZTsKIAomIzQzOwlzdHJ1Y3QgcGFnZSAqcG1sX3BhZ2U7CiYjNDM7CiAJLyoKIAkgKiBRRU1VIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0IGVhY2ggaGF2ZSB0aGVpciBvd24gRlBVIHN0YXRlLgogCSAqIEluIHZjcHVfcnVuLCB3ZSBzd2l0Y2ggYmV0d2VlbiB0aGUgdXNlciBhbmQgZ3Vlc3QgRlBVIGNvbnRleHRzLgpAQCAtMTY3MCw3ICYjNDM7MTY3Miw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJCQkgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbik7CiAJdm9pZCAoKmhhbmRsZV9leGl0X2lycW9mZikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotCXZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7CXZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOwogCiAJdm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnZjcHVfdW5ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uZTBhNzU0OWE3YzcyNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTE2NSw3ICYjNDM7MTY1LDEwIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHsKIAl1OCByZXNlcnZlZF85WzIyXTsKIAl1NjQgYWxsb3dlZF9zZXZfZmVhdHVyZXM7CS8qIE9mZnNldCAweDEzOCAqLwogCXU2NCBndWVzdF9zZXZfZmVhdHVyZXM7CQkvKiBPZmZzZXQgMHgxNDAgKi8KLQl1OCByZXNlcnZlZF8xMFs2NjRdOwomIzQzOwl1OCByZXNlcnZlZF8xMFsxMjhdOwomIzQzOwl1NjQgcG1sX2FkZHI7CQkJLyogT2Zmc2V0IDB4MWM4ICovCiYjNDM7CXUxNiBwbWxfaW5kZXg7CQkJLyogT2Zmc2V0IDB4MWQwICovCiYjNDM7CXU4IHJlc2VydmVkXzExWzUyNl07CiAJLyoKIAkgKiBPZmZzZXQgMHgzZTAsIDMyIGJ5dGVzIHJlc2VydmVkCiAJICogZm9yIHVzZSBieSBoeXBlcnZpc29yL3NvZnR3YXJlLgpAQCAtMjQwLDEwICYjNDM7MjQzLDExIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHsKICNkZWZpbmUgU1ZNX0lPSU9fU0laRV9NQVNLICg3ICZsdDsmbHQ7IFNWTV9JT0lPX1NJWkVfU0hJRlQpCiAjZGVmaW5lIFNWTV9JT0lPX0FTSVpFX01BU0sgKDcgJmx0OyZsdDsgU1ZNX0lPSU9fQVNJWkVfU0hJRlQpCiAKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QCQlCSVQoMCkKLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVgkJQklUKDEpCi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZfRVMJQklUKDIpCi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUCUJJVCgzKQomIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QCQlCSVRfVUxMKDApCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWCQlCSVRfVUxMKDEpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWX0VTCQlCSVRfVUxMKDIpCiYjNDM7I2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVAkJQklUX1VMTCgzKQomIzQzOyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1BNTAkJQklUX1VMTCgxMSkKIAogI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSCUJJVF9VTEwoMCkKICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX1ZNTE9BRF9WTVNBVkUJQklUX1VMTCgxKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmgKaW5kZXggMDEwYTQ1YzlmNjE0Ny4uZTgwNjc2MTg1MDkyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oCkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBACiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfSU5DT01QTEVURV9JUEkJCTB4NDAxCiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MJMHg0MDIKICNkZWZpbmUgU1ZNX0VYSVRfVk1HRVhJVCAgICAgICAweDQwMwomIzQzOyNkZWZpbmUgU1ZNX0VYSVRfUE1MX0ZVTEwJMHg0MDcKIAogLyogU0VWLUVTIHNvZnR3YXJlLWRlZmluZWQgVk1HRVhJVCBldmVudHMgKi8KICNkZWZpbmUgU1ZNX1ZNR0VYSVRfTU1JT19SRUFECQkJMHg4MDAwMDAwMXVsbApAQCAtMjM2LDYgJiM0MzsyMzcsNyBAQAogCXsgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSSwJCSYjMzQ7YXZpY19pbmNvbXBsZXRlX2lwaSYjMzQ7IH0sIFwKIAl7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgJiMzNDthdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzJiMzNDsgfSwgXAogCXsgU1ZNX0VYSVRfVk1HRVhJVCwJCSYjMzQ7dm1nZXhpdCYjMzQ7IH0sIFwKJiM0MzsJeyBTVk1fRVhJVF9QTUxfRlVMTCwJCSYjMzQ7cG1sX2Z1bGwmIzM0OyB9LCBcCiAJeyBTVk1fVk1HRVhJVF9NTUlPX1JFQUQsCSYjMzQ7dm1nZXhpdF9tbWlvX3JlYWQmIzM0OyB9LCBcCiAJeyBTVk1fVk1HRVhJVF9NTUlPX1dSSVRFLAkmIzM0O3ZtZ2V4aXRfbW1pb193cml0ZSYjMzQ7IH0sIFwKIAl7IFNWTV9WTUdFWElUX05NSV9DT01QTEVURSwJJiMzNDt2bWdleGl0X25taV9jb21wbGV0ZSYjMzQ7IH0sIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCmluZGV4IDg2NjVhNjQ3NDgwNmMuLmIxOGNjOWM4OGRkNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwpAQCAtNTUsNiAmIzQzOzU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0gewogCXsgWDg2X0ZFQVRVUkVfQU1EX0ZBU1RfQ1BQQywJCUNQVUlEX0VEWCwgMTUsIDB4ODAwMDAwMDcsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0NQUENfUEVSRl9QUklPLAkJQ1BVSURfRURYLCAxNiwgMHg4MDAwMDAwNywgMCB9LAogCXsgWDg2X0ZFQVRVUkVfTUJBLAkJCUNQVUlEX0VCWCwgIDYsIDB4ODAwMDAwMDgsIDAgfSwKJiM0MzsJeyBYODZfRkVBVFVSRV9QTUwsCQkJQ1BVSURfRUNYLCAgNCwgMHg4MDAwMDAwYSwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCwJCUNQVUlEX0VDWCwgIDYsIDB4ODAwMDAwMGEsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0NPSEVSRU5DWV9TRldfTk8sCQlDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sCiAJeyBYODZfRkVBVFVSRV9TTUJBLAkJCUNQVUlEX0VCWCwgIDIsIDB4ODAwMDAwMjAsIDAgfSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCmluZGV4IDczZjM3YjA1MGQwYTAuLmRhNDE3YzRjNTkxNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYwpAQCAtOTAxLDYgJiM0Mzs5MDEsMTMgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pCiAJdm1jYjAyLSZndDtjb250cm9sLm1zcnBtX2Jhc2VfcGEgPSB2bWNiMDEtJmd0O2NvbnRyb2wubXNycG1fYmFzZV9wYTsKIAl2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX1BFUk1fTUFQKTsKIAomIzQzOwkvKgomIzQzOwkgKiBQTUwgaXMgbmV2ZXIgZW5hYmxlZCBpbiBoYXJkd2FyZSBmb3IgTDIuICBNYWtlIHN1cmUgdGhhdCBhbgomIzQzOwkgKiB1bmV4cGVjdGVkIFBNTCB3cml0ZSB3b3VsZCB0cmlnZ2VyIGEgUE1MX0ZVTEwgVk0tRXhpdC4KJiM0MzsJICovCiYjNDM7CWlmIChwbWwpCiYjNDM7CQl2bWNiMDItJmd0O2NvbnRyb2wucG1sX2luZGV4ID0gLTE7CiYjNDM7CiAJLyoKIAkgKiBTdGFzaCB2bWNiMDImIzM5O3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbiYjMzk7dCBtb3ZlZCBwYXN0IHRoZSBndWlsdHkKIAkgKiBpbnN0cnVjdGlvbjsgb3RoZXJ3aXNlLCByZXNldCB0aGUgY291bnRlciB0byAmIzM5OzAmIzM5Oy4KQEAgLTE4MjAsNiAmIzQzOzE4MjcsMTMgQEAgaW50IG5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCQlpZiAobmVzdGVkX3N2bV9pc19sMl90bGJfZmx1c2hfaGNhbGwodmNwdSkpCiAJCQlyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgU1ZNX0VYSVRfUE1MX0ZVTEw6CiYjNDM7CQkvKgomIzQzOwkJICogQWxsIFBNTCBmdWxsIGV4aXRzIGFyZSBoYW5kbGVkIGJ5IEtWTS4gIEtWTSBlbXVsYXRlcyBQTUwgaW4KJiM0MzsJCSAqIHNvZnR3YXJlIGZvciBMMSwgYnV0IG5ldmVyIGVuYWJsZXMgUE1MIGluIGhhcmR3YXJlIG9uIGJlaGFsZgomIzQzOwkJICogb2YgTDEuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBORVNURURfRVhJVF9IT1NUOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLmNmZTk5MGY4MDUwNDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDk5NCw3ICYjNDM7NDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcCkKIAkgKiBBbGxvY2F0ZSBhbiBTTlAtc2FmZSBwYWdlIHRvIHdvcmthcm91bmQgdGhlIFNOUCBlcnJhdHVtIHdoZXJlCiAJICogdGhlIENQVSB3aWxsIGluY29ycmVjdGx5IHNpZ25hbCBhbiBSTVAgdmlvbGF0aW9uICNQRiBpZiBhCiAJICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhCi0JICogMk1CLWFsaWduZWQgVk1DQiwgVk1TQSwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuCiYjNDM7CSAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIFBNTCBvciBBVklDIGJhY2tpbmcgcGFnZS4KIAkgKgogCSAqIEFsbG9jYXRlIG9uZSBleHRyYSBwYWdlLCBjaG9vc2UgYSBwYWdlIHdoaWNoIGlzIG5vdAogCSAqIDJNQi1hbGlnbmVkLCBhbmQgZnJlZSB0aGUgb3RoZXIuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCA3ZDU5ZDMwMWUxZTU0Li45NTBjMjUwYTc3YjUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTE3OSw2ICYjNDM7MTc5LDkgQEAgbW9kdWxlX3BhcmFtKHZubWksIGJvb2wsIDA0NDQpOwogCiBtb2R1bGVfcGFyYW0oZW5hYmxlX21lZGlhdGVkX3BtdSwgYm9vbCwgMDQ0NCk7CiAKJiM0Mztib29sIF9fcm9fYWZ0ZXJfaW5pdCBwbWwgPSB0cnVlOwomIzQzO21vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpOwomIzQzOwogc3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHN2bV9ncF9lcnJhdHVtX2ludGVyY2VwdCA9IHRydWU7CiAKIHN0YXRpYyB1OCByc21faW5zX2J5dGVzW10gPSAmIzM0O1x4MGZceGFhJiMzNDs7CkBAIC0xMjY3LDYgJiM0MzsxMjcwLDIzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCkKIAlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKQogCQlzdm1fc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9CVVNMT0NLKTsKIAomIzQzOwlpZiAocG1sKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUG9wdWxhdGUgdGhlIHBhZ2UgYWRkcmVzcyBhbmQgaW5kZXggaGVyZSwgUE1MIGlzIGVuYWJsZWQKJiM0MzsJCSAqIHdoZW4gZGlydHkgbG9nZ2luZyBpcyBlbmFibGVkIG9uIHRoZSBtZW1zbG90IHRocm91Z2gKJiM0MzsJCSAqIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoKQomIzQzOwkJICovCiYjNDM7CQljb250cm9sLSZndDtwbWxfYWRkciA9ICh1NjQpX19zbWVfc2V0KHBhZ2VfdG9fcGh5cyh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKSk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIFZNQ0IgY29udHJvbCBhcmVhIHJlbWFpbnMgdmFsaWQgYWZ0ZXIgYW4gaW50ZXJjZXB0ZWQgU0hVVERPV04KJiM0MzsJCSAqIChBTUQgQVBNIFJldiAzLjQ1JiM0MzspLCBzbyBvbmx5IGluaXRpYWxpemUgUE1MIGluZGV4IG9uIHJlc2V0IHRvIGF2b2lkCiYjNDM7CQkgKiBkaXNjYXJkaW5nIGFscmVhZHktbG9nZ2VkIGVudHJpZXMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGZsdXNoZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghaW5pdF9ldmVudCkKJiM0MzsJCQljb250cm9sLSZndDtwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDsKJiM0MzsJfQomIzQzOwogCWlmIChpc19zZXZfZ3Vlc3QodmNwdSkpCiAJCXNldl9pbml0X3ZtY2Ioc3ZtLCBpbml0X2V2ZW50KTsKIApAQCAtMTMyNiw5ICYjNDM7MTM0NiwxNSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKCF2bWNiMDFfcGFnZSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJaWYgKHBtbCkgewomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTsKJiM0MzsJCWlmICghdmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSkKJiM0MzsJCQlnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyb3JfZnJlZV92bWNiX3BhZ2U7CiYjNDM7CQlnb3RvIGVycm9yX2ZyZWVfcG1sX3BhZ2U7CiAKIAllcnIgPSBhdmljX2luaXRfdmNwdShzdm0pOwogCWlmIChlcnIpCkBAIC0xMzUzLDYgJiM0MzsxMzc5LDkgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBlcnJvcl9mcmVlX3NldjoKIAlzZXZfZnJlZV92Y3B1KHZjcHUpOwomIzQzO2Vycm9yX2ZyZWVfcG1sX3BhZ2U6CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQomIzQzOwkJX19mcmVlX3BhZ2UodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSk7CiBlcnJvcl9mcmVlX3ZtY2JfcGFnZToKIAlfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7CiBvdXQ6CkBAIC0xMzcwLDYgJiM0MzsxMzk5LDkgQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlzZXZfZnJlZV92Y3B1KHZjcHUpOwogCiYjNDM7CWlmIChwbWwgJmFtcDsmYW1wOyB2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQomIzQzOwkJX19mcmVlX3BhZ2UodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSk7CiYjNDM7CiAJX19mcmVlX3BhZ2UoX19zbWVfcGFfdG9fcGFnZShzdm0tJmd0O3ZtY2IwMS5wYSkpOwogCXN2bV92Y3B1X2ZyZWVfbXNycG0oc3ZtLSZndDttc3JwbSk7CiB9CkBAIC0zMzQ0LDYgJiM0MzszMzc2LDQ1IEBAIHN0YXRpYyBpbnQgdm1tY2FsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1fZW11bGF0ZV9oeXBlcmNhbGwodmNwdSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsJc3RydWN0IHZtY2IgKnZtY2IwMSA9IHN2bS0mZ3Q7dm1jYjAxLnB0cjsKJiM0MzsKJiM0MzsJaWYgKGVuYWJsZSkKJiM0MzsJCXZtY2IwMS0mZ3Q7Y29udHJvbC5taXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfUE1MOwomIzQzOwllbHNlCiYjNDM7CQl2bWNiMDEtJmd0O2NvbnRyb2wubWlzY19jdGwgJmFtcDs9IH5TVk1fTUlTQ19FTkFCTEVfUE1MOwomIzQzOwomIzQzOwl2bWNiX21hcmtfZGlydHkodm1jYjAxLCBWTUNCX05QVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwomIzQzOwlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MzsJLyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovCiYjNDM7CWlmIChjb250cm9sLSZndDtwbWxfaW5kZXggPT0gUE1MX0hFQURfSU5ERVgpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIGNvbnRyb2wtJmd0O3BtbF9pbmRleCk7CiYjNDM7CiYjNDM7CS8qIFJlc2V0IHRoZSBQTUwgaW5kZXggKi8KJiM0MzsJY29udHJvbC0mZ3Q7cG1sX2luZGV4ID0gUE1MX0hFQURfSU5ERVg7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcG1sX2Z1bGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CXRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LSZndDt2Y3B1X2lkKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUE1MIGJ1ZmZlciBpcyBhbHJlYWR5IGZsdXNoZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBzdm1faGFuZGxlX2V4aXQoKS4KJiM0MzsJICogTm90aGluZyB0byBkbyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7CiAJW1NWTV9FWElUX1JFQURfQ1IwXQkJCT0gY3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9SRUFEX0NSM10JCQk9IGNyX2ludGVyY2VwdGlvbiwKQEAgLTM0MjEsNiAmIzQzOzM0OTIsNyBAQCBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHsKICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKIAlbU1ZNX0VYSVRfVk1HRVhJVF0JCQk9IHNldl9oYW5kbGVfdm1nZXhpdCwKICNlbmRpZgomIzQzOwlbU1ZNX0VYSVRfUE1MX0ZVTExdCQkJPSBwbWxfZnVsbF9pbnRlcmNlcHRpb24sCiB9OwogCiBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMzQ3MCw4ICYjNDM7MzU0MiwxNCBAQCBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7ZXhpdF9pbmZvMjomIzM0OywgY29udHJvbC0mZ3Q7ZXhpdF9pbmZvXzIpOwogCXByX2VycigmIzM0OyUtMjBzJTA4eFxuJiMzNDssICYjMzQ7ZXhpdF9pbnRfaW5mbzomIzM0OywgY29udHJvbC0mZ3Q7ZXhpdF9pbnRfaW5mbyk7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDh4XG4mIzM0OywgJiMzNDtleGl0X2ludF9pbmZvX2VycjomIzM0OywgY29udHJvbC0mZ3Q7ZXhpdF9pbnRfaW5mb19lcnIpOwotCXByX2VycigmIzM0OyUtMjBzJWxsZFxuJiMzNDssICYjMzQ7bWlzY19jdGw6JiMzNDssIGNvbnRyb2wtJmd0O21pc2NfY3RsKTsKJiM0MzsJcHJfZXJyKCYjMzQ7JS0yMHMlbGx4XG4mIzM0OywgJiMzNDttaXNjX2N0bDomIzM0OywgY29udHJvbC0mZ3Q7bWlzY19jdGwpOwogCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7bmVzdGVkX2NyMzomIzM0OywgY29udHJvbC0mZ3Q7bmVzdGVkX2NyMyk7CiYjNDM7CiYjNDM7CWlmIChwbWwpIHsKJiM0MzsJCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7cG1sX2FkZHI6JiMzNDssIGNvbnRyb2wtJmd0O3BtbF9hZGRyKTsKJiM0MzsJCXByX2VycigmIzM0OyUtMjBzJTA0eFxuJiMzNDssICYjMzQ7cG1sX2luZGV4OiYjMzQ7LCBjb250cm9sLSZndDtwbWxfaW5kZXgpOwomIzQzOwl9CiYjNDM7CiAJcHJfZXJyKCYjMzQ7JS0yMHMlMDE2bGx4XG4mIzM0OywgJiMzNDthdmljX3ZhcGljX2JhcjomIzM0OywgY29udHJvbC0mZ3Q7YXZpY192YXBpY19iYXIpOwogCXByX2VycigmIzM0OyUtMjBzJTAxNmxseFxuJiMzNDssICYjMzQ7Z2hjYjomIzM0OywgY29udHJvbC0mZ3Q7Z2hjYl9ncGEpOwogCXByX2VycigmIzM0OyUtMjBzJTA4eFxuJiMzNDssICYjMzQ7ZXZlbnRfaW5qOiYjMzQ7LCBjb250cm9sLSZndDtldmVudF9pbmopOwpAQCAtMzY0OSw2ICYjNDM7MzcyNywxMyBAQCBpbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpCiAJICAgICh1NjQpZXhpdF9jb2RlICE9IF9fZXhpdF9jb2RlKQogCQlnb3RvIHVuZXhwZWN0ZWRfdm1leGl0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsCiYjNDM7CSAqIGV4aXQgb2NjdXJzIGFzIHNvbWV0aGluZyBpcyBob3JyaWJseSB3cm9uZy4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpICZhbXA7JmFtcDsgZXhpdF9jb2RlID09IFNWTV9FWElUX1BNTF9GVUxMKSkKJiM0MzsJCWdvdG8gdW5leHBlY3RlZF92bWV4aXQ7CiYjNDM7CiAjaWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FCiAJaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9NU1IpCiAJCXJldHVybiBtc3JfaW50ZXJjZXB0aW9uKHZjcHUpOwpAQCAtMzcxNyw2ICYjNDM7MzgwMiwxNCBAQCBzdGF0aWMgaW50IHN2bV9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtJmd0O3J1bjsKIAomIzQzOwkvKgomIzQzOwkgKiBPcHBvcnR1bmlzdGljYWxseSBmbHVzaCB0aGUgUE1MIGJ1ZmZlciBvbiBWTSBleGl0LiBUaGlzIGtlZXBzIHRoZQomIzQzOwkgKiBkaXJ0eSBiaXRtYXAgY3VycmVudCBieSBwcm9jZXNzaW5nIGxvZ2dlZCBHUEFzIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yCiYjNDM7CSAqIFBNTF9GVUxMIGV4aXQuCiYjNDM7CSAqLwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSAmYW1wOyZhbXA7ICFpc19ndWVzdF9tb2RlKHZjcHUpKQomIzQzOwkJc3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSk7CiYjNDM7CiAJaWYgKHVubGlrZWx5KGV4aXRfZmFzdHBhdGggPT0gRVhJVF9GQVNUUEFUSF9FWElUX1VTRVJTUEFDRSkpCiAJCXJldHVybiAwOwogCkBAIC01MzExLDYgJiM0Mzs1NDA0LDkgQEAgc3RhdGljIGludCBzdm1fdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJaWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpCiAJCWt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTsKIAomIzQzOwlpZiAocG1sKQomIzQzOwkJa3ZtLSZndDthcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSA9IFBNTF9MT0dfTlJfRU5UUklFUzsKJiM0MzsKIAlzdm1fc3Jzb192bV9pbml0KCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NDI5LDYgJiM0Mzs1NTI1LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLmNoZWNrX2ludGVyY2VwdCA9IHN2bV9jaGVja19pbnRlcmNlcHQsCiAJLmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsCiAKJiM0MzsJLnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcsCiYjNDM7CiAJLmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LAogCS5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsCiAJLnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsCkBAIC01Njg5LDYgJiM0Mzs1Nzg3LDEwIEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCiAJbnJpcHMgPSBucmlwcyAmYW1wOyZhbXA7IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OUklQUyk7CiAKJiM0MzsJcG1sID0gcG1sICZhbXA7JmFtcDsgbnB0X2VuYWJsZWQgJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BNTCk7CiYjNDM7CWlmIChwbWwpCiYjNDM7CQlwcl9pbmZvKCYjMzQ7UGFnZSBtb2RpZmljYXRpb24gbG9nZ2luZyBzdXBwb3J0ZWRcbiYjMzQ7KTsKJiM0MzsKIAlpZiAobGJydikgewogCQlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9MQlJWKSkKIAkJCWxicnYgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCmluZGV4IGU5NTg5NDNiODE2MjcuLmY1NjZkYWU0NGJiMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtNTMsNiAmIzQzOzUzLDcgQEAgZXh0ZXJuIGludCB2Z2lmOwogZXh0ZXJuIGJvb2wgaW50ZXJjZXB0X3NtaTsKIGV4dGVybiBib29sIHZubWk7CiBleHRlcm4gaW50IGxicnY7CiYjNDM7ZXh0ZXJuIGJvb2wgcG1sOwogCiBleHRlcm4gaW50IHRzY19hdXhfdXJldF9zbG90IF9fcm9fYWZ0ZXJfaW5pdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA0YzUyYWI4ZDA3ODY5Li5lNzdiNWI3MzEyNzVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwpAQCAtMTA4LDcgJiM0MzsxMDgsNyBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCXZteF92Y3B1X2xvYWQodmNwdSwgY3B1KTsKIH0KIAotc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSkKIHsKIAkvKgogCSAqIEJhc2ljIFREWCBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUgUE1MLiBLVk0gZG9lcyBub3QgZW5hYmxlIFBNTCBpbgpAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmIChXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiAJCXJldHVybjsKIAotCXZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSk7CiYjNDM7CXZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSwgZW5hYmxlKTsKIH0KIAogc3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKaW5kZXggNjEyYWIwN2Q0MTAwZi4uYjM3NjhiNGIyMTJmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCkBAIC00ODgzLDEwICYjNDM7NDg4MywxMSBAQCBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSkKIAogI2RlZmluZSBWTVhfWFNTX0VYSVRfQklUTUFQIDAKIAotc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQomIzQzO3N0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IGt2bSAqa3ZtID0gdm14LSZndDt2Y3B1Lmt2bTsKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCXN0cnVjdCBrdm1fdm14ICprdm1fdm14ID0gdG9fa3ZtX3ZteChrdm0pOwomIzQzOwlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCWlmIChuZXN0ZWQpCiAJCW5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcCgpOwpAQCAtNDkxMSw3ICYjNDM7NDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAlpZiAoY3B1X2hhc190ZXJ0aWFyeV9leGVjX2N0cmxzKCkpCiAJCXRlcnRpYXJ5X2V4ZWNfY29udHJvbHNfc2V0KHZteCwgdm14X3RlcnRpYXJ5X2V4ZWNfY29udHJvbCh2bXgpKTsKIAotCWlmIChlbmFibGVfYXBpY3YgJmFtcDsmYW1wOyBsYXBpY19pbl9rZXJuZWwoJmFtcDt2bXgtJmd0O3ZjcHUpKSB7CiYjNDM7CWlmIChlbmFibGVfYXBpY3YgJmFtcDsmYW1wOyBsYXBpY19pbl9rZXJuZWwodmNwdSkpIHsKIAkJdm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDAsIDApOwogCQl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMSwgMCk7CiAJCXZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAyLCAwKTsKQEAgLTQ5MjMsNyAmIzQzOzQ5MjQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpCiAJCXZtY3Nfd3JpdGU2NChQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoKCZhbXA7dm14LSZndDt2dC5waV9kZXNjKSkpOwogCX0KIAotCWlmICh2bXhfY2FuX3VzZV9pcGl2KCZhbXA7dm14LSZndDt2Y3B1KSkgewomIzQzOwlpZiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSkgewogCQl2bWNzX3dyaXRlNjQoUElEX1BPSU5URVJfVEFCTEUsIF9fcGEoa3ZtX3ZteC0mZ3Q7cGlkX3RhYmxlKSk7CiAJCXZtY3Nfd3JpdGUxNihMQVNUX1BJRF9QT0lOVEVSX0lOREVYLCBrdm0tJmd0O2FyY2gubWF4X3ZjcHVfaWRzIC0gMSk7CiAJfQpAQCAtNDk1OCwxNSAmIzQzOzQ5NTksMTUgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCXZtY3Nfd3JpdGU2NChWTV9FTlRSWV9NU1JfTE9BRF9BRERSLCBfX3BhKHZteC0mZ3Q7bXNyX2F1dG9sb2FkLmd1ZXN0LnZhbCkpOwogCiAJaWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCAmYW1wOyBWTV9FTlRSWV9MT0FEX0lBMzJfUEFUKQotCQl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZteC0mZ3Q7dmNwdS5hcmNoLnBhdCk7CiYjNDM7CQl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZjcHUtJmd0O2FyY2gucGF0KTsKIAogCXZtX2V4aXRfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZXhpdF9jdHJsKCkpOwogCiAJLyogMjIuMi4xLCAyMC44LjEgKi8KIAl2bV9lbnRyeV9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1lbnRyeV9jdHJsKCkpOwogCi0Jdm14LSZndDt2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTsKLQl2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dm14LSZndDt2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpOwomIzQzOwl2Y3B1LSZndDthcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7CiYjNDM7CXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52Y3B1LSZndDthcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTsKIAogCXNldF9jcjRfZ3Vlc3RfaG9zdF9tYXNrKHZteCk7CiAKQEAgLTQ5NzcsMTEgJiM0Mzs0OTc4LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJdm1jc193cml0ZTY0KFhTU19FWElUX0JJVE1BUCwgVk1YX1hTU19FWElUX0JJVE1BUCk7CiAKIAlpZiAoZW5hYmxlX3BtbCkgewotCQl2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2bXgtJmd0O3BtbF9wZykpOwomIzQzOwkJdm1jc193cml0ZTY0KFBNTF9BRERSRVNTLCBwYWdlX3RvX3BoeXModmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSkpOwogCQl2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7CiAJfQogCi0Jdm14X3dyaXRlX2VuY2xzX2JpdG1hcCgmYW1wO3ZteC0mZ3Q7dmNwdSwgTlVMTCk7CiYjNDM7CXZteF93cml0ZV9lbmNsc19iaXRtYXAodmNwdSwgTlVMTCk7CiAKIAlpZiAodm14X3B0X21vZGVfaXNfaG9zdF9ndWVzdCgpKSB7CiAJCW1lbXNldCgmYW1wO3ZteC0mZ3Q7cHRfZGVzYywgMCwgc2l6ZW9mKHZteC0mZ3Q7cHRfZGVzYykpOwpAQCAtNDk5NCwxMyAmIzQzOzQ5OTUsMTMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogCXZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VTUCwgMCk7CiAJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTsKIAotCXZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZSgmYW1wO3ZteC0mZ3Q7dmNwdSwgMCk7CiYjNDM7CXZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZSh2Y3B1LCAwKTsKIAogCWlmIChjcHVfaGFzX3ZteF90cHJfc2hhZG93KCkpIHsKIAkJdm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsIDApOwotCQlpZiAoY3B1X25lZWRfdHByX3NoYWRvdygmYW1wO3ZteC0mZ3Q7dmNwdSkpCiYjNDM7CQlpZiAoY3B1X25lZWRfdHByX3NoYWRvdyh2Y3B1KSkKIAkJCXZtY3Nfd3JpdGU2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSLAotCQkJCSAgICAgX19wYSh2bXgtJmd0O3ZjcHUuYXJjaC5hcGljLSZndDtyZWdzKSk7CiYjNDM7CQkJCSAgICAgX19wYSh2Y3B1LSZndDthcmNoLmFwaWMtJmd0O3JlZ3MpKTsKIAkJdm1jc193cml0ZTMyKFRQUl9USFJFU0hPTEQsIDApOwogCX0KIApAQCAtNTAxMSw3ICYjNDM7NTAxMiw3IEBAIHN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCi0JaW5pdF92bWNzKHZteCk7CiYjNDM7CWluaXRfdm1jcyh2Y3B1KTsKIAogCWlmIChuZXN0ZWQgJmFtcDsmYW1wOwogCSAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtJmd0O2t2bSwgS1ZNX1g4Nl9RVUlSS19TVFVGRl9GRUFUVVJFX01TUlMpKQpAQCAtNjQxOCw0OCAmIzQzOzY0MTksMjUgQEAgdm9pZCB2bXhfZ2V0X2VudHJ5X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmludHJfaW5mbywgdTMyICplcnJvcl9jb2RlKQogCQkqZXJyb3JfY29kZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IHZjcHVfdm14ICp2bXgpCiYjNDM7c3RhdGljIHZvaWQgdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKHZteC0mZ3Q7cG1sX3BnKSB7Ci0JCV9fZnJlZV9wYWdlKHZteC0mZ3Q7cG1sX3BnKTsKLQkJdm14LSZndDtwbWxfcGcgPSBOVUxMOwomIzQzOwlpZiAodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSkgewomIzQzOwkJX19mcmVlX3BhZ2UodmNwdS0mZ3Q7YXJjaC5wbWxfcGFnZSk7CiYjNDM7CQl2Y3B1LSZndDthcmNoLnBtbF9wYWdlID0gTlVMTDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHZteF9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1MTYgcG1sX2lkeCwgcG1sX3RhaWxfaW5kZXg7Ci0JdTY0ICpwbWxfYnVmOwotCWludCBpOwomIzQzOwl1MTYgcG1sX2lkeDsKIAogCXBtbF9pZHggPSB2bWNzX3JlYWQxNihHVUVTVF9QTUxfSU5ERVgpOwogCiAJLyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovCiAJaWYgKHBtbF9pZHggPT0gUE1MX0hFQURfSU5ERVgpCiAJCXJldHVybjsKLQkvKgotCSAqIFBNTCBpbmRleCBhbHdheXMgcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBQTUwgYnVmZmVyIGVudGl0eQotCSAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuCi0JICovCi0JcG1sX3RhaWxfaW5kZXggPSAocG1sX2lkeCAmZ3Q7PSBQTUxfTE9HX05SX0VOVFJJRVMpID8gMCA6IHBtbF9pZHggJiM0MzsgMTsKLQotCS8qCi0JICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMQotCSAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLgotCSAqCi0JICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXQKLQkgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLgotCSAqLwotCXBtbF9idWYgPSBwYWdlX2FkZHJlc3Modm14LSZndDtwbWxfcGcpOwogCi0JZm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgJmd0Oz0gcG1sX3RhaWxfaW5kZXg7IGktLSkgewotCQl1NjQgZ3BhOwotCi0JCWdwYSA9IHBtbF9idWZbaV07Ci0JCVdBUk5fT04oZ3BhICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7Ci0JCWt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0JfQomIzQzOwlrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBwbWxfaWR4KTsKIAogCS8qIHJlc2V0IFBNTCBpbmRleCAqLwogCXZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTsKQEAgLTc2NDgsNyAmIzQzOzc2MjYsNyBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCiAJaWYgKGVuYWJsZV9wbWwpCi0JCXZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTsKJiM0MzsJCXZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7CiAJZnJlZV92cGlkKHZteC0mZ3Q7dnBpZCk7CiAJbmVzdGVkX3ZteF9mcmVlX3ZjcHUodmNwdSk7CiAJZnJlZV9sb2FkZWRfdm1jcyh2bXgtJmd0O2xvYWRlZF92bWNzKTsKQEAgLTc2ODAsOCAmIzQzOzc2NTgsOCBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBmb3IgdGhlIGd1ZXN0KSwgZXRjLgogCSAqLwogCWlmIChlbmFibGVfcG1sKSB7Ci0JCXZteC0mZ3Q7cG1sX3BnID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTsKLQkJaWYgKCF2bXgtJmd0O3BtbF9wZykKJiM0MzsJCXZjcHUtJmd0O2FyY2gucG1sX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pOwomIzQzOwkJaWYgKCF2Y3B1LSZndDthcmNoLnBtbF9wYWdlKQogCQkJZ290byBmcmVlX3ZwaWQ7CiAJfQogCkBAIC03NzUyLDcgJiM0Mzs3NzMwLDcgQEAgaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBmcmVlX3ZtY3M6CiAJZnJlZV9sb2FkZWRfdm1jcyh2bXgtJmd0O2xvYWRlZF92bWNzKTsKIGZyZWVfcG1sOgotCXZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTsKJiM0MzsJdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTsKIGZyZWVfdnBpZDoKIAlmcmVlX3ZwaWQodm14LSZndDt2cGlkKTsKIAlyZXR1cm4gZXJyOwpAQCAtODQ0MCwyMSAmIzQzOzg0MTgsMTMgQEAgc3RhdGljIHZvaWQgdm14X3VwZGF0ZV9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yY2VfaW1tZWRpYXRlX2V4aXQKIH0KICNlbmRpZgogCi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCi0JaWYgKFdBUk5fT05fT05DRSghZW5hYmxlX3BtbCkpCi0JCXJldHVybjsKLQogCWd1YXJkKHZteF92bWNzMDEpKHZjcHUpOwogCi0JLyoKLQkgKiBOb3RlLCBucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nIGNhbiBiZSBjaGFuZ2VkIGNvbmN1cnJlbnQgd2l0aCB0aGlzCi0JICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc28KLQkgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS4KLQkgKi8KLQlpZiAoYXRvbWljX3JlYWQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O25yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpKQomIzQzOwlpZiAoZW5hYmxlKQogCQlzZWNvbmRhcnlfZXhlY19jb250cm9sc19zZXRiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTsKIAllbHNlCiAJCXNlY29uZGFyeV9leGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li41ZjUwNWFkMTRkZGUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTI2NSwxMyAmIzQzOzI2NSw2IEBAIHN0cnVjdCB2Y3B1X3ZteCB7CiAJdW5zaWduZWQgaW50IHBsZV93aW5kb3c7CiAJYm9vbCBwbGVfd2luZG93X2RpcnR5OwogCi0JLyogU3VwcG9ydCBmb3IgUE1MICovCi0jZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFUwk1MTIKLQkvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqLwotI2RlZmluZSBQTUxfSEVBRF9JTkRFWAkJKFBNTF9MT0dfTlJfRU5UUklFUy0xKQotCi0Jc3RydWN0IHBhZ2UgKnBtbF9wZzsKLQogCS8qIGFwaWMgZGVhZGxpbmUgdmFsdWUgaW4gaG9zdCB0c2MgKi8KIAl1NjQgaHZfZGVhZGxpbmVfdHNjOwogCkBAIC0zOTcsNyAmIzQzOzM5MCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIGd2YV90IHZteF9nZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAotdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpOwogCiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTsKIGJvb2wgdm14X2lzX3ZhbGlkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsIGJvb2wgaG9zdF9pbml0aWF0ZWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCAwNTRmZDE0YmIyZTE2Li40ODEwZjliMWIwZmM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCB1NjQgdm14X2dldF9sMl90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2bXhfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2bXhfd3JpdGVfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiBpbnQgdm14X3NldF9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF9kZWFkbGluZV90c2MsCiAJCSAgICAgYm9vbCAqZXhwaXJlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMzk0MSw2ICYjNDM7Mzk0MSwzNyBAQCB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCkKIAkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIH0KIAomIzQzO3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeCkKJiM0Mzt7CiYjNDM7CXUxNiBwbWxfdGFpbF9pbmRleDsKJiM0MzsJdTY0ICpwbWxfYnVmOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5CiYjNDM7CSAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuCiYjNDM7CSAqLwomIzQzOwlwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4ICZndDs9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCAmIzQzOyAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExCiYjNDM7CSAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLgomIzQzOwkgKgomIzQzOwkgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdAomIzQzOwkgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLgomIzQzOwkgKi8KJiM0MzsJcG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2Y3B1LSZndDthcmNoLnBtbF9wYWdlKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgJmd0Oz0gcG1sX3RhaWxfaW5kZXg7IGktLSkgewomIzQzOwkJdTY0IGdwYTsKJiM0MzsKJiM0MzsJCWdwYSA9IHBtbF9idWZbaV07CiYjNDM7CQlXQVJOX09OX09OQ0UoZ3BhICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7CiYjNDM7CQlrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZmx1c2hfcG1sX2J1ZmZlcik7CiYjNDM7CiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCQkJICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKQogewpAQCAtODA0Miw2ICYjNDM7ODA3MywyMSBAQCBzdGF0aWMgdm9pZCBrdm1fdmNwdV9yZWxvYWRfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJa3ZtX3g4Nl9jYWxsKHNldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIpKHZjcHUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBOb3RlLCBucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nIGNhbiBiZSBjaGFuZ2VkIGNvbmN1cnJlbnQgd2l0aCB0aGlzCiYjNDM7CSAqIGNvZGUsIGJ1dCBpbiB0aGF0IGNhc2UgYW5vdGhlciB1cGRhdGUgcmVxdWVzdCB3aWxsIGJlIG1hZGUgYW5kIHNvCiYjNDM7CSAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBlbmFibGUgPSBhdG9taWNfcmVhZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5jcHVfZGlydHlfbG9nX3NpemUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1LCBlbmFibGUpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDYWxsZWQgd2l0aGluIGt2bS0mZ3Q7c3JjdSByZWFkIHNpZGUuCiAgKiBSZXR1cm5zIDEgdG8gbGV0IHZjcHVfcnVuKCkgY29udGludWUgdGhlIGd1ZXN0IGV4ZWN1dGlvbiBsb29wIHdpdGhvdXQKQEAgLTgyMDgsNyAmIzQzOzgyNTQsNyBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkJa3ZtX3g4Nl9jYWxsKHJlY2FsY19pbnRlcmNlcHRzKSh2Y3B1KTsKIAogCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfQ1BVX0RJUlRZX0xPR0dJTkcsIHZjcHUpKQotCQkJa3ZtX3g4Nl9jYWxsKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykodmNwdSk7CiYjNDM7CQkJa3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTsKIAogCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFLCB2Y3B1KSkgewogCQkJa3ZtX3ZjcHVfcmVzZXQodmNwdSwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmQ3NDdjMjA5NjVjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtOTAwLDQgJiM0Mzs5MDAsMTEgQEAgaW50IF9fX19rdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3BsLAogCiBpbnQga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKJiM0MzsvKiBTdXBwb3J0IGZvciBQTUwgKi8KJiM0MzsjZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFUwk1MTIKJiM0MzsvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqLwomIzQzOyNkZWZpbmUgUE1MX0hFQURfSU5ERVgJCShQTUxfTE9HX05SX0VOVFJJRVMtMSkKJiM0MzsKJiM0Mzt2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpOwomIzQzOwogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYxNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBBTUQgUE1MIFN1cHBvcnQgaW4gS1ZNIFNWTSoqCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGFkZGluZyBLTVNBTiB0byB0aGUgZnV6emluZyBzZXR1cCBpcyB3YXJyYW50ZWQsIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBpcyBhZGRpbmcgQU1EIFBNTCBzdXBwb3J0IHdpdGhpbiBLVk0gU1ZNIGFuZCByZWZhY3RvcmluZyBzb21lIFBNTCBjb2RlIGJldHdlZW4gVk1YIGFuZCB0aGUgY29tbW9uIHg4NiBLVk0uCgpMZXQgbWUgYnJlYWsgZG93biB0aGUgY2hhbmdlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGludm9sdmVzOgoKKiAgIEFkZGluZyB0aGUgYFg4Nl9GRUFUVVJFX1BNTGAgZmxhZy4KKiAgIE1vdmluZyB0aGUgYHBtbF9wYWdlYCBwb2ludGVyIGludG8gdGhlIGBrdm1fdmNwdV9hcmNoYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgc2lnbmlmaWNhbnQsIGFzIGl0IG5vdyBiZWNvbWVzIHBlci1WQ1BVIHN0YXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhZ2UgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIHplcm9lZCwgb3IgaWYgaXQgbWlnaHQgY29udGFpbiBzdGFsZSBkYXRhLiBUaGF0IGNvdWxkIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLgoqICAgQWRkaW5nIGBwbWxfYWRkcmAgYW5kIGBwbWxfaW5kZXhgIHRvIHRoZSBgdm1jYl9jb250cm9sX2FyZWFgLiBUaGVzZSBhZGRpdGlvbnMgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5IGRldGVybWluZSB3aGVyZSB0aGUgUE1MIGRhdGEgd2lsbCBiZSBzdG9yZWQgYW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIHdpdGhpbiB0aGUgYnVmZmVyLiBUaGUgYHBtbF9pbmRleGAgYW5kIGFzc29jaWF0ZWQgb2Zmc2V0cyBhcmUga2V5IGFyZWFzIGZvciBwb3RlbnRpYWwgZXJyb3JzLCBzdWNoIGFzIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGluY29ycmVjdCBpbmRleGluZy4KKiAgIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFNWTV9FWElUX1BNTF9GVUxMYC4gVGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBleGl0IGZyb20gdGhlIGd1ZXN0LiBUaGlzIGV4aXQgaGFuZGxlciBhbmQgYXNzb2NpYXRlZCBkYXRhIG5lZWQgc3BlY2lhbCBhdHRlbnRpb24uCiogICBUaGUgYG1vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpO2AgYW5kIHN1YnNlcXVlbnQgdXNhZ2Ugc3VnZ2VzdHMgYSBydW50aW1lIHN3aXRjaCBmb3IgZW5hYmxpbmcgUE1MLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGVzdGluZyBzdHJhdGVnaWVzLgoqICAgVGhlIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGNhbGwgaW4gYHN2bV92Y3B1X2NyZWF0ZWAgaXMgaW1wb3J0YW50LiBUaGlzIGlzIHdoZXJlIHRoZSBwYWdlIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZDogSXMgaXQgemVyb2VkPyBJZiBub3QsIGlzIHRoZXJlIG90aGVyIGluaXRpYWxpemF0aW9uPwoqICAgVGhlIGBzdm1fZmx1c2hfcG1sX2J1ZmZlcmAgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBga3ZtX2ZsdXNoX3BtbF9idWZmZXJgIGFyZSB2aXRhbC4gVGhpcyBpcyB0aGUgZmx1c2hpbmcgbWVjaGFuaXNtLiBUaGlzIGNvZGUgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsbHkgcmV2aWV3ZWQuCiogICBIYW5kbGluZyBvZiBgU1ZNX0VYSVRfUE1MX0ZVTExgIGV4aXRzLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgUE1MIGZ1bmN0aW9uYWxpdHkuIEVycm9ycyBpbiB0aGlzIGFyZWEgbWlnaHQgbGVhZCB0byBndWVzdCBjcmFzaGVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoqICAgVGhlIHVzZSBvZiBgY3B1X2RpcnR5X2xvZ19zaXplYCBhbmQgaXRzIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIFBNTCBiZWluZyBlbmFibGVkIGlzIGEgY3JpdGljYWwgZmFjdG9yIGZvciBkZXRlY3Rpbmcgd2hpY2ggY29kZSBwYXRocyBhcmUgZ29pbmcgdG8gYmUgZW5hYmxlZC4KCk5vdywgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBhbGxvY2F0aW9uIG9mIGB2Y3B1LSZndDthcmNoLnBtbF9wYWdlYC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIG1lbW9yeSB1c2luZyBncmVwcGVyIG9yIGJ5IHJlYWRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZS4gVGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBoaW5nZSBvbiB3aGV0aGVyIHRoaXMgYWxsb2NhdGVkIHBhZ2UgaXMgY29ycmVjdGx5IHNhbml0aXplZCBvciBpZiB1bmluaXRpYWxpemVkIGRhdGEgbWlnaHQgYmUgcHJlc2VudC4gSW4gcGFydGljdWxhciwgSSBtdXN0IHVuZGVyc3RhbmQgdGhlIGJlaGF2aW91ciB3aXRoIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbnBfc2FmZV9hbGxvY19wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTQ4Nz1pbnQgc3ZtX2FsbG9jYXRlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE0OTMtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE0OTQ6XHR2bWNiMDJfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTQ5NS1cdGlmICghdm1jYjAyX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODYyPWludCBzZXZfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3NS1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODc2Olx0dm1zYV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODc3LVx0aWYgKCF2bXNhX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00OTQ4PXZvaWQgc2V2X3ZjcHVfZGVsaXZlcl9zaXBpX3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5ODU6c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTYxOT1zdGF0aWMgaW50IHN2bV9jcHVfaW5pdChpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI1LVx0bWVtc2V0KHNkLCAwLCBzaXplb2Yoc3RydWN0IHN2bV9jcHVfZGF0YSkpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo2MjY6XHRzYXZlX2FyZWFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShjcHVfdG9fbm9kZShjcHUpLCBHRlBfS0VSTkVMKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI3LVx0aWYgKCFzYXZlX2FyZWFfcGFnZSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTEzMzU9c3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0NC1cdGVyciA9IC1FTk9NRU07XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjEzNDU6XHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0Ni1cdGlmICghdm1jYjAxX3BhZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzQ5LVx0aWYgKHBtbCkge1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxMzUwOlx0XHR2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNTEtXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTQxND1zdGF0aWMgdm9pZCAqc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNS17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTY6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNy1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5Mz1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5NzpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5OTg6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTkte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAwOlx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD0xMDIwPXZvaWQgc2V2X2ZyZWVfZGVjcnlwdGVkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnZtc2EpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIxLSNlbHNlXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjMte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyNi1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjgte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI5Olx0cmV0dXJuIHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShudW1hX25vZGVfaWQoKSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTAzCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCoqCgpPa2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgZW52aXJvbm1lbnQsIGFzIHRoaXMgaXMgaG93IEtWTSBoYW5kbGVzIHRoZSBwcm90ZWN0ZWQgVk1zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG5vZGUgYWxsb2NhdGlvbiwgYXMgU0VWIGRlYWxzIHdpdGggbWVtb3J5IGVuY3J5cHRpb24gYW5kIGludGVncml0eSBwcm90ZWN0aW9uIGFuZCB0aGlzIGNhbiBncmVhdGx5IGltcGFjdCBob3cgd2UgaGFuZGxlIHBhZ2UgYWxsb2NhdGlvbi4KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3I6CgoqICAgKipQYWdlIFR5cGU6KiogSXMgaXQgYWxsb2NhdGluZyByZWd1bGFyIHBhZ2VzLCBvciBhcmUgdGhlcmUgc3BlY2lhbCBmbGFncyByZWxhdGVkIHRvIFNFViwgc3VjaCBhcyBtZW1vcnkgZW5jcnlwdGlvbiBlbmFibGVtZW50LgoqICAgKipNZW1vcnkgTm9kZToqKiBIb3cgaXMgaXQgZGVhbGluZyB3aXRoIE5VTUEgbm9kZXM/IFNFViBjYW4gaW50cm9kdWNlIGNvbXBsZXhpdGllcyBoZXJlIHNpbmNlIHBhZ2UgcGxhY2VtZW50IG1hdHRlcnMgZm9yIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbm9kZSBhbGxvY2F0aW9uLCBhbnkgY29uc2lkZXJhdGlvbnMgcmVnYXJkaW5nIHRoZSBtZW1vcnkgcG9saWN5IGFuZCB0aGUgY3VycmVudCBOVU1BIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4KKiAgICoqU2FmZXR5OioqIFRoZSBmdW5jdGlvbiBuYW1lIGluY2x1ZGVzICYjMzQ7c2FmZSwmIzM0OyBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2hlY2tzIG9yIG1pdGlnYXRpb25zIHJlbGF0ZWQgdG8gcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgYWxsb2NhdGlvbiBmYWlsdXJlcywgb3Igb3RoZXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgY3JpdGljYWwgaW4gYSBTRVYgZW52aXJvbm1lbnQuIFRoaXMgZnVuY3Rpb24gbXVzdCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBncmFjZWZ1bGx5IGFzIHRob3NlIGNhbiBsZWFrIGluZm9ybWF0aW9uIGFib3V0IHRoZSBWTS4KKiAgICoqU0VWIENvbnRleHQ6KiogSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBTRVYtc3BlY2lmaWMgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgdGhhdCBpdCBtYXkgYmUgdXNpbmcgdG8gbWFuYWdlIGVuY3J5cHRlZCBtZW1vcnkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIEFNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gZmVhdHVyZXMuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBjb2RlLCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIEtWTSYjMzk7cyBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgdGhlIHBhcnRpY3VsYXIgbnVhbmNlcyB0aGF0IFNFViBicmluZ3MgdG8gdGhlIHRhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5ODU6XHRzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXG40OTg2Olx0e1xuNDk4NzpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG40OTg4Olx0XHRzdHJ1Y3QgcGFnZSAqcDtcbjQ5ODk6XHRcbjQ5OTA6XHRcdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKSlcbjQ5OTE6XHRcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfWkVSTywgMCk7XG40OTkyOlx0XG40OTkzOlx0XHQvKlxuNDk5NDpcdFx0ICogQWxsb2NhdGUgYW4gU05QLXNhZmUgcGFnZSB0byB3b3JrYXJvdW5kIHRoZSBTTlAgZXJyYXR1bSB3aGVyZVxuNDk5NTpcdFx0ICogdGhlIENQVSB3aWxsIGluY29ycmVjdGx5IHNpZ25hbCBhbiBSTVAgdmlvbGF0aW9uICNQRiBpZiBhXG40OTk2Olx0XHQgKiBodWdlcGFnZSAoMk1CIG9yIDFHQikgY29sbGlkZXMgd2l0aCB0aGUgUk1QIGVudHJ5IG9mIGFcbjQ5OTc6XHRcdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIFBNTCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbjQ5OTg6XHRcdCAqXG40OTk5Olx0XHQgKiBBbGxvY2F0ZSBvbmUgZXh0cmEgcGFnZSwgY2hvb3NlIGEgcGFnZSB3aGljaCBpcyBub3RcbjUwMDA6XHRcdCAqIDJNQi1hbGlnbmVkLCBhbmQgZnJlZSB0aGUgb3RoZXIuXG41MDAxOlx0XHQgKi9cbjUwMDI6XHRcdHAgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX1pFUk8sIDEpO1xuNTAwMzpcdFx0aWYgKCFwKVxuNTAwNDpcdFx0XHRyZXR1cm4gTlVMTDtcbjUwMDU6XHRcbjUwMDY6XHRcdHNwbGl0X3BhZ2UocCwgMSk7XG41MDA3Olx0XG41MDA4Olx0XHRwZm4gPSBwYWdlX3RvX3BmbihwKTtcbjUwMDk6XHRcdGlmIChJU19BTElHTkVEKHBmbiwgUFRSU19QRVJfUE1EKSlcbjUwMTA6XHRcdFx0X19mcmVlX3BhZ2UocCYjNDM7JiM0MzspO1xuNTAxMTpcdFx0ZWxzZVxuNTAxMjpcdFx0XHRfX2ZyZWVfcGFnZShwICYjNDM7IDEpO1xuNTAxMzpcdFxuNTAxNDpcdFx0cmV0dXJuIHA7XG41MDE1Olx0fVxuNTAxNjpcdFxuNTAxNzpcdHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuNTAxODpcdHtcbjUwMTk6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG41MDIwOlx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjUwMjE6XHRcdGludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7XG41MDIyOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjUwMjM6XHRcdGJvb2wgYXNzaWduZWQ7XG41MDI0Olx0XHRrdm1fcGZuX3QgcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAzMQoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA4NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBBTUQgUE1MIFN1cHBvcnQgYW5kIFJlZmFjdG9yaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgY2VudGVyZWQgYXJvdW5kIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGUgaW50cm9kdWN0aW9uIG9mIEFNRCBQTUwgc3VwcG9ydCBhbmQgdGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBQTUwgZmx1c2ggbG9naWMuIEkgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHdlIHdlcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgYXZlbnVlcyBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGNyZWF0aW5nIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuCgpGaXJzdCwgSSBsb29rZWQgYXQgaG93IHRoZSBtZW1vcnkgZm9yIHRoZXNlIFBNTCBidWZmZXJzIGlzIGhhbmRsZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgZHVyaW5nIGFsbG9jYXRpb24gKGBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pYCBpbiBWTVggYW5kIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGVsc2V3aGVyZSkuIFNvLCB0aGUgUE1MIHBhZ2UgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgYWxsZXZpYXRlcyBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgbXkgd29ycmllcy4gVGhlIGhhcmR3YXJlIGl0c2VsZiBsb2dzIEdQQXMgaW50byB0aGlzIHByZS16ZXJvZWQgcGFnZSB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgYWN0aXZlLgoKTmV4dCwgSSB3ZW50IHRocm91Z2ggYSBjaGVja2xpc3Qgb2YgcG90ZW50aWFsIEtNU0FOIHRyaWdnZXJzOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm9wZS4gTm8gbmV3IGlvY3RsIHN0cnVjdHVyZXMsIGBjb3B5X3RvX3VzZXJgIGNhbGxzLCBOZXRsaW5rIG1lc3NhZ2VzLCBvciBzb2NrZXQgb3B0aW9ucyBhcmUgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdGhpcy4gVGhlIGxvZ2ljIGZsb3cgYXBwZWFycyB0byBiZSBzb3VuZCwgd2l0aCBubyBkZWNpc2lvbi1tYWtpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgZ2FyYmFnZSB2YWx1ZXMuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzcz8qKiBBZ2Fpbiwgbm8uIFRoZSBhbGxvY2F0ZWQgcGFnZSBpcyBmdWxseSBpbml0aWFsaXplZC4KNC4gICoqQm91bmRzIGNoZWNrcy9sZW5ndGggaXNzdWVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcz8qKiBUaGUgY29kZSBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBhbnkgc3VjaCB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgYGt2bV9mbHVzaF9wbWxfYnVmZmVyYCBmdW5jdGlvbiwgbW92ZWQgZnJvbSBgdm14X2ZsdXNoX3BtbF9idWZmZXJgLCBpdGVyYXRlcyBiYWNrd2FyZCB0aHJvdWdoIHRoZSBQTUwgYnVmZmVyLCByZWFkaW5nIHRoZSBsb2dnZWQgR1BBcy4gVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgbWVtb3J5IGhhcyBiZWVuIGV4cGxpY2l0bHkgemVyb2VkIGF0IGFsbG9jYXRpb24gdGltZS4KCkdpdmVuIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIHRoZSBQTUwgYnVmZmVycywgdGhlIGFic2VuY2Ugb2Yga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcywgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgZXhwb3N1cmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIChLQVNBTiwgTE9DS0RFUCkgYW5kIEtWTSYjMzk7cyBvd24gdW5pdCB0ZXN0cyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIGJvdW5kcywgcGFnZSBtYW5hZ2VtZW50LCBhbmQgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBmdW5jdGlvbiBpcyBzaW1wbHkgdGhlIGxvZ2dpbmcgb2YgdmFsaWQgR1BBcyBpbnRvIGEgemVyb2VkIG1lbW9yeSBhcmVhOyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQU1EIFNWTSBzdXBwb3J0IGZvciBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGFuZCBjb25zb2xpZGF0ZXMgc2hhcmVkIFBNTCBoYW5kbGluZyBsb2dpYyBiZXR3ZWVuIEludGVsIFZNWCBhbmQgQU1EIFNWTS5cblxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXG5cbkFsbCBhbGxvY2F0ZWQgUE1MIGJ1ZmZlciBwYWdlcyBhcmUgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIHZpYSBgX19HRlBfWkVST2AgKGluIGBhbGxvY19wYWdlYCBhbmQgYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChlLmcuIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCBvdXRwdXRzKSwgZG8gbm90IGxlYXZlIGFueSBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29udHJvbC1mbG93IGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb247IHN0YW5kYXJkIEtBU0FOIGFuZCBmdW5jdGlvbmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEwOjUyLjI1MzU4NjA2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTkxMDQxNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2ZsdXNoX3BtbF9idWZmZXJcIixcbiAgICBcImt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJwbWxfZnVsbF9pbnRlcmNlcHRpb25cIixcbiAgICBcIm5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsXCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbFwiLFxuICAgIFwidm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ1wiLFxuICAgIFwidm14X2ZsdXNoX3BtbF9idWZmZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXFxuXFxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgZGlydHkgbG9nZ2luZyBzdXBwb3J0IGZvciBBTUQgU1ZNIGFuZCByZWZhY3RvcnMgdGhlIHNoYXJlZCBQTUwgYnVmZmVyIGZsdXNoaW5nIGFuZCBkaXJ0eSBsb2dnaW5nIHN0YXRlIG1hY2hpbmUgYWNyb3NzIHg4NiBLVk0sIEludGVsIFZNWCwgYW5kIEFNRCBTVk0uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29kZSBwYXRocyBpbiBLVk0gYW5kIGFmZmVjdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIGV4aXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjEwOjUyLjI1MzU5Mjg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI1MjE4NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThiNTMxMjc3OWRkNjRkYmM2MzExYTIzNmZkMjYwYTM0OTM4MWRkNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uY2JmY2M2NmExOGU5YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbkBAIC0yMzgsNiArMjM4LDcgQEBcXG4gLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzIrMjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZDUFVQUkVFTVBUXFx0XFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1REWF9HVUVTVFxcdFxcdCggOCozMisyMikgLyogXFxcInRkeF9ndWVzdFxcXCIgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgR3Vlc3QgKi9cXG4rI2RlZmluZSBYODZfRkVBVFVSRV9QTUxcXHRcXHRcXHQoIDgqMzIrMjMpIC8qIEFNRCBQYWdlIE1vZGlmaWNhdGlvbiBsb2dnaW5nICovXFxuIFxcbiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwNzowIChFQlgpLCB3b3JkIDkgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9GU0dTQkFTRVxcdFxcdCggOSozMisgMCkgLyogXFxcImZzZ3NiYXNlXFxcIiBSREZTQkFTRSwgV1JGU0JBU0UsIFJER1NCQVNFLCBXUkdTQkFTRSBpbnN0cnVjdGlvbnMqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDNhZjczOTVjMjQzMGEuLjJkZWJmNjI5NDI5MDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNzg5LDYgKzc4OSw4IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfZXh0ZXJuYWxfc3B0X2NhY2hlO1xcbiBcXG4rXFx0c3RydWN0IHBhZ2UgKnBtbF9wYWdlO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUUVNVSB1c2Vyc3BhY2UgYW5kIHRoZSBndWVzdCBlYWNoIGhhdmUgdGhlaXIgb3duIEZQVSBzdGF0ZS5cXG4gXFx0ICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuXFxuQEAgLTE2NzAsNyArMTY3Miw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTtcXG4gXFx0dm9pZCAoKmhhbmRsZV9leGl0X2lycW9mZikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuLVxcdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK1xcdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xcbiBcXG4gXFx0dm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5pbmRleCBhYTYzNDMxYmE5MmMzLi5lMGE3NTQ5YTdjNzI3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5AQCAtMTY1LDcgKzE2NSwxMCBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XFxuIFxcdHU4IHJlc2VydmVkXzlbMjJdO1xcbiBcXHR1NjQgYWxsb3dlZF9zZXZfZmVhdHVyZXM7XFx0LyogT2Zmc2V0IDB4MTM4ICovXFxuIFxcdHU2NCBndWVzdF9zZXZfZmVhdHVyZXM7XFx0XFx0LyogT2Zmc2V0IDB4MTQwICovXFxuLVxcdHU4IHJlc2VydmVkXzEwWzY2NF07XFxuK1xcdHU4IHJlc2VydmVkXzEwWzEyOF07XFxuK1xcdHU2NCBwbWxfYWRkcjtcXHRcXHRcXHQvKiBPZmZzZXQgMHgxYzggKi9cXG4rXFx0dTE2IHBtbF9pbmRleDtcXHRcXHRcXHQvKiBPZmZzZXQgMHgxZDAgKi9cXG4rXFx0dTggcmVzZXJ2ZWRfMTFbNTI2XTtcXG4gXFx0LypcXG4gXFx0ICogT2Zmc2V0IDB4M2UwLCAzMiBieXRlcyByZXNlcnZlZFxcbiBcXHQgKiBmb3IgdXNlIGJ5IGh5cGVydmlzb3Ivc29mdHdhcmUuXFxuQEAgLTI0MCwxMCArMjQzLDExIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcXG4gI2RlZmluZSBTVk1fSU9JT19TSVpFX01BU0sgKDcgXFx1MDAzY1xcdTAwM2MgU1ZNX0lPSU9fU0laRV9TSElGVClcXG4gI2RlZmluZSBTVk1fSU9JT19BU0laRV9NQVNLICg3IFxcdTAwM2NcXHUwMDNjIFNWTV9JT0lPX0FTSVpFX1NISUZUKVxcbiBcXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcXHRcXHRCSVQoMClcXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXFx0XFx0QklUKDEpXFxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1xcdEJJVCgyKVxcbi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUXFx0QklUKDMpXFxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXFx0XFx0QklUX1VMTCgwKVxcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZcXHRcXHRCSVRfVUxMKDEpXFxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1xcdFxcdEJJVF9VTEwoMilcXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFxcdFxcdEJJVF9VTEwoMylcXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfUE1MXFx0XFx0QklUX1VMTCgxMSlcXG4gXFxuICNkZWZpbmUgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUlxcdEJJVF9VTEwoMClcXG4gI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfVk1MT0FEX1ZNU0FWRVxcdEJJVF9VTEwoMSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcXG5pbmRleCAwMTBhNDVjOWY2MTQ3Li5lODA2NzYxODUwOTIxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXFxuQEAgLTEwMSw2ICsxMDEsNyBAQFxcbiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfSU5DT01QTEVURV9JUElcXHRcXHQweDQwMVxcbiAjZGVmaW5lIFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1NcXHQweDQwMlxcbiAjZGVmaW5lIFNWTV9FWElUX1ZNR0VYSVQgICAgICAgMHg0MDNcXG4rI2RlZmluZSBTVk1fRVhJVF9QTUxfRlVMTFxcdDB4NDA3XFxuIFxcbiAvKiBTRVYtRVMgc29mdHdhcmUtZGVmaW5lZCBWTUdFWElUIGV2ZW50cyAqL1xcbiAjZGVmaW5lIFNWTV9WTUdFWElUX01NSU9fUkVBRFxcdFxcdFxcdDB4ODAwMDAwMDF1bGxcXG5AQCAtMjM2LDYgKzIzNyw3IEBAXFxuIFxcdHsgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSSxcXHRcXHRcXFwiYXZpY19pbmNvbXBsZXRlX2lwaVxcXCIgfSwgXFxcXFxcbiBcXHR7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgXFxcImF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NcXFwiIH0sIFxcXFxcXG4gXFx0eyBTVk1fRVhJVF9WTUdFWElULFxcdFxcdFxcXCJ2bWdleGl0XFxcIiB9LCBcXFxcXFxuK1xcdHsgU1ZNX0VYSVRfUE1MX0ZVTEwsXFx0XFx0XFxcInBtbF9mdWxsXFxcIiB9LCBcXFxcXFxuIFxcdHsgU1ZNX1ZNR0VYSVRfTU1JT19SRUFELFxcdFxcXCJ2bWdleGl0X21taW9fcmVhZFxcXCIgfSwgXFxcXFxcbiBcXHR7IFNWTV9WTUdFWElUX01NSU9fV1JJVEUsXFx0XFxcInZtZ2V4aXRfbW1pb193cml0ZVxcXCIgfSwgXFxcXFxcbiBcXHR7IFNWTV9WTUdFWElUX05NSV9DT01QTEVURSxcXHRcXFwidm1nZXhpdF9ubWlfY29tcGxldGVcXFwiIH0sIFxcXFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG5pbmRleCA4NjY1YTY0NzQ4MDZjLi5iMThjYzljODhkZDU3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuQEAgLTU1LDYgKzU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xcbiBcXHR7IFg4Nl9GRUFUVVJFX0FNRF9GQVNUX0NQUEMsXFx0XFx0Q1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LFxcbiBcXHR7IFg4Nl9GRUFUVVJFX0NQUENfUEVSRl9QUklPLFxcdFxcdENQVUlEX0VEWCwgMTYsIDB4ODAwMDAwMDcsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9NQkEsXFx0XFx0XFx0Q1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LFxcbitcXHR7IFg4Nl9GRUFUVVJFX1BNTCxcXHRcXHRcXHRDUFVJRF9FQ1gsICA0LCAweDgwMDAwMDBhLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCxcXHRcXHRDUFVJRF9FQ1gsICA2LCAweDgwMDAwMDBhLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQ09IRVJFTkNZX1NGV19OTyxcXHRcXHRDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfU01CQSxcXHRcXHRcXHRDUFVJRF9FQlgsICAyLCAweDgwMDAwMDIwLCAwIH0sXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuaW5kZXggNzNmMzdiMDUwZDBhMC4uZGE0MTdjNGM1OTE1NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xcbkBAIC05MDEsNiArOTAxLDEzIEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9jb250cm9sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbiBcXHR2bWNiMDItXFx1MDAzZWNvbnRyb2wubXNycG1fYmFzZV9wYSA9IHZtY2IwMS1cXHUwMDNlY29udHJvbC5tc3JwbV9iYXNlX3BhO1xcbiBcXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX1BFUk1fTUFQKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuXFxuK1xcdCAqIHVuZXhwZWN0ZWQgUE1MIHdyaXRlIHdvdWxkIHRyaWdnZXIgYSBQTUxfRlVMTCBWTS1FeGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHBtbClcXG4rXFx0XFx0dm1jYjAyLVxcdTAwM2Vjb250cm9sLnBtbF9pbmRleCA9IC0xO1xcbitcXG4gXFx0LypcXG4gXFx0ICogU3Rhc2ggdm1jYjAyJ3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbid0IG1vdmVkIHBhc3QgdGhlIGd1aWx0eVxcbiBcXHQgKiBpbnN0cnVjdGlvbjsgb3RoZXJ3aXNlLCByZXNldCB0aGUgY291bnRlciB0byAnMCcuXFxuQEAgLTE4MjAsNiArMTgyNywxMyBAQCBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdFxcdGlmIChuZXN0ZWRfc3ZtX2lzX2wyX3RsYl9mbHVzaF9oY2FsbCh2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNWTV9FWElUX1BNTF9GVUxMOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbGwgUE1MIGZ1bGwgZXhpdHMgYXJlIGhhbmRsZWQgYnkgS1ZNLiAgS1ZNIGVtdWxhdGVzIFBNTCBpblxcbitcXHRcXHQgKiBzb2Z0d2FyZSBmb3IgTDEsIGJ1dCBuZXZlciBlbmFibGVzIFBNTCBpbiBoYXJkd2FyZSBvbiBiZWhhbGZcXG4rXFx0XFx0ICogb2YgTDEuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5jZmU5OTBmODA1MDQwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTQ5OTQsNyArNDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG4gXFx0ICogQWxsb2NhdGUgYW4gU05QLXNhZmUgcGFnZSB0byB3b3JrYXJvdW5kIHRoZSBTTlAgZXJyYXR1bSB3aGVyZVxcbiBcXHQgKiB0aGUgQ1BVIHdpbGwgaW5jb3JyZWN0bHkgc2lnbmFsIGFuIFJNUCB2aW9sYXRpb24gI1BGIGlmIGFcXG4gXFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXFxuLVxcdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIG9yIEFWSUMgYmFja2luZyBwYWdlLlxcbitcXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBQTUwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuXFxuIFxcdCAqXFxuIFxcdCAqIEFsbG9jYXRlIG9uZSBleHRyYSBwYWdlLCBjaG9vc2UgYSBwYWdlIHdoaWNoIGlzIG5vdFxcbiBcXHQgKiAyTUItYWxpZ25lZCwgYW5kIGZyZWUgdGhlIG90aGVyLlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IDdkNTlkMzAxZTFlNTQuLjk1MGMyNTBhNzdiNTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG5AQCAtMTc5LDYgKzE3OSw5IEBAIG1vZHVsZV9wYXJhbSh2bm1pLCBib29sLCAwNDQ0KTtcXG4gXFxuIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcXG4gXFxuK2Jvb2wgX19yb19hZnRlcl9pbml0IHBtbCA9IHRydWU7XFxuK21vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpO1xcbitcXG4gc3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHN2bV9ncF9lcnJhdHVtX2ludGVyY2VwdCA9IHRydWU7XFxuIFxcbiBzdGF0aWMgdTggcnNtX2luc19ieXRlc1tdID0gXFxcIlxcXFx4MGZcXFxceGFhXFxcIjtcXG5AQCAtMTI2Nyw2ICsxMjcwLDIzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcXG4gXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcXG4gXFx0XFx0c3ZtX3NldF9pbnRlcmNlcHQoc3ZtLCBJTlRFUkNFUFRfQlVTTE9DSyk7XFxuIFxcbitcXHRpZiAocG1sKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBvcHVsYXRlIHRoZSBwYWdlIGFkZHJlc3MgYW5kIGluZGV4IGhlcmUsIFBNTCBpcyBlbmFibGVkXFxuK1xcdFxcdCAqIHdoZW4gZGlydHkgbG9nZ2luZyBpcyBlbmFibGVkIG9uIHRoZSBtZW1zbG90IHRocm91Z2hcXG4rXFx0XFx0ICogc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZygpXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb250cm9sLVxcdTAwM2VwbWxfYWRkciA9ICh1NjQpX19zbWVfc2V0KHBhZ2VfdG9fcGh5cyh2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlKSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgVk1DQiBjb250cm9sIGFyZWEgcmVtYWlucyB2YWxpZCBhZnRlciBhbiBpbnRlcmNlcHRlZCBTSFVURE9XTlxcbitcXHRcXHQgKiAoQU1EIEFQTSBSZXYgMy40NSspLCBzbyBvbmx5IGluaXRpYWxpemUgUE1MIGluZGV4IG9uIHJlc2V0IHRvIGF2b2lkXFxuK1xcdFxcdCAqIGRpc2NhcmRpbmcgYWxyZWFkeS1sb2dnZWQgZW50cmllcyB0aGF0IGhhdmVuJ3QgYmVlbiBmbHVzaGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFpbml0X2V2ZW50KVxcbitcXHRcXHRcXHRjb250cm9sLVxcdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcXG4gXFx0XFx0c2V2X2luaXRfdm1jYihzdm0sIGluaXRfZXZlbnQpO1xcbiBcXG5AQCAtMTMyNiw5ICsxMzQ2LDE1IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCF2bWNiMDFfcGFnZSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRpZiAocG1sKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuK1xcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4rXFx0XFx0XFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xcbitcXHRcXHRnb3RvIGVycm9yX2ZyZWVfcG1sX3BhZ2U7XFxuIFxcbiBcXHRlcnIgPSBhdmljX2luaXRfdmNwdShzdm0pO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC0xMzUzLDYgKzEzNzksOSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBlcnJvcl9mcmVlX3NldjpcXG4gXFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcXG4rZXJyb3JfZnJlZV9wbWxfcGFnZTpcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpO1xcbiBlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcXG4gXFx0X19mcmVlX3BhZ2Uodm1jYjAxX3BhZ2UpO1xcbiBvdXQ6XFxuQEAgLTEzNzAsNiArMTM5OSw5IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcXG4gXFxuK1xcdGlmIChwbWwgXFx1MDAyNlxcdTAwMjYgdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4rXFx0XFx0X19mcmVlX3BhZ2UodmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSk7XFxuK1xcbiBcXHRfX2ZyZWVfcGFnZShfX3NtZV9wYV90b19wYWdlKHN2bS1cXHUwMDNldm1jYjAxLnBhKSk7XFxuIFxcdHN2bV92Y3B1X2ZyZWVfbXNycG0oc3ZtLVxcdTAwM2Vtc3JwbSk7XFxuIH1cXG5AQCAtMzM0NCw2ICszMzc2LDQ1IEBAIHN0YXRpYyBpbnQgdm1tY2FsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHZjcHUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuK1xcdHN0cnVjdCB2bWNiICp2bWNiMDEgPSBzdm0tXFx1MDAzZXZtY2IwMS5wdHI7XFxuK1xcbitcXHRpZiAoZW5hYmxlKVxcbitcXHRcXHR2bWNiMDEtXFx1MDAzZWNvbnRyb2wubWlzY19jdGwgfD0gU1ZNX01JU0NfRU5BQkxFX1BNTDtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2bWNiMDEtXFx1MDAzZWNvbnRyb2wubWlzY19jdGwgXFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9QTUw7XFxuK1xcbitcXHR2bWNiX21hcmtfZGlydHkodm1jYjAxLCBWTUNCX05QVCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHN2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4rXFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK1xcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xcbitcXHRpZiAoY29udHJvbC1cXHUwMDNlcG1sX2luZGV4ID09IFBNTF9IRUFEX0lOREVYKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBjb250cm9sLVxcdTAwM2VwbWxfaW5kZXgpO1xcbitcXG4rXFx0LyogUmVzZXQgdGhlIFBNTCBpbmRleCAqL1xcbitcXHRjb250cm9sLVxcdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwbWxfZnVsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LVxcdTAwM2V2Y3B1X2lkKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBNTCBidWZmZXIgaXMgYWxyZWFkeSBmbHVzaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3ZtX2hhbmRsZV9leGl0KCkuXFxuK1xcdCAqIE5vdGhpbmcgdG8gZG8gaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcXG4gXFx0W1NWTV9FWElUX1JFQURfQ1IwXVxcdFxcdFxcdD0gY3JfaW50ZXJjZXB0aW9uLFxcbiBcXHRbU1ZNX0VYSVRfUkVBRF9DUjNdXFx0XFx0XFx0PSBjcl9pbnRlcmNlcHRpb24sXFxuQEAgLTM0MjEsNiArMzQ5Miw3IEBAIHN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuIFxcdFtTVk1fRVhJVF9WTUdFWElUXVxcdFxcdFxcdD0gc2V2X2hhbmRsZV92bWdleGl0LFxcbiAjZW5kaWZcXG4rXFx0W1NWTV9FWElUX1BNTF9GVUxMXVxcdFxcdFxcdD0gcG1sX2Z1bGxfaW50ZXJjZXB0aW9uLFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMzQ3MCw4ICszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDE2bGx4XFxcXG5cXFwiLCBcXFwiZXhpdF9pbmZvMjpcXFwiLCBjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMik7XFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDh4XFxcXG5cXFwiLCBcXFwiZXhpdF9pbnRfaW5mbzpcXFwiLCBjb250cm9sLVxcdTAwM2VleGl0X2ludF9pbmZvKTtcXG4gXFx0cHJfZXJyKFxcXCIlLTIwcyUwOHhcXFxcblxcXCIsIFxcXCJleGl0X2ludF9pbmZvX2VycjpcXFwiLCBjb250cm9sLVxcdTAwM2VleGl0X2ludF9pbmZvX2Vycik7XFxuLVxcdHByX2VycihcXFwiJS0yMHMlbGxkXFxcXG5cXFwiLCBcXFwibWlzY19jdGw6XFxcIiwgY29udHJvbC1cXHUwMDNlbWlzY19jdGwpO1xcbitcXHRwcl9lcnIoXFxcIiUtMjBzJWxseFxcXFxuXFxcIiwgXFxcIm1pc2NfY3RsOlxcXCIsIGNvbnRyb2wtXFx1MDAzZW1pc2NfY3RsKTtcXG4gXFx0cHJfZXJyKFxcXCIlLTIwcyUwMTZsbHhcXFxcblxcXCIsIFxcXCJuZXN0ZWRfY3IzOlxcXCIsIGNvbnRyb2wtXFx1MDAzZW5lc3RlZF9jcjMpO1xcbitcXG4rXFx0aWYgKHBtbCkge1xcbitcXHRcXHRwcl9lcnIoXFxcIiUtMjBzJTAxNmxseFxcXFxuXFxcIiwgXFxcInBtbF9hZGRyOlxcXCIsIGNvbnRyb2wtXFx1MDAzZXBtbF9hZGRyKTtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlLTIwcyUwNHhcXFxcblxcXCIsIFxcXCJwbWxfaW5kZXg6XFxcIiwgY29udHJvbC1cXHUwMDNlcG1sX2luZGV4KTtcXG4rXFx0fVxcbitcXG4gXFx0cHJfZXJyKFxcXCIlLTIwcyUwMTZsbHhcXFxcblxcXCIsIFxcXCJhdmljX3ZhcGljX2JhcjpcXFwiLCBjb250cm9sLVxcdTAwM2VhdmljX3ZhcGljX2Jhcik7XFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDE2bGx4XFxcXG5cXFwiLCBcXFwiZ2hjYjpcXFwiLCBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSk7XFxuIFxcdHByX2VycihcXFwiJS0yMHMlMDh4XFxcXG5cXFwiLCBcXFwiZXZlbnRfaW5qOlxcXCIsIGNvbnRyb2wtXFx1MDAzZWV2ZW50X2luaik7XFxuQEAgLTM2NDksNiArMzcyNywxMyBAQCBpbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpXFxuIFxcdCAgICAodTY0KWV4aXRfY29kZSAhPSBfX2V4aXRfY29kZSlcXG4gXFx0XFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsXFxuK1xcdCAqIGV4aXQgb2NjdXJzIGFzIHNvbWV0aGluZyBpcyBob3JyaWJseSB3cm9uZy5cXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2IGV4aXRfY29kZSA9PSBTVk1fRVhJVF9QTUxfRlVMTCkpXFxuK1xcdFxcdGdvdG8gdW5leHBlY3RlZF92bWV4aXQ7XFxuK1xcbiAjaWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXFxuIFxcdGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfTVNSKVxcbiBcXHRcXHRyZXR1cm4gbXNyX2ludGVyY2VwdGlvbih2Y3B1KTtcXG5AQCAtMzcxNyw2ICszODAyLDE0IEBAIHN0YXRpYyBpbnQgc3ZtX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbiBcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcXG4gXFx0c3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuIFxcbitcXHQvKlxcbitcXHQgKiBPcHBvcnR1bmlzdGljYWxseSBmbHVzaCB0aGUgUE1MIGJ1ZmZlciBvbiBWTSBleGl0LiBUaGlzIGtlZXBzIHRoZVxcbitcXHQgKiBkaXJ0eSBiaXRtYXAgY3VycmVudCBieSBwcm9jZXNzaW5nIGxvZ2dlZCBHUEFzIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yXFxuK1xcdCAqIFBNTF9GVUxMIGV4aXQuXFxuK1xcdCAqL1xcbitcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSBcXHUwMDI2XFx1MDAyNiAhaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcXG4rXFx0XFx0c3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSk7XFxuK1xcbiBcXHRpZiAodW5saWtlbHkoZXhpdF9mYXN0cGF0aCA9PSBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC01MzExLDYgKzU0MDQsOSBAQCBzdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0aWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpXFxuIFxcdFxcdGt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTtcXG4gXFxuK1xcdGlmIChwbWwpXFxuK1xcdFxcdGt2bS1cXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUgPSBQTUxfTE9HX05SX0VOVFJJRVM7XFxuK1xcbiBcXHRzdm1fc3Jzb192bV9pbml0KCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU0MjksNiArNTUyNSw4IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXHQuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCxcXG4gXFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuIFxcbitcXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyxcXG4rXFxuIFxcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcXG4gXFx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcXG4gXFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXFxuQEAgLTU2ODksNiArNTc4NywxMCBAQCBzdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcXG4gXFxuIFxcdG5yaXBzID0gbnJpcHMgXFx1MDAyNlxcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTtcXG4gXFxuK1xcdHBtbCA9IHBtbCBcXHUwMDI2XFx1MDAyNiBucHRfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BNTCk7XFxuK1xcdGlmIChwbWwpXFxuK1xcdFxcdHByX2luZm8oXFxcIlBhZ2UgbW9kaWZpY2F0aW9uIGxvZ2dpbmcgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4rXFxuIFxcdGlmIChsYnJ2KSB7XFxuIFxcdFxcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKVxcbiBcXHRcXHRcXHRsYnJ2ID0gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC01Myw2ICs1Myw3IEBAIGV4dGVybiBpbnQgdmdpZjtcXG4gZXh0ZXJuIGJvb2wgaW50ZXJjZXB0X3NtaTtcXG4gZXh0ZXJuIGJvb2wgdm5taTtcXG4gZXh0ZXJuIGludCBsYnJ2O1xcbitleHRlcm4gYm9vbCBwbWw7XFxuIFxcbiBleHRlcm4gaW50IHRzY19hdXhfdXJldF9zbG90IF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li5lNzdiNWI3MzEyNzVjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG5AQCAtMTA4LDcgKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdHZteF92Y3B1X2xvYWQodmNwdSwgY3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXFxuIHtcXG4gXFx0LypcXG4gXFx0ICogQmFzaWMgVERYIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSBQTUwuIEtWTSBkb2VzIG5vdCBlbmFibGUgUE1MIGluXFxuQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xcbitcXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUsIGVuYWJsZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHZ0X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTQ4ODMsMTAgKzQ4ODMsMTEgQEAgaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiAjZGVmaW5lIFZNWF9YU1NfRVhJVF9CSVRNQVAgMFxcbiBcXG4tc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbitzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHN0cnVjdCBrdm0gKmt2bSA9IHZteC1cXHUwMDNldmNwdS5rdm07XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0c3RydWN0IGt2bV92bXggKmt2bV92bXggPSB0b19rdm1fdm14KGt2bSk7XFxuK1xcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG4gXFx0aWYgKG5lc3RlZClcXG4gXFx0XFx0bmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKCk7XFxuQEAgLTQ5MTEsNyArNDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gXFx0aWYgKGNwdV9oYXNfdGVydGlhcnlfZXhlY19jdHJscygpKVxcbiBcXHRcXHR0ZXJ0aWFyeV9leGVjX2NvbnRyb2xzX3NldCh2bXgsIHZteF90ZXJ0aWFyeV9leGVjX2NvbnRyb2wodm14KSk7XFxuIFxcbi1cXHRpZiAoZW5hYmxlX2FwaWN2IFxcdTAwMjZcXHUwMDI2IGxhcGljX2luX2tlcm5lbChcXHUwMDI2dm14LVxcdTAwM2V2Y3B1KSkge1xcbitcXHRpZiAoZW5hYmxlX2FwaWN2IFxcdTAwMjZcXHUwMDI2IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xcbiBcXHRcXHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7XFxuIFxcdFxcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTtcXG4gXFx0XFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApO1xcbkBAIC00OTIzLDcgKzQ5MjQsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuIFxcdFxcdHZtY3Nfd3JpdGU2NChQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoKFxcdTAwMjZ2bXgtXFx1MDAzZXZ0LnBpX2Rlc2MpKSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh2bXhfY2FuX3VzZV9pcGl2KFxcdTAwMjZ2bXgtXFx1MDAzZXZjcHUpKSB7XFxuK1xcdGlmICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpKSB7XFxuIFxcdFxcdHZtY3Nfd3JpdGU2NChQSURfUE9JTlRFUl9UQUJMRSwgX19wYShrdm1fdm14LVxcdTAwM2VwaWRfdGFibGUpKTtcXG4gXFx0XFx0dm1jc193cml0ZTE2KExBU1RfUElEX1BPSU5URVJfSU5ERVgsIGt2bS1cXHUwMDNlYXJjaC5tYXhfdmNwdV9pZHMgLSAxKTtcXG4gXFx0fVxcbkBAIC00OTU4LDE1ICs0OTU5LDE1IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gXFx0dm1jc193cml0ZTY0KFZNX0VOVFJZX01TUl9MT0FEX0FERFIsIF9fcGEodm14LVxcdTAwM2Vtc3JfYXV0b2xvYWQuZ3Vlc3QudmFsKSk7XFxuIFxcbiBcXHRpZiAodm1jc19jb25maWcudm1lbnRyeV9jdHJsIFxcdTAwMjYgVk1fRU5UUllfTE9BRF9JQTMyX1BBVClcXG4tXFx0XFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2bXgtXFx1MDAzZXZjcHUuYXJjaC5wYXQpO1xcbitcXHRcXHR2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZjcHUtXFx1MDAzZWFyY2gucGF0KTtcXG4gXFxuIFxcdHZtX2V4aXRfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZXhpdF9jdHJsKCkpO1xcbiBcXG4gXFx0LyogMjIuMi4xLCAyMC44LjEgKi9cXG4gXFx0dm1fZW50cnlfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZW50cnlfY3RybCgpKTtcXG4gXFxuLVxcdHZteC1cXHUwMDNldmNwdS5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7XFxuLVxcdHZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52bXgtXFx1MDAzZXZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyk7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcXG4rXFx0dm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfnZjcHUtXFx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpO1xcbiBcXG4gXFx0c2V0X2NyNF9ndWVzdF9ob3N0X21hc2sodm14KTtcXG4gXFxuQEAgLTQ5NzcsMTEgKzQ5NzgsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbiBcXHRcXHR2bWNzX3dyaXRlNjQoWFNTX0VYSVRfQklUTUFQLCBWTVhfWFNTX0VYSVRfQklUTUFQKTtcXG4gXFxuIFxcdGlmIChlbmFibGVfcG1sKSB7XFxuLVxcdFxcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZteC1cXHUwMDNlcG1sX3BnKSk7XFxuK1xcdFxcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpKTtcXG4gXFx0XFx0dm1jc193cml0ZTE2KEdVRVNUX1BNTF9JTkRFWCwgUE1MX0hFQURfSU5ERVgpO1xcbiBcXHR9XFxuIFxcbi1cXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKFxcdTAwMjZ2bXgtXFx1MDAzZXZjcHUsIE5VTEwpO1xcbitcXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKHZjcHUsIE5VTEwpO1xcbiBcXG4gXFx0aWYgKHZteF9wdF9tb2RlX2lzX2hvc3RfZ3Vlc3QoKSkge1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNnZteC1cXHUwMDNlcHRfZGVzYywgMCwgc2l6ZW9mKHZteC1cXHUwMDNlcHRfZGVzYykpO1xcbkBAIC00OTk0LDEzICs0OTk1LDEzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gXFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCAwKTtcXG4gXFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTtcXG4gXFxuLVxcdHZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZShcXHUwMDI2dm14LVxcdTAwM2V2Y3B1LCAwKTtcXG4rXFx0dm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKHZjcHUsIDApO1xcbiBcXG4gXFx0aWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkge1xcbiBcXHRcXHR2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUiwgMCk7XFxuLVxcdFxcdGlmIChjcHVfbmVlZF90cHJfc2hhZG93KFxcdTAwMjZ2bXgtXFx1MDAzZXZjcHUpKVxcbitcXHRcXHRpZiAoY3B1X25lZWRfdHByX3NoYWRvdyh2Y3B1KSlcXG4gXFx0XFx0XFx0dm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsXFxuLVxcdFxcdFxcdFxcdCAgICAgX19wYSh2bXgtXFx1MDAzZXZjcHUuYXJjaC5hcGljLVxcdTAwM2VyZWdzKSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgX19wYSh2Y3B1LVxcdTAwM2VhcmNoLmFwaWMtXFx1MDAzZXJlZ3MpKTtcXG4gXFx0XFx0dm1jc193cml0ZTMyKFRQUl9USFJFU0hPTEQsIDApO1xcbiBcXHR9XFxuIFxcbkBAIC01MDExLDcgKzUwMTIsNyBAQCBzdGF0aWMgdm9pZCBfX3ZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gXFxuLVxcdGluaXRfdm1jcyh2bXgpO1xcbitcXHRpbml0X3ZtY3ModmNwdSk7XFxuIFxcbiBcXHRpZiAobmVzdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtXFx1MDAzZWt2bSwgS1ZNX1g4Nl9RVUlSS19TVFVGRl9GRUFUVVJFX01TUlMpKVxcbkBAIC02NDE4LDQ4ICs2NDE5LDI1IEBAIHZvaWQgdm14X2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcXG4gXFx0XFx0KmVycm9yX2NvZGUgPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbitzdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRpZiAodm14LVxcdTAwM2VwbWxfcGcpIHtcXG4tXFx0XFx0X19mcmVlX3BhZ2Uodm14LVxcdTAwM2VwbWxfcGcpO1xcbi1cXHRcXHR2bXgtXFx1MDAzZXBtbF9wZyA9IE5VTEw7XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlKSB7XFxuK1xcdFxcdF9fZnJlZV9wYWdlKHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpO1xcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlID0gTlVMTDtcXG4gXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2bXhfZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XFxuLVxcdHUxNiBwbWxfaWR4LCBwbWxfdGFpbF9pbmRleDtcXG4tXFx0dTY0ICpwbWxfYnVmO1xcbi1cXHRpbnQgaTtcXG4rXFx0dTE2IHBtbF9pZHg7XFxuIFxcbiBcXHRwbWxfaWR4ID0gdm1jc19yZWFkMTYoR1VFU1RfUE1MX0lOREVYKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xcbiBcXHRpZiAocG1sX2lkeCA9PSBQTUxfSEVBRF9JTkRFWClcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHQvKlxcbi1cXHQgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHlcXG4tXFx0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cXG4tXFx0ICovXFxuLVxcdHBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggXFx1MDAzZT0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICsgMTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFBNTCBsb2cgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoZSBDUFUgZmlyc3Qgd3JpdGVzIHRoZSBlbnRyeSA1MTFcXG4tXFx0ICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uXFxuLVxcdCAqXFxuLVxcdCAqIFJlYWQgdGhlIGVudHJpZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4sIHRvIGVuc3VyZSB0aGF0XFxuLVxcdCAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uXFxuLVxcdCAqL1xcbi1cXHRwbWxfYnVmID0gcGFnZV9hZGRyZXNzKHZteC1cXHUwMDNlcG1sX3BnKTtcXG4gXFxuLVxcdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFxcdTAwM2U9IHBtbF90YWlsX2luZGV4OyBpLS0pIHtcXG4tXFx0XFx0dTY0IGdwYTtcXG4tXFxuLVxcdFxcdGdwYSA9IHBtbF9idWZbaV07XFxuLVxcdFxcdFdBUk5fT04oZ3BhIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcXG4tXFx0XFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIGdwYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4tXFx0fVxcbitcXHRrdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1LCBwbWxfaWR4KTtcXG4gXFxuIFxcdC8qIHJlc2V0IFBNTCBpbmRleCAqL1xcbiBcXHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XFxuQEAgLTc2NDgsNyArNzYyNiw3IEBAIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG4gXFx0aWYgKGVuYWJsZV9wbWwpXFxuLVxcdFxcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcXG4rXFx0XFx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTtcXG4gXFx0ZnJlZV92cGlkKHZteC1cXHUwMDNldnBpZCk7XFxuIFxcdG5lc3RlZF92bXhfZnJlZV92Y3B1KHZjcHUpO1xcbiBcXHRmcmVlX2xvYWRlZF92bWNzKHZteC1cXHUwMDNlbG9hZGVkX3ZtY3MpO1xcbkBAIC03NjgwLDggKzc2NTgsOCBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogZm9yIHRoZSBndWVzdCksIGV0Yy5cXG4gXFx0ICovXFxuIFxcdGlmIChlbmFibGVfcG1sKSB7XFxuLVxcdFxcdHZteC1cXHUwMDNlcG1sX3BnID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcXG4tXFx0XFx0aWYgKCF2bXgtXFx1MDAzZXBtbF9wZylcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XFxuK1xcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4gXFx0XFx0XFx0Z290byBmcmVlX3ZwaWQ7XFxuIFxcdH1cXG4gXFxuQEAgLTc3NTIsNyArNzczMCw3IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBmcmVlX3ZtY3M6XFxuIFxcdGZyZWVfbG9hZGVkX3ZtY3Modm14LVxcdTAwM2Vsb2FkZWRfdm1jcyk7XFxuIGZyZWVfcG1sOlxcbi1cXHR2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHZteCk7XFxuK1xcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XFxuIGZyZWVfdnBpZDpcXG4gXFx0ZnJlZV92cGlkKHZteC1cXHUwMDNldnBpZCk7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTg0NDAsMjEgKzg0MTgsMTMgQEAgc3RhdGljIHZvaWQgdm14X3VwZGF0ZV9odl90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yY2VfaW1tZWRpYXRlX2V4aXRcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghZW5hYmxlX3BtbCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGd1YXJkKHZteF92bWNzMDEpKHZjcHUpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xcbi1cXHQgKiBjb2RlLCBidXQgaW4gdGhhdCBjYXNlIGFub3RoZXIgdXBkYXRlIHJlcXVlc3Qgd2lsbCBiZSBtYWRlIGFuZCBzb1xcbi1cXHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cXG4tXFx0ICovXFxuLVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKSlcXG4rXFx0aWYgKGVuYWJsZSlcXG4gXFx0XFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li41ZjUwNWFkMTRkZGUxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTI2NSwxMyArMjY1LDYgQEAgc3RydWN0IHZjcHVfdm14IHtcXG4gXFx0dW5zaWduZWQgaW50IHBsZV93aW5kb3c7XFxuIFxcdGJvb2wgcGxlX3dpbmRvd19kaXJ0eTtcXG4gXFxuLVxcdC8qIFN1cHBvcnQgZm9yIFBNTCAqL1xcbi0jZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1xcdDUxMlxcbi1cXHQvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xcbi0jZGVmaW5lIFBNTF9IRUFEX0lOREVYXFx0XFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxcbi1cXG4tXFx0c3RydWN0IHBhZ2UgKnBtbF9wZztcXG4tXFxuIFxcdC8qIGFwaWMgZGVhZGxpbmUgdmFsdWUgaW4gaG9zdCB0c2MgKi9cXG4gXFx0dTY0IGh2X2RlYWRsaW5lX3RzYztcXG4gXFxuQEAgLTM5Nyw3ICszOTAsNyBAQCB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBcXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcXG4gXFxuIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xcbiBib29sIHZteF9pc192YWxpZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLCBib29sIGhvc3RfaW5pdGlhdGVkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbmluZGV4IDA1NGZkMTRiYjJlMTYuLjQ4MTBmOWIxYjBmYzYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbkBAIC0xMTgsNyArMTE4LDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdm14X3dyaXRlX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7XFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIGludCB2bXhfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYyxcXG4gXFx0XFx0ICAgICBib29sICpleHBpcmVkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtMzk0MSw2ICszOTQxLDM3IEBAIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxcbiBcXHRcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiB9XFxuIFxcbit2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpXFxuK3tcXG4rXFx0dTE2IHBtbF90YWlsX2luZGV4O1xcbitcXHR1NjQgKnBtbF9idWY7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5XFxuK1xcdCAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuXFxuK1xcdCAqL1xcbitcXHRwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4IFxcdTAwM2U9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCArIDE7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExXFxuK1xcdCAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLlxcbitcXHQgKlxcbitcXHQgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdFxcbitcXHQgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLlxcbitcXHQgKi9cXG4rXFx0cG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlKTtcXG4rXFxuK1xcdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFxcdTAwM2U9IHBtbF90YWlsX2luZGV4OyBpLS0pIHtcXG4rXFx0XFx0dTY0IGdwYTtcXG4rXFxuK1xcdFxcdGdwYSA9IHBtbF9idWZbaV07XFxuK1xcdFxcdFdBUk5fT05fT05DRShncGEgXFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xcbitcXHRcXHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9mbHVzaF9wbWxfYnVmZmVyKTtcXG4rXFxuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcXG4ge1xcbkBAIC04MDQyLDYgKzgwNzMsMjEgQEAgc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRrdm1feDg2X2NhbGwoc2V0X2FwaWNfYWNjZXNzX3BhZ2VfYWRkcikodmNwdSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXNcXG4rXFx0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cXG4rXFx0ICogdGhlIGd1ZXN0IHdpbGwgbmV2ZXIgcnVuIHdpdGggYSBzdGFsZSBQTUwgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHRib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGt2bV94ODZfY2FsbCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHZjcHUsIGVuYWJsZSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIENhbGxlZCB3aXRoaW4ga3ZtLVxcdTAwM2VzcmN1IHJlYWQgc2lkZS5cXG4gICogUmV0dXJucyAxIHRvIGxldCB2Y3B1X3J1bigpIGNvbnRpbnVlIHRoZSBndWVzdCBleGVjdXRpb24gbG9vcCB3aXRob3V0XFxuQEAgLTgyMDgsNyArODI1NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdGt2bV94ODZfY2FsbChyZWNhbGNfaW50ZXJjZXB0cykodmNwdSk7XFxuIFxcbiBcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfQ1BVX0RJUlRZX0xPR0dJTkcsIHZjcHUpKVxcbi1cXHRcXHRcXHRrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1KTtcXG4rXFx0XFx0XFx0a3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTtcXG4gXFxuIFxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9QUk9URUNURURfR1VFU1RfU1RBVEUsIHZjcHUpKSB7XFxuIFxcdFxcdFxcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5pbmRleCAwZjU5MTliMDkyZTQ3Li4yZDc0N2MyMDk2NWNlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxcbkBAIC05MDAsNCArOTAwLDExIEBAIGludCBfX19fa3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwbCxcXG4gXFxuIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuKy8qIFN1cHBvcnQgZm9yIFBNTCAqL1xcbisjZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1xcdDUxMlxcbisvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xcbisjZGVmaW5lIFBNTF9IRUFEX0lOREVYXFx0XFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxcbitcXG4rdm9pZCBrdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBwbWxfaWR4KTtcXG4rXFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMDo1My4xODIwNTQyOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5MDU1MTQyOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2ZsdXNoX3BtbF9idWZmZXJcIixcbiAgICBcImt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJwbWxfZnVsbF9pbnRlcmNlcHRpb25cIixcbiAgICBcIm5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsXCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbFwiLFxuICAgIFwidm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ1wiLFxuICAgIFwidm14X2ZsdXNoX3BtbF9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgZGlydHkgbG9nZ2luZyBzdXBwb3J0IGZvciBBTUQgU1ZNIGFuZCByZWZhY3RvcnMgdGhlIHNoYXJlZCBQTUwgYnVmZmVyIGZsdXNoaW5nIGFuZCBkaXJ0eSBsb2dnaW5nIHN0YXRlIG1hY2hpbmUgYWNyb3NzIHg4NiBLVk0sIEludGVsIFZNWCwgYW5kIEFNRCBTVk0uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29kZSBwYXRocyBpbiBLVk0gYW5kIGFmZmVjdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIGV4aXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYThiNTMxMjc3OWRkNjRkYmM2MzExYTIzNmZkMjYwYTM0OTM4MWRkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6MTA6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uY2JmY2M2NmExOGU5YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC0yMzgsNiArMjM4LDcgQEBcbiAvLyBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9QVlVOTE9DSyAgICAgICAgICAgICAgICggOCozMisyMCkgLyogUFYgdW5sb2NrIGZ1bmN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9WQ1BVUFJFRU1QVFx0XHQoIDgqMzIrMjEpIC8qIFBWIHZjcHVfaXNfcHJlZW1wdGVkIGZ1bmN0aW9uICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9URFhfR1VFU1RcdFx0KCA4KjMyKzIyKSAvKiBcInRkeF9ndWVzdFwiIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIEd1ZXN0ICovXG4rI2RlZmluZSBYODZfRkVBVFVSRV9QTUxcdFx0XHQoIDgqMzIrMjMpIC8qIEFNRCBQYWdlIE1vZGlmaWNhdGlvbiBsb2dnaW5nICovXG4gXG4gLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDc6MCAoRUJYKSwgd29yZCA5ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9GU0dTQkFTRVx0XHQoIDkqMzIrIDApIC8qIFwiZnNnc2Jhc2VcIiBSREZTQkFTRSwgV1JGU0JBU0UsIFJER1NCQVNFLCBXUkdTQkFTRSBpbnN0cnVjdGlvbnMqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCAzYWY3Mzk1YzI0MzBhLi4yZGViZjYyOTQyOTA5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTc4OSw2ICs3ODksOCBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHQgKi9cbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBtbXVfZXh0ZXJuYWxfc3B0X2NhY2hlO1xuIFxuK1x0c3RydWN0IHBhZ2UgKnBtbF9wYWdlO1xuK1xuIFx0LypcbiBcdCAqIFFFTVUgdXNlcnNwYWNlIGFuZCB0aGUgZ3Vlc3QgZWFjaCBoYXZlIHRoZWlyIG93biBGUFUgc3RhdGUuXG4gXHQgKiBJbiB2Y3B1X3J1biwgd2Ugc3dpdGNoIGJldHdlZW4gdGhlIHVzZXIgYW5kIGd1ZXN0IEZQVSBjb250ZXh0cy5cbkBAIC0xNjcwLDcgKzE2NzIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0XHRcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKTtcbiBcdHZvaWQgKCpoYW5kbGVfZXhpdF9pcnFvZmYpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4tXHR2b2lkICgqdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK1x0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSk7XG4gXG4gXHR2b2lkICgqdmNwdV9ibG9ja2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdHZvaWQgKCp2Y3B1X3VuYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uZTBhNzU0OWE3YzcyNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTE2NSw3ICsxNjUsMTAgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xuIFx0dTggcmVzZXJ2ZWRfOVsyMl07XG4gXHR1NjQgYWxsb3dlZF9zZXZfZmVhdHVyZXM7XHQvKiBPZmZzZXQgMHgxMzggKi9cbiBcdHU2NCBndWVzdF9zZXZfZmVhdHVyZXM7XHRcdC8qIE9mZnNldCAweDE0MCAqL1xuLVx0dTggcmVzZXJ2ZWRfMTBbNjY0XTtcbitcdHU4IHJlc2VydmVkXzEwWzEyOF07XG4rXHR1NjQgcG1sX2FkZHI7XHRcdFx0LyogT2Zmc2V0IDB4MWM4ICovXG4rXHR1MTYgcG1sX2luZGV4O1x0XHRcdC8qIE9mZnNldCAweDFkMCAqL1xuK1x0dTggcmVzZXJ2ZWRfMTFbNTI2XTtcbiBcdC8qXG4gXHQgKiBPZmZzZXQgMHgzZTAsIDMyIGJ5dGVzIHJlc2VydmVkXG4gXHQgKiBmb3IgdXNlIGJ5IGh5cGVydmlzb3Ivc29mdHdhcmUuXG5AQCAtMjQwLDEwICsyNDMsMTEgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEge1xuICNkZWZpbmUgU1ZNX0lPSU9fU0laRV9NQVNLICg3IFx1MDAzY1x1MDAzYyBTVk1fSU9JT19TSVpFX1NISUZUKVxuICNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0lPSU9fQVNJWkVfU0hJRlQpXG4gXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcdFx0QklUKDApXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWXHRcdEJJVCgxKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1x0QklUKDIpXG4tI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0QklUKDMpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfTlBcdFx0QklUX1VMTCgwKVxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVlx0XHRCSVRfVUxMKDEpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfU0VWX0VTXHRcdEJJVF9VTEwoMilcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9HTUVUXHRcdEJJVF9VTEwoMylcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9QTUxcdFx0QklUX1VMTCgxMSlcbiBcbiAjZGVmaW5lIFNWTV9NSVNDMl9FTkFCTEVfVl9MQlJcdEJJVF9VTEwoMClcbiAjZGVmaW5lIFNWTV9NSVNDMl9FTkFCTEVfVl9WTUxPQURfVk1TQVZFXHRCSVRfVUxMKDEpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmhcbmluZGV4IDAxMGE0NWM5ZjYxNDcuLmU4MDY3NjE4NTA5MjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXG5AQCAtMTAxLDYgKzEwMSw3IEBAXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX0lOQ09NUExFVEVfSVBJXHRcdDB4NDAxXG4gI2RlZmluZSBTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXHQweDQwMlxuICNkZWZpbmUgU1ZNX0VYSVRfVk1HRVhJVCAgICAgICAweDQwM1xuKyNkZWZpbmUgU1ZNX0VYSVRfUE1MX0ZVTExcdDB4NDA3XG4gXG4gLyogU0VWLUVTIHNvZnR3YXJlLWRlZmluZWQgVk1HRVhJVCBldmVudHMgKi9cbiAjZGVmaW5lIFNWTV9WTUdFWElUX01NSU9fUkVBRFx0XHRcdDB4ODAwMDAwMDF1bGxcbkBAIC0yMzYsNiArMjM3LDcgQEBcbiBcdHsgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSSxcdFx0XCJhdmljX2luY29tcGxldGVfaXBpXCIgfSwgXFxcbiBcdHsgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTUywgICBcImF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NcIiB9LCBcXFxuIFx0eyBTVk1fRVhJVF9WTUdFWElULFx0XHRcInZtZ2V4aXRcIiB9LCBcXFxuK1x0eyBTVk1fRVhJVF9QTUxfRlVMTCxcdFx0XCJwbWxfZnVsbFwiIH0sIFxcXG4gXHR7IFNWTV9WTUdFWElUX01NSU9fUkVBRCxcdFwidm1nZXhpdF9tbWlvX3JlYWRcIiB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9NTUlPX1dSSVRFLFx0XCJ2bWdleGl0X21taW9fd3JpdGVcIiB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9OTUlfQ09NUExFVEUsXHRcInZtZ2V4aXRfbm1pX2NvbXBsZXRlXCIgfSwgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuaW5kZXggODY2NWE2NDc0ODA2Yy4uYjE4Y2M5Yzg4ZGQ1NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbkBAIC01NSw2ICs1NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0ZBU1RfQ1BQQyxcdFx0Q1BVSURfRURYLCAxNSwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DUFBDX1BFUkZfUFJJTyxcdFx0Q1BVSURfRURYLCAxNiwgMHg4MDAwMDAwNywgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9NQkEsXHRcdFx0Q1BVSURfRUJYLCAgNiwgMHg4MDAwMDAwOCwgMCB9LFxuK1x0eyBYODZfRkVBVFVSRV9QTUwsXHRcdFx0Q1BVSURfRUNYLCAgNCwgMHg4MDAwMDAwYSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9YMkFWSUNfRVhULFx0XHRDUFVJRF9FQ1gsICA2LCAweDgwMDAwMDBhLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0NPSEVSRU5DWV9TRldfTk8sXHRcdENQVUlEX0VCWCwgMzEsIDB4ODAwMDAwMWYsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfU01CQSxcdFx0XHRDUFVJRF9FQlgsICAyLCAweDgwMDAwMDIwLCAwIH0sXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbmluZGV4IDczZjM3YjA1MGQwYTAuLmRhNDE3YzRjNTkxNTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5AQCAtOTAxLDYgKzkwMSwxMyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHZtY2IwMi1cdTAwM2Vjb250cm9sLm1zcnBtX2Jhc2VfcGEgPSB2bWNiMDEtXHUwMDNlY29udHJvbC5tc3JwbV9iYXNlX3BhO1xuIFx0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9QRVJNX01BUCk7XG4gXG4rXHQvKlxuK1x0ICogUE1MIGlzIG5ldmVyIGVuYWJsZWQgaW4gaGFyZHdhcmUgZm9yIEwyLiAgTWFrZSBzdXJlIHRoYXQgYW5cbitcdCAqIHVuZXhwZWN0ZWQgUE1MIHdyaXRlIHdvdWxkIHRyaWdnZXIgYSBQTUxfRlVMTCBWTS1FeGl0LlxuK1x0ICovXG4rXHRpZiAocG1sKVxuK1x0XHR2bWNiMDItXHUwMDNlY29udHJvbC5wbWxfaW5kZXggPSAtMTtcbitcbiBcdC8qXG4gXHQgKiBTdGFzaCB2bWNiMDIncyBjb3VudGVyIGlmIHRoZSBndWVzdCBoYXNuJ3QgbW92ZWQgcGFzdCB0aGUgZ3VpbHR5XG4gXHQgKiBpbnN0cnVjdGlvbjsgb3RoZXJ3aXNlLCByZXNldCB0aGUgY291bnRlciB0byAnMCcuXG5AQCAtMTgyMCw2ICsxODI3LDEzIEBAIGludCBuZXN0ZWRfc3ZtX2V4aXRfc3BlY2lhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdFx0aWYgKG5lc3RlZF9zdm1faXNfbDJfdGxiX2ZsdXNoX2hjYWxsKHZjcHUpKVxuIFx0XHRcdHJldHVybiBORVNURURfRVhJVF9IT1NUO1xuIFx0XHRicmVhaztcbitcdGNhc2UgU1ZNX0VYSVRfUE1MX0ZVTEw6XG4rXHRcdC8qXG4rXHRcdCAqIEFsbCBQTUwgZnVsbCBleGl0cyBhcmUgaGFuZGxlZCBieSBLVk0uICBLVk0gZW11bGF0ZXMgUE1MIGluXG4rXHRcdCAqIHNvZnR3YXJlIGZvciBMMSwgYnV0IG5ldmVyIGVuYWJsZXMgUE1MIGluIGhhcmR3YXJlIG9uIGJlaGFsZlxuK1x0XHQgKiBvZiBMMS5cbitcdFx0ICovXG4rXHRcdHJldHVybiBORVNURURfRVhJVF9IT1NUO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmNmZTk5MGY4MDUwNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDk5NCw3ICs0OTk0LDcgQEAgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxuIFx0ICogQWxsb2NhdGUgYW4gU05QLXNhZmUgcGFnZSB0byB3b3JrYXJvdW5kIHRoZSBTTlAgZXJyYXR1bSB3aGVyZVxuIFx0ICogdGhlIENQVSB3aWxsIGluY29ycmVjdGx5IHNpZ25hbCBhbiBSTVAgdmlvbGF0aW9uICNQRiBpZiBhXG4gXHQgKiBodWdlcGFnZSAoMk1CIG9yIDFHQikgY29sbGlkZXMgd2l0aCB0aGUgUk1QIGVudHJ5IG9mIGFcbi1cdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIG9yIEFWSUMgYmFja2luZyBwYWdlLlxuK1x0ICogMk1CLWFsaWduZWQgVk1DQiwgVk1TQSwgUE1MIG9yIEFWSUMgYmFja2luZyBwYWdlLlxuIFx0ICpcbiBcdCAqIEFsbG9jYXRlIG9uZSBleHRyYSBwYWdlLCBjaG9vc2UgYSBwYWdlIHdoaWNoIGlzIG5vdFxuIFx0ICogMk1CLWFsaWduZWQsIGFuZCBmcmVlIHRoZSBvdGhlci5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggN2Q1OWQzMDFlMWU1NC4uOTUwYzI1MGE3N2I1MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0xNzksNiArMTc5LDkgQEAgbW9kdWxlX3BhcmFtKHZubWksIGJvb2wsIDA0NDQpO1xuIFxuIG1vZHVsZV9wYXJhbShlbmFibGVfbWVkaWF0ZWRfcG11LCBib29sLCAwNDQ0KTtcbiBcbitib29sIF9fcm9fYWZ0ZXJfaW5pdCBwbWwgPSB0cnVlO1xuK21vZHVsZV9wYXJhbShwbWwsIGJvb2wsIDA0NDQpO1xuK1xuIHN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCBzdm1fZ3BfZXJyYXR1bV9pbnRlcmNlcHQgPSB0cnVlO1xuIFxuIHN0YXRpYyB1OCByc21faW5zX2J5dGVzW10gPSBcIlxceDBmXFx4YWFcIjtcbkBAIC0xMjY3LDYgKzEyNzAsMjMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KVxuIFx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4gXHRcdHN2bV9zZXRfaW50ZXJjZXB0KHN2bSwgSU5URVJDRVBUX0JVU0xPQ0spO1xuIFxuK1x0aWYgKHBtbCkge1xuK1x0XHQvKlxuK1x0XHQgKiBQb3B1bGF0ZSB0aGUgcGFnZSBhZGRyZXNzIGFuZCBpbmRleCBoZXJlLCBQTUwgaXMgZW5hYmxlZFxuK1x0XHQgKiB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgZW5hYmxlZCBvbiB0aGUgbWVtc2xvdCB0aHJvdWdoXG4rXHRcdCAqIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoKVxuK1x0XHQgKi9cbitcdFx0Y29udHJvbC1cdTAwM2VwbWxfYWRkciA9ICh1NjQpX19zbWVfc2V0KHBhZ2VfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpKTtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIFZNQ0IgY29udHJvbCBhcmVhIHJlbWFpbnMgdmFsaWQgYWZ0ZXIgYW4gaW50ZXJjZXB0ZWQgU0hVVERPV05cbitcdFx0ICogKEFNRCBBUE0gUmV2IDMuNDUrKSwgc28gb25seSBpbml0aWFsaXplIFBNTCBpbmRleCBvbiByZXNldCB0byBhdm9pZFxuK1x0XHQgKiBkaXNjYXJkaW5nIGFscmVhZHktbG9nZ2VkIGVudHJpZXMgdGhhdCBoYXZlbid0IGJlZW4gZmx1c2hlZC5cbitcdFx0ICovXG4rXHRcdGlmICghaW5pdF9ldmVudClcbitcdFx0XHRjb250cm9sLVx1MDAzZXBtbF9pbmRleCA9IFBNTF9IRUFEX0lOREVYO1xuK1x0fVxuK1xuIFx0aWYgKGlzX3Nldl9ndWVzdCh2Y3B1KSlcbiBcdFx0c2V2X2luaXRfdm1jYihzdm0sIGluaXRfZXZlbnQpO1xuIFxuQEAgLTEzMjYsOSArMTM0NiwxNSBAQCBzdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIXZtY2IwMV9wYWdlKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGlmIChwbWwpIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xuK1x0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbitcdFx0XHRnb3RvIGVycm9yX2ZyZWVfdm1jYl9wYWdlO1xuK1x0fVxuK1xuIFx0ZXJyID0gc2V2X3ZjcHVfY3JlYXRlKHZjcHUpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcbitcdFx0Z290byBlcnJvcl9mcmVlX3BtbF9wYWdlO1xuIFxuIFx0ZXJyID0gYXZpY19pbml0X3ZjcHUoc3ZtKTtcbiBcdGlmIChlcnIpXG5AQCAtMTM1Myw2ICsxMzc5LDkgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGVycm9yX2ZyZWVfc2V2OlxuIFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcbitlcnJvcl9mcmVlX3BtbF9wYWdlOlxuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbitcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbiBlcnJvcl9mcmVlX3ZtY2JfcGFnZTpcbiBcdF9fZnJlZV9wYWdlKHZtY2IwMV9wYWdlKTtcbiBvdXQ6XG5AQCAtMTM3MCw2ICsxMzk5LDkgQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRzZXZfZnJlZV92Y3B1KHZjcHUpO1xuIFxuK1x0aWYgKHBtbCBcdTAwMjZcdTAwMjYgdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuK1x0XHRfX2ZyZWVfcGFnZSh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpO1xuK1xuIFx0X19mcmVlX3BhZ2UoX19zbWVfcGFfdG9fcGFnZShzdm0tXHUwMDNldm1jYjAxLnBhKSk7XG4gXHRzdm1fdmNwdV9mcmVlX21zcnBtKHN2bS1cdTAwM2Vtc3JwbSk7XG4gfVxuQEAgLTMzNDQsNiArMzM3Niw0NSBAQCBzdGF0aWMgaW50IHZtbWNhbGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBrdm1fZW11bGF0ZV9oeXBlcmNhbGwodmNwdSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdHN0cnVjdCB2bWNiICp2bWNiMDEgPSBzdm0tXHUwMDNldm1jYjAxLnB0cjtcbitcbitcdGlmIChlbmFibGUpXG4rXHRcdHZtY2IwMS1cdTAwM2Vjb250cm9sLm1pc2NfY3RsIHw9IFNWTV9NSVNDX0VOQUJMRV9QTUw7XG4rXHRlbHNlXG4rXHRcdHZtY2IwMS1cdTAwM2Vjb250cm9sLm1pc2NfY3RsIFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9QTUw7XG4rXG4rXHR2bWNiX21hcmtfZGlydHkodm1jYjAxLCBWTUNCX05QVCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHN2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbitcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG4rXG4rXHQvKiBEbyBub3RoaW5nIGlmIFBNTCBidWZmZXIgaXMgZW1wdHkgKi9cbitcdGlmIChjb250cm9sLVx1MDAzZXBtbF9pbmRleCA9PSBQTUxfSEVBRF9JTkRFWClcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgY29udHJvbC1cdTAwM2VwbWxfaW5kZXgpO1xuK1xuK1x0LyogUmVzZXQgdGhlIFBNTCBpbmRleCAqL1xuK1x0Y29udHJvbC1cdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcbit9XG4rXG4rc3RhdGljIGludCBwbWxfZnVsbF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LVx1MDAzZXZjcHVfaWQpO1xuK1xuK1x0LypcbitcdCAqIFBNTCBidWZmZXIgaXMgYWxyZWFkeSBmbHVzaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3ZtX2hhbmRsZV9leGl0KCkuXG4rXHQgKiBOb3RoaW5nIHRvIGRvIGhlcmUuXG4rXHQgKi9cbitcdHJldHVybiAxO1xuK31cbitcbiBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiBcdFtTVk1fRVhJVF9SRUFEX0NSMF1cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbiBcdFtTVk1fRVhJVF9SRUFEX0NSM11cdFx0XHQ9IGNyX2ludGVyY2VwdGlvbixcbkBAIC0zNDIxLDYgKzM0OTIsNyBAQCBzdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4gXHRbU1ZNX0VYSVRfVk1HRVhJVF1cdFx0XHQ9IHNldl9oYW5kbGVfdm1nZXhpdCxcbiAjZW5kaWZcbitcdFtTVk1fRVhJVF9QTUxfRlVMTF1cdFx0XHQ9IHBtbF9mdWxsX2ludGVyY2VwdGlvbixcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMzQ3MCw4ICszNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRwcl9lcnIoXCIlLTIwcyUwMTZsbHhcXG5cIiwgXCJleGl0X2luZm8yOlwiLCBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18yKTtcbiBcdHByX2VycihcIiUtMjBzJTA4eFxcblwiLCBcImV4aXRfaW50X2luZm86XCIsIGNvbnRyb2wtXHUwMDNlZXhpdF9pbnRfaW5mbyk7XG4gXHRwcl9lcnIoXCIlLTIwcyUwOHhcXG5cIiwgXCJleGl0X2ludF9pbmZvX2VycjpcIiwgY29udHJvbC1cdTAwM2VleGl0X2ludF9pbmZvX2Vycik7XG4tXHRwcl9lcnIoXCIlLTIwcyVsbGRcXG5cIiwgXCJtaXNjX2N0bDpcIiwgY29udHJvbC1cdTAwM2VtaXNjX2N0bCk7XG4rXHRwcl9lcnIoXCIlLTIwcyVsbHhcXG5cIiwgXCJtaXNjX2N0bDpcIiwgY29udHJvbC1cdTAwM2VtaXNjX2N0bCk7XG4gXHRwcl9lcnIoXCIlLTIwcyUwMTZsbHhcXG5cIiwgXCJuZXN0ZWRfY3IzOlwiLCBjb250cm9sLVx1MDAzZW5lc3RlZF9jcjMpO1xuK1xuK1x0aWYgKHBtbCkge1xuK1x0XHRwcl9lcnIoXCIlLTIwcyUwMTZsbHhcXG5cIiwgXCJwbWxfYWRkcjpcIiwgY29udHJvbC1cdTAwM2VwbWxfYWRkcik7XG4rXHRcdHByX2VycihcIiUtMjBzJTA0eFxcblwiLCBcInBtbF9pbmRleDpcIiwgY29udHJvbC1cdTAwM2VwbWxfaW5kZXgpO1xuK1x0fVxuK1xuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwiYXZpY192YXBpY19iYXI6XCIsIGNvbnRyb2wtXHUwMDNlYXZpY192YXBpY19iYXIpO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwiZ2hjYjpcIiwgY29udHJvbC1cdTAwM2VnaGNiX2dwYSk7XG4gXHRwcl9lcnIoXCIlLTIwcyUwOHhcXG5cIiwgXCJldmVudF9pbmo6XCIsIGNvbnRyb2wtXHUwMDNlZXZlbnRfaW5qKTtcbkBAIC0zNjQ5LDYgKzM3MjcsMTMgQEAgaW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxuIFx0ICAgICh1NjQpZXhpdF9jb2RlICE9IF9fZXhpdF9jb2RlKVxuIFx0XHRnb3RvIHVuZXhwZWN0ZWRfdm1leGl0O1xuIFxuK1x0LypcbitcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIHdoZW4gcnVubmluZyBMMiwgYmFpbCBpbW1lZGlhdGVseSBpZiBhIFBNTCBmdWxsXG4rXHQgKiBleGl0IG9jY3VycyBhcyBzb21ldGhpbmcgaXMgaG9ycmlibHkgd3JvbmcuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfUE1MX0ZVTEwpKVxuK1x0XHRnb3RvIHVuZXhwZWN0ZWRfdm1leGl0O1xuK1xuICNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkVcbiBcdGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfTVNSKVxuIFx0XHRyZXR1cm4gbXNyX2ludGVyY2VwdGlvbih2Y3B1KTtcbkBAIC0zNzE3LDYgKzM4MDIsMTQgQEAgc3RhdGljIGludCBzdm1faGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fcnVuICprdm1fcnVuID0gdmNwdS1cdTAwM2VydW47XG4gXG4rXHQvKlxuK1x0ICogT3Bwb3J0dW5pc3RpY2FsbHkgZmx1c2ggdGhlIFBNTCBidWZmZXIgb24gVk0gZXhpdC4gVGhpcyBrZWVwcyB0aGVcbitcdCAqIGRpcnR5IGJpdG1hcCBjdXJyZW50IGJ5IHByb2Nlc3NpbmcgbG9nZ2VkIEdQQXMgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3JcbitcdCAqIFBNTF9GVUxMIGV4aXQuXG4rXHQgKi9cbitcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSBcdTAwMjZcdTAwMjYgIWlzX2d1ZXN0X21vZGUodmNwdSkpXG4rXHRcdHN2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUpO1xuK1xuIFx0aWYgKHVubGlrZWx5KGV4aXRfZmFzdHBhdGggPT0gRVhJVF9GQVNUUEFUSF9FWElUX1VTRVJTUEFDRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTUzMTEsNiArNTQwNCw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZtX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFx0aWYgKCFwYXVzZV9maWx0ZXJfY291bnQgfHwgIXBhdXNlX2ZpbHRlcl90aHJlc2gpXG4gXHRcdGt2bV9kaXNhYmxlX2V4aXRzKGt2bSwgS1ZNX1g4Nl9ESVNBQkxFX0VYSVRTX1BBVVNFKTtcbiBcbitcdGlmIChwbWwpXG4rXHRcdGt2bS1cdTAwM2VhcmNoLmNwdV9kaXJ0eV9sb2dfc2l6ZSA9IFBNTF9MT0dfTlJfRU5UUklFUztcbitcbiBcdHN2bV9zcnNvX3ZtX2luaXQoKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01NDI5LDYgKzU1MjUsOCBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5jaGVja19pbnRlcmNlcHQgPSBzdm1fY2hlY2tfaW50ZXJjZXB0LFxuIFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHN2bV9oYW5kbGVfZXhpdF9pcnFvZmYsXG4gXG4rXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyxcbitcbiBcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcbiBcdC5waV91cGRhdGVfaXJ0ZSA9IGF2aWNfcGlfdXBkYXRlX2lydGUsXG4gXHQuc2V0dXBfbWNlID0gc3ZtX3NldHVwX21jZSxcbkBAIC01Njg5LDYgKzU3ODcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHRucmlwcyA9IG5yaXBzIFx1MDAyNlx1MDAyNiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlJJUFMpO1xuIFxuK1x0cG1sID0gcG1sIFx1MDAyNlx1MDAyNiBucHRfZW5hYmxlZCBcdTAwMjZcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9QTUwpO1xuK1x0aWYgKHBtbClcbitcdFx0cHJfaW5mbyhcIlBhZ2UgbW9kaWZpY2F0aW9uIGxvZ2dpbmcgc3VwcG9ydGVkXFxuXCIpO1xuK1xuIFx0aWYgKGxicnYpIHtcbiBcdFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTEJSVikpXG4gXHRcdFx0bGJydiA9IGZhbHNlO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCBlOTU4OTQzYjgxNjI3Li5mNTY2ZGFlNDRiYjBmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTUzLDYgKzUzLDcgQEAgZXh0ZXJuIGludCB2Z2lmO1xuIGV4dGVybiBib29sIGludGVyY2VwdF9zbWk7XG4gZXh0ZXJuIGJvb2wgdm5taTtcbiBleHRlcm4gaW50IGxicnY7XG4rZXh0ZXJuIGJvb2wgcG1sO1xuIFxuIGV4dGVybiBpbnQgdHNjX2F1eF91cmV0X3Nsb3QgX19yb19hZnRlcl9pbml0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDRjNTJhYjhkMDc4NjkuLmU3N2I1YjczMTI3NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIHZvaWQgdnRfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdHZteF92Y3B1X2xvYWQodmNwdSwgY3B1KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGVuYWJsZSlcbiB7XG4gXHQvKlxuIFx0ICogQmFzaWMgVERYIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSBQTUwuIEtWTSBkb2VzIG5vdCBlbmFibGUgUE1MIGluXG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuK1x0dm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1LCBlbmFibGUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2dF9wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDYxMmFiMDdkNDEwMGYuLmIzNzY4YjRiMjEyZmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNDg4MywxMCArNDg4MywxMSBAQCBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiAjZGVmaW5lIFZNWF9YU1NfRVhJVF9CSVRNQVAgMFxuIFxuLXN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbitzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm0gKmt2bSA9IHZteC1cdTAwM2V2Y3B1Lmt2bTtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0c3RydWN0IGt2bV92bXggKmt2bV92bXggPSB0b19rdm1fdm14KGt2bSk7XG4rXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcbiBcdGlmIChuZXN0ZWQpXG4gXHRcdG5lc3RlZF92bXhfc2V0X3ZtY3Nfc2hhZG93aW5nX2JpdG1hcCgpO1xuQEAgLTQ5MTEsNyArNDkxMiw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdGlmIChjcHVfaGFzX3RlcnRpYXJ5X2V4ZWNfY3RybHMoKSlcbiBcdFx0dGVydGlhcnlfZXhlY19jb250cm9sc19zZXQodm14LCB2bXhfdGVydGlhcnlfZXhlY19jb250cm9sKHZteCkpO1xuIFxuLVx0aWYgKGVuYWJsZV9hcGljdiBcdTAwMjZcdTAwMjYgbGFwaWNfaW5fa2VybmVsKFx1MDAyNnZteC1cdTAwM2V2Y3B1KSkge1xuK1x0aWYgKGVuYWJsZV9hcGljdiBcdTAwMjZcdTAwMjYgbGFwaWNfaW5fa2VybmVsKHZjcHUpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAwLCAwKTtcbiBcdFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDEsIDApO1xuIFx0XHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMiwgMCk7XG5AQCAtNDkyMyw3ICs0OTI0LDcgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0XHR2bWNzX3dyaXRlNjQoUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKChcdTAwMjZ2bXgtXHUwMDNldnQucGlfZGVzYykpKTtcbiBcdH1cbiBcbi1cdGlmICh2bXhfY2FuX3VzZV9pcGl2KFx1MDAyNnZteC1cdTAwM2V2Y3B1KSkge1xuK1x0aWYgKHZteF9jYW5fdXNlX2lwaXYodmNwdSkpIHtcbiBcdFx0dm1jc193cml0ZTY0KFBJRF9QT0lOVEVSX1RBQkxFLCBfX3BhKGt2bV92bXgtXHUwMDNlcGlkX3RhYmxlKSk7XG4gXHRcdHZtY3Nfd3JpdGUxNihMQVNUX1BJRF9QT0lOVEVSX0lOREVYLCBrdm0tXHUwMDNlYXJjaC5tYXhfdmNwdV9pZHMgLSAxKTtcbiBcdH1cbkBAIC00OTU4LDE1ICs0OTU5LDE1IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdHZtY3Nfd3JpdGU2NChWTV9FTlRSWV9NU1JfTE9BRF9BRERSLCBfX3BhKHZteC1cdTAwM2Vtc3JfYXV0b2xvYWQuZ3Vlc3QudmFsKSk7XG4gXG4gXHRpZiAodm1jc19jb25maWcudm1lbnRyeV9jdHJsIFx1MDAyNiBWTV9FTlRSWV9MT0FEX0lBMzJfUEFUKVxuLVx0XHR2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9QQVQsIHZteC1cdTAwM2V2Y3B1LmFyY2gucGF0KTtcbitcdFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2Y3B1LVx1MDAzZWFyY2gucGF0KTtcbiBcbiBcdHZtX2V4aXRfY29udHJvbHNfc2V0KHZteCwgdm14X2dldF9pbml0aWFsX3ZtZXhpdF9jdHJsKCkpO1xuIFxuIFx0LyogMjIuMi4xLCAyMC44LjEgKi9cbiBcdHZtX2VudHJ5X2NvbnRyb2xzX3NldCh2bXgsIHZteF9nZXRfaW5pdGlhbF92bWVudHJ5X2N0cmwoKSk7XG4gXG4tXHR2bXgtXHUwMDNldmNwdS5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7XG4tXHR2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dm14LVx1MDAzZXZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyk7XG4rXHR2Y3B1LVx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSB2bXhfbDFfZ3Vlc3Rfb3duZWRfY3IwX2JpdHMoKTtcbitcdHZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52Y3B1LVx1MDAzZWFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpO1xuIFxuIFx0c2V0X2NyNF9ndWVzdF9ob3N0X21hc2sodm14KTtcbiBcbkBAIC00OTc3LDExICs0OTc4LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdFx0dm1jc193cml0ZTY0KFhTU19FWElUX0JJVE1BUCwgVk1YX1hTU19FWElUX0JJVE1BUCk7XG4gXG4gXHRpZiAoZW5hYmxlX3BtbCkge1xuLVx0XHR2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2bXgtXHUwMDNlcG1sX3BnKSk7XG4rXHRcdHZtY3Nfd3JpdGU2NChQTUxfQUREUkVTUywgcGFnZV90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSkpO1xuIFx0XHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XG4gXHR9XG4gXG4tXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKFx1MDAyNnZteC1cdTAwM2V2Y3B1LCBOVUxMKTtcbitcdHZteF93cml0ZV9lbmNsc19iaXRtYXAodmNwdSwgTlVMTCk7XG4gXG4gXHRpZiAodm14X3B0X21vZGVfaXNfaG9zdF9ndWVzdCgpKSB7XG4gXHRcdG1lbXNldChcdTAwMjZ2bXgtXHUwMDNlcHRfZGVzYywgMCwgc2l6ZW9mKHZteC1cdTAwM2VwdF9kZXNjKSk7XG5AQCAtNDk5NCwxMyArNDk5NSwxMyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHR2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FU1AsIDApO1xuIFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTtcbiBcbi1cdHZteF9ndWVzdF9kZWJ1Z2N0bF93cml0ZShcdTAwMjZ2bXgtXHUwMDNldmNwdSwgMCk7XG4rXHR2bXhfZ3Vlc3RfZGVidWdjdGxfd3JpdGUodmNwdSwgMCk7XG4gXG4gXHRpZiAoY3B1X2hhc192bXhfdHByX3NoYWRvdygpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChWSVJUVUFMX0FQSUNfUEFHRV9BRERSLCAwKTtcbi1cdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3coXHUwMDI2dm14LVx1MDAzZXZjcHUpKVxuK1x0XHRpZiAoY3B1X25lZWRfdHByX3NoYWRvdyh2Y3B1KSlcbiBcdFx0XHR2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUixcbi1cdFx0XHRcdCAgICAgX19wYSh2bXgtXHUwMDNldmNwdS5hcmNoLmFwaWMtXHUwMDNlcmVncykpO1xuK1x0XHRcdFx0ICAgICBfX3BhKHZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbiBcdFx0dm1jc193cml0ZTMyKFRQUl9USFJFU0hPTEQsIDApO1xuIFx0fVxuIFxuQEAgLTUwMTEsNyArNTAxMiw3IEBAIHN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuLVx0aW5pdF92bWNzKHZteCk7XG4rXHRpbml0X3ZtY3ModmNwdSk7XG4gXG4gXHRpZiAobmVzdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9jaGVja19oYXNfcXVpcmsodmNwdS1cdTAwM2Vrdm0sIEtWTV9YODZfUVVJUktfU1RVRkZfRkVBVFVSRV9NU1JTKSlcbkBAIC02NDE4LDQ4ICs2NDE5LDI1IEBAIHZvaWQgdm14X2dldF9lbnRyeV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICppbnRyX2luZm8sIHUzMiAqZXJyb3JfY29kZSlcbiBcdFx0KmVycm9yX2NvZGUgPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuK3N0YXRpYyB2b2lkIHZteF9kZXN0cm95X3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGlmICh2bXgtXHUwMDNlcG1sX3BnKSB7XG4tXHRcdF9fZnJlZV9wYWdlKHZteC1cdTAwM2VwbWxfcGcpO1xuLVx0XHR2bXgtXHUwMDNlcG1sX3BnID0gTlVMTDtcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpIHtcbitcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gTlVMTDtcbiBcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgdm14X2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dTE2IHBtbF9pZHgsIHBtbF90YWlsX2luZGV4O1xuLVx0dTY0ICpwbWxfYnVmO1xuLVx0aW50IGk7XG4rXHR1MTYgcG1sX2lkeDtcbiBcbiBcdHBtbF9pZHggPSB2bWNzX3JlYWQxNihHVUVTVF9QTUxfSU5ERVgpO1xuIFxuIFx0LyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovXG4gXHRpZiAocG1sX2lkeCA9PSBQTUxfSEVBRF9JTkRFWClcbiBcdFx0cmV0dXJuO1xuLVx0Lypcbi1cdCAqIFBNTCBpbmRleCBhbHdheXMgcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBQTUwgYnVmZmVyIGVudGl0eVxuLVx0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cbi1cdCAqL1xuLVx0cG1sX3RhaWxfaW5kZXggPSAocG1sX2lkeCBcdTAwM2U9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCArIDE7XG4tXG4tXHQvKlxuLVx0ICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMVxuLVx0ICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uXG4tXHQgKlxuLVx0ICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXRcbi1cdCAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uXG4tXHQgKi9cbi1cdHBtbF9idWYgPSBwYWdlX2FkZHJlc3Modm14LVx1MDAzZXBtbF9wZyk7XG4gXG4tXHRmb3IgKGkgPSBQTUxfSEVBRF9JTkRFWDsgaSBcdTAwM2U9IHBtbF90YWlsX2luZGV4OyBpLS0pIHtcbi1cdFx0dTY0IGdwYTtcbi1cbi1cdFx0Z3BhID0gcG1sX2J1ZltpXTtcbi1cdFx0V0FSTl9PTihncGEgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSk7XG4tXHRcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0fVxuK1x0a3ZtX2ZsdXNoX3BtbF9idWZmZXIodmNwdSwgcG1sX2lkeCk7XG4gXG4gXHQvKiByZXNldCBQTUwgaW5kZXggKi9cbiBcdHZtY3Nfd3JpdGUxNihHVUVTVF9QTUxfSU5ERVgsIFBNTF9IRUFEX0lOREVYKTtcbkBAIC03NjQ4LDcgKzc2MjYsNyBAQCB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4gXHRpZiAoZW5hYmxlX3BtbClcbi1cdFx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpO1xuK1x0XHR2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHZjcHUpO1xuIFx0ZnJlZV92cGlkKHZteC1cdTAwM2V2cGlkKTtcbiBcdG5lc3RlZF92bXhfZnJlZV92Y3B1KHZjcHUpO1xuIFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MpO1xuQEAgLTc2ODAsOCArNzY1OCw4IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogZm9yIHRoZSBndWVzdCksIGV0Yy5cbiBcdCAqL1xuIFx0aWYgKGVuYWJsZV9wbWwpIHtcbi1cdFx0dm14LVx1MDAzZXBtbF9wZyA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4tXHRcdGlmICghdm14LVx1MDAzZXBtbF9wZylcbitcdFx0dmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbitcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpXG4gXHRcdFx0Z290byBmcmVlX3ZwaWQ7XG4gXHR9XG4gXG5AQCAtNzc1Miw3ICs3NzMwLDcgQEAgaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gZnJlZV92bWNzOlxuIFx0ZnJlZV9sb2FkZWRfdm1jcyh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MpO1xuIGZyZWVfcG1sOlxuLVx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2bXgpO1xuK1x0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTtcbiBmcmVlX3ZwaWQ6XG4gXHRmcmVlX3ZwaWQodm14LVx1MDAzZXZwaWQpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC04NDQwLDIxICs4NDE4LDEzIEBAIHN0YXRpYyB2b2lkIHZteF91cGRhdGVfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcmNlX2ltbWVkaWF0ZV9leGl0XG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFlbmFibGVfcG1sKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0Z3VhcmQodm14X3ZtY3MwMSkodmNwdSk7XG4gXG4tXHQvKlxuLVx0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xuLVx0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbi1cdCAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLlxuLVx0ICovXG4tXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZykpXG4rXHRpZiAoZW5hYmxlKVxuIFx0XHRzZWNvbmRhcnlfZXhlY19jb250cm9sc19zZXRiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTtcbiBcdGVsc2VcbiBcdFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfY2xlYXJiaXQodm14LCBTRUNPTkRBUllfRVhFQ19FTkFCTEVfUE1MKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuaW5kZXggZGM4NTE3ZjE1YmM0Ni4uNWY1MDVhZDE0ZGRlMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbkBAIC0yNjUsMTMgKzI2NSw2IEBAIHN0cnVjdCB2Y3B1X3ZteCB7XG4gXHR1bnNpZ25lZCBpbnQgcGxlX3dpbmRvdztcbiBcdGJvb2wgcGxlX3dpbmRvd19kaXJ0eTtcbiBcbi1cdC8qIFN1cHBvcnQgZm9yIFBNTCAqL1xuLSNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTXHQ1MTJcbi1cdC8qIFBNTCBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhpcyBpcyB0aGUgZmlyc3QgZW50cnkgd3JpdHRlbiBieSB0aGUgQ1BVICovXG4tI2RlZmluZSBQTUxfSEVBRF9JTkRFWFx0XHQoUE1MX0xPR19OUl9FTlRSSUVTLTEpXG4tXG4tXHRzdHJ1Y3QgcGFnZSAqcG1sX3BnO1xuLVxuIFx0LyogYXBpYyBkZWFkbGluZSB2YWx1ZSBpbiBob3N0IHRzYyAqL1xuIFx0dTY0IGh2X2RlYWRsaW5lX3RzYztcbiBcbkBAIC0zOTcsNyArMzkwLDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX211bHRpcGxpZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiBndmFfdCB2bXhfZ2V0X3VudGFnZ2VkX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHVuc2lnbmVkIGludCBmbGFncyk7XG4gXG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuIFxuIHU2NCB2bXhfZ2V0X3N1cHBvcnRlZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xuIGJvb2wgdm14X2lzX3ZhbGlkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEsIGJvb2wgaG9zdF9pbml0aWF0ZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDA1NGZkMTRiYjJlMTYuLjQ4MTBmOWIxYjBmYzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0xMTgsNyArMTE4LDcgQEAgdTY0IHZteF9nZXRfbDJfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3dyaXRlX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rdm9pZCB2bXhfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gaW50IHZteF9zZXRfaHZfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3Vlc3RfZGVhZGxpbmVfdHNjLFxuIFx0XHQgICAgIGJvb2wgKmV4cGlyZWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uNmQyNmRlOGI3YzNjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtMzk0MSw2ICszOTQxLDM3IEBAIHZvaWQga3ZtX2FyY2hfc3luY19kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIFx0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbit2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpXG4re1xuK1x0dTE2IHBtbF90YWlsX2luZGV4O1xuK1x0dTY0ICpwbWxfYnVmO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogUE1MIGluZGV4IGFsd2F5cyBwb2ludHMgdG8gdGhlIG5leHQgYXZhaWxhYmxlIFBNTCBidWZmZXIgZW50aXR5XG4rXHQgKiB1bmxlc3MgUE1MIGxvZyBoYXMganVzdCBvdmVyZmxvd2VkLlxuK1x0ICovXG4rXHRwbWxfdGFpbF9pbmRleCA9IChwbWxfaWR4IFx1MDAzZT0gUE1MX0xPR19OUl9FTlRSSUVTKSA/IDAgOiBwbWxfaWR4ICsgMTtcbitcbitcdC8qXG4rXHQgKiBQTUwgbG9nIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGUgQ1BVIGZpcnN0IHdyaXRlcyB0aGUgZW50cnkgNTExXG4rXHQgKiB0aGVuIHRoZSBlbnRyeSA1MTAsIGFuZCBzbyBvbi5cbitcdCAqXG4rXHQgKiBSZWFkIHRoZSBlbnRyaWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuLCB0byBlbnN1cmUgdGhhdFxuK1x0ICogdGhlIGRpcnR5IHJpbmcgaXMgZmlsbGVkIGluIHRoZSBzYW1lIG9yZGVyIHRoZSBDUFUgd3JvdGUgdGhlbS5cbitcdCAqL1xuK1x0cG1sX2J1ZiA9IHBhZ2VfYWRkcmVzcyh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpO1xuK1xuK1x0Zm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgXHUwMDNlPSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7XG4rXHRcdHU2NCBncGE7XG4rXG4rXHRcdGdwYSA9IHBtbF9idWZbaV07XG4rXHRcdFdBUk5fT05fT05DRShncGEgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSk7XG4rXHRcdGt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2ZsdXNoX3BtbF9idWZmZXIpO1xuK1xuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIHtcbkBAIC04MDQyLDYgKzgwNzMsMjEgQEAgc3RhdGljIHZvaWQga3ZtX3ZjcHVfcmVsb2FkX2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0a3ZtX3g4Nl9jYWxsKHNldF9hcGljX2FjY2Vzc19wYWdlX2FkZHIpKHZjcHUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHQvKlxuK1x0ICogTm90ZSwgbnJfbWVtc2xvdHNfZGlydHlfbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCBjb25jdXJyZW50IHdpdGggdGhpc1xuK1x0ICogY29kZSwgYnV0IGluIHRoYXQgY2FzZSBhbm90aGVyIHVwZGF0ZSByZXF1ZXN0IHdpbGwgYmUgbWFkZSBhbmQgc29cbitcdCAqIHRoZSBndWVzdCB3aWxsIG5ldmVyIHJ1biB3aXRoIGEgc3RhbGUgUE1MIHZhbHVlLlxuK1x0ICovXG4rXHRib29sIGVuYWJsZSA9IGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1LCBlbmFibGUpO1xuK31cbitcbiAvKlxuICAqIENhbGxlZCB3aXRoaW4ga3ZtLVx1MDAzZXNyY3UgcmVhZCBzaWRlLlxuICAqIFJldHVybnMgMSB0byBsZXQgdmNwdV9ydW4oKSBjb250aW51ZSB0aGUgZ3Vlc3QgZXhlY3V0aW9uIGxvb3Agd2l0aG91dFxuQEAgLTgyMDgsNyArODI1NCw3IEBAIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0a3ZtX3g4Nl9jYWxsKHJlY2FsY19pbnRlcmNlcHRzKSh2Y3B1KTtcbiBcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVVBEQVRFX0NQVV9ESVJUWV9MT0dHSU5HLCB2Y3B1KSlcbi1cdFx0XHRrdm1feDg2X2NhbGwodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSh2Y3B1KTtcbitcdFx0XHRrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHZjcHUpO1xuIFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9VUERBVEVfUFJPVEVDVEVEX0dVRVNUX1NUQVRFLCB2Y3B1KSkge1xuIFx0XHRcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uMmQ3NDdjMjA5NjVjZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuaFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5AQCAtOTAwLDQgKzkwMCwxMSBAQCBpbnQgX19fX2t2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcGwsXG4gXG4gaW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuKy8qIFN1cHBvcnQgZm9yIFBNTCAqL1xuKyNkZWZpbmUgUE1MX0xPR19OUl9FTlRSSUVTXHQ1MTJcbisvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xuKyNkZWZpbmUgUE1MX0hFQURfSU5ERVhcdFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxuK1xuK3ZvaWQga3ZtX2ZsdXNoX3BtbF9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgcG1sX2lkeCk7XG4rXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMDo1My4xODIwNTY2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTk5OTU4MjYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIGl0IHNpZ25pZmljYW50bHkgdG91Y2hlcyB0aGUgS1ZNIHg4NiBzdWJzeXN0ZW0g4oCTIGFuZCB3ZSdyZSB0YWxraW5nIGJvdGggZ2VuZXJpYyB4ODYsIGFzIHdlbGwgYXMgQU1EJ3MgU1ZNIGFuZCBJbnRlbCdzIFZNWCBpbXBsZW1lbnRhdGlvbnMuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYWRkIHN1cHBvcnQgZm9yIFBNTCAoUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZykgb24gQU1EIFNWTSwgaW5jbHVkaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgU0VWIChTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uKSBjb25zaWRlcmF0aW9ucy4gVGhlIHdheSBpdCByZWZhY3RvcnMgUE1MIGRpcnR5IGxvZ2dpbmcgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0gYWxzbyBwaXF1ZXMgbXkgaW50ZXJlc3QuIFdlJ3ZlIGdvdCBjaGFuZ2VzIG1vdmluZyBgcG1sX3BhZ2VgIGFyb3VuZCwgZ2VuZXJhbGl6aW5nIGZ1bmN0aW9ucywgYWRkaW5nIG5ldyBjYWxsYmFja3MgbGlrZSBgc3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ2AsIGFuZCBzb21lIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIGFyb3VuZCBob3cgdGhlIGxvZ2dpbmcgaXMgaGFuZGxlZCBpbiBib3RoIFZNWCBhbmQgU1ZNLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbmVzdGVkLmNgIGZvciBTVk0gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBlc3BlY2lhbGx5IGhhbmRsaW5nIGBQTUxfRlVMTGAgZXhpdHMgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgdm1jYjAyLVx1MDAzZWNvbnRyb2wucG1sX2luZGV4YCwgYXJlIGRlZmluaXRlbHkgd29ydGggZXhhbWluaW5nLiBJJ20gYWxzbyBzZWVpbmcgbmV3IGBXQVJOX09OX09OQ0VgIGNoZWNrcyBiZWluZyBhZGRlZCwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHZpZXdwb2ludC5cblxuR2l2ZW4gdGhhdCBLVk0gaXMgYSBjZW50cmFsIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCBhbmQgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGZ1enplcyBpdCBvbiB4ODYsIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuIFdlJ3JlIHRhbGtpbmcgY29yZSBleGVjdXRpb24gcGF0aHMgYmVpbmcgdG91Y2hlZDogYHZjcHVfZW50ZXJfZ3Vlc3RgLCBgc3ZtX2hhbmRsZV9leGl0YCwgYHN2bV92Y3B1X2NyZWF0ZWAsIGFuZCBhIGxvdCBvZiB0aGUgbG9nZ2luZyBmdW5jdGlvbnMuIFRoaXMga2luZCBvZiBpbnRlcmFjdGlvbiB3aXRoIE1NVSwgZGlydHkgbG9nZ2luZywgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGEgZ29sZG1pbmUuXG5cbioqQ29uY2x1c2lvbjoqKiBUaGlzIGlzIGEgZGVmaW5pdGUgXCJZRVNcIiBpbiB0ZXJtcyBvZiBmdXp6aW5nIHBvdGVudGlhbCAoV29ydGhGdXp6aW5nPXRydWUpLiBOb3csIGxldCdzIHNlZSBhYm91dCB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSSdsbCB1c2UgZ3JlcHBlciB0byBncmFiIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgS1ZNLCBLVk1fQU1ELCBhbmQgS1ZNX0lOVEVMIGFuZCB0aGVuIHN0YXJ0IGNyYWZ0aW5nIHNvbWUgZnV6emluZyBzdHJhdGVnaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjA5LjE4MTY0MTk3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjUxNTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDktXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzQtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTowOS4yNTQxNjM4MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTM3OTA1NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLVk0gQ29tcGlsYXRpb24gZm9yIHg4NioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZXNlIEtWTSBjb21wb25lbnRzIGFyZSBjb21waWxlZCwgc3BlY2lmaWNhbGx5IGZvciB4ODYuIEkndmUgYWxyZWFkeSBiZWVuIGxvb2tpbmcgYXQgc29tZSBvZiB0aGUgcmVsZXZhbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBzcGVjaWZpY3MgcmVnYXJkaW5nIHdoaWNoIHNvdXJjZSBmaWxlcyBnZXQgY29tcGlsZWQsIGFuZCBob3csIHdpdGhpbiB0aGF0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgdGhvcm91Z2hseSB0byB0cm91Ymxlc2hvb3QgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MTAuNzkyMDczNDM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjY2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cXG4gICA0OlxcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgKz0gLVdlcnJvclxcbiAgIDU6XFx0XFxuICAgNjpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgNzpcXHRcXG4gICA4OlxcdGt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRrdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuICAxMjpcXHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuICAxMzpcXHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG4gIDE0OlxcdGt2bS0kKENPTkZJR19LVk1fWEVOKVxcdCs9IHhlbi5vXFxuICAxNTpcXHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4gIDE5OlxcdFxcbiAgMjA6XFx0a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbiAgMjE6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMjI6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbiAgMjU6XFx0XFxuICAyNjpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbiAgMjc6XFx0a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRpZmRlZiBDT05GSUdfSFlQRVJWXFxuICAzMDpcXHRrdm0teVxcdFxcdFxcdCs9IGt2bV9vbmh5cGVydi5vXFxuICAzMTpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG4gIDMyOlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm1fb25oeXBlcnYub1xcbiAgMzM6XFx0ZW5kaWZcXG4gIDM0OlxcdFxcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9YODYpXFx0Kz0ga3ZtLm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19LVk1fQU1EKVxcdCs9IGt2bS1hbWQub1xcbiAgMzg6XFx0XFxuICAzOTpcXHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbiAgNDA6XFx0JChvYmopL3N2bS92bWVudGVyLm86ICQob2JqKS9rdm0tYXNtLW9mZnNldHMuaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMToxMC43OTIxNDQzMDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODMzNDkwOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gYW5kIFNFViBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBLVk1fQU1EYCBhbmQgYEtWTV9JTlRFTGAuIFRoZXNlLCBvZiBjb3Vyc2UsIGFyZSBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uYWwgYEtWTV9YODZgIGFuZCBgS1ZNYCBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNFViAoU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbikgaW50ZWdyYXRpb24gZml0cyBpbnRvIHRoaXMgcGljdHVyZS5cblxuSSBzZWUgdGhhdCBgS1ZNX0FNRF9TRVZgIGlzIG1lbnRpb25lZCwgYW5kIHRoZSBgc2V2LmNgIHNvdXJjZSBmaWxlIGlzIGZsYWdnZWQgYXMgcmVsZXZhbnQuIFNwZWNpZmljYWxseSwgYSBjb21tZW50IGNoYW5nZSBhbmQgdGhlIGZ1bmN0aW9uIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgIGhhdmUgcGlxdWVkIG15IGludGVyZXN0LiBUaGF0IGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIGBzdm1fdmNwdV9jcmVhdGVgIHRocm91Z2ggYHNucF9zYWZlX2FsbG9jX3BhZ2UoKWAuIFRoaXMgbWVhbnMgdGhlcmUgbWlnaHQgYmUgc29tZSBjcnVjaWFsIGFsbG9jYXRpb24gbG9naWMgcmVsYXRlZCB0byBzZWN1cmUgbWVtb3J5IGluIHRoZSBBTUQgS1ZNIGVudmlyb25tZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzbnBfc2FmZV9hbGxvY19wYWdlYCBpdHNlbGYuIEkgbmVlZCB0byBleGFtaW5lIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBib3RoIGBzZXYuY2AgYW5kIGBzdm0uaGAgdG8gdW5kZXJzdGFuZCB0aGUgbG93LWxldmVsIG1lbW9yeSBhbGxvY2F0aW9uIGhhbmRsaW5nIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgU0VWLXNwZWNpZmljIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBLVk0vQU1EIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjE3LjYyNTY0MDgwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU2MjEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbnBfc2FmZV9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xNDg3PWludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNDkzLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTQ5NDpcXHR2bWNiMDJfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTE0OTUtXFx0aWYgKCF2bWNiMDJfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDg2Mj1pbnQgc2V2X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3NS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ4NzY6XFx0dm1zYV9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg3Ny1cXHRpZiAoIXZtc2FfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDk0OD12b2lkIHNldl92Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODQtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTg1OnN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5ODYte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz02MTk9c3RhdGljIGludCBzdm1fY3B1X2luaXQoaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNjI1LVxcdG1lbXNldChzZCwgMCwgc2l6ZW9mKHN0cnVjdCBzdm1fY3B1X2RhdGEpKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjYyNjpcXHRzYXZlX2FyZWFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShjcHVfdG9fbm9kZShjcHUpLCBHRlBfS0VSTkVMKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTYyNy1cXHRpZiAoIXNhdmVfYXJlYV9wYWdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xMzM1PXN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0NC1cXHRlcnIgPSAtRU5PTUVNO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MTM0NTpcXHR2bWNiMDFfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNDYtXFx0aWYgKCF2bWNiMDFfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM0OS1cXHRpZiAocG1sKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoxMzUwOlxcdFxcdHZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzUxLVxcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5wbWxfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTQxND1zdGF0aWMgdm9pZCAqc3ZtX2FsbG9jX2FwaWNfYmFja2luZ19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTUte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQxNjpcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk5Mz1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5NzpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTk4OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5OS17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDAwOlxcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDAxLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTAyMD12b2lkIHNldl9mcmVlX2RlY3J5cHRlZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp2bXNhKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjEtI2Vsc2VcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyNi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEwMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZSh2b2lkKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyOC17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI5OlxcdHJldHVybiBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUobnVtYV9ub2RlX2lkKCksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MTcuNzAyMjA3NjY2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ2NTUzODQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIGZvciBLVk0gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG1vc3QgcmVsZXZhbnQgZm9jdXMgc3ltYm9scywgZ2l2ZW4gdGhlc2UgcmVjZW50IG1vZGlmaWNhdGlvbnMgYW5kIGFkZGl0aW9ucyB0byB0aGUgS1ZNIGNvZGUuIE15IHByaW1hcnkgZ29hbCBpcyB0byBwaWNrIG5vbi11YmlxdWl0b3VzLCBoaWdobHkgdGFyZ2V0ZWQgc3ltYm9scyBmb3IgYW5hbHlzaXMuXG5cbkZpcnN0LCBJJ3ZlIGdvdCB0byByZXZpZXcgdGhlIG1vZGlmaWVkIGFuZCBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYWNyb3NzIHRoZSByZWxldmFudCBmaWxlczogYGFyY2gveDg2L2t2bS94ODYuY2AsIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgYGFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgIC8gYG1haW4uY2AuIEkndmUgZ29uZSB0aHJvdWdoIHRoZSBsaXN0cyBhbmQgaGF2ZSBhIHNob3J0IGxpc3Qgb2YgZnVuY3Rpb25zOlxuXG4qICAgYGt2bV9mbHVzaF9wbWxfYnVmZmVyYFxuKiAgIGBrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYFxuKiAgIGBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nYFxuKiAgIGBzdm1fZmx1c2hfcG1sX2J1ZmZlcmBcbiogICBgcG1sX2Z1bGxfaW50ZXJjZXB0aW9uYFxuKiAgIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbGBcbiogICBgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWxgXG4qICAgYHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdgXG4qICAgYHZteF9mbHVzaF9wbWxfYnVmZmVyYFxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgdWJpcXVpdG91cyBrZXJuZWwgaG90c3BvdHMuIFRoZXkgYXBwZWFyIHRvIGJlIHNwZWNpZmljIHRvIEtWTSwgUE1MLCBkaXJ0eSBsb2dnaW5nLCBhbmQgbmVzdGVkIFNWTS4gTm8gb2J2aW91cyBpc3N1ZXMgaGVyZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGZvbGxvd2luZyBjb25maWdzOlxuXG4qICAgYEtWTWBcbiogICBgS1ZNX0FNRGBcbiogICBgS1ZNX0lOVEVMYFxuKiAgIGBLVk1fWDg2YFxuKiAgIGBWSVJUVUFMSVpBVElPTmBcblxuTG9va3MgbGlrZSBldmVyeXRoaW5nIGlzIHVuZGVyIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2Agb3IgYGFyY2gveDg2L0tjb25maWdgIGFuZCBgYXJjaC9LY29uZmlnYC5cbldpdGggdGhlIHN5bWJvbHMgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkLCBJIGNhbiBub3cgcHJvY2VlZCB0byBhbmFseXplIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2ODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjI3LjE2Nzc1MDUwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNzcxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyAoS1ZNfFZJUlRVQUxJWkFUSU9OKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTgzMD1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODMxLVxcbmFyY2gveDg2L0tjb25maWc6ODMyOmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjI3LjI5ODUyNzExMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODA0MDMxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdC4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQ7IGV2ZXJ5dGhpbmcgaXMgY3J5c3RhbCBjbGVhci4gV2UncmUgZGVmaW5pdGVseSBmdXp6aW5nIHRoaXMsIHdoaWNoIGlzIGdvb2QuIFRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBzZXQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBhY3Jvc3MgS1ZNLCBhbmQgc3BlY2lmaWNhbGx5IGZvciBBTUQgYW5kIEludGVsIGhhcmR3YXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIGZvY3VzIHN5bWJvbHMgbGlzdGVkOyB0aGVzZSBhcmUgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGltcGFjdGVkLCBvciBhcmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLlxuXG5CYXNlZCBvbiB0aGUgc3ltYm9scywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nLCBvciBQTUwsIGFuZCBpdCdzIGJlaW5nIGltcGxlbWVudGVkIGFuZCByZWZhY3RvcmVkIGZvciBBTUQncyBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGFuZCB0aGUgZXhpc3RpbmcgZ2VuZXJpYyB4ODYgS1ZNIGNvZGUsIGFzIHdlbGwgYXMgSW50ZWwncyBWTVguIFRoZSBmdW5jdGlvbiBuYW1lcyBwb2ludCB0byBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyBkaXJ0eSBsb2dnaW5nIGlzIGhhbmRsZWQgYWNyb3NzIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gcGF0aHMuIFdlJ3ZlIGdvdCBuZXcgZXhpdCBoYW5kbGVycyBmb3IgaGFuZGxpbmcgc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lIGV4aXRzLCBpbmNsdWRpbmcgbmVzdGVkIFNWTSBleGl0cywgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBUaGVyZSdzIGFsc28gYnVmZmVyIGZsdXNoaW5nIGxvZ2ljLCBhbmQgdXBkYXRlcyB0byB0aGUgZGlydHkgbG9nZ2luZyBzdGF0ZSBjb250cm9sIGluIGtleSB2aXJ0dWFsaXphdGlvbiByb3V0aW5lcy4gVGhlIG1haW4gdGhpbmcgaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdmVyeSBsb3ctbGV2ZWwgdmlydHVhbGl6YXRpb24gZGV0YWlscyBhbmQgbWFuYWdlbWVudCBvZiBob3cgbWVtb3J5IHBhZ2VzIGFyZSB0cmFja2VkLCBwb3RlbnRpYWxseSB0byBvcHRpbWl6ZSBob3cgZ3Vlc3QgdmlydHVhbCBtYWNoaW5lcyBhcmUgbWFuYWdlZC5cblxuSSdtIHJlYWR5IHRvIG1hcmsgdGhpcyBhcyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwMiwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzIuMTAyNTYxNzg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjI4NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJrdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nXCIsXG4gICAgXCJzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nXCIsXG4gICAgXCJzdm1fZmx1c2hfcG1sX2J1ZmZlclwiLFxuICAgIFwicG1sX2Z1bGxfaW50ZXJjZXB0aW9uXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX2V4aXRfc3BlY2lhbFwiLFxuICAgIFwibmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2xcIixcbiAgICBcInZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInZteF9mbHVzaF9wbWxfYnVmZmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGRpcnR5IGxvZ2dpbmcgc3VwcG9ydCBmb3IgQU1EIFNWTSBhbmQgcmVmYWN0b3JzIHRoZSBzaGFyZWQgUE1MIGJ1ZmZlciBmbHVzaGluZyBhbmQgZGlydHkgbG9nZ2luZyBzdGF0ZSBtYWNoaW5lIGFjcm9zcyB4ODYgS1ZNLCBJbnRlbCBWTVgsIGFuZCBBTUQgU1ZNLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvZGUgcGF0aHMgaW4gS1ZNIGFuZCBhZmZlY3QgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCBleGl0IGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2ZsdXNoX3BtbF9idWZmZXJcIixcbiAgICBcImt2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmdcIixcbiAgICBcInN2bV9mbHVzaF9wbWxfYnVmZmVyXCIsXG4gICAgXCJwbWxfZnVsbF9pbnRlcmNlcHRpb25cIixcbiAgICBcIm5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsXCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfY29udHJvbFwiLFxuICAgIFwidm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZ1wiLFxuICAgIFwidm14X2ZsdXNoX3BtbF9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgZGlydHkgbG9nZ2luZyBzdXBwb3J0IGZvciBBTUQgU1ZNIGFuZCByZWZhY3RvcnMgdGhlIHNoYXJlZCBQTUwgYnVmZmVyIGZsdXNoaW5nIGFuZCBkaXJ0eSBsb2dnaW5nIHN0YXRlIG1hY2hpbmUgYWNyb3NzIHg4NiBLVk0sIEludGVsIFZNWCwgYW5kIEFNRCBTVk0uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29kZSBwYXRocyBpbiBLVk0gYW5kIGFmZmVjdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIGV4aXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjMyLjIzNzIwNTI1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDc0MDY0NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTozMi4yMzgzMDEzNjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDYwNjMwMjczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQU1EIFNWTSBzdXBwb3J0IGZvciBQYWdlIE1vZGlmaWNhdGlvbiBMb2dnaW5nIChQTUwpIGFuZCBjb25zb2xpZGF0ZXMgc2hhcmVkIFBNTCBoYW5kbGluZyBsb2dpYyBiZXR3ZWVuIEludGVsIFZNWCBhbmQgQU1EIFNWTS5cXG5cXG5BbGwgYWxsb2NhdGVkIFBNTCBidWZmZXIgcGFnZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24gdGltZSB2aWEgYF9fR0ZQX1pFUk9gIChpbiBgYWxsb2NfcGFnZWAgYW5kIGBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGVgKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyAoZS5nLiBgY29weV90b191c2VyYCwgaW9jdGwgb3V0cHV0cyksIGRvIG5vdCBsZWF2ZSBhbnkgc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzIHVuaW5pdGlhbGl6ZWQsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbnRyb2wtZmxvdyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uOyBzdGFuZGFyZCBLQVNBTiBhbmQgZnVuY3Rpb25hbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4YjUzMTI3NzlkZDY0ZGJjNjMxMWEyMzZmZDI2MGEzNDkzODFkZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjEwOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IGY3MGVlNzRiNWY5MjEuLmNiZmNjNjZhMThlOWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtMjM4LDYgKzIzOCw3IEBAXG4gLy8gZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfUFZVTkxPQ0sgICAgICAgICAgICAgICAoIDgqMzIrMjApIC8qIFBWIHVubG9jayBmdW5jdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfVkNQVVBSRUVNUFRcdFx0KCA4KjMyKzIxKSAvKiBQViB2Y3B1X2lzX3ByZWVtcHRlZCBmdW5jdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfVERYX0dVRVNUXHRcdCggOCozMisyMikgLyogXCJ0ZHhfZ3Vlc3RcIiBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBHdWVzdCAqL1xuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUE1MXHRcdFx0KCA4KjMyKzIzKSAvKiBBTUQgUGFnZSBNb2RpZmljYXRpb24gbG9nZ2luZyAqL1xuIFxuIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDA3OjAgKEVCWCksIHdvcmQgOSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfRlNHU0JBU0VcdFx0KCA5KjMyKyAwKSAvKiBcImZzZ3NiYXNlXCIgUkRGU0JBU0UsIFdSRlNCQVNFLCBSREdTQkFTRSwgV1JHU0JBU0UgaW5zdHJ1Y3Rpb25zKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggM2FmNzM5NWMyNDMwYS4uMmRlYmY2Mjk0MjkwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC03ODksNiArNzg5LDggQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0ICovXG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X2V4dGVybmFsX3NwdF9jYWNoZTtcbiBcbitcdHN0cnVjdCBwYWdlICpwbWxfcGFnZTtcbitcbiBcdC8qXG4gXHQgKiBRRU1VIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0IGVhY2ggaGF2ZSB0aGVpciBvd24gRlBVIHN0YXRlLlxuIFx0ICogSW4gdmNwdV9ydW4sIHdlIHN3aXRjaCBiZXR3ZWVuIHRoZSB1c2VyIGFuZCBndWVzdCBGUFUgY29udGV4dHMuXG5AQCAtMTY3MCw3ICsxNjcyLDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdFx0XHQgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbik7XG4gXHR2b2lkICgqaGFuZGxlX2V4aXRfaXJxb2ZmKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuLVx0dm9pZCAoKnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitcdHZvaWQgKCp1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpO1xuIFxuIFx0dm9pZCAoKnZjcHVfYmxvY2tpbmcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXHR2b2lkICgqdmNwdV91bmJsb2NraW5nKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGFhNjM0MzFiYTkyYzMuLmUwYTc1NDlhN2M3MjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC0xNjUsNyArMTY1LDEwIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiBcdHU4IHJlc2VydmVkXzlbMjJdO1xuIFx0dTY0IGFsbG93ZWRfc2V2X2ZlYXR1cmVzO1x0LyogT2Zmc2V0IDB4MTM4ICovXG4gXHR1NjQgZ3Vlc3Rfc2V2X2ZlYXR1cmVzO1x0XHQvKiBPZmZzZXQgMHgxNDAgKi9cbi1cdHU4IHJlc2VydmVkXzEwWzY2NF07XG4rXHR1OCByZXNlcnZlZF8xMFsxMjhdO1xuK1x0dTY0IHBtbF9hZGRyO1x0XHRcdC8qIE9mZnNldCAweDFjOCAqL1xuK1x0dTE2IHBtbF9pbmRleDtcdFx0XHQvKiBPZmZzZXQgMHgxZDAgKi9cbitcdHU4IHJlc2VydmVkXzExWzUyNl07XG4gXHQvKlxuIFx0ICogT2Zmc2V0IDB4M2UwLCAzMiBieXRlcyByZXNlcnZlZFxuIFx0ICogZm9yIHVzZSBieSBoeXBlcnZpc29yL3NvZnR3YXJlLlxuQEAgLTI0MCwxMCArMjQzLDExIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcbiAjZGVmaW5lIFNWTV9JT0lPX1NJWkVfTUFTSyAoNyBcdTAwM2NcdTAwM2MgU1ZNX0lPSU9fU0laRV9TSElGVClcbiAjZGVmaW5lIFNWTV9JT0lPX0FTSVpFX01BU0sgKDcgXHUwMDNjXHUwMDNjIFNWTV9JT0lPX0FTSVpFX1NISUZUKVxuIFxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXHRcdEJJVCgwKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVlx0XHRCSVQoMSlcbi0jZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZfRVNcdEJJVCgyKVxuLSNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX0dNRVRcdEJJVCgzKVxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX05QXHRcdEJJVF9VTEwoMClcbisjZGVmaW5lIFNWTV9NSVNDX0VOQUJMRV9TRVZcdFx0QklUX1VMTCgxKVxuKyNkZWZpbmUgU1ZNX01JU0NfRU5BQkxFX1NFVl9FU1x0XHRCSVRfVUxMKDIpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfR01FVFx0XHRCSVRfVUxMKDMpXG4rI2RlZmluZSBTVk1fTUlTQ19FTkFCTEVfUE1MXHRcdEJJVF9VTEwoMTEpXG4gXG4gI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSXHRCSVRfVUxMKDApXG4gI2RlZmluZSBTVk1fTUlTQzJfRU5BQkxFX1ZfVk1MT0FEX1ZNU0FWRVx0QklUX1VMTCgxKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3N2bS5oXG5pbmRleCAwMTBhNDVjOWY2MTQ3Li5lODA2NzYxODUwOTIxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zdm0uaFxuQEAgLTEwMSw2ICsxMDEsNyBAQFxuICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19JTkNPTVBMRVRFX0lQSVx0XHQweDQwMVxuICNkZWZpbmUgU1ZNX0VYSVRfQVZJQ19VTkFDQ0VMRVJBVEVEX0FDQ0VTU1x0MHg0MDJcbiAjZGVmaW5lIFNWTV9FWElUX1ZNR0VYSVQgICAgICAgMHg0MDNcbisjZGVmaW5lIFNWTV9FWElUX1BNTF9GVUxMXHQweDQwN1xuIFxuIC8qIFNFVi1FUyBzb2Z0d2FyZS1kZWZpbmVkIFZNR0VYSVQgZXZlbnRzICovXG4gI2RlZmluZSBTVk1fVk1HRVhJVF9NTUlPX1JFQURcdFx0XHQweDgwMDAwMDAxdWxsXG5AQCAtMjM2LDYgKzIzNyw3IEBAXG4gXHR7IFNWTV9FWElUX0FWSUNfSU5DT01QTEVURV9JUEksXHRcdFwiYXZpY19pbmNvbXBsZXRlX2lwaVwiIH0sIFxcXG4gXHR7IFNWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1MsICAgXCJhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzXCIgfSwgXFxcbiBcdHsgU1ZNX0VYSVRfVk1HRVhJVCxcdFx0XCJ2bWdleGl0XCIgfSwgXFxcbitcdHsgU1ZNX0VYSVRfUE1MX0ZVTEwsXHRcdFwicG1sX2Z1bGxcIiB9LCBcXFxuIFx0eyBTVk1fVk1HRVhJVF9NTUlPX1JFQUQsXHRcInZtZ2V4aXRfbW1pb19yZWFkXCIgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTU1JT19XUklURSxcdFwidm1nZXhpdF9tbWlvX3dyaXRlXCIgfSwgXFxcbiBcdHsgU1ZNX1ZNR0VYSVRfTk1JX0NPTVBMRVRFLFx0XCJ2bWdleGl0X25taV9jb21wbGV0ZVwiIH0sIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmNcbmluZGV4IDg2NjVhNjQ3NDgwNmMuLmIxOGNjOWM4OGRkNTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5AQCAtNTUsNiArNTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7XG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9GQVNUX0NQUEMsXHRcdENQVUlEX0VEWCwgMTUsIDB4ODAwMDAwMDcsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQ1BQQ19QRVJGX1BSSU8sXHRcdENQVUlEX0VEWCwgMTYsIDB4ODAwMDAwMDcsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfTUJBLFx0XHRcdENQVUlEX0VCWCwgIDYsIDB4ODAwMDAwMDgsIDAgfSxcbitcdHsgWDg2X0ZFQVRVUkVfUE1MLFx0XHRcdENQVUlEX0VDWCwgIDQsIDB4ODAwMDAwMGEsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfWDJBVklDX0VYVCxcdFx0Q1BVSURfRUNYLCAgNiwgMHg4MDAwMDAwYSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9DT0hFUkVOQ1lfU0ZXX05PLFx0XHRDUFVJRF9FQlgsIDMxLCAweDgwMDAwMDFmLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX1NNQkEsXHRcdFx0Q1BVSURfRUJYLCAgMiwgMHg4MDAwMDAyMCwgMCB9LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCA3M2YzN2IwNTBkMGEwLi5kYTQxN2M0YzU5MTU0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTkwMSw2ICs5MDEsMTMgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHR2bWNiMDItXHUwMDNlY29udHJvbC5tc3JwbV9iYXNlX3BhID0gdm1jYjAxLVx1MDAzZWNvbnRyb2wubXNycG1fYmFzZV9wYTtcbiBcdHZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfUEVSTV9NQVApO1xuIFxuK1x0LypcbitcdCAqIFBNTCBpcyBuZXZlciBlbmFibGVkIGluIGhhcmR3YXJlIGZvciBMMi4gIE1ha2Ugc3VyZSB0aGF0IGFuXG4rXHQgKiB1bmV4cGVjdGVkIFBNTCB3cml0ZSB3b3VsZCB0cmlnZ2VyIGEgUE1MX0ZVTEwgVk0tRXhpdC5cbitcdCAqL1xuK1x0aWYgKHBtbClcbitcdFx0dm1jYjAyLVx1MDAzZWNvbnRyb2wucG1sX2luZGV4ID0gLTE7XG4rXG4gXHQvKlxuIFx0ICogU3Rhc2ggdm1jYjAyJ3MgY291bnRlciBpZiB0aGUgZ3Vlc3QgaGFzbid0IG1vdmVkIHBhc3QgdGhlIGd1aWx0eVxuIFx0ICogaW5zdHJ1Y3Rpb247IG90aGVyd2lzZSwgcmVzZXQgdGhlIGNvdW50ZXIgdG8gJzAnLlxuQEAgLTE4MjAsNiArMTgyNywxMyBAQCBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdGlmIChuZXN0ZWRfc3ZtX2lzX2wyX3RsYl9mbHVzaF9oY2FsbCh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFNWTV9FWElUX1BNTF9GVUxMOlxuK1x0XHQvKlxuK1x0XHQgKiBBbGwgUE1MIGZ1bGwgZXhpdHMgYXJlIGhhbmRsZWQgYnkgS1ZNLiAgS1ZNIGVtdWxhdGVzIFBNTCBpblxuK1x0XHQgKiBzb2Z0d2FyZSBmb3IgTDEsIGJ1dCBuZXZlciBlbmFibGVzIFBNTCBpbiBoYXJkd2FyZSBvbiBiZWhhbGZcbitcdFx0ICogb2YgTDEuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi5jZmU5OTBmODA1MDQwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTQ5OTQsNyArNDk5NCw3IEBAIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoaW50IG5vZGUsIGdmcF90IGdmcClcbiBcdCAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmVcbiBcdCAqIHRoZSBDUFUgd2lsbCBpbmNvcnJlY3RseSBzaWduYWwgYW4gUk1QIHZpb2xhdGlvbiAjUEYgaWYgYVxuIFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXG4tXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbitcdCAqIDJNQi1hbGlnbmVkIFZNQ0IsIFZNU0EsIFBNTCBvciBBVklDIGJhY2tpbmcgcGFnZS5cbiBcdCAqXG4gXHQgKiBBbGxvY2F0ZSBvbmUgZXh0cmEgcGFnZSwgY2hvb3NlIGEgcGFnZSB3aGljaCBpcyBub3RcbiBcdCAqIDJNQi1hbGlnbmVkLCBhbmQgZnJlZSB0aGUgb3RoZXIuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IDdkNTlkMzAxZTFlNTQuLjk1MGMyNTBhNzdiNTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtMTc5LDYgKzE3OSw5IEBAIG1vZHVsZV9wYXJhbSh2bm1pLCBib29sLCAwNDQ0KTtcbiBcbiBtb2R1bGVfcGFyYW0oZW5hYmxlX21lZGlhdGVkX3BtdSwgYm9vbCwgMDQ0NCk7XG4gXG4rYm9vbCBfX3JvX2FmdGVyX2luaXQgcG1sID0gdHJ1ZTtcbittb2R1bGVfcGFyYW0ocG1sLCBib29sLCAwNDQ0KTtcbitcbiBzdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgc3ZtX2dwX2VycmF0dW1faW50ZXJjZXB0ID0gdHJ1ZTtcbiBcbiBzdGF0aWMgdTggcnNtX2luc19ieXRlc1tdID0gXCJcXHgwZlxceGFhXCI7XG5AQCAtMTI2Nyw2ICsxMjcwLDIzIEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudClcbiBcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKVxuIFx0XHRzdm1fc2V0X2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9CVVNMT0NLKTtcbiBcbitcdGlmIChwbWwpIHtcbitcdFx0LypcbitcdFx0ICogUG9wdWxhdGUgdGhlIHBhZ2UgYWRkcmVzcyBhbmQgaW5kZXggaGVyZSwgUE1MIGlzIGVuYWJsZWRcbitcdFx0ICogd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgb24gdGhlIG1lbXNsb3QgdGhyb3VnaFxuK1x0XHQgKiBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKClcbitcdFx0ICovXG4rXHRcdGNvbnRyb2wtXHUwMDNlcG1sX2FkZHIgPSAodTY0KV9fc21lX3NldChwYWdlX3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBWTUNCIGNvbnRyb2wgYXJlYSByZW1haW5zIHZhbGlkIGFmdGVyIGFuIGludGVyY2VwdGVkIFNIVVRET1dOXG4rXHRcdCAqIChBTUQgQVBNIFJldiAzLjQ1KyksIHNvIG9ubHkgaW5pdGlhbGl6ZSBQTUwgaW5kZXggb24gcmVzZXQgdG8gYXZvaWRcbitcdFx0ICogZGlzY2FyZGluZyBhbHJlYWR5LWxvZ2dlZCBlbnRyaWVzIHRoYXQgaGF2ZW4ndCBiZWVuIGZsdXNoZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluaXRfZXZlbnQpXG4rXHRcdFx0Y29udHJvbC1cdTAwM2VwbWxfaW5kZXggPSBQTUxfSEVBRF9JTkRFWDtcbitcdH1cbitcbiBcdGlmIChpc19zZXZfZ3Vlc3QodmNwdSkpXG4gXHRcdHNldl9pbml0X3ZtY2Ioc3ZtLCBpbml0X2V2ZW50KTtcbiBcbkBAIC0xMzI2LDkgKzEzNDYsMTUgQEAgc3RhdGljIGludCBzdm1fdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2bWNiMDFfcGFnZSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRpZiAocG1sKSB7XG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcbitcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpXG4rXHRcdFx0Z290byBlcnJvcl9mcmVlX3ZtY2JfcGFnZTtcbitcdH1cbitcbiBcdGVyciA9IHNldl92Y3B1X2NyZWF0ZSh2Y3B1KTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyb3JfZnJlZV92bWNiX3BhZ2U7XG4rXHRcdGdvdG8gZXJyb3JfZnJlZV9wbWxfcGFnZTtcbiBcbiBcdGVyciA9IGF2aWNfaW5pdF92Y3B1KHN2bSk7XG4gXHRpZiAoZXJyKVxuQEAgLTEzNTMsNiArMTM3OSw5IEBAIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBlcnJvcl9mcmVlX3NldjpcbiBcdHNldl9mcmVlX3ZjcHUodmNwdSk7XG4rZXJyb3JfZnJlZV9wbWxfcGFnZTpcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpXG4rXHRcdF9fZnJlZV9wYWdlKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSk7XG4gZXJyb3JfZnJlZV92bWNiX3BhZ2U6XG4gXHRfX2ZyZWVfcGFnZSh2bWNiMDFfcGFnZSk7XG4gb3V0OlxuQEAgLTEzNzAsNiArMTM5OSw5IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0c2V2X2ZyZWVfdmNwdSh2Y3B1KTtcbiBcbitcdGlmIChwbWwgXHUwMDI2XHUwMDI2IHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSlcbitcdFx0X19mcmVlX3BhZ2UodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbitcbiBcdF9fZnJlZV9wYWdlKF9fc21lX3BhX3RvX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IwMS5wYSkpO1xuIFx0c3ZtX3ZjcHVfZnJlZV9tc3JwbShzdm0tXHUwMDNlbXNycG0pO1xuIH1cbkBAIC0zMzQ0LDYgKzMzNzYsNDUgQEAgc3RhdGljIGludCB2bW1jYWxsX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHZjcHUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBzdm1fdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4rXHRzdHJ1Y3Qgdm1jYiAqdm1jYjAxID0gc3ZtLVx1MDAzZXZtY2IwMS5wdHI7XG4rXG4rXHRpZiAoZW5hYmxlKVxuK1x0XHR2bWNiMDEtXHUwMDNlY29udHJvbC5taXNjX2N0bCB8PSBTVk1fTUlTQ19FTkFCTEVfUE1MO1xuK1x0ZWxzZVxuK1x0XHR2bWNiMDEtXHUwMDNlY29udHJvbC5taXNjX2N0bCBcdTAwMjY9IH5TVk1fTUlTQ19FTkFCTEVfUE1MO1xuK1xuK1x0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMSwgVk1DQl9OUFQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4rXHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sO1xuK1xuK1x0LyogRG8gbm90aGluZyBpZiBQTUwgYnVmZmVyIGlzIGVtcHR5ICovXG4rXHRpZiAoY29udHJvbC1cdTAwM2VwbWxfaW5kZXggPT0gUE1MX0hFQURfSU5ERVgpXG4rXHRcdHJldHVybjtcbitcbitcdGt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4KTtcbitcbitcdC8qIFJlc2V0IHRoZSBQTUwgaW5kZXggKi9cbitcdGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4ID0gUE1MX0hFQURfSU5ERVg7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG1sX2Z1bGxfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR0cmFjZV9rdm1fcG1sX2Z1bGwodmNwdS1cdTAwM2V2Y3B1X2lkKTtcbitcbitcdC8qXG4rXHQgKiBQTUwgYnVmZmVyIGlzIGFscmVhZHkgZmx1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN2bV9oYW5kbGVfZXhpdCgpLlxuK1x0ICogTm90aGluZyB0byBkbyBoZXJlLlxuK1x0ICovXG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4gXHRbU1ZNX0VYSVRfUkVBRF9DUjBdXHRcdFx0PSBjcl9pbnRlcmNlcHRpb24sXG4gXHRbU1ZNX0VYSVRfUkVBRF9DUjNdXHRcdFx0PSBjcl9pbnRlcmNlcHRpb24sXG5AQCAtMzQyMSw2ICszNDkyLDcgQEAgc3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuIFx0W1NWTV9FWElUX1ZNR0VYSVRdXHRcdFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXG4gI2VuZGlmXG4rXHRbU1ZNX0VYSVRfUE1MX0ZVTExdXHRcdFx0PSBwbWxfZnVsbF9pbnRlcmNlcHRpb24sXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTM0NzAsOCArMzU0MiwxNCBAQCBzdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwiZXhpdF9pbmZvMjpcIiwgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG4gXHRwcl9lcnIoXCIlLTIwcyUwOHhcXG5cIiwgXCJleGl0X2ludF9pbmZvOlwiLCBjb250cm9sLVx1MDAzZWV4aXRfaW50X2luZm8pO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDh4XFxuXCIsIFwiZXhpdF9pbnRfaW5mb19lcnI6XCIsIGNvbnRyb2wtXHUwMDNlZXhpdF9pbnRfaW5mb19lcnIpO1xuLVx0cHJfZXJyKFwiJS0yMHMlbGxkXFxuXCIsIFwibWlzY19jdGw6XCIsIGNvbnRyb2wtXHUwMDNlbWlzY19jdGwpO1xuK1x0cHJfZXJyKFwiJS0yMHMlbGx4XFxuXCIsIFwibWlzY19jdGw6XCIsIGNvbnRyb2wtXHUwMDNlbWlzY19jdGwpO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwibmVzdGVkX2NyMzpcIiwgY29udHJvbC1cdTAwM2VuZXN0ZWRfY3IzKTtcbitcbitcdGlmIChwbWwpIHtcbitcdFx0cHJfZXJyKFwiJS0yMHMlMDE2bGx4XFxuXCIsIFwicG1sX2FkZHI6XCIsIGNvbnRyb2wtXHUwMDNlcG1sX2FkZHIpO1xuK1x0XHRwcl9lcnIoXCIlLTIwcyUwNHhcXG5cIiwgXCJwbWxfaW5kZXg6XCIsIGNvbnRyb2wtXHUwMDNlcG1sX2luZGV4KTtcbitcdH1cbitcbiBcdHByX2VycihcIiUtMjBzJTAxNmxseFxcblwiLCBcImF2aWNfdmFwaWNfYmFyOlwiLCBjb250cm9sLVx1MDAzZWF2aWNfdmFwaWNfYmFyKTtcbiBcdHByX2VycihcIiUtMjBzJTAxNmxseFxcblwiLCBcImdoY2I6XCIsIGNvbnRyb2wtXHUwMDNlZ2hjYl9ncGEpO1xuIFx0cHJfZXJyKFwiJS0yMHMlMDh4XFxuXCIsIFwiZXZlbnRfaW5qOlwiLCBjb250cm9sLVx1MDAzZWV2ZW50X2luaik7XG5AQCAtMzY0OSw2ICszNzI3LDEzIEBAIGludCBzdm1faW52b2tlX2V4aXRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX2V4aXRfY29kZSlcbiBcdCAgICAodTY0KWV4aXRfY29kZSAhPSBfX2V4aXRfY29kZSlcbiBcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbiBcbitcdC8qXG4rXHQgKiBQTUwgaXMgbmV2ZXIgZW5hYmxlZCB3aGVuIHJ1bm5pbmcgTDIsIGJhaWwgaW1tZWRpYXRlbHkgaWYgYSBQTUwgZnVsbFxuK1x0ICogZXhpdCBvY2N1cnMgYXMgc29tZXRoaW5nIGlzIGhvcnJpYmx5IHdyb25nLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgZXhpdF9jb2RlID09IFNWTV9FWElUX1BNTF9GVUxMKSlcbitcdFx0Z290byB1bmV4cGVjdGVkX3ZtZXhpdDtcbitcbiAjaWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXG4gXHRpZiAoZXhpdF9jb2RlID09IFNWTV9FWElUX01TUilcbiBcdFx0cmV0dXJuIG1zcl9pbnRlcmNlcHRpb24odmNwdSk7XG5AQCAtMzcxNyw2ICszODAyLDE0IEBAIHN0YXRpYyBpbnQgc3ZtX2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtXHUwMDNlcnVuO1xuIFxuK1x0LypcbitcdCAqIE9wcG9ydHVuaXN0aWNhbGx5IGZsdXNoIHRoZSBQTUwgYnVmZmVyIG9uIFZNIGV4aXQuIFRoaXMga2VlcHMgdGhlXG4rXHQgKiBkaXJ0eSBiaXRtYXAgY3VycmVudCBieSBwcm9jZXNzaW5nIGxvZ2dlZCBHUEFzIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yXG4rXHQgKiBQTUxfRlVMTCBleGl0LlxuK1x0ICovXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUgXHUwMDI2XHUwMDI2ICFpc19ndWVzdF9tb2RlKHZjcHUpKVxuK1x0XHRzdm1fZmx1c2hfcG1sX2J1ZmZlcih2Y3B1KTtcbitcbiBcdGlmICh1bmxpa2VseShleGl0X2Zhc3RwYXRoID09IEVYSVRfRkFTVFBBVEhfRVhJVF9VU0VSU1BBQ0UpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC01MzExLDYgKzU0MDQsOSBAQCBzdGF0aWMgaW50IHN2bV92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbiBcdGlmICghcGF1c2VfZmlsdGVyX2NvdW50IHx8ICFwYXVzZV9maWx0ZXJfdGhyZXNoKVxuIFx0XHRrdm1fZGlzYWJsZV9leGl0cyhrdm0sIEtWTV9YODZfRElTQUJMRV9FWElUU19QQVVTRSk7XG4gXG4rXHRpZiAocG1sKVxuK1x0XHRrdm0tXHUwMDNlYXJjaC5jcHVfZGlydHlfbG9nX3NpemUgPSBQTUxfTE9HX05SX0VOVFJJRVM7XG4rXG4gXHRzdm1fc3Jzb192bV9pbml0KCk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTQyOSw2ICs1NTI1LDggQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuY2hlY2tfaW50ZXJjZXB0ID0gc3ZtX2NoZWNrX2ludGVyY2VwdCxcbiBcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSBzdm1faGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuK1x0LnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHN2bV91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcsXG4rXG4gXHQuZGVsaXZlcl9pbnRlcnJ1cHQgPSBzdm1fZGVsaXZlcl9pbnRlcnJ1cHQsXG4gXHQucGlfdXBkYXRlX2lydGUgPSBhdmljX3BpX3VwZGF0ZV9pcnRlLFxuIFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXG5AQCAtNTY4OSw2ICs1Nzg3LDEwIEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFxuIFx0bnJpcHMgPSBucmlwcyBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05SSVBTKTtcbiBcbitcdHBtbCA9IHBtbCBcdTAwMjZcdTAwMjYgbnB0X2VuYWJsZWQgXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUE1MKTtcbitcdGlmIChwbWwpXG4rXHRcdHByX2luZm8oXCJQYWdlIG1vZGlmaWNhdGlvbiBsb2dnaW5nIHN1cHBvcnRlZFxcblwiKTtcbitcbiBcdGlmIChsYnJ2KSB7XG4gXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKVxuIFx0XHRcdGxicnYgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggZTk1ODk0M2I4MTYyNy4uZjU2NmRhZTQ0YmIwZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC01Myw2ICs1Myw3IEBAIGV4dGVybiBpbnQgdmdpZjtcbiBleHRlcm4gYm9vbCBpbnRlcmNlcHRfc21pO1xuIGV4dGVybiBib29sIHZubWk7XG4gZXh0ZXJuIGludCBsYnJ2O1xuK2V4dGVybiBib29sIHBtbDtcbiBcbiBleHRlcm4gaW50IHRzY19hdXhfdXJldF9zbG90IF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li5lNzdiNWI3MzEyNzVjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTA4LDcgKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHZ0X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHR2bXhfdmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZ0X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rc3RhdGljIHZvaWQgdnRfdXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBlbmFibGUpXG4ge1xuIFx0LypcbiBcdCAqIEJhc2ljIFREWCBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUgUE1MLiBLVk0gZG9lcyBub3QgZW5hYmxlIFBNTCBpblxuQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgdm9pZCB2dF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKFdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTtcbitcdHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcodmNwdSwgZW5hYmxlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdnRfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCA2MTJhYjA3ZDQxMDBmLi5iMzc2OGI0YjIxMmZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTQ4ODMsMTAgKzQ4ODMsMTEgQEAgaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gI2RlZmluZSBWTVhfWFNTX0VYSVRfQklUTUFQIDBcbiBcbi1zdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4rc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtICprdm0gPSB2bXgtXHUwMDNldmNwdS5rdm07XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHN0cnVjdCBrdm1fdm14ICprdm1fdm14ID0gdG9fa3ZtX3ZteChrdm0pO1xuK1x0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4gXHRpZiAobmVzdGVkKVxuIFx0XHRuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAoKTtcbkBAIC00OTExLDcgKzQ5MTIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRpZiAoY3B1X2hhc190ZXJ0aWFyeV9leGVjX2N0cmxzKCkpXG4gXHRcdHRlcnRpYXJ5X2V4ZWNfY29udHJvbHNfc2V0KHZteCwgdm14X3RlcnRpYXJ5X2V4ZWNfY29udHJvbCh2bXgpKTtcbiBcbi1cdGlmIChlbmFibGVfYXBpY3YgXHUwMDI2XHUwMDI2IGxhcGljX2luX2tlcm5lbChcdTAwMjZ2bXgtXHUwMDNldmNwdSkpIHtcbitcdGlmIChlbmFibGVfYXBpY3YgXHUwMDI2XHUwMDI2IGxhcGljX2luX2tlcm5lbCh2Y3B1KSkge1xuIFx0XHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMCwgMCk7XG4gXHRcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAxLCAwKTtcbiBcdFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDIsIDApO1xuQEAgLTQ5MjMsNyArNDkyNCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiBcdFx0dm1jc193cml0ZTY0KFBPU1RFRF9JTlRSX0RFU0NfQUREUiwgX19wYSgoXHUwMDI2dm14LVx1MDAzZXZ0LnBpX2Rlc2MpKSk7XG4gXHR9XG4gXG4tXHRpZiAodm14X2Nhbl91c2VfaXBpdihcdTAwMjZ2bXgtXHUwMDNldmNwdSkpIHtcbitcdGlmICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpKSB7XG4gXHRcdHZtY3Nfd3JpdGU2NChQSURfUE9JTlRFUl9UQUJMRSwgX19wYShrdm1fdm14LVx1MDAzZXBpZF90YWJsZSkpO1xuIFx0XHR2bWNzX3dyaXRlMTYoTEFTVF9QSURfUE9JTlRFUl9JTkRFWCwga3ZtLVx1MDAzZWFyY2gubWF4X3ZjcHVfaWRzIC0gMSk7XG4gXHR9XG5AQCAtNDk1OCwxNSArNDk1OSwxNSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHR2bWNzX3dyaXRlNjQoVk1fRU5UUllfTVNSX0xPQURfQUREUiwgX19wYSh2bXgtXHUwMDNlbXNyX2F1dG9sb2FkLmd1ZXN0LnZhbCkpO1xuIFxuIFx0aWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCBcdTAwMjYgVk1fRU5UUllfTE9BRF9JQTMyX1BBVClcbi1cdFx0dm1jc193cml0ZTY0KEdVRVNUX0lBMzJfUEFULCB2bXgtXHUwMDNldmNwdS5hcmNoLnBhdCk7XG4rXHRcdHZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgdmNwdS1cdTAwM2VhcmNoLnBhdCk7XG4gXG4gXHR2bV9leGl0X2NvbnRyb2xzX3NldCh2bXgsIHZteF9nZXRfaW5pdGlhbF92bWV4aXRfY3RybCgpKTtcbiBcbiBcdC8qIDIyLjIuMSwgMjAuOC4xICovXG4gXHR2bV9lbnRyeV9jb250cm9sc19zZXQodm14LCB2bXhfZ2V0X2luaXRpYWxfdm1lbnRyeV9jdHJsKCkpO1xuIFxuLVx0dm14LVx1MDAzZXZjcHUuYXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyA9IHZteF9sMV9ndWVzdF9vd25lZF9jcjBfYml0cygpO1xuLVx0dm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfnZteC1cdTAwM2V2Y3B1LmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gdm14X2wxX2d1ZXN0X293bmVkX2NyMF9iaXRzKCk7XG4rXHR2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dmNwdS1cdTAwM2VhcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTtcbiBcbiBcdHNldF9jcjRfZ3Vlc3RfaG9zdF9tYXNrKHZteCk7XG4gXG5AQCAtNDk3NywxMSArNDk3OCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3ZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdHZtY3Nfd3JpdGU2NChYU1NfRVhJVF9CSVRNQVAsIFZNWF9YU1NfRVhJVF9CSVRNQVApO1xuIFxuIFx0aWYgKGVuYWJsZV9wbWwpIHtcbi1cdFx0dm1jc193cml0ZTY0KFBNTF9BRERSRVNTLCBwYWdlX3RvX3BoeXModm14LVx1MDAzZXBtbF9wZykpO1xuK1x0XHR2bWNzX3dyaXRlNjQoUE1MX0FERFJFU1MsIHBhZ2VfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2UpKTtcbiBcdFx0dm1jc193cml0ZTE2KEdVRVNUX1BNTF9JTkRFWCwgUE1MX0hFQURfSU5ERVgpO1xuIFx0fVxuIFxuLVx0dm14X3dyaXRlX2VuY2xzX2JpdG1hcChcdTAwMjZ2bXgtXHUwMDNldmNwdSwgTlVMTCk7XG4rXHR2bXhfd3JpdGVfZW5jbHNfYml0bWFwKHZjcHUsIE5VTEwpO1xuIFxuIFx0aWYgKHZteF9wdF9tb2RlX2lzX2hvc3RfZ3Vlc3QoKSkge1xuIFx0XHRtZW1zZXQoXHUwMDI2dm14LVx1MDAzZXB0X2Rlc2MsIDAsIHNpemVvZih2bXgtXHUwMDNlcHRfZGVzYykpO1xuQEAgLTQ5OTQsMTMgKzQ5OTUsMTMgQEAgc3RhdGljIHZvaWQgaW5pdF92bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0dm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCAwKTtcbiBcdHZtY3Nfd3JpdGVsKEdVRVNUX1NZU0VOVEVSX0VJUCwgMCk7XG4gXG4tXHR2bXhfZ3Vlc3RfZGVidWdjdGxfd3JpdGUoXHUwMDI2dm14LVx1MDAzZXZjcHUsIDApO1xuK1x0dm14X2d1ZXN0X2RlYnVnY3RsX3dyaXRlKHZjcHUsIDApO1xuIFxuIFx0aWYgKGNwdV9oYXNfdm14X3Rwcl9zaGFkb3coKSkge1xuIFx0XHR2bWNzX3dyaXRlNjQoVklSVFVBTF9BUElDX1BBR0VfQUREUiwgMCk7XG4tXHRcdGlmIChjcHVfbmVlZF90cHJfc2hhZG93KFx1MDAyNnZteC1cdTAwM2V2Y3B1KSlcbitcdFx0aWYgKGNwdV9uZWVkX3Rwcl9zaGFkb3codmNwdSkpXG4gXHRcdFx0dm1jc193cml0ZTY0KFZJUlRVQUxfQVBJQ19QQUdFX0FERFIsXG4tXHRcdFx0XHQgICAgIF9fcGEodm14LVx1MDAzZXZjcHUuYXJjaC5hcGljLVx1MDAzZXJlZ3MpKTtcbitcdFx0XHRcdCAgICAgX19wYSh2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VyZWdzKSk7XG4gXHRcdHZtY3Nfd3JpdGUzMihUUFJfVEhSRVNIT0xELCAwKTtcbiBcdH1cbiBcbkBAIC01MDExLDcgKzUwMTIsNyBAQCBzdGF0aWMgdm9pZCBfX3ZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcbi1cdGluaXRfdm1jcyh2bXgpO1xuK1x0aW5pdF92bWNzKHZjcHUpO1xuIFxuIFx0aWYgKG5lc3RlZCBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fY2hlY2tfaGFzX3F1aXJrKHZjcHUtXHUwMDNla3ZtLCBLVk1fWDg2X1FVSVJLX1NUVUZGX0ZFQVRVUkVfTVNSUykpXG5AQCAtNjQxOCw0OCArNjQxOSwyNSBAQCB2b2lkIHZteF9nZXRfZW50cnlfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqaW50cl9pbmZvLCB1MzIgKmVycm9yX2NvZGUpXG4gXHRcdCplcnJvcl9jb2RlID0gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcihzdHJ1Y3QgdmNwdV92bXggKnZteClcbitzdGF0aWMgdm9pZCB2bXhfZGVzdHJveV9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodm14LVx1MDAzZXBtbF9wZykge1xuLVx0XHRfX2ZyZWVfcGFnZSh2bXgtXHUwMDNlcG1sX3BnKTtcbi1cdFx0dm14LVx1MDAzZXBtbF9wZyA9IE5VTEw7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKSB7XG4rXHRcdF9fZnJlZV9wYWdlKHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSk7XG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IE5VTEw7XG4gXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZteF9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbi1cdHUxNiBwbWxfaWR4LCBwbWxfdGFpbF9pbmRleDtcbi1cdHU2NCAqcG1sX2J1Zjtcbi1cdGludCBpO1xuK1x0dTE2IHBtbF9pZHg7XG4gXG4gXHRwbWxfaWR4ID0gdm1jc19yZWFkMTYoR1VFU1RfUE1MX0lOREVYKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUE1MIGJ1ZmZlciBpcyBlbXB0eSAqL1xuIFx0aWYgKHBtbF9pZHggPT0gUE1MX0hFQURfSU5ERVgpXG4gXHRcdHJldHVybjtcbi1cdC8qXG4tXHQgKiBQTUwgaW5kZXggYWx3YXlzIHBvaW50cyB0byB0aGUgbmV4dCBhdmFpbGFibGUgUE1MIGJ1ZmZlciBlbnRpdHlcbi1cdCAqIHVubGVzcyBQTUwgbG9nIGhhcyBqdXN0IG92ZXJmbG93ZWQuXG4tXHQgKi9cbi1cdHBtbF90YWlsX2luZGV4ID0gKHBtbF9pZHggXHUwMDNlPSBQTUxfTE9HX05SX0VOVFJJRVMpID8gMCA6IHBtbF9pZHggKyAxO1xuLVxuLVx0Lypcbi1cdCAqIFBNTCBsb2cgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoZSBDUFUgZmlyc3Qgd3JpdGVzIHRoZSBlbnRyeSA1MTFcbi1cdCAqIHRoZW4gdGhlIGVudHJ5IDUxMCwgYW5kIHNvIG9uLlxuLVx0ICpcbi1cdCAqIFJlYWQgdGhlIGVudHJpZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4sIHRvIGVuc3VyZSB0aGF0XG4tXHQgKiB0aGUgZGlydHkgcmluZyBpcyBmaWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIENQVSB3cm90ZSB0aGVtLlxuLVx0ICovXG4tXHRwbWxfYnVmID0gcGFnZV9hZGRyZXNzKHZteC1cdTAwM2VwbWxfcGcpO1xuIFxuLVx0Zm9yIChpID0gUE1MX0hFQURfSU5ERVg7IGkgXHUwMDNlPSBwbWxfdGFpbF9pbmRleDsgaS0tKSB7XG4tXHRcdHU2NCBncGE7XG4tXG4tXHRcdGdwYSA9IHBtbF9idWZbaV07XG4tXHRcdFdBUk5fT04oZ3BhIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuLVx0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdH1cbitcdGt2bV9mbHVzaF9wbWxfYnVmZmVyKHZjcHUsIHBtbF9pZHgpO1xuIFxuIFx0LyogcmVzZXQgUE1MIGluZGV4ICovXG4gXHR2bWNzX3dyaXRlMTYoR1VFU1RfUE1MX0lOREVYLCBQTUxfSEVBRF9JTkRFWCk7XG5AQCAtNzY0OCw3ICs3NjI2LDcgQEAgdm9pZCB2bXhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0aWYgKGVuYWJsZV9wbWwpXG4tXHRcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcbitcdFx0dm14X2Rlc3Ryb3lfcG1sX2J1ZmZlcih2Y3B1KTtcbiBcdGZyZWVfdnBpZCh2bXgtXHUwMDNldnBpZCk7XG4gXHRuZXN0ZWRfdm14X2ZyZWVfdmNwdSh2Y3B1KTtcbiBcdGZyZWVfbG9hZGVkX3ZtY3Modm14LVx1MDAzZWxvYWRlZF92bWNzKTtcbkBAIC03NjgwLDggKzc2NTgsOCBAQCBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGZvciB0aGUgZ3Vlc3QpLCBldGMuXG4gXHQgKi9cbiBcdGlmIChlbmFibGVfcG1sKSB7XG4tXHRcdHZteC1cdTAwM2VwbWxfcGcgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuLVx0XHRpZiAoIXZteC1cdTAwM2VwbWxfcGcpXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5wbWxfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4rXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKVxuIFx0XHRcdGdvdG8gZnJlZV92cGlkO1xuIFx0fVxuIFxuQEAgLTc3NTIsNyArNzczMCw3IEBAIGludCB2bXhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGZyZWVfdm1jczpcbiBcdGZyZWVfbG9hZGVkX3ZtY3Modm14LVx1MDAzZWxvYWRlZF92bWNzKTtcbiBmcmVlX3BtbDpcbi1cdHZteF9kZXN0cm95X3BtbF9idWZmZXIodm14KTtcbitcdHZteF9kZXN0cm95X3BtbF9idWZmZXIodmNwdSk7XG4gZnJlZV92cGlkOlxuIFx0ZnJlZV92cGlkKHZteC1cdTAwM2V2cGlkKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtODQ0MCwyMSArODQxOCwxMyBAQCBzdGF0aWMgdm9pZCB2bXhfdXBkYXRlX2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JjZV9pbW1lZGlhdGVfZXhpdFxuIH1cbiAjZW5kaWZcbiBcbi12b2lkIHZteF91cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghZW5hYmxlX3BtbCkpXG4tXHRcdHJldHVybjtcbi1cbiBcdGd1YXJkKHZteF92bWNzMDEpKHZjcHUpO1xuIFxuLVx0Lypcbi1cdCAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXNcbi1cdCAqIGNvZGUsIGJ1dCBpbiB0aGF0IGNhc2UgYW5vdGhlciB1cGRhdGUgcmVxdWVzdCB3aWxsIGJlIG1hZGUgYW5kIHNvXG4tXHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cbi1cdCAqL1xuLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcpKVxuK1x0aWYgKGVuYWJsZSlcbiBcdFx0c2Vjb25kYXJ5X2V4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG4gXHRlbHNlXG4gXHRcdHNlY29uZGFyeV9leGVjX2NvbnRyb2xzX2NsZWFyYml0KHZteCwgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1BNTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbmluZGV4IGRjODUxN2YxNWJjNDYuLjVmNTA1YWQxNGRkZTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5AQCAtMjY1LDEzICsyNjUsNiBAQCBzdHJ1Y3QgdmNwdV92bXgge1xuIFx0dW5zaWduZWQgaW50IHBsZV93aW5kb3c7XG4gXHRib29sIHBsZV93aW5kb3dfZGlydHk7XG4gXG4tXHQvKiBTdXBwb3J0IGZvciBQTUwgKi9cbi0jZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1x0NTEyXG4tXHQvKiBQTUwgaXMgd3JpdHRlbiBiYWNrd2FyZHM6IHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IHdyaXR0ZW4gYnkgdGhlIENQVSAqL1xuLSNkZWZpbmUgUE1MX0hFQURfSU5ERVhcdFx0KFBNTF9MT0dfTlJfRU5UUklFUy0xKVxuLVxuLVx0c3RydWN0IHBhZ2UgKnBtbF9wZztcbi1cbiBcdC8qIGFwaWMgZGVhZGxpbmUgdmFsdWUgaW4gaG9zdCB0c2MgKi9cbiBcdHU2NCBodl9kZWFkbGluZV90c2M7XG4gXG5AQCAtMzk3LDcgKzM5MCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19tdWx0aXBsaWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gZ3ZhX3Qgdm14X2dldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIFxuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcbiBcbiB1NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbiBib29sIHZteF9pc192YWxpZF9kZWJ1Z2N0bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhLCBib29sIGhvc3RfaW5pdGlhdGVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li40ODEwZjliMWIwZmM2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMTE4LDcgKzExOCw3IEBAIHU2NCB2bXhfZ2V0X2wyX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB1NjQgdm14X2dldF9sMl90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3dyaXRlX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF93cml0ZV90c2NfbXVsdGlwbGllcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLXZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgdm14X3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5hYmxlKTtcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIGludCB2bXhfc2V0X2h2X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X2RlYWRsaW5lX3RzYyxcbiBcdFx0ICAgICBib29sICpleHBpcmVkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjZkMjZkZThiN2MzY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTM5NDEsNiArMzk0MSwzNyBAQCB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiBcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4rdm9pZCBrdm1fZmx1c2hfcG1sX2J1ZmZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBwbWxfaWR4KVxuK3tcbitcdHUxNiBwbWxfdGFpbF9pbmRleDtcbitcdHU2NCAqcG1sX2J1ZjtcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIFBNTCBpbmRleCBhbHdheXMgcG9pbnRzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBQTUwgYnVmZmVyIGVudGl0eVxuK1x0ICogdW5sZXNzIFBNTCBsb2cgaGFzIGp1c3Qgb3ZlcmZsb3dlZC5cbitcdCAqL1xuK1x0cG1sX3RhaWxfaW5kZXggPSAocG1sX2lkeCBcdTAwM2U9IFBNTF9MT0dfTlJfRU5UUklFUykgPyAwIDogcG1sX2lkeCArIDE7XG4rXG4rXHQvKlxuK1x0ICogUE1MIGxvZyBpcyB3cml0dGVuIGJhY2t3YXJkczogdGhlIENQVSBmaXJzdCB3cml0ZXMgdGhlIGVudHJ5IDUxMVxuK1x0ICogdGhlbiB0aGUgZW50cnkgNTEwLCBhbmQgc28gb24uXG4rXHQgKlxuK1x0ICogUmVhZCB0aGUgZW50cmllcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiwgdG8gZW5zdXJlIHRoYXRcbitcdCAqIHRoZSBkaXJ0eSByaW5nIGlzIGZpbGxlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGUgQ1BVIHdyb3RlIHRoZW0uXG4rXHQgKi9cbitcdHBtbF9idWYgPSBwYWdlX2FkZHJlc3ModmNwdS1cdTAwM2VhcmNoLnBtbF9wYWdlKTtcbitcbitcdGZvciAoaSA9IFBNTF9IRUFEX0lOREVYOyBpIFx1MDAzZT0gcG1sX3RhaWxfaW5kZXg7IGktLSkge1xuK1x0XHR1NjQgZ3BhO1xuK1xuK1x0XHRncGEgPSBwbWxfYnVmW2ldO1xuK1x0XHRXQVJOX09OX09OQ0UoZ3BhIFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuK1x0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdH1cbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9mbHVzaF9wbWxfYnVmZmVyKTtcbitcbiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiB7XG5AQCAtODA0Miw2ICs4MDczLDIxIEBAIHN0YXRpYyB2b2lkIGt2bV92Y3B1X3JlbG9hZF9hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGt2bV94ODZfY2FsbChzZXRfYXBpY19hY2Nlc3NfcGFnZV9hZGRyKSh2Y3B1KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQga3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIE5vdGUsIG5yX21lbXNsb3RzX2RpcnR5X2xvZ2dpbmcgY2FuIGJlIGNoYW5nZWQgY29uY3VycmVudCB3aXRoIHRoaXNcbitcdCAqIGNvZGUsIGJ1dCBpbiB0aGF0IGNhc2UgYW5vdGhlciB1cGRhdGUgcmVxdWVzdCB3aWxsIGJlIG1hZGUgYW5kIHNvXG4rXHQgKiB0aGUgZ3Vlc3Qgd2lsbCBuZXZlciBydW4gd2l0aCBhIHN0YWxlIFBNTCB2YWx1ZS5cbitcdCAqL1xuK1x0Ym9vbCBlbmFibGUgPSBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2Vucl9tZW1zbG90c19kaXJ0eV9sb2dnaW5nKTtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3B1X2RpcnR5X2xvZ19zaXplKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX3g4Nl9jYWxsKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykodmNwdSwgZW5hYmxlKTtcbit9XG4rXG4gLypcbiAgKiBDYWxsZWQgd2l0aGluIGt2bS1cdTAwM2VzcmN1IHJlYWQgc2lkZS5cbiAgKiBSZXR1cm5zIDEgdG8gbGV0IHZjcHVfcnVuKCkgY29udGludWUgdGhlIGd1ZXN0IGV4ZWN1dGlvbiBsb29wIHdpdGhvdXRcbkBAIC04MjA4LDcgKzgyNTQsNyBAQCBzdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdGt2bV94ODZfY2FsbChyZWNhbGNfaW50ZXJjZXB0cykodmNwdSk7XG4gXG4gXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1VQREFURV9DUFVfRElSVFlfTE9HR0lORywgdmNwdSkpXG4tXHRcdFx0a3ZtX3g4Nl9jYWxsKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZykodmNwdSk7XG4rXHRcdFx0a3ZtX3VwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyh2Y3B1KTtcbiBcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVVBEQVRFX1BST1RFQ1RFRF9HVUVTVF9TVEFURSwgdmNwdSkpIHtcbiBcdFx0XHRrdm1fdmNwdV9yZXNldCh2Y3B1LCB0cnVlKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjJkNzQ3YzIwOTY1Y2UgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTkwMCw0ICs5MDAsMTEgQEAgaW50IF9fX19rdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3BsLFxuIFxuIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbisvKiBTdXBwb3J0IGZvciBQTUwgKi9cbisjZGVmaW5lIFBNTF9MT0dfTlJfRU5UUklFU1x0NTEyXG4rLyogUE1MIGlzIHdyaXR0ZW4gYmFja3dhcmRzOiB0aGlzIGlzIHRoZSBmaXJzdCBlbnRyeSB3cml0dGVuIGJ5IHRoZSBDUFUgKi9cbisjZGVmaW5lIFBNTF9IRUFEX0lOREVYXHRcdChQTUxfTE9HX05SX0VOVFJJRVMtMSlcbitcbit2b2lkIGt2bV9mbHVzaF9wbWxfYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHBtbF9pZHgpO1xuK1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6MzIuMjM4MzA3MzIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2ODY5MDY3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBBTUQgUE1MIFN1cHBvcnQgaW4gS1ZNIFNWTSoqXG5cbk9rYXksIGxldCdzIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiBhZGRpbmcgS01TQU4gdG8gdGhlIGZ1enppbmcgc2V0dXAgaXMgd2FycmFudGVkLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoJ3MgY29yZSBpcyBhZGRpbmcgQU1EIFBNTCBzdXBwb3J0IHdpdGhpbiBLVk0gU1ZNIGFuZCByZWZhY3RvcmluZyBzb21lIFBNTCBjb2RlIGJldHdlZW4gVk1YIGFuZCB0aGUgY29tbW9uIHg4NiBLVk0uXG5cbkxldCBtZSBicmVhayBkb3duIHRoZSBjaGFuZ2VzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaW52b2x2ZXM6XG5cbiogICBBZGRpbmcgdGhlIGBYODZfRkVBVFVSRV9QTUxgIGZsYWcuXG4qICAgTW92aW5nIHRoZSBgcG1sX3BhZ2VgIHBvaW50ZXIgaW50byB0aGUgYGt2bV92Y3B1X2FyY2hgIHN0cnVjdHVyZS4gVGhpcyBpcyBzaWduaWZpY2FudCwgYXMgaXQgbm93IGJlY29tZXMgcGVyLVZDUFUgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgcGFnZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgemVyb2VkLCBvciBpZiBpdCBtaWdodCBjb250YWluIHN0YWxlIGRhdGEuIFRoYXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgcHJvYmxlbXMuXG4qICAgQWRkaW5nIGBwbWxfYWRkcmAgYW5kIGBwbWxfaW5kZXhgIHRvIHRoZSBgdm1jYl9jb250cm9sX2FyZWFgLiBUaGVzZSBhZGRpdGlvbnMgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5IGRldGVybWluZSB3aGVyZSB0aGUgUE1MIGRhdGEgd2lsbCBiZSBzdG9yZWQgYW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIHdpdGhpbiB0aGUgYnVmZmVyLiBUaGUgYHBtbF9pbmRleGAgYW5kIGFzc29jaWF0ZWQgb2Zmc2V0cyBhcmUga2V5IGFyZWFzIGZvciBwb3RlbnRpYWwgZXJyb3JzLCBzdWNoIGFzIG9mZi1ieS1vbmUgZXJyb3JzIG9yIGluY29ycmVjdCBpbmRleGluZy5cbiogICBUaGUgaW50cm9kdWN0aW9uIG9mIGBTVk1fRVhJVF9QTUxfRlVMTGAuIFRoaXMgaW5kaWNhdGVzIGEgc3BlY2lmaWMgZXhpdCBmcm9tIHRoZSBndWVzdC4gVGhpcyBleGl0IGhhbmRsZXIgYW5kIGFzc29jaWF0ZWQgZGF0YSBuZWVkIHNwZWNpYWwgYXR0ZW50aW9uLlxuKiAgIFRoZSBgbW9kdWxlX3BhcmFtKHBtbCwgYm9vbCwgMDQ0NCk7YCBhbmQgc3Vic2VxdWVudCB1c2FnZSBzdWdnZXN0cyBhIHJ1bnRpbWUgc3dpdGNoIGZvciBlbmFibGluZyBQTUwuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0ZXN0aW5nIHN0cmF0ZWdpZXMuXG4qICAgVGhlIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGNhbGwgaW4gYHN2bV92Y3B1X2NyZWF0ZWAgaXMgaW1wb3J0YW50LiBUaGlzIGlzIHdoZXJlIHRoZSBwYWdlIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGluaXRpYWxpemVkOiBJcyBpdCB6ZXJvZWQ/IElmIG5vdCwgaXMgdGhlcmUgb3RoZXIgaW5pdGlhbGl6YXRpb24/XG4qICAgVGhlIGBzdm1fZmx1c2hfcG1sX2J1ZmZlcmAgZnVuY3Rpb24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBga3ZtX2ZsdXNoX3BtbF9idWZmZXJgIGFyZSB2aXRhbC4gVGhpcyBpcyB0aGUgZmx1c2hpbmcgbWVjaGFuaXNtLiBUaGlzIGNvZGUgbmVlZHMgdG8gYmUgdmVyeSBjYXJlZnVsbHkgcmV2aWV3ZWQuXG4qICAgSGFuZGxpbmcgb2YgYFNWTV9FWElUX1BNTF9GVUxMYCBleGl0cy4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIFBNTCBmdW5jdGlvbmFsaXR5LiBFcnJvcnMgaW4gdGhpcyBhcmVhIG1pZ2h0IGxlYWQgdG8gZ3Vlc3QgY3Jhc2hlcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cbiogICBUaGUgdXNlIG9mIGBjcHVfZGlydHlfbG9nX3NpemVgIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gUE1MIGJlaW5nIGVuYWJsZWQgaXMgYSBjcml0aWNhbCBmYWN0b3IgZm9yIGRldGVjdGluZyB3aGljaCBjb2RlIHBhdGhzIGFyZSBnb2luZyB0byBiZSBlbmFibGVkLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoZSBhbGxvY2F0aW9uIG9mIGB2Y3B1LVx1MDAzZWFyY2gucG1sX3BhZ2VgLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgbWVtb3J5IHVzaW5nIGdyZXBwZXIgb3IgYnkgcmVhZGluZyB0aGUgY29ycmVzcG9uZGluZyBmaWxlLiBUaGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGhpbmdlIG9uIHdoZXRoZXIgdGhpcyBhbGxvY2F0ZWQgcGFnZSBpcyBjb3JyZWN0bHkgc2FuaXRpemVkIG9yIGlmIHVuaW5pdGlhbGl6ZWQgZGF0YSBtaWdodCBiZSBwcmVzZW50LiBJbiBwYXJ0aWN1bGFyLCBJIG11c3QgdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3VyIHdpdGggYHNucF9zYWZlX2FsbG9jX3BhZ2UoKWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjE0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjM5LjkyNTIxODk4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MzI4Nzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbnBfc2FmZV9hbGxvY19wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTQ4Nz1pbnQgc3ZtX2FsbG9jYXRlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTQ5My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjE0OTQ6XFx0dm1jYjAyX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xNDk1LVxcdGlmICghdm1jYjAyX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4NjI9aW50IHNldl92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NzUtXFx0ICovXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODc2OlxcdHZtc2FfcGFnZSA9IHNucF9zYWZlX2FsbG9jX3BhZ2UoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NzctXFx0aWYgKCF2bXNhX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ5NDg9dm9pZCBzZXZfdmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDk4NTpzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTg2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NjE5PXN0YXRpYyBpbnQgc3ZtX2NwdV9pbml0KGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTYyNS1cXHRtZW1zZXQoc2QsIDAsIHNpemVvZihzdHJ1Y3Qgc3ZtX2NwdV9kYXRhKSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo2MjY6XFx0c2F2ZV9hcmVhX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlX25vZGUoY3B1X3RvX25vZGUoY3B1KSwgR0ZQX0tFUk5FTCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy02MjctXFx0aWYgKCFzYXZlX2FyZWFfcGFnZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTMzNT1zdGF0aWMgaW50IHN2bV92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNDQtXFx0ZXJyID0gLUVOT01FTTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjEzNDU6XFx0dm1jYjAxX3BhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0xMzQ2LVxcdGlmICghdm1jYjAxX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTEzNDktXFx0aWYgKHBtbCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MTM1MDpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnBtbF9wYWdlID0gc25wX3NhZmVfYWxsb2NfcGFnZSgpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMTM1MS1cXHRcXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2gucG1sX3BhZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU0MTQ9c3RhdGljIHZvaWQgKnN2bV9hbGxvY19hcGljX2JhY2tpbmdfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE1LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTY6XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzbnBfc2FmZV9hbGxvY19wYWdlKCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05OTM9aW50IHNldl9oYW5kbGVfdm1nZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5OTc6c3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5ODpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzbnBfc2FmZV9hbGxvY19wYWdlKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTkte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAwMDpcXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAwMS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEwMjA9dm9pZCBzZXZfZnJlZV9kZWNyeXB0ZWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdm1zYSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMDIxLSNlbHNlXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDIyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZShpbnQgbm9kZSwgZ2ZwX3QgZ2ZwKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAyMy17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDoxMDI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNucF9zYWZlX2FsbG9jX3BhZ2Uodm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEwMjgte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTAyOTpcXHRyZXR1cm4gc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKG51bWFfbm9kZV9pZCgpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTAzMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjExOjQyLjM3ODUxNTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNjUwMjIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AqKlxuXG5Pa2F5LCBJJ20gZGl2aW5nIGludG8gYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBBTUQncyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGVudmlyb25tZW50LCBhcyB0aGlzIGlzIGhvdyBLVk0gaGFuZGxlcyB0aGUgcHJvdGVjdGVkIFZNcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG5vZGUgYWxsb2NhdGlvbiwgYXMgU0VWIGRlYWxzIHdpdGggbWVtb3J5IGVuY3J5cHRpb24gYW5kIGludGVncml0eSBwcm90ZWN0aW9uIGFuZCB0aGlzIGNhbiBncmVhdGx5IGltcGFjdCBob3cgd2UgaGFuZGxlIHBhZ2UgYWxsb2NhdGlvbi5cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yOlxuXG4qICAgKipQYWdlIFR5cGU6KiogSXMgaXQgYWxsb2NhdGluZyByZWd1bGFyIHBhZ2VzLCBvciBhcmUgdGhlcmUgc3BlY2lhbCBmbGFncyByZWxhdGVkIHRvIFNFViwgc3VjaCBhcyBtZW1vcnkgZW5jcnlwdGlvbiBlbmFibGVtZW50LlxuKiAgICoqTWVtb3J5IE5vZGU6KiogSG93IGlzIGl0IGRlYWxpbmcgd2l0aCBOVU1BIG5vZGVzPyBTRVYgY2FuIGludHJvZHVjZSBjb21wbGV4aXRpZXMgaGVyZSBzaW5jZSBwYWdlIHBsYWNlbWVudCBtYXR0ZXJzIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5vZGUgYWxsb2NhdGlvbiwgYW55IGNvbnNpZGVyYXRpb25zIHJlZ2FyZGluZyB0aGUgbWVtb3J5IHBvbGljeSBhbmQgdGhlIGN1cnJlbnQgTlVNQSBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uXG4qICAgKipTYWZldHk6KiogVGhlIGZ1bmN0aW9uIG5hbWUgaW5jbHVkZXMgXCJzYWZlLFwiIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNoZWNrcyBvciBtaXRpZ2F0aW9ucyByZWxhdGVkIHRvIHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIG90aGVyIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIGNyaXRpY2FsIGluIGEgU0VWIGVudmlyb25tZW50LiBUaGlzIGZ1bmN0aW9uIG11c3QgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseSBhcyB0aG9zZSBjYW4gbGVhayBpbmZvcm1hdGlvbiBhYm91dCB0aGUgVk0uXG4qICAgKipTRVYgQ29udGV4dDoqKiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gU0VWLXNwZWNpZmljIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHRoYXQgaXQgbWF5IGJlIHVzaW5nIHRvIG1hbmFnZSBlbmNyeXB0ZWQgbWVtb3J5LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIEFNRCBTZWN1cmUgTWVtb3J5IEVuY3J5cHRpb24gZmVhdHVyZXMuXG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBhbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggS1ZNJ3Mgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgYW5kIHRoZSBwYXJ0aWN1bGFyIG51YW5jZXMgdGhhdCBTRVYgYnJpbmdzIHRvIHRoZSB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MDMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo0NS42NDM1NDE4MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDk4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDk4NTpcXHRzdHJ1Y3QgcGFnZSAqc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlKGludCBub2RlLCBnZnBfdCBnZnApXFxuNDk4NjpcXHR7XFxuNDk4NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG40OTg4OlxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbjQ5ODk6XFx0XFxuNDk5MDpcXHRcXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpXFxuNDk5MTpcXHRcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAwKTtcXG40OTkyOlxcdFxcbjQ5OTM6XFx0XFx0LypcXG40OTk0OlxcdFxcdCAqIEFsbG9jYXRlIGFuIFNOUC1zYWZlIHBhZ2UgdG8gd29ya2Fyb3VuZCB0aGUgU05QIGVycmF0dW0gd2hlcmVcXG40OTk1OlxcdFxcdCAqIHRoZSBDUFUgd2lsbCBpbmNvcnJlY3RseSBzaWduYWwgYW4gUk1QIHZpb2xhdGlvbiAjUEYgaWYgYVxcbjQ5OTY6XFx0XFx0ICogaHVnZXBhZ2UgKDJNQiBvciAxR0IpIGNvbGxpZGVzIHdpdGggdGhlIFJNUCBlbnRyeSBvZiBhXFxuNDk5NzpcXHRcXHQgKiAyTUItYWxpZ25lZCBWTUNCLCBWTVNBLCBQTUwgb3IgQVZJQyBiYWNraW5nIHBhZ2UuXFxuNDk5ODpcXHRcXHQgKlxcbjQ5OTk6XFx0XFx0ICogQWxsb2NhdGUgb25lIGV4dHJhIHBhZ2UsIGNob29zZSBhIHBhZ2Ugd2hpY2ggaXMgbm90XFxuNTAwMDpcXHRcXHQgKiAyTUItYWxpZ25lZCwgYW5kIGZyZWUgdGhlIG90aGVyLlxcbjUwMDE6XFx0XFx0ICovXFxuNTAwMjpcXHRcXHRwID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9aRVJPLCAxKTtcXG41MDAzOlxcdFxcdGlmICghcClcXG41MDA0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjUwMDU6XFx0XFxuNTAwNjpcXHRcXHRzcGxpdF9wYWdlKHAsIDEpO1xcbjUwMDc6XFx0XFxuNTAwODpcXHRcXHRwZm4gPSBwYWdlX3RvX3BmbihwKTtcXG41MDA5OlxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUFRSU19QRVJfUE1EKSlcXG41MDEwOlxcdFxcdFxcdF9fZnJlZV9wYWdlKHArKyk7XFxuNTAxMTpcXHRcXHRlbHNlXFxuNTAxMjpcXHRcXHRcXHRfX2ZyZWVfcGFnZShwICsgMSk7XFxuNTAxMzpcXHRcXG41MDE0OlxcdFxcdHJldHVybiBwO1xcbjUwMTU6XFx0fVxcbjUwMTY6XFx0XFxuNTAxNzpcXHR2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcXG41MDE4OlxcdHtcXG41MDE5OlxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuNTAyMDpcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuNTAyMTpcXHRcXHRpbnQgb3JkZXIsIHJtcF9sZXZlbCwgcmV0O1xcbjUwMjI6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNTAyMzpcXHRcXHRib29sIGFzc2lnbmVkO1xcbjUwMjQ6XFx0XFx0a3ZtX3Bmbl90IHBmbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6MTE6NDUuNjQzODIxMjc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjAwNzUwNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgQU1EIFBNTCBTdXBwb3J0IGFuZCBSZWZhY3RvcmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgcG90ZW50aWFsIEtNU0FOIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoZSBpbnRyb2R1Y3Rpb24gb2YgQU1EIFBNTCBzdXBwb3J0IGFuZCB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlIFBNTCBmbHVzaCBsb2dpYy4gSSBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgd2Ugd2VyZW4ndCBpbnRyb2R1Y2luZyBhbnkgbmV3IGF2ZW51ZXMgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBjcmVhdGluZyBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLlxuXG5GaXJzdCwgSSBsb29rZWQgYXQgaG93IHRoZSBtZW1vcnkgZm9yIHRoZXNlIFBNTCBidWZmZXJzIGlzIGhhbmRsZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgdXNlcyBgX19HRlBfWkVST2AgZHVyaW5nIGFsbG9jYXRpb24gKGBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pYCBpbiBWTVggYW5kIGBzbnBfc2FmZV9hbGxvY19wYWdlKClgIGVsc2V3aGVyZSkuIFNvLCB0aGUgUE1MIHBhZ2UgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24uIFRoaXMgaW1tZWRpYXRlbHkgYWxsZXZpYXRlcyBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgbXkgd29ycmllcy4gVGhlIGhhcmR3YXJlIGl0c2VsZiBsb2dzIEdQQXMgaW50byB0aGlzIHByZS16ZXJvZWQgcGFnZSB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgYWN0aXZlLlxuXG5OZXh0LCBJIHdlbnQgdGhyb3VnaCBhIGNoZWNrbGlzdCBvZiBwb3RlbnRpYWwgS01TQU4gdHJpZ2dlcnM6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vcGUuIE5vIG5ldyBpb2N0bCBzdHJ1Y3R1cmVzLCBgY29weV90b191c2VyYCBjYWxscywgTmV0bGluayBtZXNzYWdlcywgb3Igc29ja2V0IG9wdGlvbnMgYXJlIGludHJvZHVjZWQgdGhhdCBtaWdodCBpbmFkdmVydGVudGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIHNlZSBubyBldmlkZW5jZSBvZiB0aGlzLiBUaGUgbG9naWMgZmxvdyBhcHBlYXJzIHRvIGJlIHNvdW5kLCB3aXRoIG5vIGRlY2lzaW9uLW1ha2luZyBiYXNlZCBvbiBwb3RlbnRpYWxseSBnYXJiYWdlIHZhbHVlcy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzcz8qKiBBZ2Fpbiwgbm8uIFRoZSBhbGxvY2F0ZWQgcGFnZSBpcyBmdWxseSBpbml0aWFsaXplZC5cbjQuICAqKkJvdW5kcyBjaGVja3MvbGVuZ3RoIGlzc3VlcyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3M/KiogVGhlIGNvZGUgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgYW55IHN1Y2ggdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgYGt2bV9mbHVzaF9wbWxfYnVmZmVyYCBmdW5jdGlvbiwgbW92ZWQgZnJvbSBgdm14X2ZsdXNoX3BtbF9idWZmZXJgLCBpdGVyYXRlcyBiYWNrd2FyZCB0aHJvdWdoIHRoZSBQTUwgYnVmZmVyLCByZWFkaW5nIHRoZSBsb2dnZWQgR1BBcy4gVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgbWVtb3J5IGhhcyBiZWVuIGV4cGxpY2l0bHkgemVyb2VkIGF0IGFsbG9jYXRpb24gdGltZS5cblxuR2l2ZW4gdGhlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIFBNTCBidWZmZXJzLCB0aGUgYWJzZW5jZSBvZiBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzLCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIG1lbW9yeSBleHBvc3VyZSwgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVApIGFuZCBLVk0ncyBvd24gdW5pdCB0ZXN0cyBzaG91bGQgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIGJvdW5kcywgcGFnZSBtYW5hZ2VtZW50LCBhbmQgc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLiBUaGUgcGF0Y2gncyBjb3JlIGZ1bmN0aW9uIGlzIHNpbXBseSB0aGUgbG9nZ2luZyBvZiB2YWxpZCBHUEFzIGludG8gYSB6ZXJvZWQgbWVtb3J5IGFyZWE7IEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAzMSwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOToxMTo1Ni44NDQ1NzU1NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFNRCBTVk0gc3VwcG9ydCBmb3IgUGFnZSBNb2RpZmljYXRpb24gTG9nZ2luZyAoUE1MKSBhbmQgY29uc29saWRhdGVzIHNoYXJlZCBQTUwgaGFuZGxpbmcgbG9naWMgYmV0d2VlbiBJbnRlbCBWTVggYW5kIEFNRCBTVk0uXFxuXFxuQWxsIGFsbG9jYXRlZCBQTUwgYnVmZmVyIHBhZ2VzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgdmlhIGBfX0dGUF9aRVJPYCAoaW4gYGFsbG9jX3BhZ2VgIGFuZCBgc25wX3NhZmVfYWxsb2NfcGFnZV9ub2RlYCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGtlcm5lbC10by11c2VyIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgKGUuZy4gYGNvcHlfdG9fdXNlcmAsIGlvY3RsIG91dHB1dHMpLCBkbyBub3QgbGVhdmUgYW55IHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyB1bmluaXRpYWxpemVkLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb250cm9sLWZsb3cgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbjsgc3RhbmRhcmQgS0FTQU4gYW5kIGZ1bmN0aW9uYWwgdGVzdGluZyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBTUQgU1ZNIHN1cHBvcnQgZm9yIFBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmcgKFBNTCkgYW5kIGNvbnNvbGlkYXRlcyBzaGFyZWQgUE1MIGhhbmRsaW5nIGxvZ2ljIGJldHdlZW4gSW50ZWwgVk1YIGFuZCBBTUQgU1ZNLlxcblxcbkFsbCBhbGxvY2F0ZWQgUE1MIGJ1ZmZlciBwYWdlcyBhcmUgemVyby1pbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIHZpYSBgX19HRlBfWkVST2AgKGluIGBhbGxvY19wYWdlYCBhbmQgYHNucF9zYWZlX2FsbG9jX3BhZ2Vfbm9kZWApLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29weSBvcGVyYXRpb25zIChlLmcuIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCBvdXRwdXRzKSwgZG8gbm90IGxlYXZlIGFueSBzdGFjayBvciBoZWFwIHN0cnVjdHVyZXMgdW5pbml0aWFsaXplZCwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29udHJvbC1mbG93IGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb247IHN0YW5kYXJkIEtBU0FOIGFuZCBmdW5jdGlvbmFsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[1] Phase: Succeeded StartedAt: 2026-09-07 09:12:08 +0000 UTC FinishedAt: 2026-09-07 09:12:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 09:12:08 +0000 UTC FinishedAt: 2026-09-07 09:12:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2] Phase: Succeeded StartedAt: 2026-09-07 09:12:08 +0000 UTC FinishedAt: 2026-09-07 12:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 09:12:08 +0000 UTC FinishedAt: 2026-09-07 12:51:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 09:12:08 +0000 UTC FinishedAt: 2026-09-07 09:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:12:08 +0000 UTC FinishedAt: 2026-09-07 09:12:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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-workflow6d6cp/series-workflow6d6cp-convert-artifact-2478559230/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 09:12:18 +0000 UTC FinishedAt: 2026-09-07 09:28:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:12:18 +0000 UTC FinishedAt: 2026-09-07 09:28:44 +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:*9e0b1c8d-d19f-4150-ae8a-6c3067812acf,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-workflow6d6cp/series-workflow6d6cp-convert-artifact-2478559230/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": "d6d0938b-bbfa-47f0-9626-8fec42218ca4", "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-workflow6d6cp/series-workflow6d6cp-build-action-1747630052/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:12:18 +0000 UTC FinishedAt: 2026-09-07 09:28:34 +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:*9e0b1c8d-d19f-4150-ae8a-6c3067812acf,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-workflow6d6cp/series-workflow6d6cp-convert-artifact-2478559230/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": "d6d0938b-bbfa-47f0-9626-8fec42218ca4", "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-workflow6d6cp/series-workflow6d6cp-build-action-1747630052/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 09:28:44 +0000 UTC FinishedAt: 2026-09-07 09:28:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:28:44 +0000 UTC FinishedAt: 2026-09-07 09:28:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 09:28:44 +0000 UTC FinishedAt: 2026-09-07 09:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:28:44 +0000 UTC FinishedAt: 2026-09-07 09:28:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-workflow6d6cp/series-workflow6d6cp-convert-artifact-3164879665/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 09:28:54 +0000 UTC FinishedAt: 2026-09-07 09:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:28:54 +0000 UTC FinishedAt: 2026-09-07 09:30:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6d0938b-bbfa-47f0-9626-8fec42218ca4,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-workflow6d6cp/series-workflow6d6cp-build-action-1747630052/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-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 09:30:56 +0000 UTC FinishedAt: 2026-09-07 09:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:30:56 +0000 UTC FinishedAt: 2026-09-07 09:30:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 09:30:56 +0000 UTC FinishedAt: 2026-09-07 09:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:30:56 +0000 UTC FinishedAt: 2026-09-07 09:46:57 +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:*9e0b1c8d-d19f-4150-ae8a-6c3067812acf,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-workflow6d6cp/series-workflow6d6cp-convert-artifact-3164879665/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": "325fa552-ec5a-4df1-8ea6-d0ddc63a9c8c", "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-workflow6d6cp/series-workflow6d6cp-build-action-1005025533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:30:56 +0000 UTC FinishedAt: 2026-09-07 09:46:47 +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:*9e0b1c8d-d19f-4150-ae8a-6c3067812acf,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-workflow6d6cp/series-workflow6d6cp-convert-artifact-3164879665/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": "325fa552-ec5a-4df1-8ea6-d0ddc63a9c8c", "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-workflow6d6cp/series-workflow6d6cp-build-action-1005025533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 09:46:57 +0000 UTC FinishedAt: 2026-09-07 09:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:46:57 +0000 UTC FinishedAt: 2026-09-07 09:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 09:46:57 +0000 UTC FinishedAt: 2026-09-07 09:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:46:57 +0000 UTC FinishedAt: 2026-09-07 09:48:38 +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:*325fa552-ec5a-4df1-8ea6-d0ddc63a9c8c,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-workflow6d6cp/series-workflow6d6cp-build-action-1005025533/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-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 09:48:48 +0000 UTC FinishedAt: 2026-09-07 12:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:48:48 +0000 UTC FinishedAt: 2026-09-07 12:51:17 +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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"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:*d6d0938b-bbfa-47f0-9626-8fec42218ca4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*325fa552-ec5a-4df1-8ea6-d0ddc63a9c8c,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-workflow6d6cp/series-workflow6d6cp-build-action-1747630052/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-workflow6d6cp/series-workflow6d6cp-build-action-1005025533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:48:48 +0000 UTC FinishedAt: 2026-09-07 09:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:48:48 +0000 UTC FinishedAt: 2026-09-07 09:48:52 +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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"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-workflow6d6cp/series-workflow6d6cp-convert-artifact-2102057446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:48:48 +0000 UTC FinishedAt: 2026-09-07 09:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 09:48:48 +0000 UTC FinishedAt: 2026-09-07 09:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:48:48 +0000 UTC FinishedAt: 2026-09-07 09:48:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:48:58 +0000 UTC FinishedAt: 2026-09-07 12:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6d6cp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"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":["kvm_flush_pml_buffer","kvm_update_cpu_dirty_logging","svm_update_cpu_dirty_logging","svm_flush_pml_buffer","pml_full_interception","nested_svm_exit_special","nested_vmcb02_prepare_control","vmx_update_cpu_dirty_logging","vmx_flush_pml_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL"],"series_id":"4e4d880d-a941-4e96-bb8b-96e154f60aa5","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-09-07 09:48:58 +0000 UTC FinishedAt: 2026-09-07 12:51:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6d0938b-bbfa-47f0-9626-8fec42218ca4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*325fa552-ec5a-4df1-8ea6-d0ddc63a9c8c,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-workflow6d6cp/series-workflow6d6cp-build-action-1747630052/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-workflow6d6cp/series-workflow6d6cp-build-action-1005025533/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-workflow6d6cp/series-workflow6d6cp-convert-artifact-2102057446/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,}