Name: series-workflowxfldk Phase: Succeeded StartedAt: 2026-08-19 09:29:17 +0000 UTC FinishedAt: 2026-08-19 13:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[0] Phase: Succeeded StartedAt: 2026-08-19 09:29:17 +0000 UTC FinishedAt: 2026-08-19 09:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 09:29:17 +0000 UTC FinishedAt: 2026-08-19 09:32:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "a2d17605-f7c2-4cae-8f6e-0acb402bdfff" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ocfs2_init_acl", "ocfs2_init_security_and_acl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPQ0ZTMiB0byBmZXRjaCB0aGUgZGVmYXVsdCBQT1NJWCBBQ0wgYmVmb3JlIHN0YXJ0aW5nIGEgdHJhbnNhY3Rpb24gb3IgdGFraW5nIGxvY2tzIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgaW4gYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBWRlMgc3lzdGVtIGNhbGxzIChlLmcuLCBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCkgb24gYW4gT0NGUzIgbW91bnQuIFRoZXJlZm9yZSwgaXQgaGFzIGEgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwN2RhYjJlNTAyZGJmMTY2YjI2ZWQzMmEwODBjZWNkOTZiYTEyOWU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDk6MzA6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xuaW5kZXggYWYxZTJjZWRiMjE3Zi4uYTE2Mzg2YzIzNjI0MyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuY1xuQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsLFxuIFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbiBcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4ge1xuQEAgLTM2NCwxMiAmIzQzOzM2NCw4IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuIFxuIFx0aWYgKCFTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCxcbi1cdFx0XHRcdFx0XHQgICBkaXJfYmgpO1xuLVx0XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0aWYgKElTX0VSUihhY2wpKVxuLVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcbiYjNDM7XHRcdFx0aWYgKGRlZmF1bHRfYWNsKVxuJiM0MztcdFx0XHRcdGFjbCA9IHBvc2l4X2FjbF9kdXAoZGVmYXVsdF9hY2wpO1xuIFx0XHR9XG4gXHRcdGlmICghYWNsKSB7XG4gXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Li5jMWJhMmViMjc0ZWNjIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjEsNyAmIzQzOzIxLDcgQEAgaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XG4gZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4mIzQzO1x0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBwb3NpeF9hY2wgKixcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4gXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xuaW5kZXggMTI3NzY2NmM3N2NkMi4uNmJmYzJiOWFiZTc1ZSAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNyw2ICYjNDM7MjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3F1b3Rhb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcdTAwM2VcbiBcbkBAIC0yNTYsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wgPSBOVUxMO1xuIFxuIFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4gXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbkBAIC0zNjIsNiAmIzQzOzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuIFxuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0ZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRzdGF0dXMgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0ZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRnb3RvIGxlYXZlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLFxuIFx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4gXHRcdFx0XHRcdFx0XHQgICAgeGF0dHJfY3JlZGl0cykpO1xuQEAgLTQxMSw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0aW5jX25saW5rKGRpcik7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLFxuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBkZWZhdWx0X2FjbCxcbiBcdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4gXG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG5AQCAtNDg4LDYgJiM0Mzs0OTksOSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKG1ldGFfYWMpXG4gXHRcdG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTtcbiBcbiYjNDM7XHRpZiAoZGVmYXVsdF9hY2wpXG4mIzQzO1x0XHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFdlIHNob3VsZCBjYWxsIGlwdXQgYWZ0ZXIgdGhlIGlfcndzZW0gb2YgdGhlIGJpdG1hcCBiZWVuXG4gXHQgKiB1bmxvY2tlZCBpbiBvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQsIG9yIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTI2LDYgJiM0MzsyNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG9zaXhfYWNsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NjbHVzdGVyL21hc2tsb2cuaFx1MDAzZVxuIFxuQEAgLTcyNTcsNiAmIzQzOzcyNTgsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgJiM0Mzs3MjcxLDIzIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcdFx0Z290byBsZWF2ZTtcbiBcdH1cbi1cdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGlmIChPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYiktXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0ZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0ZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRlZmF1bHRfYWNsLCBOVUxMLCBOVUxMKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbiYjNDM7XHRpZiAoZGVmYXVsdF9hY2wpXG4mIzQzO1x0XHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XG4mIzQzO3VubG9jazpcbiBcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xuIFx0YnJlbHNlKGRpcl9iaCk7XG4gbGVhdmU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA3ZGFiMmU1MDJkYmYxNjZiMjZlZDMyYTA4MGNlY2Q5NmJhMTI5ZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozMDo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmMKaW5kZXggYWYxZTJjZWRiMjE3Zi4uYTE2Mzg2YzIzNjI0MyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKJiM0MzsJCSAgIHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsLAogCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpCiB7CkBAIC0zNjQsMTIgJiM0MzszNjQsOCBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwKIAogCWlmICghU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJCWRvd25fcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwKLQkJCQkJCSAgIGRpcl9iaCk7Ci0JCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQkJaWYgKElTX0VSUihhY2wpKQotCQkJCXJldHVybiBQVFJfRVJSKGFjbCk7CiYjNDM7CQkJaWYgKGRlZmF1bHRfYWNsKQomIzQzOwkJCQlhY2wgPSBwb3NpeF9hY2xfZHVwKGRlZmF1bHRfYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkgewogCQkJbW9kZSA9IGlub2RlLSZndDtpX21vZGUgJmFtcDsgfmN1cnJlbnRfdW1hc2soKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmgKaW5kZXggNjY3YzZmMDNmYTYwNi4uYzFiYTJlYjI3NGVjYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmgKQEAgLTIxLDcgJiM0MzsyMSw3IEBAIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTsKIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiBleHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAomIzQzOwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBwb3NpeF9hY2wgKiwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDIuLjZiZmMyYjlhYmU3NWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9oaWdobWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcXVvdGFvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pdmVyc2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wb3NpeF9hY2wuaCZndDsKIAogI2luY2x1ZGUgJmx0O2NsdXN0ZXIvbWFza2xvZy5oJmd0OwogCkBAIC0yNTYsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJc2lnc2V0X3Qgb2xkc2V0OwogCWludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDsKIAogCXRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktJmd0O2RfbmFtZS5sZW4sIGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWUsCiAJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLSZndDtpcF9ibGtubywKQEAgLTM2Miw2ICYjNDM7MzY0LDE1IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCWdvdG8gbGVhdmU7CiAJfQogCiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7CiYjNDM7CQlpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkgewomIzQzOwkJCXN0YXR1cyA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpOwomIzQzOwkJCWRlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlnb3RvIGxlYXZlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi0mZ3Q7c2IsCiAJCQkJCQkJICAgIFNfSVNESVIobW9kZSksCiAJCQkJCQkJICAgIHhhdHRyX2NyZWRpdHMpKTsKQEAgLTQxMSw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIGRlZmF1bHRfYWNsLAogCQkJIG1ldGFfYWMsIGRhdGFfYWMpOwogCiAJaWYgKHN0YXR1cyAmbHQ7IDApIHsKQEAgLTQ4OCw2ICYjNDM7NDk5LDkgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAobWV0YV9hYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOwogCiYjNDM7CWlmIChkZWZhdWx0X2FjbCkKJiM0MzsJCXBvc2l4X2FjbF9yZWxlYXNlKGRlZmF1bHRfYWNsKTsKJiM0MzsKIAkvKgogCSAqIFdlIHNob3VsZCBjYWxsIGlwdXQgYWZ0ZXIgdGhlIGlfcndzZW0gb2YgdGhlIGJpdG1hcCBiZWVuCiAJICogdW5sb2NrZWQgaW4gb2NmczJfZnJlZV9hbGxvY19jb250ZXh0LCBvciB0aGUKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IGZjZGRkM2MxM2FjZGQuLjFiMDIwZjMzZmU2NTggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuYwpAQCAtMjYsNiAmIzQzOzI2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZWN1cml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wb3NpeF9hY2wuaCZndDsKIAogI2luY2x1ZGUgJmx0O2NsdXN0ZXIvbWFza2xvZy5oJmd0OwogCkBAIC03MjU3LDYgJiM0Mzs3MjU4LDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDsKIAogCXJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpOwogCWlmIChyZXQpIHsKQEAgLTcyNjksMTAgJiM0Mzs3MjcxLDIzIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBsZWF2ZTsKIAl9Ci0JcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKE9DRlMyX1NCKGRpci0mZ3Q7aV9zYiktJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7CiYjNDM7CQlpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpOwomIzQzOwkJCWRlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkZWZhdWx0X2FjbCwgTlVMTCwgTlVMTCk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiYjNDM7CWlmIChkZWZhdWx0X2FjbCkKJiM0MzsJCXBvc2l4X2FjbF9yZWxlYXNlKGRlZmF1bHRfYWNsKTsKJiM0Mzt1bmxvY2s6CiAJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7CiAJYnJlbHNlKGRpcl9iaCk7CiBsZWF2ZToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE9DRlMyIEFDTCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgc2VlbXMgdG8gYmUgaGl0dGluZyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbTogYGFjbC5jYCwgYGFjbC5oYCwgYG5hbWVpLmNgLCBhbmQgYHhhdHRyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyB0aGUgZGVmYXVsdCBBY2Nlc3MgQ29udHJvbCBMaXN0IChBQ0wpIGlzIGhhbmRsZWQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIGBvY2ZzMl9pbml0X2FjbGAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IGEgYHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsYCBkaXJlY3RseSwgcmF0aGVyIHRoYW4gYSBgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmhgLiBUaGUgcmF0aW9uYWxlIGFwcGVhcnMgdG8gYmUgYWJvdXQgcmVzb2x2aW5nIGEgZGVhZGxvY2sgb3IgcG90ZW50aWFsbHkgb3B0aW1pemluZyBwZXJmb3JtYW5jZS4gVGhlIGNvZGUgbm93IHJldHJpZXZlcyB0aGUgZGVmYXVsdCBBQ0wgKmJlZm9yZSoga2lja2luZyBvZmYgYSB0cmFuc2FjdGlvbiBvciBhY3F1aXJpbmcgbG9ja3MuCgpJJiMzOTttIHNlZWluZyB0aGlzIHBhdHRlcm4gaW4gYG9jZnMyX21rbm9kYCB3aGVyZSBgZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpYCBpcyBjYWxsZWQgYmVmb3JlIGBvY2ZzMl9zdGFydF90cmFuc2AuIFNhbWUgdGhpbmcgaW4gYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIHdoZXJlIHRoZSBBQ0wgaXMgZmV0Y2hlZCBwcmlvciB0byB0aGUgY2FsbCB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGlzIG1ha2VzIHNlbnNlLCBmZXRjaGluZyB3aGF0IHdlIG5lZWQsIGFoZWFkIG9mIHdoZXJlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIGRhdGEgcHJpb3IgdG8gdGhlIGxvY2sgYWNxdWlzaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBuYXR1cmUgb2YgdGhlIGRlYWRsb2NrIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcsIGJ1dCBpdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgYXBwcm9hY2gsIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24uCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgZGV0YWlscywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgT0NGUzIgaXMgZXZlbiBhIHRhcmdldCB3b3J0aCBteSB0aW1lLiBJcyBpdCBlYXNpbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBhbmQgZnV6emluZz8gR29vZCwgT0NGUzIgaXMgaW5kZWVkIGEgZmlsZXN5c3RlbSwgc28gaXQgc2hvdWxkIGJlIG1vdW50YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBRRU1VIOKAkyBhbmQgeWVzLCBpdCYjMzk7cyBhIHN0YW5kYXJkIGZpbGVzeXN0ZW0uIFNvLCBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgd291bGQgcHJvdmlkZSBzb21lIHVzZWZ1bCBpbnNpZ2h0LiBJIHdpbGwgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZW5hYmxlZCBhbmQgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZyBvcHRpb25zIHRvIGJ1aWxkIGEgZnV6emVyIGZvciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxuZnMvb2NmczIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNDEtXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxuZnMvb2NmczIvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy01My1cbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqT0NGUzJfRlMgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRpbWUgdG8gZ2V0IG15IGhlYWQgd3JhcHBlZCBhcm91bmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgT0NGUzJfRlMuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXBwb3J0IG5lZWRlZC4KCiogICAqKkZpcnN0LCB0aGUgYmFzaWNzOioqIFdoYXQgYXJlIHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzIHRoYXQgT0NGUzIgcmVsaWVzIHVwb24/IEkmIzM5O20gdGhpbmtpbmcgZmlsZSBzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUsIGJsb2NrIGRldmljZSBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNsdXN0ZXJlZCBmaWxlIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4KKiAgICoqTmV4dCwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIE9DRlMyIHRvIGJ1aWxkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHk/IEkgcmVtZW1iZXIgcGFzdCBpc3N1ZXMgd2l0aCBjZXJ0YWluIG9wdGlvbnMgYmVpbmcgc3VidGx5IGluY29tcGF0aWJsZSwgbGVhZGluZyB0byBvYnNjdXJlIGZhaWx1cmVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY2xlYXIuCiogICAqKlVzZXIgc3BhY2Ugc3VwcG9ydDoqKiBXaGF0IGxpYnJhcmllcyBhbmQgdG9vbHMgZG9lcyBhIHVzZXIgbmVlZCB0byBpbnRlcmFjdCB3aXRoIE9DRlMyPyBUaGUgT0NGUzIgbWFuYWdlbWVudCB1dGlsaXRpZXMgY29tZSB0byBtaW5kLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGFyZSBhdmFpbGFibGUgYW5kIGFwcHJvcHJpYXRlbHkgdmVyc2lvbmVkLiBBcmUgdGhlcmUgYW55IGV4dGVybmFsIHRvb2xzIG9yIGxpYnJhcmllcyB0aGF0IHdlIGRlcGVuZCBvbj8KKiAgICoqSW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtczoqKiBEb2VzIE9DRlMyIGhhdmUgYW55IGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEkgc2hvdWxkIGNoZWNrIGFueSBjb25mbGljdHMgd2l0aCBvdGhlciBmaWxlIHN5c3RlbXMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoaW5ncyBsaWtlIHNlY3VyaXR5IG1vZHVsZXMsIGFuZCBldmVuIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHJlY2FsbCBzb21lIHBhc3QgY29uZmxpY3RzIHJlbGF0ZWQgdG8gbG9ja2luZyBvciBjYWNoaW5nIGJlaGF2aW9yIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuCiogICAqKlZlcnNpb24gY29tcGF0aWJpbGl0eToqKiBDcnVjaWFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBhbnkgZGVwcmVjYXRpb25zIG9yIHJlbW92YWxzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGNoZWNrIGZvciB1cHN0cmVhbSBjaGFuZ2VzIGFuZCBhbnkgY29ycmVzcG9uZGluZyBwYXRjaGVzIG9yIHdvcmthcm91bmRzLgoqICAgKipEb2N1bWVudGF0aW9uIHJldmlldzoqKiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgb3ZlciBhbnkgZG9jdW1lbnRhdGlvbiB0byByZWFjcXVhaW50IG15c2VsZiB3aXRoIHRoZSBkZXNpZ24uIFRoaXMgd291bGQgaW5jbHVkZSBhbnkgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbnMgb3IgUkZDcy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGFsbCB0aGUgcGllY2VzIHJlcXVpcmVkIGZvciBPQ0ZTMiYjMzk7cyBzdWNjZXNzZnVsIG9wZXJhdGlvbiwgYW5kIGVuc3VyaW5nIHRoZXkmIzM5O3JlIGFsbCBhY2NvdW50ZWQgZm9yLiBUaGUgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxuZnMvb2NmczIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNDEtXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxuZnMvb2NmczIvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy01My1cbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzLCBFdmVyeXdoZXJlLi4uKioKClJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBwYXVzZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBsYXkgb3V0IHRoZSBncm91bmR3b3JrIGZpcnN0LCBhbmQgbm90IGNoYXJnZSBibGluZGx5IGFoZWFkLiBXaGF0IGFyZSB0aGUgKmV4YWN0KiBlbGVtZW50cyB0aGlzIGhpbmdlcyBvbj8gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIGRhdGFzZXRzLCBvciBleHRlcm5hbCBmYWN0b3JzIGFyZSBnb2luZyB0byBpbmZsdWVuY2UgdGhlIG91dGNvbWUgaGVyZT8gSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byBwcm9wZXJseSBhc3Nlc3Mgb3IgcGxhbiB3aXRob3V0IGtub3dpbmcgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyByZXF1aXJlbWVudHM7IGl04oCZcyBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhdGUgd2ViIG9mIGludGVyY29ubmVjdGlvbnMuIFRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscywgYXMgdGhleSBzYXksIGFuZCB0aG9zZSBkZXRhaWxzIGFyZSB0aGUgZGVwZW5kZW5jaWVzLiBBIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcsIG5vdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCB3aWxsIGNvbWUgYmFjayB0byBiaXRlIG1lIGxhdGVyLiBUaW1lIHRvIGNsYXJpZnkgd2hhdCAqZXhhY3RseSogaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE9DRlMyX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgSkJEMlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgUVVPVEFcbiAgIDk6XHRcdHNlbGVjdCBRVU9UQV9UUkVFXG4gIDEwOlx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDExOlx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBPQ0ZTMiBpcyBhIGdlbmVyYWwgcHVycG9zZSBleHRlbnQgYmFzZWQgc2hhcmVkIGRpc2sgY2x1c3RlciBmaWxlXG4gIDE0Olx0XHQgIHN5c3RlbSB3aXRoIG1hbnkgc2ltaWxhcml0aWVzIHRvIGV4dDMuIEl0IHN1cHBvcnRzIDY0IGJpdCBpbm9kZVxuICAxNTpcdFx0ICBudW1iZXJzLCBhbmQgaGFzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kaW5nIG1ldGFkYXRhIGdyb3VwcyB3aGljaCBtYXlcbiAgMTY6XHRcdCAgYWxzbyBtYWtlIGl0IGF0dHJhY3RpdmUgZm9yIG5vbi1jbHVzdGVyZWQgdXNlLlxuICAxNzpcdFxuICAxODpcdFx0ICBZb3UmIzM5O2xsIHdhbnQgdG8gaW5zdGFsbCB0aGUgb2NmczItdG9vbHMgcGFja2FnZSBpbiBvcmRlciB0byBhdCBsZWFzdFxuICAxOTpcdFx0ICBnZXQgXCYjMzQ7bW91bnQub2NmczJcJiMzNDsuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgT0NGUzIgRmlsZXN5c3RlbSBNb2R1bGUgRGVwZW5kZW5jaWVzIGFuZCBDYWxsIFBhdGhzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBgT0NGUzJfRlNgIG1vZHVsZSByZXF1aXJlcyBhIGZldyBwcmVyZXF1aXNpdGVzOiBgSU5FVGAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiBJdCBhbHNvIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgRlNfUE9TSVhfQUNMYC4gU28sIHRvIGdldCB0aGluZ3Mgcm9sbGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYE9DRlMyX0ZTYCBlbmFibGVkLgoKVGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gYG9jZnMyX21rbm9kYCwgdGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhhdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgbWtub2RgIHN5c2NhbGwgd2hlbiB3b3JraW5nIHdpdGggdGhlIE9DRlMyIGZpbGVzeXN0ZW0uIE5vdywgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgdGhlIG1vcmUgaW50ZXJlc3Rpbmcgb25lIHRvIG1lLiBJIGtub3cgaXQmIzM5O3MgKmNhbGxlZCogZnJvbSBgb2NmczJfbWtub2RgLCB3aGljaCB3ZSBqdXN0IGlkZW50aWZpZWQgYXMgbGlua2VkIHRvIHRoZSBgbWtub2RgIHN5c3RlbSBjYWxsLiBCZXlvbmQgdGhhdCwgaXQgYWxzbyBzZWVtcyB0byBiZSBpbnZva2VkIGZyb20gYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGFuZCBgb2NmczJfc3ltbGlua2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIGEgYnJvYWQgc2V0IG9mIG9wZXJhdGlvbnMgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBhY3R1YWxseSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQyMzg9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTYtXHRpZiAoIXByZXNlcnZlKSB7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Mjk3Olx0XHRlcnJvciA9IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChkaXIsIG5ld19vcnBoYW5faW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjk4LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZuZXdfZGVudHJ5LVx1MDAzZWRfbmFtZSk7XG4tLVxuZnMvb2NmczIveGF0dHIuYz03MTczPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcyNTQtICovXG5mcy9vY2ZzMi94YXR0ci5jOjcyNTU6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmMtNzI1Ni1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuaD04MD1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuaC04NC1cdFx0XHQgYm9vbCBwcmVzZXJ2ZV9zZWN1cml0eSk7XG5mcy9vY2ZzMi94YXR0ci5oOjg1OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG5mcy9vY2ZzMi94YXR0ci5oLTg2LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkhhbmcgb24gYSBzZWNvbmQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0Li4uKiogSSB0aG91Z2h0IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIHdhcyBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uLCBidXQgdGhlIHRleHQgaXMgc2F5aW5nIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYG9jZnMyX3JlZmxpbmtgPyBUaGF0IGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQsIG5vdCBhdCBhbGwuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGNhbGwgZ3JhcGguIEl0IHNlZW1zIHVubGlrZWx5IHRoaXMgaXMgY29ycmVjdC4gSSBiZXQgaXQgaXMgY2FsbGVkIG90aGVyIHBsYWNlcyB0b28uIExldCBtZSBzZWFyY2ggZm9yIGl0IGFuZCBtYWtlIHN1cmUuIExldCBtZSBnbyBsb29rIGF0IGBvY2ZzMl9ta25vZGAsIGJlY2F1c2UgdGhhdCBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3Qgd2hlcmUgdGhvc2UgdGhpbmdzIGFyZSBhbHNvIG5lZWRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFydCBvZiB0aGUgT0NGUzIgY29kZSBiYXNlIGlzIGFjY3VyYXRlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBzZWN1cml0eSBhbmQgQUNMIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta25vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYz0zMjI9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL29jZnMyL2FjbC5jLTM0OS0gKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbmZzL29jZnMyL2FjbC5jOjM1MDogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG5mcy9vY2ZzMi9hY2wuYy0zNTEtICovXG4tLVxuZnMvb2NmczIvZGlyLmM9MjIxMz1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9kaXIuYy0yMjM3LS8qXG5mcy9vY2ZzMi9kaXIuYzoyMjM4OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcbmZzL29jZnMyL2Rpci5jLTIyMzktICogdGhlIGlubGluZS1kYXRhIGZsYWcgYW5kIGluaXRpYWxpemVzIHRoZSBpbmxpbmUtZGF0YSBzZWN0aW9uLlxuLS1cbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXG4tLVxuZnMvb2NmczIvaW5vZGUuYy0zODctXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxuZnMvb2NmczIvaW5vZGUuYzozODg6XHQgKiBieSBvY2ZzMl9ta25vZF9sb2NrZWQoKSwgc28gYSBmYWlsdXJlIGlzIGEgY29kZSBidWcuXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cdCAqL1xuLS1cbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvb2NmczIvam91cm5hbC5oLTQyMy0gKiBibG9ja3MgJiM0MzsgcXVvdGEgdXBkYXRlICovXG5mcy9vY2ZzMi9qb3VybmFsLmg6NDI0OnN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpcixcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXHRcdFx0XHQgICAgICBpbnQgeGF0dHJfY3JlZGl0cylcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUwLXtcbmZzL29jZnMyL2pvdXJuYWwuaDo1NTE6XHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUyLVxuLS1cbmZzL29jZnMyL25hbWVpLmMtNTYtXG5mcy9vY2ZzMi9uYW1laS5jOjU3OnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvbmFtZWkuYy01OC1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTIxNj1zdGF0aWMgdm9pZCBvY2ZzMl9jbGVhbnVwX2FkZF9lbnRyeV9mYWlsdXJlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjMwLVxuZnMvb2NmczIvbmFtZWkuYzoyMzE6c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL29jZnMyL25hbWVpLmMtMjMyLVx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNjEtXG5mcy9vY2ZzMi9uYW1laS5jOjI2MjpcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy0yNjMtXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTM3NS1cbmZzL29jZnMyL25hbWVpLmM6Mzc2Olx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYixcbmZzL29jZnMyL25hbWVpLmMtMzc3LVx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zOTUtXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cbmZzL29jZnMyL25hbWVpLmM6Mzk2Olx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxuZnMvb2NmczIvbmFtZWkuYy0zOTctXHRcdFx0XHQgICAgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTUyNC1cbmZzL29jZnMyL25hbWVpLmM6NTI1OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXG5mcy9vY2ZzMi9uYW1laS5jLTUyNi1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02MzYtXG5mcy9vY2ZzMi9uYW1laS5jOjYzNzpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL25hbWVpLmMtNjM4LVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjU5LVxuZnMvb2NmczIvbmFtZWkuYzo2NjA6XHRyZXR1cm4gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSwgZGV2LCBuZXdfZmVfYmgsXG5mcy9vY2ZzMi9uYW1laS5jLTY2MS1cdFx0XHRcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTY2NT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NzMtXHRcdFx0ICBPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuZnMvb2NmczIvbmFtZWkuYzo2NzQ6XHRyZXQgPSBvY2ZzMl9ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xuZnMvb2NmczIvbmFtZWkuYy02NzUtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL25hbWVpLmM9NjgxPXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjkwLVx0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbmZzL29jZnMyL25hbWVpLmM6NjkxOlx0cmV0ID0gb2NmczJfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbmZzL29jZnMyL25hbWVpLmMtNjkyLVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTE4MjE9c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTk2My1cbmZzL29jZnMyL25hbWVpLmM6MTk2NDpcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjUtXHRcdFx0XHQgICAgMCwgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI1Mjg9aW50IG9jZnMyX2NyZWF0ZV9pbm9kZV9pbl9vcnBoYW4oc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTY4LVxuZnMvb2NmczIvbmFtZWkuYzoyNTY5Olx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYiwgMCwgMCkpO1xuZnMvb2NmczIvbmFtZWkuYy0yNTcwLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTkxLVx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXG5mcy9vY2ZzMi9uYW1laS5jOjI1OTI6XHRzdGF0dXMgPSBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLFxuZnMvb2NmczIvbmFtZWkuYy0yNTkzLVx0XHRcdFx0ICAgICAgMCwgXHUwMDI2bmV3X2RpX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yOTQwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjk0Ny1cdC5ta2Rpclx0XHQ9IG9jZnMyX21rZGlyLFxuZnMvb2NmczIvbmFtZWkuYzoyOTQ4Olx0Lm1rbm9kXHRcdD0gb2NmczJfbWtub2QsXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDktXHQucmVuYW1lXHRcdD0gb2NmczJfcmVuYW1lLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjE5OC1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjE5OTpUUkFDRV9FVkVOVChvY2ZzMl9ta25vZCxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cdFRQX1BST1RPKHZvaWQgKmRpciwgdm9pZCAqZGVudHJ5LCBpbnQgbmFtZV9sZW4sIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIE9DRlMyIEZpbGVzeXN0ZW0qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgb2NmczJfbWtub2RgIGlzIGNsZWFybHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIGZpbGUgY3JlYXRpb24gcHJpbWl0aXZlcyBsaWtlIGBta2RpcmAsIGBjcmVhdGVgLCBhbmQsIHdlbGwsIGBta25vZGAgaXRzZWxmLiBUaGVuLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyB0cmlnZ2VyZWQgYnkgYG9jZnMyX3JlZmxpbmtgLCB3aGljaCBtYWtlcyBzZW5zZS4gSG1tLCBidXQgKndhaXQqLCBgb2NmczJfbWtub2RgIGRpcmVjdGx5IGNhbGxzIGBvY2ZzMl9pbml0X2FjbGAuIEFuZCwgbG9va2luZyBhdCBpdCBjbG9zZXIsIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFsc28gY2FsbHMgYG9jZnMyX2luaXRfYWNsYC4gVGhlIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbnMgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZmV0Y2hpbmcgb2YgdGhlIGRlZmF1bHQgQUNMIGluIGJvdGggYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKmJlZm9yZSogdHJhbnNhY3Rpb24gc3RhcnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHByb21pc2luZyBhcmVhIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBmb2N1cyB3b3VsZCBiZSBvbiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYW5kIGBvY2ZzMl9pbml0X2FjbGAgYXMgZm9jdXMgc3ltYm9scy4gQnV0IGhvbGQgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBvY2ZzMl9ta25vZGAgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIFRoYXQgY2hhbmdlcyB0aGluZ3MgYSBiaXQuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBgb2NmczJfaW5pdF9hY2xgIGNhbGxzLCBtYWtpbmcgaXQgc3RhdGljIHJlc3RyaWN0cyB1c2FnZS4gU28sIGNvbnNpZGVyaW5nIHRoaXMsIGEgYmV0dGVyIGFwcHJvYWNoIHRvIGdldCBhdCB0aGUga2V5IGZ1bmN0aW9ucyBpcyB0byB1c2UgYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBhbmQgYG9jZnMyX2luaXRfYWNsYCBhcyB0aGUgbW9yZSBwcmFjdGljYWwgZm9jdXMgc3ltYm9scy4KCk9oLCBvbmUgbW9yZSB0aGluZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBvY2ZzMl9pbml0X2FjbGAuIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gR29vZC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGluIGBmcy9vY2ZzMi9hY2wuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG9jZnMyX2luaXRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MzIyPWludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNTEtICovXG5mcy9vY2ZzMi9hY2wuYzozNTI6aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi9hY2wuYy0zNTMtXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgYXMgSSB3b3VsZCBpbiBteSBvd24gd29yazoKCioqQUNMIEluaXRpYWxpemF0aW9uIGFuZCBPYmplY3QgQ3JlYXRpb246IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBHb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4gTm90IGJlaW5nIHN0YXRpYyBnaXZlcyB1cyBzb21lIGZsZXhpYmlsaXR5LCBvcGVucyB0aGVtIHVwIGZvciBwb3RlbnRpYWwgZXh0ZXJuYWwgdXNlIG9yIG1vZHVsZSBpbnRlcmFjdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGEgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbSBsaWtlIE9DRlMyLiBJJiMzOTtkIHR5cGljYWxseSB3YW50IHRvIGtub3cgd2h5IHRoZXkgKndvdWxkKiBiZSBzdGF0aWMsIHdoaWNoIHdvdWxkIGJlIGdlbmVyYWxseSBpZiB0aGV5IGFyZSBvbmx5IGV2ZXIgdXNlZCB3aXRoaW4gdGhlIHNhbWUgZmlsZSBhbmQgdGh1cyB2aXNpYmlsaXR5IGlzIGJlaW5nIHJlZHVjZWQuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGlzIG5vbi1zdGF0aWMtbmVzcyBpcyBjb25zaXN0ZW50IGFuZCBjaGVjayB0aGUgY2FsbGVycyBvciB0aG9zZSB0aGF0IG1pZ2h0IGNhbGwgdGhlc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIHNpbmNlIHRob3NlIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBpbml0aWFsaXppbmcgQUNMcyB3aGVuIG5ldyBkaXJlY3RvcmllcyBvciBmaWxlcyBhcmUgbWFkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIEFDTCBpbml0aWFsaXphdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgb2JqZWN0IGNyZWF0aW9uIHByb2Nlc3MgaW4gdGhlc2UgY3J1Y2lhbCBmdW5jdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGZsb3cgaXMgc291bmQgYW5kIHRoZSBBQ0wgaGFuZGxpbmcgaXMgcm9idXN0IGluIHRoZSBjcmVhdGlvbiBjb250ZXh0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSwgd2hlbiwgYW5kIGhvdyB0aGVzZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhvc2UgY29yZSBvcGVyYXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNhbGxzPyBFcnJvciBoYW5kbGluZz8gQW5kIEkmIzM5O2xsIGJlIG5vdGluZyBhbnkgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGlzIGFyZWEuIEl0JiMzOTtzIGEgcXVpY2sgc3BvdCBjaGVjayB0byBtYWtlIHN1cmUgbm90aGluZyBzdXJwcmlzaW5nIHBvcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz02Mzc9c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NjQtXG5mcy9vY2ZzMi9uYW1laS5jOjY2NTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9vY2ZzMi9uYW1laS5jLTY2Ni1cdFx0XHRcdCAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NzEtXG5mcy9vY2ZzMi9uYW1laS5jOjY3MjpcdHRyYWNlX29jZnMyX21rZGlyKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy02NzMtXHRcdFx0ICBPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuLS1cbmZzL29jZnMyL25hbWVpLmM9Mjk0MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDYtXHQuc3ltbGlua1x0PSBvY2ZzMl9zeW1saW5rLFxuZnMvb2NmczIvbmFtZWkuYzoyOTQ3Olx0Lm1rZGlyXHRcdD0gb2NmczJfbWtkaXIsXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXHQubWtub2RcdFx0PSBvY2ZzMl9ta25vZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE9DRlMyIEluaXRpYWxpemF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaG93IE9DRlMyIGhhbmRsZXMgQUNMIGluaXRpYWxpemF0aW9uIGFuZCByZWxhdGVkIHNlY3VyaXR5IGNvbnRleHRzLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGx5IOKAkyB3ZSBjYW4ganVzdCByZWx5IG9uIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGJlY2F1c2UsIGFzIGZhciBhcyBJIGNhbiBzZWUgYXQgdGhpcyBwb2ludCwgdGhlIGNvcmUgcm91dGluZXMgYXJlIHN0YXRpYy4KClRoZW4gSSBwYXVzZWQg4oCTIGBvY2ZzMl9ta25vZGAgKmlzKiBzdGF0aWMsIGJ1dCBvZiBjb3Vyc2UsIGl0JiMzOTtzIGFuIGlub2RlIG9wZXJhdGlvbi4gU28sIFZGUyBjYWxscyBpdC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIHRoaW5rIG1vcmUgYnJvYWRseSwgYmV5b25kIHNpbXBsZSBkaXJlY3QgY2FsbHMuCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBpbml0aWFsaXphdGlvbnMuIGBvY2ZzMl9yZWZsaW5rYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gQWhhISBgb2NmczJfcmVmbGlua194YXR0cnNgIGlzICpub3QqIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGdvb2QgbGVhZC4gTm93IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgbm9uLXN0YXRpYywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uLiBMZXQmIzM5O3MgaGVhZCB0byBgZnMvb2NmczIveGF0dHIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi94YXR0ci5jPTcxNjQ9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTcyLVxuZnMvb2NmczIveGF0dHIuYzo3MTczOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbmZzL29jZnMyL3hhdHRyLmMtNzE3NC1cdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhcyB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBNeSBicmFpbiYjMzk7cyB3aGlycmluZy4uLiB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSAqYWJzb2x1dGVseSogbmVlZGVkIHRvIG1ha2UgdGhpcyB3b3JrPyBSaWdodCwgYE9DRlMyX0ZTYCBpcyB0aGUgYmlnIG9uZS4gSGFuZyBvbiwgdGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgbGV2ZXJhZ2luZyBgT0NGUzJfTU9VTlRfUE9TSVhfQUNMYC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZy4uLiBkb2VzIGBPQ0ZTMl9GU2AgaW1wbGljaXRseSBzZWxlY3QgYEZTX1BPU0lYX0FDTGA/IFllcywgSSBzZWUgaXQgcmlnaHQgdGhlcmU6IGBzZWxlY3QgRlNfUE9TSVhfQUNMYCB3aXRoaW4gYE9DRlMyX0ZTYC4gR29vZC4gQWxyaWdodCwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXk/IEp1c3QgZG91YmxlLWNoZWNraW5nLi4uIExvb2tzIGxpa2UgYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIHByaW1hcnksIG92ZXJhcmNoaW5nIG9uZS4KCkhtbSwgd2FpdCwgYSBkZXBlbmRlbmN5IGNoZWNrLi4uIGBPQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBSaWdodC4gU28gd2Ugc2hvdWxkIGRlZmluaXRlbHkgbGlzdCBgT0NGUzJfRlNgIGluIEVuYWJsZUNvbmZpZ3MuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgT0NGUzJfRlNgIGlzIHRoZSAqb25seSogb25lIGRpcmVjdGx5IG5lZWRlZCB0byBtb3ZlIGZvcndhcmQuIE5lZWQgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6CgoqKkNoZWNraW5nIGZvciBDT05GSUdGU19GUyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR0ZTX0ZTYCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBtaXNzZWQsIG9yIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBpbiB0aGUgcHJvamVjdC4gSWYgaXQmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXQmIzM5O2xsIGFmZmVjdCB0aGUgYnVpbGQgYW5kIG1vZHVsZSBsb2FkaW5nIGJlaGF2aW9yLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IGFzc3VtcHRpb25zIGhlcmUuIEkgd2lsbCBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGdvaW5nIHRvIGRldGVybWluZSBob3cgSSBwcm9jZWVkIHdpdGggYW5hbHl6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09ORklHRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSBgQ09ORklHRlNfRlNgIGxpc3RlZCBoZXJlIOKAkyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbm8gcXVlc3Rpb24uIFRoZXJlZm9yZSwgRW5hYmxlQ29uZmlncyBzaG91bGQgaW5jbHVkZSBib3RoIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIGFzc3VtZWQgYW5kIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyB0aGV5IG9mdGVuIGFyZS4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLCBiZWNhdXNlIHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdpdGggYE9DRlMyX0ZTX08yQ0JgLiBJcyBlbmFibGluZyB0aGlzICplc3NlbnRpYWwqIHRvIG1vdW50aW5nIGFuIE9DRlMyIGZpbGUgc3lzdGVtPyBMZXQgbWUgc2Vl4oCmQWgsIHJpZ2h0LiAmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZy4mIzM0OyBPa2F5LCBzbyAqbm9ybWFsbHkqIHlvdSBjYW4gbW91bnQgT0NGUzIgbG9jYWxseSwgZXZlbiB3aXRob3V0IHRoZSBjbHVzdGVyaW5nIGNvbXBvbmVudCwgdXNpbmcgYGxvY2FsYWxsb2NgIG9yIHNpbWlsYXIgbWV0aG9kcy4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4g4oCTIGRvdWJsZS1jaGVja2luZyB0aGF0IGBPQ0ZTMl9GU19PMkNCYCBpc24mIzM5O3QgYSBoYXJkIHJlcXVpcmVtZW50IGhlcmUgaXMgdGhlIG1vc3QgcHJ1ZGVudCB0aGluZyB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdFxuICAyMTpcdFx0ICBQcm9qZWN0IHdlYiBwYWdlOiAgICBodHRwczovL29jZnMyLndpa2kua2VybmVsLm9yZy9cbiAgMjI6XHRcdCAgVG9vbHMgd2ViIHBhZ2U6ICAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hcmtmYXNoZWgvb2NmczItdG9vbHNcbiAgMjM6XHRcdCAgT0NGUzIgbWFpbGluZyBsaXN0czogaHR0cHM6Ly9zdWJzcGFjZS5rZXJuZWwub3JnL2xpc3RzLmxpbnV4LmRldi5odG1sXG4gIDI0Olx0XG4gIDI1Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE9DRlMyLCBzZWUgdGhlIGZpbGVcbiAgMjY6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnJzdFx1MDAzZS5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgT0NGUzJfRlNfTzJDQlxuICAyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4gIDMwOlx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG4gIDMxOlx0XHRkZWZhdWx0IHlcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgT0NGUzIgaW5jbHVkZXMgYSBzaW1wbGUga2VybmVsc3BhY2UgY2x1c3RlcmluZyBwYWNrYWdlLCB0aGUgT0NGUzJcbiAgMzQ6XHRcdCAgQ2x1c3RlciBCYXNlLiAgSXQgb25seSByZXF1aXJlcyBhIHZlcnkgc21hbGwgdXNlcnNwYWNlIGNvbXBvbmVudFxuICAzNTpcdFx0ICB0byBjb25maWd1cmUgaXQuIFRoaXMgY29tZXMgd2l0aCB0aGUgc3RhbmRhcmQgb2NmczItdG9vbHMgcGFja2FnZS5cbiAgMzY6XHRcdCAgTzJDQiBpcyBsaW1pdGVkIHRvIG1haW50YWluaW5nIGEgY2x1c3RlciBmb3IgT0NGUzIgZmlsZSBzeXN0ZW1zLlxuICAzNzpcdFx0ICBJdCBjYW5ub3QgbWFuYWdlIGFueSBvdGhlciBjbHVzdGVyIGFwcGxpY2F0aW9ucy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgSXQgaXMgYWx3YXlzIHNhZmUgdG8gc2F5IFkgaGVyZSwgYXMgdGhlIGNsdXN0ZXJpbmcgbWV0aG9kIGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg3CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGRlZmF1bHQgc2VlbXMgdG8gYmUgYHlgIGZvciBlbmFibGluZyBmZWF0dXJlcywgc28gYE9DRlMyX0ZTYCBhbG9uZSBzaG91bGQgc3VmZmljZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgYHBvc2l4X2FjbF9kdXBgIGFuZCBgZ2V0X2lub2RlX2FjbGAgYmVjYXVzZSB0aGUgcGF0Y2ggZXhwbGljaXRseSB1c2VzIHRoZW0sIGFuZCB0aGV5IGFyZSBwYXJ0IG9mIGBGU19QT1NJWF9BQ0xgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGBGU19QT1NJWF9BQ0xgIGlzLCBpbiB0dXJuLCBzZWxlY3RlZCBieSBgT0NGUzJfRlNgLCBoZW5jZSBteSBjaG9pY2Ugb2YgY29uZmlndXJhdGlvbnM6IGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuIEkmIzM5O2xsIHdhbnQgdG8ga2VlcCBhbiBleWUgb24gdGhvc2UuCgpOb3csIGxldCYjMzk7cyByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGFyZSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHRvdWNoZWQ7IGlmIGFueSBvZiB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIHdlcmUgc3RhdGljLCB0aGUgcG90ZW50aWFsIGltcGFjdCB3b3VsZCBiZSByZWR1Y2VkLiBIb3dldmVyLCBgb2NmczJfbWtub2RgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kLiBCb3RoIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub24tc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeSB2aXNpYmlsaXR5IGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gYG9jZnMyX2luaXRfYWNsYCBpcyBkZWNsYXJlZCBpbiBgZnMvb2NmczIvYWNsLmhgIGFuZCBpcyBjYWxsZWQgZnJvbSBib3RoIGBmcy9vY2ZzMi9uYW1laS5jYCBhbmQgYGZzL29jZnMyL3hhdHRyLmNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IG5vdCBzdGF0aWMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGlzIGRlY2xhcmVkIGluIGBmcy9vY2ZzMi94YXR0ci5oYCBhbmQgaXMgY2FsbGVkIGZyb20gYGZzL29jZnMyL3JlZmNvdW50dHJlZS5jYCwgc28gaXQmIzM5O3MgYWxzbyBub24tc3RhdGljLCBjb25maXJtaW5nIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCkZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBhcHBlYXJzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWUuIFRoZSBmaXggaW52b2x2ZXMgZmV0Y2hpbmcgdGhlIGRlZmF1bHQgQUNMICpiZWZvcmUqIHRha2luZyBsb2NrcyBvciBpbml0aWF0aW5nIGEgdHJhbnNhY3Rpb24sIHdoaWNoIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBPQ0ZTMiBoYW5kbGVzIGlub2RlIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbG9naWMgb2YgT0NGUzIsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBhdHRyYWN0aXZlIGZvciBmdXp6aW5nLgoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhpcyBwYXRjaCBhbHRlcnMgaG93IE9DRlMyIGludGVyYWN0cyB3aXRoIFBPU0lYIEFDTHMgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCksIHNwZWNpZmljYWxseSBieSByZW9yZGVyaW5nIHRoZSBBQ0wgZmV0Y2guIEl0JiMzOTtzIGludGVuZGVkIHRvIHJlc29sdmUgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KClRvIHN1bW1hcml6ZSB0aGUgZXNzZW50aWFsIGVsZW1lbnRzLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6Ci0gYG9jZnMyX2luaXRfYWNsYAotIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgCgpBbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzOgotIGBPQ0ZTMl9GU2AKLSBgQ09ORklHRlNfRlNgCgpPa2F5LCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHNldCBvZiBwYXJhbWV0ZXJzIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgT0NGUzIgdG8gZmV0Y2ggdGhlIGRlZmF1bHQgUE9TSVggQUNMIGJlZm9yZSBzdGFydGluZyBhIHRyYW5zYWN0aW9uIG9yIHRha2luZyBsb2NrcyBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKGUuZy4sIGluIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgVkZTIHN5c3RlbSBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBUaGVyZWZvcmUsIGl0IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPQ0ZTMiB0byBmZXRjaCB0aGUgZGVmYXVsdCBQT1NJWCBBQ0wgYmVmb3JlIHN0YXJ0aW5nIGEgdHJhbnNhY3Rpb24gb3IgdGFraW5nIGxvY2tzIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgaW4gYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBWRlMgc3lzdGVtIGNhbGxzIChlLmcuLCBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCkgb24gYW4gT0NGUzIgbW91bnQuIFRoZXJlZm9yZSwgaXQgaGFzIGEgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwN2RhYjJlNTAyZGJmMTY2YjI2ZWQzMmEwODBjZWNkOTZiYTEyOWU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDk6MzA6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IGFmMWUyY2VkYjIxN2YuLmExNjM4NmMyMzYyNDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5jCkBAIC0zNTMsNyAmIzQzOzM1Myw3IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKLQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkgICBzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCwKIAkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQogewpAQCAtMzY0LDEyICYjNDM7MzY0LDggQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCiAKIAlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwkJCWlmIChkZWZhdWx0X2FjbCkKJiM0MzsJCQkJYWNsID0gcG9zaXhfYWNsX2R1cChkZWZhdWx0X2FjbCk7CiAJCX0KIAkJaWYgKCFhY2wpIHsKIAkJCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlICZhbXA7IH5jdXJyZW50X3VtYXNrKCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDYuLmMxYmEyZWIyNzRlY2MgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yMSw3ICYjNDM7MjEsNyBAQCBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKJiM0MzsJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgcG9zaXhfYWNsICosCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCAxMjc3NjY2Yzc3Y2QyLi42YmZjMmI5YWJlNzVlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3F1b3Rhb3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXZlcnNpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG9zaXhfYWNsLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtjbHVzdGVyL21hc2tsb2cuaCZndDsKIApAQCAtMjU2LDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCXNpZ3NldF90IG9sZHNldDsKIAlpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwOwogCXN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7CiAKIAl0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LSZndDtkX25hbWUubGVuLCBkZW50cnktJmd0O2RfbmFtZS5uYW1lLAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0mZ3Q7aXBfYmxrbm8sCkBAIC0zNjIsNiAmIzQzOzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQlnb3RvIGxlYXZlOwogCX0KIAomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwomIzQzOwkJaWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlzdGF0dXMgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTsKJiM0MzsJCQlkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJZ290byBsZWF2ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItJmd0O3NiLAogCQkJCQkJCSAgICBTX0lTRElSKG1vZGUpLAogCQkJCQkJCSAgICB4YXR0cl9jcmVkaXRzKSk7CkBAIC00MTEsNyAmIzQzOzQyMiw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCWluY19ubGluayhkaXIpOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsCiYjNDM7CXN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBkZWZhdWx0X2FjbCwKIAkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKIAogCWlmIChzdGF0dXMgJmx0OyAwKSB7CkBAIC00ODgsNiAmIzQzOzQ5OSw5IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKG1ldGFfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKIAomIzQzOwlpZiAoZGVmYXVsdF9hY2wpCiYjNDM7CQlwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7CiYjNDM7CiAJLyoKIAkgKiBXZSBzaG91bGQgY2FsbCBpcHV0IGFmdGVyIHRoZSBpX3J3c2VtIG9mIHRoZSBiaXRtYXAgYmVlbgogCSAqIHVubG9ja2VkIGluIG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dCwgb3IgdGhlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VjdXJpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG9zaXhfYWNsLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtjbHVzdGVyL21hc2tsb2cuaCZndDsKIApAQCAtNzI1Nyw2ICYjNDM7NzI1OCw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7CiAKIAlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTsKIAlpZiAocmV0KSB7CkBAIC03MjY5LDEwICYjNDM7NzI3MSwyMyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gbGVhdmU7CiAJfQotCXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CWlmIChPQ0ZTMl9TQihkaXItJmd0O2lfc2IpLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwomIzQzOwkJaWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTsKJiM0MzsJCQlkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGVmYXVsdF9hY2wsIE5VTEwsIE5VTEwpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKIAomIzQzOwlpZiAoZGVmYXVsdF9hY2wpCiYjNDM7CQlwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7CiYjNDM7dW5sb2NrOgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOwogCWJyZWxzZShkaXJfYmgpOwogbGVhdmU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkyCgkJCQkJCQlvdXRwdXQ6IDMwNQoJCQkJCQkJdGhvdWdodHM6IDEyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyBob3cgZGVmYXVsdCBBQ0xzIGFyZSBoYW5kbGVkIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgb2NmczJfaW5pdF9hY2xgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBzaGlmdGluZyB0aGUgQUNMIGZldGNoaW5nIGxvZ2ljIGZyb20gaW5zaWRlIGBvY2ZzMl9pbml0X2FjbGAgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIHdpdGhpbiBgb2NmczJfaW5pdF9hY2xgIHdoaWxlIGhvbGRpbmcgYGlwX3hhdHRyX3NlbWAuIE5vdywgdGhleSBhcmUgZmV0Y2hpbmcgaXQgd2l0aCB0aGUgVkZTIGZ1bmN0aW9uIGBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVClgICpiZWZvcmUqIGNhbGxpbmcgYG9jZnMyX2luaXRfYWNsYC4KCkxldCYjMzk7cyBkaXNzZWN0IHRoaXMsIGZvY3VzaW5nIG9uIGFueSBwb3RlbnRpYWwgbWVtb3J5IG9yIGxvY2tpbmcgcmlza3MuIEluIGBvY2ZzMl9ta25vZGAsIHRoZSBjb2RlIG5vdyBjaGVja3MgdGhlIGBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0xgIG1vdW50IG9wdGlvbi4gSWYgZW5hYmxlZCwgaXQgZmV0Y2hlcyB0aGUgZGVmYXVsdCBBQ0wsIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyAocmV0dXJuaW5nIGVhcmx5IGlmIGBnZXRfaW5vZGVfYWNsYCBmYWlscyksIGFuZCB0aGVuIHBhc3NlcyB0aGUgcmVzdWx0aW5nIGBzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbGAgdG8gYG9jZnMyX2luaXRfYWNsYC4gSW1wb3J0YW50bHksIGl0ICpyZWxlYXNlcyogdGhlIEFDTCB3aXRoIGBwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbClgIGFmdGVyd2FyZHMuIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm46IGZldGNoIEFDTCB3aXRoIGBnZXRfaW5vZGVfYWNsYCwgaGFuZGxlIGVycm9ycywgYW5kIHRoZW4gcGFzcyBpdCB0byBgb2NmczJfaW5pdF9hY2xgLCB3aGVyZSBpdCBzaG91bGQgYmUgaGFuZGxlZCB0aGVyZS4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gQnV0LCBsZXQmIzM5O3Mgc2VlLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgYWxsb2NhdGUgYW55IG5ldyBzdHJ1Y3R1cmVzIGFuZCBzZW5kIHRoZW0gdG8gdXNlcnNwYWNlLiBJbiBgb2NmczJfaW5pdF9hY2xgLCB0aGUgYGRlZmF1bHRfYWNsYCBpcyAqZHVwbGljYXRlZCogd2l0aCBgcG9zaXhfYWNsX2R1cChkZWZhdWx0X2FjbClgLCB3aGljaCBzaG91bGQgYmUgc2FmZSBhcyBsb25nIGFzIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBgZGVmYXVsdF9hY2xgIGlzIHZhbGlkLiBUaGUgYGdldF9pbm9kZV9hY2xgIGZ1bmN0aW9uIGlzIGEgc3RhbmRhcmQgVkZTIGZ1bmN0aW9uLiBJZiBpdCBmYWlscywgaXQgcmV0dXJucyBhbiBlcnJvciBwb2ludGVyIHdoaWNoIGlzIGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIEluIGVpdGhlciBgb2NmczJfbWtub2RgIG9yIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCB0aGUgYGRlZmF1bHRfYWNsYCBwb2ludGVyIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgTlVMTGAgYmVmb3JlIGJlaW5nIHBvdGVudGlhbGx5IG92ZXJ3cml0dGVuIGJ5IHRoZSBgZ2V0X2lub2RlX2FjbGAgcmVzdWx0LCBhbmQgdGhlcmUgYXJlIGFwcHJvcHJpYXRlIGVycm9yIHBhdGhzLiBJZiBgZ2V0X2lub2RlX2FjbGAgZmFpbHMgb3IgaWYgdGhlIFBPU0lYIEFDTCBtb3VudCBvcHRpb24gaXNuJiMzOTt0IHNldCwgYGRlZmF1bHRfYWNsYCByZW1haW5zIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgYGlmIChkZWZhdWx0X2FjbClgIGNoZWNrcyB3aWxsIHRoZW4gZW5zdXJlIHByb3BlciBoYW5kbGluZyBpbiBgb2NmczJfaW5pdF9hY2xgLgoKU28sICpleHBsaWNpdGx5KiBpbml0aWFsaXppbmcgYGRlZmF1bHRfYWNsYCB0byBgTlVMTGAgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGdldF9pbm9kZV9hY2xgIGluIGJvdGggYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgYSBnb29kIHByYWN0aWNlLiBJdCBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdXNpbmcgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KClRoZSAqcmVhbCogbW90aXZhdGlvbiBoZXJlLCBJIHN1c3BlY3QsIGlzIGEgbG9ja2luZyBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSwgaG9sZGluZyBgaXBfeGF0dHJfc2VtYCB3aGlsZSBjYWxsaW5nIGBvY2ZzMl9nZXRfYWNsX25vbG9ja2AsIHdhcyBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIHNvbWUgZm9ybSBvZiBsb2NrIGludmVyc2lvbi4gTW92aW5nIHRoZSBBQ0wgZmV0Y2ggKm91dHNpZGUqIHRoaXMgcHJvdGVjdGVkIHJlZ2lvbiBsaWtlbHkgZml4ZXMgdGhhdC4gT3IgbWF5YmUgaXQmIzM5O3MgYXZvaWRpbmcgYSBsb2NrZGVwIHdhcm5pbmcuIFRoaXMgc2hpZnQgdG8gdGhlIFZGUyBmdW5jdGlvbiBjb3VsZCBzaWRlc3RlcCBzb21lIG9jZnMyLXNwZWNpZmljIGxvY2tpbmcgY29tcGxpY2F0aW9ucy4KClRoZXJlZm9yZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHBhdGNoIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXNlIHdvdWxkIGZsYWcgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzLiBUaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHByZXR0eSBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMDo1Mi40NzQ0MTI1NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTIwNDMxMzgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGRlZmF1bHQgQUNMcyBhcmUgZmV0Y2hlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIuIEluc3RlYWQgb2YgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIGluc2lkZSBgb2NmczJfaW5pdF9hY2xgLCBpdCBub3cgdXNlcyB0aGUgc3RhbmRhcmQgVkZTIGBnZXRfaW5vZGVfYWNsYCBpbiB0aGUgY2FsbGVycyAoYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApIGFuZCBwYXNzZXMgdGhlIHJlc3VsdGluZyBgcG9zaXhfYWNsYCBzdHJ1Y3QgdG8gYG9jZnMyX2luaXRfYWNsYC5cXG5cXG5UaGUgYGRlZmF1bHRfYWNsYCBwb2ludGVycyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYm90aCBtb2RpZmllZCBmdW5jdGlvbnMuIElmIGBnZXRfaW5vZGVfYWNsYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBwcm9wZXJseSBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzA6NTIuNDc0NDE3NDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3MTMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwN2RhYjJlNTAyZGJmMTY2YjI2ZWQzMmEwODBjZWNkOTZiYTEyOWU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjMwOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcXG5pbmRleCBhZjFlMmNlZGIyMTdmLi5hMTYzODZjMjM2MjQzIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXFxuKysrIGIvZnMvb2NmczIvYWNsLmNcXG5AQCAtMzUzLDcgKzM1Myw3IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsLFxcbiBcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcXG4gXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXFxuIHtcXG5AQCAtMzY0LDEyICszNjQsOCBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFxuIFxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0XFx0XFx0aWYgKGRlZmF1bHRfYWNsKVxcbitcXHRcXHRcXHRcXHRhY2wgPSBwb3NpeF9hY2xfZHVwKGRlZmF1bHRfYWNsKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoIWFjbCkge1xcbiBcXHRcXHRcXHRtb2RlID0gaW5vZGUtXFx1MDAzZWlfbW9kZSBcXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmhcXG5pbmRleCA2NjdjNmYwM2ZhNjA2Li5jMWJhMmViMjc0ZWNjIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXFxuKysrIGIvZnMvb2NmczIvYWNsLmhcXG5AQCAtMjEsNyArMjEsNyBAQCBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XFxuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XFxuIGV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IHBvc2l4X2FjbCAqLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXFxuIFxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xcbmluZGV4IDEyNzc2NjZjNzdjZDIuLjZiZmMyYjlhYmU3NWUgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlnaG1lbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcXVvdGFvcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NjbHVzdGVyL21hc2tsb2cuaFxcdTAwM2VcXG4gXFxuQEAgLTI1Niw2ICsyNTcsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRzaWdzZXRfdCBvbGRzZXQ7XFxuIFxcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7XFxuIFxcbiBcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiBcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG5AQCAtMzYyLDYgKzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRkZWZhdWx0X2FjbCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcXG4rXFx0XFx0aWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0c3RhdHVzID0gUFRSX0VSUihkZWZhdWx0X2FjbCk7XFxuK1xcdFxcdFxcdGRlZmF1bHRfYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBsZWF2ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFNfSVNESVIobW9kZSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB4YXR0cl9jcmVkaXRzKSk7XFxuQEAgLTQxMSw3ICs0MjIsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4rXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIGRlZmF1bHRfYWNsLFxcbiBcXHRcXHRcXHQgbWV0YV9hYywgZGF0YV9hYyk7XFxuIFxcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbkBAIC00ODgsNiArNDk5LDkgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKG1ldGFfYWMpXFxuIFxcdFxcdG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTtcXG4gXFxuK1xcdGlmIChkZWZhdWx0X2FjbClcXG4rXFx0XFx0cG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogV2Ugc2hvdWxkIGNhbGwgaXB1dCBhZnRlciB0aGUgaV9yd3NlbSBvZiB0aGUgYml0bWFwIGJlZW5cXG4gXFx0ICogdW5sb2NrZWQgaW4gb2NmczJfZnJlZV9hbGxvY19jb250ZXh0LCBvciB0aGVcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmNcXG5pbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5jXFxuQEAgLTI2LDYgKzI2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcG9zaXhfYWNsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcXHUwMDNlXFxuIFxcbkBAIC03MjU3LDYgKzcyNTgsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcXG4gXFxuIFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTcyNjksMTAgKzcyNzEsMjMgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuLVxcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRpZiAoT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XFxuK1xcdFxcdGlmIChJU19FUlIoZGVmYXVsdF9hY2wpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRlZmF1bHRfYWNsLCBOVUxMLCBOVUxMKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXG4rXFx0aWYgKGRlZmF1bHRfYWNsKVxcbitcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XFxuK3VubG9jazpcXG4gXFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XFxuIFxcdGJyZWxzZShkaXJfYmgpO1xcbiBsZWF2ZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzA6NTIuOTM5OTcxMTY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzM2MjkzNTE3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDdkYWIyZTUwMmRiZjE2NmIyNmVkMzJhMDgwY2VjZDk2YmExMjllOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjMwOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xuaW5kZXggYWYxZTJjZWRiMjE3Zi4uYTE2Mzg2YzIzNjI0MyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXG4rKysgYi9mcy9vY2ZzMi9hY2wuY1xuQEAgLTM1Myw3ICszNTMsNyBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuK1x0XHQgICBzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCxcbiBcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4gXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuIHtcbkBAIC0zNjQsMTIgKzM2NCw4IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuIFxuIFx0aWYgKCFTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCxcbi1cdFx0XHRcdFx0XHQgICBkaXJfYmgpO1xuLVx0XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0aWYgKElTX0VSUihhY2wpKVxuLVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcbitcdFx0XHRpZiAoZGVmYXVsdF9hY2wpXG4rXHRcdFx0XHRhY2wgPSBwb3NpeF9hY2xfZHVwKGRlZmF1bHRfYWNsKTtcbiBcdFx0fVxuIFx0XHRpZiAoIWFjbCkge1xuIFx0XHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNi4uYzFiYTJlYjI3NGVjYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXG4rKysgYi9mcy9vY2ZzMi9hY2wuaFxuQEAgLTIxLDcgKzIxLDcgQEAgaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XG4gZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4rXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IHBvc2l4X2FjbCAqLFxuIFx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyLi42YmZjMmI5YWJlNzVlIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xuKysrIGIvZnMvb2NmczIvbmFtZWkuY1xuQEAgLTI3LDYgKzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9xdW90YW9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXZlcnNpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcdTAwM2VcbiBcbkBAIC0yNTYsNiArMjU3LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHNpZ3NldF90IG9sZHNldDtcbiBcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzYyLDYgKzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuIFxuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xuK1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHN0YXR1cyA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpO1xuK1x0XHRcdGRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRnb3RvIGxlYXZlO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLFxuIFx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4gXHRcdFx0XHRcdFx0XHQgICAgeGF0dHJfY3JlZGl0cykpO1xuQEAgLTQxMSw3ICs0MjIsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4rXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgZGVmYXVsdF9hY2wsXG4gXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuQEAgLTQ4OCw2ICs0OTksOSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKG1ldGFfYWMpXG4gXHRcdG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTtcbiBcbitcdGlmIChkZWZhdWx0X2FjbClcbitcdFx0cG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpO1xuK1xuIFx0LypcbiBcdCAqIFdlIHNob3VsZCBjYWxsIGlwdXQgYWZ0ZXIgdGhlIGlfcndzZW0gb2YgdGhlIGJpdG1hcCBiZWVuXG4gXHQgKiB1bmxvY2tlZCBpbiBvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQsIG9yIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTI2LDYgKzI2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcdTAwM2VcbiBcbkBAIC03MjU3LDYgKzcyNTgsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wgPSBOVUxMO1xuIFxuIFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNzI2OSwxMCArNzI3MSwyMyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xuK1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpO1xuK1x0XHRcdGRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGVmYXVsdF9hY2wsIE5VTEwsIE5VTEwpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuK1x0aWYgKGRlZmF1bHRfYWNsKVxuK1x0XHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XG4rdW5sb2NrOlxuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMwOjUyLjkzOTk3MjU3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzA2NzM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCBzZWVtcyB0byBiZSBoaXR0aW5nIHNldmVyYWwgZmlsZXMgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtOiBgYWNsLmNgLCBgYWNsLmhgLCBgbmFtZWkuY2AsIGFuZCBgeGF0dHIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IHRoZSBkZWZhdWx0IEFjY2VzcyBDb250cm9sIExpc3QgKEFDTCkgaXMgaGFuZGxlZCBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24uIFNwZWNpZmljYWxseSwgYG9jZnMyX2luaXRfYWNsYCBpcyBiZWluZyBtb2RpZmllZCB0byBhY2NlcHQgYSBgc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2xgIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBhIGBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaGAuIFRoZSByYXRpb25hbGUgYXBwZWFycyB0byBiZSBhYm91dCByZXNvbHZpbmcgYSBkZWFkbG9jayBvciBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLiBUaGUgY29kZSBub3cgcmV0cmlldmVzIHRoZSBkZWZhdWx0IEFDTCAqYmVmb3JlKiBraWNraW5nIG9mZiBhIHRyYW5zYWN0aW9uIG9yIGFjcXVpcmluZyBsb2Nrcy5cblxuSSdtIHNlZWluZyB0aGlzIHBhdHRlcm4gaW4gYG9jZnMyX21rbm9kYCB3aGVyZSBgZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpYCBpcyBjYWxsZWQgYmVmb3JlIGBvY2ZzMl9zdGFydF90cmFuc2AuIFNhbWUgdGhpbmcgaW4gYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIHdoZXJlIHRoZSBBQ0wgaXMgZmV0Y2hlZCBwcmlvciB0byB0aGUgY2FsbCB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGlzIG1ha2VzIHNlbnNlLCBmZXRjaGluZyB3aGF0IHdlIG5lZWQsIGFoZWFkIG9mIHdoZXJlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgZGF0YSBwcmlvciB0byB0aGUgbG9jayBhY3F1aXNpdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbmF0dXJlIG9mIHRoZSBkZWFkbG9jayBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nLCBidXQgaXQgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoLCBhdm9pZGluZyBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgZGV0YWlscywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgT0NGUzIgaXMgZXZlbiBhIHRhcmdldCB3b3J0aCBteSB0aW1lLiBJcyBpdCBlYXNpbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBhbmQgZnV6emluZz8gR29vZCwgT0NGUzIgaXMgaW5kZWVkIGEgZmlsZXN5c3RlbSwgc28gaXQgc2hvdWxkIGJlIG1vdW50YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgcmVhY2hhYmxlIGluIFFFTVUg4oCTIGFuZCB5ZXMsIGl0J3MgYSBzdGFuZGFyZCBmaWxlc3lzdGVtLiBTbywgYSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIHdvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgaW5zaWdodC4gSSB3aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGVuYWJsZWQgYW5kIHRoZSBhcHByb3ByaWF0ZSBjb25maWcgb3B0aW9ucyB0byBidWlsZCBhIGZ1enplciBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMDo1OC44MTA2NDg0MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NTg1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMDo1OC44NTMzMTIxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzU4Nzk1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqT0NGUzJfRlMgRGVwZW5kZW5jeSBDaGVjayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaW1lIHRvIGdldCBteSBoZWFkIHdyYXBwZWQgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIE9DRlMyX0ZTLiBJIG5lZWQgdG8gZW5zdXJlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3VwcG9ydCBuZWVkZWQuXG5cbiogICAqKkZpcnN0LCB0aGUgYmFzaWNzOioqIFdoYXQgYXJlIHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzIHRoYXQgT0NGUzIgcmVsaWVzIHVwb24/IEknbSB0aGlua2luZyBmaWxlIHN5c3RlbSBpbmZyYXN0cnVjdHVyZSwgYmxvY2sgZGV2aWNlIGhhbmRsaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgbmV0d29ya2luZyBzdGFjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjbHVzdGVyZWQgZmlsZSBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXG4qICAgKipOZXh0LCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llczoqKiBBcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgT0NGUzIgdG8gYnVpbGQgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseT8gSSByZW1lbWJlciBwYXN0IGlzc3VlcyB3aXRoIGNlcnRhaW4gb3B0aW9ucyBiZWluZyBzdWJ0bHkgaW5jb21wYXRpYmxlLCBsZWFkaW5nIHRvIG9ic2N1cmUgZmFpbHVyZXMuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgY2xlYXIuXG4qICAgKipVc2VyIHNwYWNlIHN1cHBvcnQ6KiogV2hhdCBsaWJyYXJpZXMgYW5kIHRvb2xzIGRvZXMgYSB1c2VyIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCBPQ0ZTMj8gVGhlIE9DRlMyIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNvbWUgdG8gbWluZCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgYXZhaWxhYmxlIGFuZCBhcHByb3ByaWF0ZWx5IHZlcnNpb25lZC4gQXJlIHRoZXJlIGFueSBleHRlcm5hbCB0b29scyBvciBsaWJyYXJpZXMgdGhhdCB3ZSBkZXBlbmQgb24/XG4qICAgKipJbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzdWJzeXN0ZW1zOioqIERvZXMgT0NGUzIgaGF2ZSBhbnkgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcz8gSSBzaG91bGQgY2hlY2sgYW55IGNvbmZsaWN0cyB3aXRoIG90aGVyIGZpbGUgc3lzdGVtcywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhpbmdzIGxpa2Ugc2VjdXJpdHkgbW9kdWxlcywgYW5kIGV2ZW4gbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVjYWxsIHNvbWUgcGFzdCBjb25mbGljdHMgcmVsYXRlZCB0byBsb2NraW5nIG9yIGNhY2hpbmcgYmVoYXZpb3Igd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy5cbiogICAqKlZlcnNpb24gY29tcGF0aWJpbGl0eToqKiBDcnVjaWFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBhbnkgZGVwcmVjYXRpb25zIG9yIHJlbW92YWxzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGNoZWNrIGZvciB1cHN0cmVhbSBjaGFuZ2VzIGFuZCBhbnkgY29ycmVzcG9uZGluZyBwYXRjaGVzIG9yIHdvcmthcm91bmRzLlxuKiAgICoqRG9jdW1lbnRhdGlvbiByZXZpZXc6KiogSSdsbCBuZWVkIHRvIGdvIGJhY2sgb3ZlciBhbnkgZG9jdW1lbnRhdGlvbiB0byByZWFjcXVhaW50IG15c2VsZiB3aXRoIHRoZSBkZXNpZ24uIFRoaXMgd291bGQgaW5jbHVkZSBhbnkgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbnMgb3IgUkZDcy5cblxuRXNzZW50aWFsbHksIEknbSBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBhbGwgdGhlIHBpZWNlcyByZXF1aXJlZCBmb3IgT0NGUzIncyBzdWNjZXNzZnVsIG9wZXJhdGlvbiwgYW5kIGVuc3VyaW5nIHRoZXkncmUgYWxsIGFjY291bnRlZCBmb3IuIFRoZSBnb2FsIGlzIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmVyZXF1aXNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MDMuMTI5MTk0NzA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDg0OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPQ0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MDMuMTc2Njg1NTYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTY1MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzLCBFdmVyeXdoZXJlLi4uKipcblxuUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIHBhdXNlLiBJdCdzIGNydWNpYWwgdG8gbGF5IG91dCB0aGUgZ3JvdW5kd29yayBmaXJzdCwgYW5kIG5vdCBjaGFyZ2UgYmxpbmRseSBhaGVhZC4gV2hhdCBhcmUgdGhlICpleGFjdCogZWxlbWVudHMgdGhpcyBoaW5nZXMgb24/IFdoYXQgb3RoZXIgc3lzdGVtcywgbGlicmFyaWVzLCBkYXRhc2V0cywgb3IgZXh0ZXJuYWwgZmFjdG9ycyBhcmUgZ29pbmcgdG8gaW5mbHVlbmNlIHRoZSBvdXRjb21lIGhlcmU/IEkgY2FuJ3QgZXZlbiBiZWdpbiB0byBwcm9wZXJseSBhc3Nlc3Mgb3IgcGxhbiB3aXRob3V0IGtub3dpbmcgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBsaXN0aW5nIHJlcXVpcmVtZW50czsgaXTigJlzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2F0ZSB3ZWIgb2YgaW50ZXJjb25uZWN0aW9ucy4gVGhlIGRldmlsJ3MgaW4gdGhlIGRldGFpbHMsIGFzIHRoZXkgc2F5LCBhbmQgdGhvc2UgZGV0YWlscyBhcmUgdGhlIGRlcGVuZGVuY2llcy4gQSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCB3aWxsIGNvbWUgYmFjayB0byBiaXRlIG1lIGxhdGVyLiBUaW1lIHRvIGNsYXJpZnkgd2hhdCAqZXhhY3RseSogaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjA2LjA2ODM0MDU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE9DRlMyX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgUVVPVEFcXG4gICA5OlxcdFxcdHNlbGVjdCBRVU9UQV9UUkVFXFxuICAxMDpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICAxMTpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBPQ0ZTMiBpcyBhIGdlbmVyYWwgcHVycG9zZSBleHRlbnQgYmFzZWQgc2hhcmVkIGRpc2sgY2x1c3RlciBmaWxlXFxuICAxNDpcXHRcXHQgIHN5c3RlbSB3aXRoIG1hbnkgc2ltaWxhcml0aWVzIHRvIGV4dDMuIEl0IHN1cHBvcnRzIDY0IGJpdCBpbm9kZVxcbiAgMTU6XFx0XFx0ICBudW1iZXJzLCBhbmQgaGFzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kaW5nIG1ldGFkYXRhIGdyb3VwcyB3aGljaCBtYXlcXG4gIDE2OlxcdFxcdCAgYWxzbyBtYWtlIGl0IGF0dHJhY3RpdmUgZm9yIG5vbi1jbHVzdGVyZWQgdXNlLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIFlvdSdsbCB3YW50IHRvIGluc3RhbGwgdGhlIG9jZnMyLXRvb2xzIHBhY2thZ2UgaW4gb3JkZXIgdG8gYXQgbGVhc3RcXG4gIDE5OlxcdFxcdCAgZ2V0IFxcXCJtb3VudC5vY2ZzMlxcXCIuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MDYuMDY4NDA3MzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY5NzI5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBPQ0ZTMiBGaWxlc3lzdGVtIE1vZHVsZSBEZXBlbmRlbmNpZXMgYW5kIENhbGwgUGF0aHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBgT0NGUzJfRlNgIG1vZHVsZSByZXF1aXJlcyBhIGZldyBwcmVyZXF1aXNpdGVzOiBgSU5FVGAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiBJdCBhbHNvIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgRlNfUE9TSVhfQUNMYC4gU28sIHRvIGdldCB0aGluZ3Mgcm9sbGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBgT0NGUzJfRlNgIGVuYWJsZWQuXG5cblRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gYG9jZnMyX21rbm9kYCwgdGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhhdCdzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGBta25vZGAgc3lzY2FsbCB3aGVuIHdvcmtpbmcgd2l0aCB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gTm93LCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmUgdG8gbWUuIEkga25vdyBpdCdzICpjYWxsZWQqIGZyb20gYG9jZnMyX21rbm9kYCwgd2hpY2ggd2UganVzdCBpZGVudGlmaWVkIGFzIGxpbmtlZCB0byB0aGUgYG1rbm9kYCBzeXN0ZW0gY2FsbC4gQmV5b25kIHRoYXQsIGl0IGFsc28gc2VlbXMgdG8gYmUgaW52b2tlZCBmcm9tIGBvY2ZzMl9ta2RpcmAsIGBvY2ZzMl9jcmVhdGVgLCBhbmQgYG9jZnMyX3N5bWxpbmtgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGEgYnJvYWQgc2V0IG9mIG9wZXJhdGlvbnMgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBhY3R1YWxseSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjEwLjQzODEzOTQwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MjQ4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MjM4PXN0YXRpYyBpbnQgb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTYtXFx0aWYgKCFwcmVzZXJ2ZSkge1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XFx0XFx0ZXJyb3IgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woZGlyLCBuZXdfb3JwaGFuX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfZGVudHJ5LVxcdTAwM2VkX25hbWUpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz03MTczPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzI1NC0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjcyNTU6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9vY2ZzMi94YXR0ci5jLTcyNTYtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9ODA9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaC04NC1cXHRcXHRcXHQgYm9vbCBwcmVzZXJ2ZV9zZWN1cml0eSk7XFxuZnMvb2NmczIveGF0dHIuaDo4NTppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL3hhdHRyLmgtODYtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MTAuNDg1NTY5MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExOTg5MzUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkhhbmcgb24gYSBzZWNvbmQsIHRoYXQncyBub3QgcmlnaHQuLi4qKiBJIHRob3VnaHQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgd2FzIGEgcHJldHR5IGNvcmUgZnVuY3Rpb24sIGJ1dCB0aGUgdGV4dCBpcyBzYXlpbmcgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBvY2ZzMl9yZWZsaW5rYD8gVGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQsIG5vdCBhdCBhbGwuIEl0J3MgYSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY2FsbCBncmFwaC4gSXQgc2VlbXMgdW5saWtlbHkgdGhpcyBpcyBjb3JyZWN0LiBJIGJldCBpdCBpcyBjYWxsZWQgb3RoZXIgcGxhY2VzIHRvby4gTGV0IG1lIHNlYXJjaCBmb3IgaXQgYW5kIG1ha2Ugc3VyZS4gTGV0IG1lIGdvIGxvb2sgYXQgYG9jZnMyX21rbm9kYCwgYmVjYXVzZSB0aGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdCB3aGVyZSB0aG9zZSB0aGluZ3MgYXJlIGFsc28gbmVlZGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0IG9mIHRoZSBPQ0ZTMiBjb2RlIGJhc2UgaXMgYWNjdXJhdGUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHNlY3VyaXR5IGFuZCBBQ0wgaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMToxMy42MDU0NjU5NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDc2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX21rbm9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0zMjI9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzQ5LSAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxcbmZzL29jZnMyL2FjbC5jOjM1MDogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXFxuZnMvb2NmczIvYWNsLmMtMzUxLSAqL1xcbi0tXFxuZnMvb2NmczIvZGlyLmM9MjIxMz1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2Rpci5jLTIyMzctLypcXG5mcy9vY2ZzMi9kaXIuYzoyMjM4OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcXG5mcy9vY2ZzMi9kaXIuYy0yMjM5LSAqIHRoZSBpbmxpbmUtZGF0YSBmbGFnIGFuZCBpbml0aWFsaXplcyB0aGUgaW5saW5lLWRhdGEgc2VjdGlvbi5cXG4tLVxcbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4Ny1cXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxcbmZzL29jZnMyL2lub2RlLmM6Mzg4OlxcdCAqIGJ5IG9jZnMyX21rbm9kX2xvY2tlZCgpLCBzbyBhIGZhaWx1cmUgaXMgYSBjb2RlIGJ1Zy5cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cXHQgKi9cXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDIzLSAqIGJsb2NrcyArIHF1b3RhIHVwZGF0ZSAqL1xcbmZzL29jZnMyL2pvdXJuYWwuaDo0MjQ6c3RhdGljIGlubGluZSBpbnQgb2NmczJfbWtub2RfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaXNfZGlyLFxcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXFx0XFx0XFx0XFx0ICAgICAgaW50IHhhdHRyX2NyZWRpdHMpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvb2NmczIvam91cm5hbC5oLTU1MC17XFxuZnMvb2NmczIvam91cm5hbC5oOjU1MTpcXHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XFxuZnMvb2NmczIvam91cm5hbC5oLTU1Mi1cXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTYtXFxuZnMvb2NmczIvbmFtZWkuYzo1NzpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTU4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yMTY9c3RhdGljIHZvaWQgb2NmczJfY2xlYW51cF9hZGRfZW50cnlfZmFpbHVyZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjMwLVxcbmZzL29jZnMyL25hbWVpLmM6MjMxOnN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy0yMzItXFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNjEtXFxuZnMvb2NmczIvbmFtZWkuYzoyNjI6XFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI2My1cXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzc1LVxcbmZzL29jZnMyL25hbWVpLmM6Mzc2OlxcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXFx1MDAzZXNiLFxcbmZzL29jZnMyL25hbWVpLmMtMzc3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBTX0lTRElSKG1vZGUpLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0zOTUtXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzozOTY6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxcbmZzL29jZnMyL25hbWVpLmMtMzk3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTI0LVxcbmZzL29jZnMyL25hbWVpLmM6NTI1OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvbmFtZWkuYy01MjYtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjM2LVxcbmZzL29jZnMyL25hbWVpLmM6NjM3OnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbmZzL29jZnMyL25hbWVpLmMtNjM4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02NTktXFxuZnMvb2NmczIvbmFtZWkuYzo2NjA6XFx0cmV0dXJuIF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsIGRldiwgbmV3X2ZlX2JoLFxcbmZzL29jZnMyL25hbWVpLmMtNjYxLVxcdFxcdFxcdFxcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjczLVxcdFxcdFxcdCAgT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2NzQ6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUiwgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02NzUtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9NjgxPXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02OTAtXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcXG5mcy9vY2ZzMi9uYW1laS5jOjY5MTpcXHRyZXQgPSBvY2ZzMl9ta25vZChcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTY5Mi1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0xODIxPXN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk2My1cXG5mcy9vY2ZzMi9uYW1laS5jOjE5NjQ6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjUtXFx0XFx0XFx0XFx0ICAgIDAsIFxcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yNTI4PWludCBvY2ZzMl9jcmVhdGVfaW5vZGVfaW5fb3JwaGFuKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNTY4LVxcbmZzL29jZnMyL25hbWVpLmM6MjU2OTpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYiwgMCwgMCkpO1xcbmZzL29jZnMyL25hbWVpLmMtMjU3MC1cXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU5MS1cXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cXG5mcy9vY2ZzMi9uYW1laS5jOjI1OTI6XFx0c3RhdHVzID0gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI1OTMtXFx0XFx0XFx0XFx0ICAgICAgMCwgXFx1MDAyNm5ld19kaV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yOTQwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQ3LVxcdC5ta2RpclxcdFxcdD0gb2NmczJfbWtkaXIsXFxuZnMvb2NmczIvbmFtZWkuYzoyOTQ4OlxcdC5ta25vZFxcdFxcdD0gb2NmczJfbWtub2QsXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQ5LVxcdC5yZW5hbWVcXHRcXHQ9IG9jZnMyX3JlbmFtZSxcXG4tLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTgtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTk5OlRSQUNFX0VWRU5UKG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cXHRUUF9QUk9UTyh2b2lkICpkaXIsIHZvaWQgKmRlbnRyeSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMToxMy42NTM1NDg5NjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwOTE2OTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgT0NGUzIgRmlsZXN5c3RlbSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYG9jZnMyX21rbm9kYCBpcyBjbGVhcmx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBmaWxlIGNyZWF0aW9uIHByaW1pdGl2ZXMgbGlrZSBgbWtkaXJgLCBgY3JlYXRlYCwgYW5kLCB3ZWxsLCBgbWtub2RgIGl0c2VsZi4gVGhlbiwgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgdHJpZ2dlcmVkIGJ5IGBvY2ZzMl9yZWZsaW5rYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhtbSwgYnV0ICp3YWl0KiwgYG9jZnMyX21rbm9kYCBkaXJlY3RseSBjYWxscyBgb2NmczJfaW5pdF9hY2xgLiBBbmQsIGxvb2tpbmcgYXQgaXQgY2xvc2VyLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhbHNvIGNhbGxzIGBvY2ZzMl9pbml0X2FjbGAuIFRoZSBwYXRjaCdzIG1vZGlmaWNhdGlvbnMgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZmV0Y2hpbmcgb2YgdGhlIGRlZmF1bHQgQUNMIGluIGJvdGggYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKmJlZm9yZSogdHJhbnNhY3Rpb24gc3RhcnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHByb21pc2luZyBhcmVhIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGZvY3VzIHdvdWxkIGJlIG9uIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBhbmQgYG9jZnMyX2luaXRfYWNsYCBhcyBmb2N1cyBzeW1ib2xzLiBCdXQgaG9sZCBvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgYG9jZnMyX21rbm9kYCBpcyBzdGF0aWMuLi4gWWVwLCBpdCBpcy4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gRXZlbiB0aG91Z2ggaXQncyB0aGUgZ2F0ZXdheSBmb3IgYG9jZnMyX2luaXRfYWNsYCBjYWxscywgbWFraW5nIGl0IHN0YXRpYyByZXN0cmljdHMgdXNhZ2UuIFNvLCBjb25zaWRlcmluZyB0aGlzLCBhIGJldHRlciBhcHByb2FjaCB0byBnZXQgYXQgdGhlIGtleSBmdW5jdGlvbnMgaXMgdG8gdXNlIGBvY2ZzMl9ta2RpcmAsIGBvY2ZzMl9jcmVhdGVgLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYW5kIGBvY2ZzMl9pbml0X2FjbGAgYXMgdGhlIG1vcmUgcHJhY3RpY2FsIGZvY3VzIHN5bWJvbHMuXG5cbk9oLCBvbmUgbW9yZSB0aGluZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBvY2ZzMl9pbml0X2FjbGAuIE9rYXksIGxvb2tzIGxpa2UgaXQncyBub24tc3RhdGljLiBHb29kLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgaW4gYGZzL29jZnMyL2FjbC5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjIwLjE2MjcyMjM4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzQyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG9jZnMyX2luaXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2FjbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FjbC5jPTMyMj1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNTEtICovXFxuZnMvb2NmczIvYWNsLmM6MzUyOmludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL29jZnMyL2FjbC5jLTM1My1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMToyMC4yMTA3MDU5ODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTMxNDA1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhcyBJIHdvdWxkIGluIG15IG93biB3b3JrOlxuXG4qKkFDTCBJbml0aWFsaXphdGlvbiBhbmQgT2JqZWN0IENyZWF0aW9uOiBBIFF1aWNrIFNjYW4qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3QgYmVpbmcgc3RhdGljIGdpdmVzIHVzIHNvbWUgZmxleGliaWxpdHksIG9wZW5zIHRoZW0gdXAgZm9yIHBvdGVudGlhbCBleHRlcm5hbCB1c2Ugb3IgbW9kdWxlIGludGVyYWN0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgYSBkaXN0cmlidXRlZCBmaWxlc3lzdGVtIGxpa2UgT0NGUzIuIEknZCB0eXBpY2FsbHkgd2FudCB0byBrbm93IHdoeSB0aGV5ICp3b3VsZCogYmUgc3RhdGljLCB3aGljaCB3b3VsZCBiZSBnZW5lcmFsbHkgaWYgdGhleSBhcmUgb25seSBldmVyIHVzZWQgd2l0aGluIHRoZSBzYW1lIGZpbGUgYW5kIHRodXMgdmlzaWJpbGl0eSBpcyBiZWluZyByZWR1Y2VkLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoaXMgbm9uLXN0YXRpYy1uZXNzIGlzIGNvbnNpc3RlbnQgYW5kIGNoZWNrIHRoZSBjYWxsZXJzIG9yIHRob3NlIHRoYXQgbWlnaHQgY2FsbCB0aGVzZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYCBzaW5jZSB0aG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgaW5pdGlhbGl6aW5nIEFDTHMgd2hlbiBuZXcgZGlyZWN0b3JpZXMgb3IgZmlsZXMgYXJlIG1hZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIG9iamVjdCBjcmVhdGlvbiBwcm9jZXNzIGluIHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmbG93IGlzIHNvdW5kIGFuZCB0aGUgQUNMIGhhbmRsaW5nIGlzIHJvYnVzdCBpbiB0aGUgY3JlYXRpb24gY29udGV4dC4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSwgd2hlbiwgYW5kIGhvdyB0aGVzZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhvc2UgY29yZSBvcGVyYXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNhbGxzPyBFcnJvciBoYW5kbGluZz8gQW5kIEknbGwgYmUgbm90aW5nIGFueSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoaXMgYXJlYS4gSXQncyBhIHF1aWNrIHNwb3QgY2hlY2sgdG8gbWFrZSBzdXJlIG5vdGhpbmcgc3VycHJpc2luZyBwb3BzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTozMS42MDM4NTAwNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTAyOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX21rZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz02Mzc9c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTY2NC1cXG5mcy9vY2ZzMi9uYW1laS5jOjY2NTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy02NjYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjcxLVxcbmZzL29jZnMyL25hbWVpLmM6NjcyOlxcdHRyYWNlX29jZnMyX21rZGlyKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy02NzMtXFx0XFx0XFx0ICBPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9Mjk0MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjk0Ni1cXHQuc3ltbGlua1xcdD0gb2NmczJfc3ltbGluayxcXG5mcy9vY2ZzMi9uYW1laS5jOjI5NDc6XFx0Lm1rZGlyXFx0XFx0PSBvY2ZzMl9ta2RpcixcXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXFx0Lm1rbm9kXFx0XFx0PSBvY2ZzMl9ta25vZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MzEuNjU1MzU4NDU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODkwOTQ5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9DRlMyIEluaXRpYWxpemF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIGhvdyBPQ0ZTMiBoYW5kbGVzIEFDTCBpbml0aWFsaXphdGlvbiBhbmQgcmVsYXRlZCBzZWN1cml0eSBjb250ZXh0cy4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxseSDigJMgd2UgY2FuIGp1c3QgcmVseSBvbiBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBiZWNhdXNlLCBhcyBmYXIgYXMgSSBjYW4gc2VlIGF0IHRoaXMgcG9pbnQsIHRoZSBjb3JlIHJvdXRpbmVzIGFyZSBzdGF0aWMuXG5cblRoZW4gSSBwYXVzZWQg4oCTIGBvY2ZzMl9ta25vZGAgKmlzKiBzdGF0aWMsIGJ1dCBvZiBjb3Vyc2UsIGl0J3MgYW4gaW5vZGUgb3BlcmF0aW9uLiBTbywgVkZTIGNhbGxzIGl0LiBUaGF0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gdGhpbmsgbW9yZSBicm9hZGx5LCBiZXlvbmQgc2ltcGxlIGRpcmVjdCBjYWxscy5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBpbml0aWFsaXphdGlvbnMuIGBvY2ZzMl9yZWZsaW5rYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gQWhhISBgb2NmczJfcmVmbGlua194YXR0cnNgIGlzICpub3QqIHN0YXRpYy4gVGhhdCdzIGEgZ29vZCBsZWFkLiBOb3cgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyBub24tc3RhdGljLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24uIExldCdzIGhlYWQgdG8gYGZzL29jZnMyL3hhdHRyLmNgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MzguMTQ0NDU2NjUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4NzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgb2NmczJfcmVmbGlua194YXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi94YXR0ci5jPTcxNjQ9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXFxuZnMvb2NmczIveGF0dHIuYzo3MTczOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzQtXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTozOC4xODk2NTE3MzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MTE4NDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFzIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGJyYWluJ3Mgd2hpcnJpbmcuLi4gd2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgKmFic29sdXRlbHkqIG5lZWRlZCB0byBtYWtlIHRoaXMgd29yaz8gUmlnaHQsIGBPQ0ZTMl9GU2AgaXMgdGhlIGJpZyBvbmUuIEhhbmcgb24sIHRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGxldmVyYWdpbmcgYE9DRlMyX01PVU5UX1BPU0lYX0FDTGAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZy4uLiBkb2VzIGBPQ0ZTMl9GU2AgaW1wbGljaXRseSBzZWxlY3QgYEZTX1BPU0lYX0FDTGA/IFllcywgSSBzZWUgaXQgcmlnaHQgdGhlcmU6IGBzZWxlY3QgRlNfUE9TSVhfQUNMYCB3aXRoaW4gYE9DRlMyX0ZTYC4gR29vZC4gQWxyaWdodCwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXk/IEp1c3QgZG91YmxlLWNoZWNraW5nLi4uIExvb2tzIGxpa2UgYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIHByaW1hcnksIG92ZXJhcmNoaW5nIG9uZS5cblxuSG1tLCB3YWl0LCBhIGRlcGVuZGVuY3kgY2hlY2suLi4gYE9DRlMyX0ZTYCBkZXBlbmRzIG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNgLiBSaWdodC4gU28gd2Ugc2hvdWxkIGRlZmluaXRlbHkgbGlzdCBgT0NGUzJfRlNgIGluIEVuYWJsZUNvbmZpZ3MuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBPQ0ZTMl9GU2AgaXMgdGhlICpvbmx5KiBvbmUgZGlyZWN0bHkgbmVlZGVkIHRvIG1vdmUgZm9yd2FyZC4gTmVlZCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo0My40NTA4Mzg0NDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDUxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPQ0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6NDMuNDk1ODk1OTA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDAxODk1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIGZvciBDT05GSUdGU19GUyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQ09ORklHRlNfRlNgIGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgaXQncyBub3Qgc29tZXRoaW5nIHRoYXQncyBtaXNzZWQsIG9yIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBpbiB0aGUgcHJvamVjdC4gSWYgaXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdCdsbCBhZmZlY3QgdGhlIGJ1aWxkIGFuZCBtb2R1bGUgbG9hZGluZyBiZWhhdmlvci4gSSBjYW4ndCBwcm9jZWVkIHdpdGggYW55IGFzc3VtcHRpb25zIGhlcmUuIEkgd2lsbCBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGdvaW5nIHRvIGRldGVybWluZSBob3cgSSBwcm9jZWVkIHdpdGggYW5hbHl6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjQ4LjY5NjA4ODc4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2Mzk2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo0OC43Mzk3MzE3NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExNTU3OTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgQ09ORklHRlNfRlNgIGxpc3RlZCBoZXJlIOKAkyB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBubyBxdWVzdGlvbi4gVGhlcmVmb3JlLCBFbmFibGVDb25maWdzIHNob3VsZCBpbmNsdWRlIGJvdGggYE9DRlMyX0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYC4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgcXVpY2tseSBjaGVjayBpZiBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIGFzc3VtZWQgYW5kIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyB0aGV5IG9mdGVuIGFyZS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGEgYml0IGRlZXBlciwgYmVjYXVzZSB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdpdGggYE9DRlMyX0ZTX08yQ0JgLiBJcyBlbmFibGluZyB0aGlzICplc3NlbnRpYWwqIHRvIG1vdW50aW5nIGFuIE9DRlMyIGZpbGUgc3lzdGVtPyBMZXQgbWUgc2Vl4oCmQWgsIHJpZ2h0LiBcIk8yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZy5cIiBPa2F5LCBzbyAqbm9ybWFsbHkqIHlvdSBjYW4gbW91bnQgT0NGUzIgbG9jYWxseSwgZXZlbiB3aXRob3V0IHRoZSBjbHVzdGVyaW5nIGNvbXBvbmVudCwgdXNpbmcgYGxvY2FsYWxsb2NgIG9yIHNpbWlsYXIgbWV0aG9kcy4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4g4oCTIGRvdWJsZS1jaGVja2luZyB0aGF0IGBPQ0ZTMl9GU19PMkNCYCBpc24ndCBhIGhhcmQgcmVxdWlyZW1lbnQgaGVyZSBpcyB0aGUgbW9zdCBwcnVkZW50IHRoaW5nIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo1NS44NTUzMTM2OTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgUHJvamVjdCB3ZWIgcGFnZTogICAgaHR0cHM6Ly9vY2ZzMi53aWtpLmtlcm5lbC5vcmcvXFxuICAyMjpcXHRcXHQgIFRvb2xzIHdlYiBwYWdlOiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZmFzaGVoL29jZnMyLXRvb2xzXFxuICAyMzpcXHRcXHQgIE9DRlMyIG1haWxpbmcgbGlzdHM6IGh0dHBzOi8vc3Vic3BhY2Uua2VybmVsLm9yZy9saXN0cy5saW51eC5kZXYuaHRtbFxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE9DRlMyLCBzZWUgdGhlIGZpbGVcXG4gIDI2OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi5yc3RcXHUwMDNlLlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgT0NGUzJfRlNfTzJDQlxcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcIk8yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gT0NGUzJfRlNcXG4gIDMxOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBPQ0ZTMiBpbmNsdWRlcyBhIHNpbXBsZSBrZXJuZWxzcGFjZSBjbHVzdGVyaW5nIHBhY2thZ2UsIHRoZSBPQ0ZTMlxcbiAgMzQ6XFx0XFx0ICBDbHVzdGVyIEJhc2UuICBJdCBvbmx5IHJlcXVpcmVzIGEgdmVyeSBzbWFsbCB1c2Vyc3BhY2UgY29tcG9uZW50XFxuICAzNTpcXHRcXHQgIHRvIGNvbmZpZ3VyZSBpdC4gVGhpcyBjb21lcyB3aXRoIHRoZSBzdGFuZGFyZCBvY2ZzMi10b29scyBwYWNrYWdlLlxcbiAgMzY6XFx0XFx0ICBPMkNCIGlzIGxpbWl0ZWQgdG8gbWFpbnRhaW5pbmcgYSBjbHVzdGVyIGZvciBPQ0ZTMiBmaWxlIHN5c3RlbXMuXFxuICAzNzpcXHRcXHQgIEl0IGNhbm5vdCBtYW5hZ2UgYW55IG90aGVyIGNsdXN0ZXIgYXBwbGljYXRpb25zLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHQgIEl0IGlzIGFsd2F5cyBzYWZlIHRvIHNheSBZIGhlcmUsIGFzIHRoZSBjbHVzdGVyaW5nIG1ldGhvZCBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo1NS44NTUzNzM3NjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2Mjk5NTEwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgT0NGUzIgQUNMIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgZGVmYXVsdCBzZWVtcyB0byBiZSBgeWAgZm9yIGVuYWJsaW5nIGZlYXR1cmVzLCBzbyBgT0NGUzJfRlNgIGFsb25lIHNob3VsZCBzdWZmaWNlLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGBwb3NpeF9hY2xfZHVwYCBhbmQgYGdldF9pbm9kZV9hY2xgIGJlY2F1c2UgdGhlIHBhdGNoIGV4cGxpY2l0bHkgdXNlcyB0aGVtLCBhbmQgdGhleSBhcmUgcGFydCBvZiBgRlNfUE9TSVhfQUNMYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgRlNfUE9TSVhfQUNMYCBpcywgaW4gdHVybiwgc2VsZWN0ZWQgYnkgYE9DRlMyX0ZTYCwgaGVuY2UgbXkgY2hvaWNlIG9mIGNvbmZpZ3VyYXRpb25zOiBgT0NGUzJfRlNgIGFuZCBgQ09ORklHRlNfRlNgLiBJJ2xsIHdhbnQgdG8ga2VlcCBhbiBleWUgb24gdGhvc2UuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSB0b3VjaGVkOyBpZiBhbnkgb2YgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyB3ZXJlIHN0YXRpYywgdGhlIHBvdGVudGlhbCBpbXBhY3Qgd291bGQgYmUgcmVkdWNlZC4gSG93ZXZlciwgYG9jZnMyX21rbm9kYCBpcyBzdGF0aWMuIFRoYXQncyBnb29kLiBCb3RoIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub24tc3RhdGljLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgdmlzaWJpbGl0eSBmb3IgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBvY2ZzMl9pbml0X2FjbGAgaXMgZGVjbGFyZWQgaW4gYGZzL29jZnMyL2FjbC5oYCBhbmQgaXMgY2FsbGVkIGZyb20gYm90aCBgZnMvb2NmczIvbmFtZWkuY2AgYW5kIGBmcy9vY2ZzMi94YXR0ci5jYCwgc28gaXQncyBjbGVhcmx5IG5vdCBzdGF0aWMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgZGVjbGFyZWQgaW4gYGZzL29jZnMyL3hhdHRyLmhgIGFuZCBpcyBjYWxsZWQgZnJvbSBgZnMvb2NmczIvcmVmY291bnR0cmVlLmNgLCBzbyBpdCdzIGFsc28gbm9uLXN0YXRpYywgY29uZmlybWluZyB0aGF0IGl0J3MgYWNjZXNzaWJsZS5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIGl0IGFwcGVhcnMgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgbG9jayBvcmRlcmluZyBpc3N1ZS4gVGhlIGZpeCBpbnZvbHZlcyBmZXRjaGluZyB0aGUgZGVmYXVsdCBBQ0wgKmJlZm9yZSogdGFraW5nIGxvY2tzIG9yIGluaXRpYXRpbmcgYSB0cmFuc2FjdGlvbiwgd2hpY2ggaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IE9DRlMyIGhhbmRsZXMgaW5vZGUgY3JlYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBsb2dpYyBvZiBPQ0ZTMiwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGF0dHJhY3RpdmUgZm9yIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggYWx0ZXJzIGhvdyBPQ0ZTMiBpbnRlcmFjdHMgd2l0aCBQT1NJWCBBQ0xzIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApLCBzcGVjaWZpY2FsbHkgYnkgcmVvcmRlcmluZyB0aGUgQUNMIGZldGNoLiBJdCdzIGludGVuZGVkIHRvIHJlc29sdmUgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBzdW1tYXJpemUgdGhlIGVzc2VudGlhbCBlbGVtZW50cywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuLSBgb2NmczJfaW5pdF9hY2xgXG4tIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgXG5cbkFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3M6XG4tIGBPQ0ZTMl9GU2Bcbi0gYENPTkZJR0ZTX0ZTYFxuXG5Pa2F5LCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHNldCBvZiBwYXJhbWV0ZXJzIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4NywiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMjowNi40ODUzMjczOTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5Mjk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgT0NGUzIgdG8gZmV0Y2ggdGhlIGRlZmF1bHQgUE9TSVggQUNMIGJlZm9yZSBzdGFydGluZyBhIHRyYW5zYWN0aW9uIG9yIHRha2luZyBsb2NrcyBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKGUuZy4sIGluIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgVkZTIHN5c3RlbSBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBUaGVyZWZvcmUsIGl0IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMjowNi41NjkzMjcyMjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTA5Mzg5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzI6MDYuNTY5ODkzMjQ3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3MTA4ODE4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGRlZmF1bHQgQUNMcyBhcmUgZmV0Y2hlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIuIEluc3RlYWQgb2YgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIGluc2lkZSBgb2NmczJfaW5pdF9hY2xgLCBpdCBub3cgdXNlcyB0aGUgc3RhbmRhcmQgVkZTIGBnZXRfaW5vZGVfYWNsYCBpbiB0aGUgY2FsbGVycyAoYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApIGFuZCBwYXNzZXMgdGhlIHJlc3VsdGluZyBgcG9zaXhfYWNsYCBzdHJ1Y3QgdG8gYG9jZnMyX2luaXRfYWNsYC5cXG5cXG5UaGUgYGRlZmF1bHRfYWNsYCBwb2ludGVycyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYm90aCBtb2RpZmllZCBmdW5jdGlvbnMuIElmIGBnZXRfaW5vZGVfYWNsYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBwcm9wZXJseSBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3ZGFiMmU1MDJkYmYxNjZiMjZlZDMyYTA4MGNlY2Q5NmJhMTI5ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozMDo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcbmluZGV4IGFmMWUyY2VkYjIxN2YuLmExNjM4NmMyMzYyNDMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0zNTMsNyArMzUzLDcgQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbitcdFx0ICAgc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wsXG4gXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuIFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcbiB7XG5AQCAtMzY0LDEyICszNjQsOCBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbiBcbiBcdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRcdFx0aWYgKGRlZmF1bHRfYWNsKVxuK1x0XHRcdFx0YWNsID0gcG9zaXhfYWNsX2R1cChkZWZhdWx0X2FjbCk7XG4gXHRcdH1cbiBcdFx0aWYgKCFhY2wpIHtcbiBcdFx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlIFx1MDAyNiB+Y3VycmVudF91bWFzaygpO1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmhcbmluZGV4IDY2N2M2ZjAzZmE2MDYuLmMxYmEyZWIyNzRlY2MgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxuKysrIGIvZnMvb2NmczIvYWNsLmhcbkBAIC0yMSw3ICsyMSw3IEBAIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuIGV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuK1x0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBwb3NpeF9hY2wgKixcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4gXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xuaW5kZXggMTI3NzY2NmM3N2NkMi4uNmJmYzJiOWFiZTc1ZSAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNyw2ICsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcXVvdGFvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NsdXN0ZXIvbWFza2xvZy5oXHUwMDNlXG4gXG5AQCAtMjU2LDYgKzI1Nyw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTM2Miw2ICszNjQsMTUgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0Z290byBsZWF2ZTtcbiBcdH1cbiBcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRkZWZhdWx0X2FjbCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHtcbitcdFx0XHRzdGF0dXMgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbitcdFx0XHRkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0Z290byBsZWF2ZTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYixcbiBcdFx0XHRcdFx0XHRcdCAgICBTX0lTRElSKG1vZGUpLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHhhdHRyX2NyZWRpdHMpKTtcbkBAIC00MTEsNyArNDIyLDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0aW5jX25saW5rKGRpcik7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLFxuK1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIGRlZmF1bHRfYWNsLFxuIFx0XHRcdCBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbkBAIC00ODgsNiArNDk5LDkgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChtZXRhX2FjKVxuIFx0XHRvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7XG4gXG4rXHRpZiAoZGVmYXVsdF9hY2wpXG4rXHRcdHBvc2l4X2FjbF9yZWxlYXNlKGRlZmF1bHRfYWNsKTtcbitcbiBcdC8qXG4gXHQgKiBXZSBzaG91bGQgY2FsbCBpcHV0IGFmdGVyIHRoZSBpX3J3c2VtIG9mIHRoZSBiaXRtYXAgYmVlblxuIFx0ICogdW5sb2NrZWQgaW4gb2NmczJfZnJlZV9hbGxvY19jb250ZXh0LCBvciB0aGVcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZC4uMWIwMjBmMzNmZTY1OCAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC0yNiw2ICsyNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NsdXN0ZXIvbWFza2xvZy5oXHUwMDNlXG4gXG5AQCAtNzI1Nyw2ICs3MjU4LDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyNzEsMjMgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdGlmIChPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYiktXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRkZWZhdWx0X2FjbCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbitcdFx0XHRkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRlZmF1bHRfYWNsLCBOVUxMLCBOVUxMKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbitcdGlmIChkZWZhdWx0X2FjbClcbitcdFx0cG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpO1xuK3VubG9jazpcbiBcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xuIFx0YnJlbHNlKGRpcl9iaCk7XG4gbGVhdmU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMjowNi41Njk4OTU4MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMDg3OTQ3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyBob3cgZGVmYXVsdCBBQ0xzIGFyZSBoYW5kbGVkIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgb2NmczJfaW5pdF9hY2xgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBzaGlmdGluZyB0aGUgQUNMIGZldGNoaW5nIGxvZ2ljIGZyb20gaW5zaWRlIGBvY2ZzMl9pbml0X2FjbGAgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIHdpdGhpbiBgb2NmczJfaW5pdF9hY2xgIHdoaWxlIGhvbGRpbmcgYGlwX3hhdHRyX3NlbWAuIE5vdywgdGhleSBhcmUgZmV0Y2hpbmcgaXQgd2l0aCB0aGUgVkZTIGZ1bmN0aW9uIGBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVClgICpiZWZvcmUqIGNhbGxpbmcgYG9jZnMyX2luaXRfYWNsYC5cblxuTGV0J3MgZGlzc2VjdCB0aGlzLCBmb2N1c2luZyBvbiBhbnkgcG90ZW50aWFsIG1lbW9yeSBvciBsb2NraW5nIHJpc2tzLiBJbiBgb2NmczJfbWtub2RgLCB0aGUgY29kZSBub3cgY2hlY2tzIHRoZSBgT0NGUzJfTU9VTlRfUE9TSVhfQUNMYCBtb3VudCBvcHRpb24uIElmIGVuYWJsZWQsIGl0IGZldGNoZXMgdGhlIGRlZmF1bHQgQUNMLCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgKHJldHVybmluZyBlYXJseSBpZiBgZ2V0X2lub2RlX2FjbGAgZmFpbHMpLCBhbmQgdGhlbiBwYXNzZXMgdGhlIHJlc3VsdGluZyBgc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2xgIHRvIGBvY2ZzMl9pbml0X2FjbGAuIEltcG9ydGFudGx5LCBpdCAqcmVsZWFzZXMqIHRoZSBBQ0wgd2l0aCBgcG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpYCBhZnRlcndhcmRzLiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBmb2xsb3dzIGEgc2ltaWxhciBwYXR0ZXJuOiBmZXRjaCBBQ0wgd2l0aCBgZ2V0X2lub2RlX2FjbGAsIGhhbmRsZSBlcnJvcnMsIGFuZCB0aGVuIHBhc3MgaXQgdG8gYG9jZnMyX2luaXRfYWNsYCwgd2hlcmUgaXQgc2hvdWxkIGJlIGhhbmRsZWQgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gQnV0LCBsZXQncyBzZWUuIFRoZSBwYXRjaCBkb2Vzbid0IGFsbG9jYXRlIGFueSBuZXcgc3RydWN0dXJlcyBhbmQgc2VuZCB0aGVtIHRvIHVzZXJzcGFjZS4gSW4gYG9jZnMyX2luaXRfYWNsYCwgdGhlIGBkZWZhdWx0X2FjbGAgaXMgKmR1cGxpY2F0ZWQqIHdpdGggYHBvc2l4X2FjbF9kdXAoZGVmYXVsdF9hY2wpYCwgd2hpY2ggc2hvdWxkIGJlIHNhZmUgYXMgbG9uZyBhcyB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYGRlZmF1bHRfYWNsYCBpcyB2YWxpZC4gVGhlIGBnZXRfaW5vZGVfYWNsYCBmdW5jdGlvbiBpcyBhIHN0YW5kYXJkIFZGUyBmdW5jdGlvbi4gSWYgaXQgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciB3aGljaCBpcyBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBJbiBlaXRoZXIgYG9jZnMyX21rbm9kYCBvciBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgdGhlIGBkZWZhdWx0X2FjbGAgcG9pbnRlciBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGJlZm9yZSBiZWluZyBwb3RlbnRpYWxseSBvdmVyd3JpdHRlbiBieSB0aGUgYGdldF9pbm9kZV9hY2xgIHJlc3VsdCwgYW5kIHRoZXJlIGFyZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy4gSWYgYGdldF9pbm9kZV9hY2xgIGZhaWxzIG9yIGlmIHRoZSBQT1NJWCBBQ0wgbW91bnQgb3B0aW9uIGlzbid0IHNldCwgYGRlZmF1bHRfYWNsYCByZW1haW5zIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgYGlmIChkZWZhdWx0X2FjbClgIGNoZWNrcyB3aWxsIHRoZW4gZW5zdXJlIHByb3BlciBoYW5kbGluZyBpbiBgb2NmczJfaW5pdF9hY2xgLlxuXG5TbywgKmV4cGxpY2l0bHkqIGluaXRpYWxpemluZyBgZGVmYXVsdF9hY2xgIHRvIGBOVUxMYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgZ2V0X2lub2RlX2FjbGAgaW4gYm90aCBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBhIGdvb2QgcHJhY3RpY2UuIEl0IGVsaW1pbmF0ZXMgdGhlIGNoYW5jZSBvZiB1c2luZyBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLlxuXG5UaGUgKnJlYWwqIG1vdGl2YXRpb24gaGVyZSwgSSBzdXNwZWN0LCBpcyBhIGxvY2tpbmcgaXNzdWUuIEl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUsIGhvbGRpbmcgYGlwX3hhdHRyX3NlbWAgd2hpbGUgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgLCB3YXMgbGVhZGluZyB0byBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBzb21lIGZvcm0gb2YgbG9jayBpbnZlcnNpb24uIE1vdmluZyB0aGUgQUNMIGZldGNoICpvdXRzaWRlKiB0aGlzIHByb3RlY3RlZCByZWdpb24gbGlrZWx5IGZpeGVzIHRoYXQuIE9yIG1heWJlIGl0J3MgYXZvaWRpbmcgYSBsb2NrZGVwIHdhcm5pbmcuIFRoaXMgc2hpZnQgdG8gdGhlIFZGUyBmdW5jdGlvbiBjb3VsZCBzaWRlc3RlcCBzb21lIG9jZnMyLXNwZWNpZmljIGxvY2tpbmcgY29tcGxpY2F0aW9ucy5cblxuVGhlcmVmb3JlLCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBwYXRjaCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVzZSB3b3VsZCBmbGFnIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2NraW5nIGlzc3Vlcy4gVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBwcmV0dHkgY2xlYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTIsIk91dHB1dFRva2VucyI6MzA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMyOjIzLjY3ODY5NDU0N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXFxuXFxuVGhlIGBkZWZhdWx0X2FjbGAgcG9pbnRlcnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGluIGJvdGggbW9kaWZpZWQgZnVuY3Rpb25zLiBJZiBgZ2V0X2lub2RlX2FjbGAgcmV0dXJucyBhbiBlcnJvciwgaXQgaXMgcHJvcGVybHkgY2hlY2tlZCB1c2luZyBgSVNfRVJSYC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgZGVhZGxvY2tzKSwgbWVtb3J5IG1hbmFnZW1lbnQgKGUuZy4sIG1lbW9yeSBsZWFrcyBpZiBgcG9zaXhfYWNsX3JlbGVhc2VgIGlzIG1pc3NlZCwgb3IgdXNlLWFmdGVyLWZyZWUpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBjb21wcmVoZW5zaXZlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGRlZmF1bHQgQUNMcyBhcmUgZmV0Y2hlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIuIEluc3RlYWQgb2YgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIGluc2lkZSBgb2NmczJfaW5pdF9hY2xgLCBpdCBub3cgdXNlcyB0aGUgc3RhbmRhcmQgVkZTIGBnZXRfaW5vZGVfYWNsYCBpbiB0aGUgY2FsbGVycyAoYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApIGFuZCBwYXNzZXMgdGhlIHJlc3VsdGluZyBgcG9zaXhfYWNsYCBzdHJ1Y3QgdG8gYG9jZnMyX2luaXRfYWNsYC5cXG5cXG5UaGUgYGRlZmF1bHRfYWNsYCBwb2ludGVycyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYm90aCBtb2RpZmllZCBmdW5jdGlvbnMuIElmIGBnZXRfaW5vZGVfYWNsYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBwcm9wZXJseSBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 09:29:17 +0000 UTC FinishedAt: 2026-08-19 09:32:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "a2d17605-f7c2-4cae-8f6e-0acb402bdfff" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ocfs2_init_acl", "ocfs2_init_security_and_acl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPQ0ZTMiB0byBmZXRjaCB0aGUgZGVmYXVsdCBQT1NJWCBBQ0wgYmVmb3JlIHN0YXJ0aW5nIGEgdHJhbnNhY3Rpb24gb3IgdGFraW5nIGxvY2tzIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgaW4gYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBWRlMgc3lzdGVtIGNhbGxzIChlLmcuLCBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCkgb24gYW4gT0NGUzIgbW91bnQuIFRoZXJlZm9yZSwgaXQgaGFzIGEgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwN2RhYjJlNTAyZGJmMTY2YjI2ZWQzMmEwODBjZWNkOTZiYTEyOWU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDk6MzA6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xuaW5kZXggYWYxZTJjZWRiMjE3Zi4uYTE2Mzg2YzIzNjI0MyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuY1xuQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsLFxuIFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbiBcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4ge1xuQEAgLTM2NCwxMiAmIzQzOzM2NCw4IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuIFxuIFx0aWYgKCFTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCxcbi1cdFx0XHRcdFx0XHQgICBkaXJfYmgpO1xuLVx0XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0aWYgKElTX0VSUihhY2wpKVxuLVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcbiYjNDM7XHRcdFx0aWYgKGRlZmF1bHRfYWNsKVxuJiM0MztcdFx0XHRcdGFjbCA9IHBvc2l4X2FjbF9kdXAoZGVmYXVsdF9hY2wpO1xuIFx0XHR9XG4gXHRcdGlmICghYWNsKSB7XG4gXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Li5jMWJhMmViMjc0ZWNjIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjEsNyAmIzQzOzIxLDcgQEAgaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XG4gZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4mIzQzO1x0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBwb3NpeF9hY2wgKixcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4gXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xuaW5kZXggMTI3NzY2NmM3N2NkMi4uNmJmYzJiOWFiZTc1ZSAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNyw2ICYjNDM7MjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3F1b3Rhb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcdTAwM2VcbiBcbkBAIC0yNTYsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wgPSBOVUxMO1xuIFxuIFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4gXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbkBAIC0zNjIsNiAmIzQzOzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuIFxuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0ZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRzdGF0dXMgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0ZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRnb3RvIGxlYXZlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLFxuIFx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4gXHRcdFx0XHRcdFx0XHQgICAgeGF0dHJfY3JlZGl0cykpO1xuQEAgLTQxMSw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0aW5jX25saW5rKGRpcik7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLFxuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBkZWZhdWx0X2FjbCxcbiBcdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4gXG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG5AQCAtNDg4LDYgJiM0Mzs0OTksOSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKG1ldGFfYWMpXG4gXHRcdG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTtcbiBcbiYjNDM7XHRpZiAoZGVmYXVsdF9hY2wpXG4mIzQzO1x0XHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFdlIHNob3VsZCBjYWxsIGlwdXQgYWZ0ZXIgdGhlIGlfcndzZW0gb2YgdGhlIGJpdG1hcCBiZWVuXG4gXHQgKiB1bmxvY2tlZCBpbiBvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQsIG9yIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTI2LDYgJiM0MzsyNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG9zaXhfYWNsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NjbHVzdGVyL21hc2tsb2cuaFx1MDAzZVxuIFxuQEAgLTcyNTcsNiAmIzQzOzcyNTgsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgJiM0Mzs3MjcxLDIzIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcdFx0Z290byBsZWF2ZTtcbiBcdH1cbi1cdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGlmIChPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYiktXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0ZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0ZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRlZmF1bHRfYWNsLCBOVUxMLCBOVUxMKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbiYjNDM7XHRpZiAoZGVmYXVsdF9hY2wpXG4mIzQzO1x0XHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XG4mIzQzO3VubG9jazpcbiBcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xuIFx0YnJlbHNlKGRpcl9iaCk7XG4gbGVhdmU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA3ZGFiMmU1MDJkYmYxNjZiMjZlZDMyYTA4MGNlY2Q5NmJhMTI5ZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozMDo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmMKaW5kZXggYWYxZTJjZWRiMjE3Zi4uYTE2Mzg2YzIzNjI0MyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTM1Myw3ICYjNDM7MzUzLDcgQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKJiM0MzsJCSAgIHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsLAogCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpCiB7CkBAIC0zNjQsMTIgJiM0MzszNjQsOCBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwKIAogCWlmICghU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkgewogCQlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJCWRvd25fcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwKLQkJCQkJCSAgIGRpcl9iaCk7Ci0JCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQkJaWYgKElTX0VSUihhY2wpKQotCQkJCXJldHVybiBQVFJfRVJSKGFjbCk7CiYjNDM7CQkJaWYgKGRlZmF1bHRfYWNsKQomIzQzOwkJCQlhY2wgPSBwb3NpeF9hY2xfZHVwKGRlZmF1bHRfYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkgewogCQkJbW9kZSA9IGlub2RlLSZndDtpX21vZGUgJmFtcDsgfmN1cnJlbnRfdW1hc2soKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmgKaW5kZXggNjY3YzZmMDNmYTYwNi4uYzFiYTJlYjI3NGVjYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmgKQEAgLTIxLDcgJiM0MzsyMSw3IEBAIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTsKIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiBleHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAomIzQzOwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBwb3NpeF9hY2wgKiwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDIuLjZiZmMyYjlhYmU3NWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9oaWdobWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcXVvdGFvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pdmVyc2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wb3NpeF9hY2wuaCZndDsKIAogI2luY2x1ZGUgJmx0O2NsdXN0ZXIvbWFza2xvZy5oJmd0OwogCkBAIC0yNTYsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJc2lnc2V0X3Qgb2xkc2V0OwogCWludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDsKIAogCXRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktJmd0O2RfbmFtZS5sZW4sIGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWUsCiAJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLSZndDtpcF9ibGtubywKQEAgLTM2Miw2ICYjNDM7MzY0LDE1IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCWdvdG8gbGVhdmU7CiAJfQogCiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7CiYjNDM7CQlpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkgewomIzQzOwkJCXN0YXR1cyA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpOwomIzQzOwkJCWRlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlnb3RvIGxlYXZlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi0mZ3Q7c2IsCiAJCQkJCQkJICAgIFNfSVNESVIobW9kZSksCiAJCQkJCQkJICAgIHhhdHRyX2NyZWRpdHMpKTsKQEAgLTQxMSw3ICYjNDM7NDIyLDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIGRlZmF1bHRfYWNsLAogCQkJIG1ldGFfYWMsIGRhdGFfYWMpOwogCiAJaWYgKHN0YXR1cyAmbHQ7IDApIHsKQEAgLTQ4OCw2ICYjNDM7NDk5LDkgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAobWV0YV9hYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOwogCiYjNDM7CWlmIChkZWZhdWx0X2FjbCkKJiM0MzsJCXBvc2l4X2FjbF9yZWxlYXNlKGRlZmF1bHRfYWNsKTsKJiM0MzsKIAkvKgogCSAqIFdlIHNob3VsZCBjYWxsIGlwdXQgYWZ0ZXIgdGhlIGlfcndzZW0gb2YgdGhlIGJpdG1hcCBiZWVuCiAJICogdW5sb2NrZWQgaW4gb2NmczJfZnJlZV9hbGxvY19jb250ZXh0LCBvciB0aGUKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IGZjZGRkM2MxM2FjZGQuLjFiMDIwZjMzZmU2NTggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuYwpAQCAtMjYsNiAmIzQzOzI2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZWN1cml0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wb3NpeF9hY2wuaCZndDsKIAogI2luY2x1ZGUgJmx0O2NsdXN0ZXIvbWFza2xvZy5oJmd0OwogCkBAIC03MjU3LDYgJiM0Mzs3MjU4LDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDsKIAogCXJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpOwogCWlmIChyZXQpIHsKQEAgLTcyNjksMTAgJiM0Mzs3MjcxLDIzIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBsZWF2ZTsKIAl9Ci0JcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJaWYgKE9DRlMyX1NCKGRpci0mZ3Q7aV9zYiktJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7CiYjNDM7CQlpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpOwomIzQzOwkJCWRlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkZWZhdWx0X2FjbCwgTlVMTCwgTlVMTCk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiYjNDM7CWlmIChkZWZhdWx0X2FjbCkKJiM0MzsJCXBvc2l4X2FjbF9yZWxlYXNlKGRlZmF1bHRfYWNsKTsKJiM0Mzt1bmxvY2s6CiAJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7CiAJYnJlbHNlKGRpcl9iaCk7CiBsZWF2ZToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE9DRlMyIEFDTCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgc2VlbXMgdG8gYmUgaGl0dGluZyBzZXZlcmFsIGZpbGVzIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbTogYGFjbC5jYCwgYGFjbC5oYCwgYG5hbWVpLmNgLCBhbmQgYHhhdHRyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyB0aGUgZGVmYXVsdCBBY2Nlc3MgQ29udHJvbCBMaXN0IChBQ0wpIGlzIGhhbmRsZWQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIGBvY2ZzMl9pbml0X2FjbGAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWNjZXB0IGEgYHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsYCBkaXJlY3RseSwgcmF0aGVyIHRoYW4gYSBgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmhgLiBUaGUgcmF0aW9uYWxlIGFwcGVhcnMgdG8gYmUgYWJvdXQgcmVzb2x2aW5nIGEgZGVhZGxvY2sgb3IgcG90ZW50aWFsbHkgb3B0aW1pemluZyBwZXJmb3JtYW5jZS4gVGhlIGNvZGUgbm93IHJldHJpZXZlcyB0aGUgZGVmYXVsdCBBQ0wgKmJlZm9yZSoga2lja2luZyBvZmYgYSB0cmFuc2FjdGlvbiBvciBhY3F1aXJpbmcgbG9ja3MuCgpJJiMzOTttIHNlZWluZyB0aGlzIHBhdHRlcm4gaW4gYG9jZnMyX21rbm9kYCB3aGVyZSBgZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpYCBpcyBjYWxsZWQgYmVmb3JlIGBvY2ZzMl9zdGFydF90cmFuc2AuIFNhbWUgdGhpbmcgaW4gYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIHdoZXJlIHRoZSBBQ0wgaXMgZmV0Y2hlZCBwcmlvciB0byB0aGUgY2FsbCB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGlzIG1ha2VzIHNlbnNlLCBmZXRjaGluZyB3aGF0IHdlIG5lZWQsIGFoZWFkIG9mIHdoZXJlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIGRhdGEgcHJpb3IgdG8gdGhlIGxvY2sgYWNxdWlzaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBuYXR1cmUgb2YgdGhlIGRlYWRsb2NrIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcsIGJ1dCBpdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgYXBwcm9hY2gsIGF2b2lkaW5nIHBvdGVudGlhbCBsb2NrIGNvbnRlbnRpb24uCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgZGV0YWlscywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgT0NGUzIgaXMgZXZlbiBhIHRhcmdldCB3b3J0aCBteSB0aW1lLiBJcyBpdCBlYXNpbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBhbmQgZnV6emluZz8gR29vZCwgT0NGUzIgaXMgaW5kZWVkIGEgZmlsZXN5c3RlbSwgc28gaXQgc2hvdWxkIGJlIG1vdW50YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiBRRU1VIOKAkyBhbmQgeWVzLCBpdCYjMzk7cyBhIHN0YW5kYXJkIGZpbGVzeXN0ZW0uIFNvLCBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgd291bGQgcHJvdmlkZSBzb21lIHVzZWZ1bCBpbnNpZ2h0LiBJIHdpbGwgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZW5hYmxlZCBhbmQgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZyBvcHRpb25zIHRvIGJ1aWxkIGEgZnV6emVyIGZvciBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxuZnMvb2NmczIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNDEtXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxuZnMvb2NmczIvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy01My1cbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqT0NGUzJfRlMgRGVwZW5kZW5jeSBDaGVjayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRpbWUgdG8gZ2V0IG15IGhlYWQgd3JhcHBlZCBhcm91bmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgT0NGUzJfRlMuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXBwb3J0IG5lZWRlZC4KCiogICAqKkZpcnN0LCB0aGUgYmFzaWNzOioqIFdoYXQgYXJlIHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzIHRoYXQgT0NGUzIgcmVsaWVzIHVwb24/IEkmIzM5O20gdGhpbmtpbmcgZmlsZSBzeXN0ZW0gaW5mcmFzdHJ1Y3R1cmUsIGJsb2NrIGRldmljZSBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNsdXN0ZXJlZCBmaWxlIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4KKiAgICoqTmV4dCwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIE9DRlMyIHRvIGJ1aWxkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHk/IEkgcmVtZW1iZXIgcGFzdCBpc3N1ZXMgd2l0aCBjZXJ0YWluIG9wdGlvbnMgYmVpbmcgc3VidGx5IGluY29tcGF0aWJsZSwgbGVhZGluZyB0byBvYnNjdXJlIGZhaWx1cmVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY2xlYXIuCiogICAqKlVzZXIgc3BhY2Ugc3VwcG9ydDoqKiBXaGF0IGxpYnJhcmllcyBhbmQgdG9vbHMgZG9lcyBhIHVzZXIgbmVlZCB0byBpbnRlcmFjdCB3aXRoIE9DRlMyPyBUaGUgT0NGUzIgbWFuYWdlbWVudCB1dGlsaXRpZXMgY29tZSB0byBtaW5kLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGFyZSBhdmFpbGFibGUgYW5kIGFwcHJvcHJpYXRlbHkgdmVyc2lvbmVkLiBBcmUgdGhlcmUgYW55IGV4dGVybmFsIHRvb2xzIG9yIGxpYnJhcmllcyB0aGF0IHdlIGRlcGVuZCBvbj8KKiAgICoqSW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtczoqKiBEb2VzIE9DRlMyIGhhdmUgYW55IGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEkgc2hvdWxkIGNoZWNrIGFueSBjb25mbGljdHMgd2l0aCBvdGhlciBmaWxlIHN5c3RlbXMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoaW5ncyBsaWtlIHNlY3VyaXR5IG1vZHVsZXMsIGFuZCBldmVuIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHJlY2FsbCBzb21lIHBhc3QgY29uZmxpY3RzIHJlbGF0ZWQgdG8gbG9ja2luZyBvciBjYWNoaW5nIGJlaGF2aW9yIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuCiogICAqKlZlcnNpb24gY29tcGF0aWJpbGl0eToqKiBDcnVjaWFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBhbnkgZGVwcmVjYXRpb25zIG9yIHJlbW92YWxzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGNoZWNrIGZvciB1cHN0cmVhbSBjaGFuZ2VzIGFuZCBhbnkgY29ycmVzcG9uZGluZyBwYXRjaGVzIG9yIHdvcmthcm91bmRzLgoqICAgKipEb2N1bWVudGF0aW9uIHJldmlldzoqKiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgb3ZlciBhbnkgZG9jdW1lbnRhdGlvbiB0byByZWFjcXVhaW50IG15c2VsZiB3aXRoIHRoZSBkZXNpZ24uIFRoaXMgd291bGQgaW5jbHVkZSBhbnkgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbnMgb3IgUkZDcy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGFsbCB0aGUgcGllY2VzIHJlcXVpcmVkIGZvciBPQ0ZTMiYjMzk7cyBzdWNjZXNzZnVsIG9wZXJhdGlvbiwgYW5kIGVuc3VyaW5nIHRoZXkmIzM5O3JlIGFsbCBhY2NvdW50ZWQgZm9yLiBUaGUgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxuZnMvb2NmczIvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNDEtXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxuZnMvb2NmczIvS2NvbmZpZy00My1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy01My1cbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzLCBFdmVyeXdoZXJlLi4uKioKClJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBwYXVzZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBsYXkgb3V0IHRoZSBncm91bmR3b3JrIGZpcnN0LCBhbmQgbm90IGNoYXJnZSBibGluZGx5IGFoZWFkLiBXaGF0IGFyZSB0aGUgKmV4YWN0KiBlbGVtZW50cyB0aGlzIGhpbmdlcyBvbj8gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIGRhdGFzZXRzLCBvciBleHRlcm5hbCBmYWN0b3JzIGFyZSBnb2luZyB0byBpbmZsdWVuY2UgdGhlIG91dGNvbWUgaGVyZT8gSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byBwcm9wZXJseSBhc3Nlc3Mgb3IgcGxhbiB3aXRob3V0IGtub3dpbmcgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyByZXF1aXJlbWVudHM7IGl04oCZcyBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhdGUgd2ViIG9mIGludGVyY29ubmVjdGlvbnMuIFRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscywgYXMgdGhleSBzYXksIGFuZCB0aG9zZSBkZXRhaWxzIGFyZSB0aGUgZGVwZW5kZW5jaWVzLiBBIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcsIG5vdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCB3aWxsIGNvbWUgYmFjayB0byBiaXRlIG1lIGxhdGVyLiBUaW1lIHRvIGNsYXJpZnkgd2hhdCAqZXhhY3RseSogaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE9DRlMyX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgSkJEMlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgUVVPVEFcbiAgIDk6XHRcdHNlbGVjdCBRVU9UQV9UUkVFXG4gIDEwOlx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDExOlx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBPQ0ZTMiBpcyBhIGdlbmVyYWwgcHVycG9zZSBleHRlbnQgYmFzZWQgc2hhcmVkIGRpc2sgY2x1c3RlciBmaWxlXG4gIDE0Olx0XHQgIHN5c3RlbSB3aXRoIG1hbnkgc2ltaWxhcml0aWVzIHRvIGV4dDMuIEl0IHN1cHBvcnRzIDY0IGJpdCBpbm9kZVxuICAxNTpcdFx0ICBudW1iZXJzLCBhbmQgaGFzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kaW5nIG1ldGFkYXRhIGdyb3VwcyB3aGljaCBtYXlcbiAgMTY6XHRcdCAgYWxzbyBtYWtlIGl0IGF0dHJhY3RpdmUgZm9yIG5vbi1jbHVzdGVyZWQgdXNlLlxuICAxNzpcdFxuICAxODpcdFx0ICBZb3UmIzM5O2xsIHdhbnQgdG8gaW5zdGFsbCB0aGUgb2NmczItdG9vbHMgcGFja2FnZSBpbiBvcmRlciB0byBhdCBsZWFzdFxuICAxOTpcdFx0ICBnZXQgXCYjMzQ7bW91bnQub2NmczJcJiMzNDsuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgT0NGUzIgRmlsZXN5c3RlbSBNb2R1bGUgRGVwZW5kZW5jaWVzIGFuZCBDYWxsIFBhdGhzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBgT0NGUzJfRlNgIG1vZHVsZSByZXF1aXJlcyBhIGZldyBwcmVyZXF1aXNpdGVzOiBgSU5FVGAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiBJdCBhbHNvIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgRlNfUE9TSVhfQUNMYC4gU28sIHRvIGdldCB0aGluZ3Mgcm9sbGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYE9DRlMyX0ZTYCBlbmFibGVkLgoKVGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gYG9jZnMyX21rbm9kYCwgdGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhhdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgbWtub2RgIHN5c2NhbGwgd2hlbiB3b3JraW5nIHdpdGggdGhlIE9DRlMyIGZpbGVzeXN0ZW0uIE5vdywgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgdGhlIG1vcmUgaW50ZXJlc3Rpbmcgb25lIHRvIG1lLiBJIGtub3cgaXQmIzM5O3MgKmNhbGxlZCogZnJvbSBgb2NmczJfbWtub2RgLCB3aGljaCB3ZSBqdXN0IGlkZW50aWZpZWQgYXMgbGlua2VkIHRvIHRoZSBgbWtub2RgIHN5c3RlbSBjYWxsLiBCZXlvbmQgdGhhdCwgaXQgYWxzbyBzZWVtcyB0byBiZSBpbnZva2VkIGZyb20gYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGFuZCBgb2NmczJfc3ltbGlua2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIGEgYnJvYWQgc2V0IG9mIG9wZXJhdGlvbnMgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBhY3R1YWxseSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQyMzg9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTYtXHRpZiAoIXByZXNlcnZlKSB7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Mjk3Olx0XHRlcnJvciA9IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChkaXIsIG5ld19vcnBoYW5faW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjk4LVx0XHRcdFx0XHRcdCAgICBcdTAwMjZuZXdfZGVudHJ5LVx1MDAzZWRfbmFtZSk7XG4tLVxuZnMvb2NmczIveGF0dHIuYz03MTczPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcyNTQtICovXG5mcy9vY2ZzMi94YXR0ci5jOjcyNTU6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmMtNzI1Ni1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuaD04MD1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuaC04NC1cdFx0XHQgYm9vbCBwcmVzZXJ2ZV9zZWN1cml0eSk7XG5mcy9vY2ZzMi94YXR0ci5oOjg1OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG5mcy9vY2ZzMi94YXR0ci5oLTg2LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkhhbmcgb24gYSBzZWNvbmQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0Li4uKiogSSB0aG91Z2h0IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIHdhcyBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uLCBidXQgdGhlIHRleHQgaXMgc2F5aW5nIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYG9jZnMyX3JlZmxpbmtgPyBUaGF0IGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQsIG5vdCBhdCBhbGwuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGNhbGwgZ3JhcGguIEl0IHNlZW1zIHVubGlrZWx5IHRoaXMgaXMgY29ycmVjdC4gSSBiZXQgaXQgaXMgY2FsbGVkIG90aGVyIHBsYWNlcyB0b28uIExldCBtZSBzZWFyY2ggZm9yIGl0IGFuZCBtYWtlIHN1cmUuIExldCBtZSBnbyBsb29rIGF0IGBvY2ZzMl9ta25vZGAsIGJlY2F1c2UgdGhhdCBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3Qgd2hlcmUgdGhvc2UgdGhpbmdzIGFyZSBhbHNvIG5lZWRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFydCBvZiB0aGUgT0NGUzIgY29kZSBiYXNlIGlzIGFjY3VyYXRlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBzZWN1cml0eSBhbmQgQUNMIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta25vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYz0zMjI9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL29jZnMyL2FjbC5jLTM0OS0gKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbmZzL29jZnMyL2FjbC5jOjM1MDogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG5mcy9vY2ZzMi9hY2wuYy0zNTEtICovXG4tLVxuZnMvb2NmczIvZGlyLmM9MjIxMz1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9kaXIuYy0yMjM3LS8qXG5mcy9vY2ZzMi9kaXIuYzoyMjM4OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcbmZzL29jZnMyL2Rpci5jLTIyMzktICogdGhlIGlubGluZS1kYXRhIGZsYWcgYW5kIGluaXRpYWxpemVzIHRoZSBpbmxpbmUtZGF0YSBzZWN0aW9uLlxuLS1cbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXG4tLVxuZnMvb2NmczIvaW5vZGUuYy0zODctXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxuZnMvb2NmczIvaW5vZGUuYzozODg6XHQgKiBieSBvY2ZzMl9ta25vZF9sb2NrZWQoKSwgc28gYSBmYWlsdXJlIGlzIGEgY29kZSBidWcuXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cdCAqL1xuLS1cbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvb2NmczIvam91cm5hbC5oLTQyMy0gKiBibG9ja3MgJiM0MzsgcXVvdGEgdXBkYXRlICovXG5mcy9vY2ZzMi9qb3VybmFsLmg6NDI0OnN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpcixcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXHRcdFx0XHQgICAgICBpbnQgeGF0dHJfY3JlZGl0cylcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUwLXtcbmZzL29jZnMyL2pvdXJuYWwuaDo1NTE6XHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUyLVxuLS1cbmZzL29jZnMyL25hbWVpLmMtNTYtXG5mcy9vY2ZzMi9uYW1laS5jOjU3OnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvbmFtZWkuYy01OC1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTIxNj1zdGF0aWMgdm9pZCBvY2ZzMl9jbGVhbnVwX2FkZF9lbnRyeV9mYWlsdXJlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjMwLVxuZnMvb2NmczIvbmFtZWkuYzoyMzE6c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL29jZnMyL25hbWVpLmMtMjMyLVx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNjEtXG5mcy9vY2ZzMi9uYW1laS5jOjI2MjpcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy0yNjMtXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTM3NS1cbmZzL29jZnMyL25hbWVpLmM6Mzc2Olx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYixcbmZzL29jZnMyL25hbWVpLmMtMzc3LVx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zOTUtXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cbmZzL29jZnMyL25hbWVpLmM6Mzk2Olx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxuZnMvb2NmczIvbmFtZWkuYy0zOTctXHRcdFx0XHQgICAgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTUyNC1cbmZzL29jZnMyL25hbWVpLmM6NTI1OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXG5mcy9vY2ZzMi9uYW1laS5jLTUyNi1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02MzYtXG5mcy9vY2ZzMi9uYW1laS5jOjYzNzpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL25hbWVpLmMtNjM4LVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjU5LVxuZnMvb2NmczIvbmFtZWkuYzo2NjA6XHRyZXR1cm4gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSwgZGV2LCBuZXdfZmVfYmgsXG5mcy9vY2ZzMi9uYW1laS5jLTY2MS1cdFx0XHRcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTY2NT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NzMtXHRcdFx0ICBPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuZnMvb2NmczIvbmFtZWkuYzo2NzQ6XHRyZXQgPSBvY2ZzMl9ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xuZnMvb2NmczIvbmFtZWkuYy02NzUtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL25hbWVpLmM9NjgxPXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjkwLVx0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbmZzL29jZnMyL25hbWVpLmM6NjkxOlx0cmV0ID0gb2NmczJfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbmZzL29jZnMyL25hbWVpLmMtNjkyLVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTE4MjE9c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTk2My1cbmZzL29jZnMyL25hbWVpLmM6MTk2NDpcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjUtXHRcdFx0XHQgICAgMCwgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI1Mjg9aW50IG9jZnMyX2NyZWF0ZV9pbm9kZV9pbl9vcnBoYW4oc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTY4LVxuZnMvb2NmczIvbmFtZWkuYzoyNTY5Olx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYiwgMCwgMCkpO1xuZnMvb2NmczIvbmFtZWkuYy0yNTcwLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTkxLVx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXG5mcy9vY2ZzMi9uYW1laS5jOjI1OTI6XHRzdGF0dXMgPSBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLFxuZnMvb2NmczIvbmFtZWkuYy0yNTkzLVx0XHRcdFx0ICAgICAgMCwgXHUwMDI2bmV3X2RpX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yOTQwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjk0Ny1cdC5ta2Rpclx0XHQ9IG9jZnMyX21rZGlyLFxuZnMvb2NmczIvbmFtZWkuYzoyOTQ4Olx0Lm1rbm9kXHRcdD0gb2NmczJfbWtub2QsXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDktXHQucmVuYW1lXHRcdD0gb2NmczJfcmVuYW1lLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjE5OC1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjE5OTpUUkFDRV9FVkVOVChvY2ZzMl9ta25vZCxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cdFRQX1BST1RPKHZvaWQgKmRpciwgdm9pZCAqZGVudHJ5LCBpbnQgbmFtZV9sZW4sIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIE9DRlMyIEZpbGVzeXN0ZW0qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgb2NmczJfbWtub2RgIGlzIGNsZWFybHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIGZpbGUgY3JlYXRpb24gcHJpbWl0aXZlcyBsaWtlIGBta2RpcmAsIGBjcmVhdGVgLCBhbmQsIHdlbGwsIGBta25vZGAgaXRzZWxmLiBUaGVuLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyB0cmlnZ2VyZWQgYnkgYG9jZnMyX3JlZmxpbmtgLCB3aGljaCBtYWtlcyBzZW5zZS4gSG1tLCBidXQgKndhaXQqLCBgb2NmczJfbWtub2RgIGRpcmVjdGx5IGNhbGxzIGBvY2ZzMl9pbml0X2FjbGAuIEFuZCwgbG9va2luZyBhdCBpdCBjbG9zZXIsIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFsc28gY2FsbHMgYG9jZnMyX2luaXRfYWNsYC4gVGhlIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbnMgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZmV0Y2hpbmcgb2YgdGhlIGRlZmF1bHQgQUNMIGluIGJvdGggYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKmJlZm9yZSogdHJhbnNhY3Rpb24gc3RhcnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHByb21pc2luZyBhcmVhIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBmb2N1cyB3b3VsZCBiZSBvbiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYW5kIGBvY2ZzMl9pbml0X2FjbGAgYXMgZm9jdXMgc3ltYm9scy4gQnV0IGhvbGQgb24sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBvY2ZzMl9ta25vZGAgaXMgc3RhdGljLi4uIFllcCwgaXQgaXMuIFRoYXQgY2hhbmdlcyB0aGluZ3MgYSBiaXQuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBgb2NmczJfaW5pdF9hY2xgIGNhbGxzLCBtYWtpbmcgaXQgc3RhdGljIHJlc3RyaWN0cyB1c2FnZS4gU28sIGNvbnNpZGVyaW5nIHRoaXMsIGEgYmV0dGVyIGFwcHJvYWNoIHRvIGdldCBhdCB0aGUga2V5IGZ1bmN0aW9ucyBpcyB0byB1c2UgYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBhbmQgYG9jZnMyX2luaXRfYWNsYCBhcyB0aGUgbW9yZSBwcmFjdGljYWwgZm9jdXMgc3ltYm9scy4KCk9oLCBvbmUgbW9yZSB0aGluZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBvY2ZzMl9pbml0X2FjbGAuIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gR29vZC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGluIGBmcy9vY2ZzMi9hY2wuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG9jZnMyX2luaXRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MzIyPWludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNTEtICovXG5mcy9vY2ZzMi9hY2wuYzozNTI6aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi9hY2wuYy0zNTMtXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgYXMgSSB3b3VsZCBpbiBteSBvd24gd29yazoKCioqQUNMIEluaXRpYWxpemF0aW9uIGFuZCBPYmplY3QgQ3JlYXRpb246IEEgUXVpY2sgU2NhbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBHb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4gTm90IGJlaW5nIHN0YXRpYyBnaXZlcyB1cyBzb21lIGZsZXhpYmlsaXR5LCBvcGVucyB0aGVtIHVwIGZvciBwb3RlbnRpYWwgZXh0ZXJuYWwgdXNlIG9yIG1vZHVsZSBpbnRlcmFjdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGEgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbSBsaWtlIE9DRlMyLiBJJiMzOTtkIHR5cGljYWxseSB3YW50IHRvIGtub3cgd2h5IHRoZXkgKndvdWxkKiBiZSBzdGF0aWMsIHdoaWNoIHdvdWxkIGJlIGdlbmVyYWxseSBpZiB0aGV5IGFyZSBvbmx5IGV2ZXIgdXNlZCB3aXRoaW4gdGhlIHNhbWUgZmlsZSBhbmQgdGh1cyB2aXNpYmlsaXR5IGlzIGJlaW5nIHJlZHVjZWQuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGlzIG5vbi1zdGF0aWMtbmVzcyBpcyBjb25zaXN0ZW50IGFuZCBjaGVjayB0aGUgY2FsbGVycyBvciB0aG9zZSB0aGF0IG1pZ2h0IGNhbGwgdGhlc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIHNpbmNlIHRob3NlIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBpbml0aWFsaXppbmcgQUNMcyB3aGVuIG5ldyBkaXJlY3RvcmllcyBvciBmaWxlcyBhcmUgbWFkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIEFDTCBpbml0aWFsaXphdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgb2JqZWN0IGNyZWF0aW9uIHByb2Nlc3MgaW4gdGhlc2UgY3J1Y2lhbCBmdW5jdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGZsb3cgaXMgc291bmQgYW5kIHRoZSBBQ0wgaGFuZGxpbmcgaXMgcm9idXN0IGluIHRoZSBjcmVhdGlvbiBjb250ZXh0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSwgd2hlbiwgYW5kIGhvdyB0aGVzZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhvc2UgY29yZSBvcGVyYXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNhbGxzPyBFcnJvciBoYW5kbGluZz8gQW5kIEkmIzM5O2xsIGJlIG5vdGluZyBhbnkgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGlzIGFyZWEuIEl0JiMzOTtzIGEgcXVpY2sgc3BvdCBjaGVjayB0byBtYWtlIHN1cmUgbm90aGluZyBzdXJwcmlzaW5nIHBvcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz02Mzc9c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NjQtXG5mcy9vY2ZzMi9uYW1laS5jOjY2NTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9vY2ZzMi9uYW1laS5jLTY2Ni1cdFx0XHRcdCAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NzEtXG5mcy9vY2ZzMi9uYW1laS5jOjY3MjpcdHRyYWNlX29jZnMyX21rZGlyKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy02NzMtXHRcdFx0ICBPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuLS1cbmZzL29jZnMyL25hbWVpLmM9Mjk0MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDYtXHQuc3ltbGlua1x0PSBvY2ZzMl9zeW1saW5rLFxuZnMvb2NmczIvbmFtZWkuYzoyOTQ3Olx0Lm1rZGlyXHRcdD0gb2NmczJfbWtkaXIsXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXHQubWtub2RcdFx0PSBvY2ZzMl9ta25vZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE9DRlMyIEluaXRpYWxpemF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaG93IE9DRlMyIGhhbmRsZXMgQUNMIGluaXRpYWxpemF0aW9uIGFuZCByZWxhdGVkIHNlY3VyaXR5IGNvbnRleHRzLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGx5IOKAkyB3ZSBjYW4ganVzdCByZWx5IG9uIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGJlY2F1c2UsIGFzIGZhciBhcyBJIGNhbiBzZWUgYXQgdGhpcyBwb2ludCwgdGhlIGNvcmUgcm91dGluZXMgYXJlIHN0YXRpYy4KClRoZW4gSSBwYXVzZWQg4oCTIGBvY2ZzMl9ta25vZGAgKmlzKiBzdGF0aWMsIGJ1dCBvZiBjb3Vyc2UsIGl0JiMzOTtzIGFuIGlub2RlIG9wZXJhdGlvbi4gU28sIFZGUyBjYWxscyBpdC4gVGhhdCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIHRoaW5rIG1vcmUgYnJvYWRseSwgYmV5b25kIHNpbXBsZSBkaXJlY3QgY2FsbHMuCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBpbml0aWFsaXphdGlvbnMuIGBvY2ZzMl9yZWZsaW5rYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gQWhhISBgb2NmczJfcmVmbGlua194YXR0cnNgIGlzICpub3QqIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGdvb2QgbGVhZC4gTm93IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgbm9uLXN0YXRpYywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uLiBMZXQmIzM5O3MgaGVhZCB0byBgZnMvb2NmczIveGF0dHIuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi94YXR0ci5jPTcxNjQ9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTcyLVxuZnMvb2NmczIveGF0dHIuYzo3MTczOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbmZzL29jZnMyL3hhdHRyLmMtNzE3NC1cdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzMzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhcyB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBNeSBicmFpbiYjMzk7cyB3aGlycmluZy4uLiB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSAqYWJzb2x1dGVseSogbmVlZGVkIHRvIG1ha2UgdGhpcyB3b3JrPyBSaWdodCwgYE9DRlMyX0ZTYCBpcyB0aGUgYmlnIG9uZS4gSGFuZyBvbiwgdGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgbGV2ZXJhZ2luZyBgT0NGUzJfTU9VTlRfUE9TSVhfQUNMYC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZy4uLiBkb2VzIGBPQ0ZTMl9GU2AgaW1wbGljaXRseSBzZWxlY3QgYEZTX1BPU0lYX0FDTGA/IFllcywgSSBzZWUgaXQgcmlnaHQgdGhlcmU6IGBzZWxlY3QgRlNfUE9TSVhfQUNMYCB3aXRoaW4gYE9DRlMyX0ZTYC4gR29vZC4gQWxyaWdodCwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXk/IEp1c3QgZG91YmxlLWNoZWNraW5nLi4uIExvb2tzIGxpa2UgYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIHByaW1hcnksIG92ZXJhcmNoaW5nIG9uZS4KCkhtbSwgd2FpdCwgYSBkZXBlbmRlbmN5IGNoZWNrLi4uIGBPQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBSaWdodC4gU28gd2Ugc2hvdWxkIGRlZmluaXRlbHkgbGlzdCBgT0NGUzJfRlNgIGluIEVuYWJsZUNvbmZpZ3MuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgT0NGUzJfRlNgIGlzIHRoZSAqb25seSogb25lIGRpcmVjdGx5IG5lZWRlZCB0byBtb3ZlIGZvcndhcmQuIE5lZWQgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6CgoqKkNoZWNraW5nIGZvciBDT05GSUdGU19GUyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR0ZTX0ZTYCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBtaXNzZWQsIG9yIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBpbiB0aGUgcHJvamVjdC4gSWYgaXQmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXQmIzM5O2xsIGFmZmVjdCB0aGUgYnVpbGQgYW5kIG1vZHVsZSBsb2FkaW5nIGJlaGF2aW9yLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IGFzc3VtcHRpb25zIGhlcmUuIEkgd2lsbCBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGdvaW5nIHRvIGRldGVybWluZSBob3cgSSBwcm9jZWVkIHdpdGggYW5hbHl6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09ORklHRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSBgQ09ORklHRlNfRlNgIGxpc3RlZCBoZXJlIOKAkyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbm8gcXVlc3Rpb24uIFRoZXJlZm9yZSwgRW5hYmxlQ29uZmlncyBzaG91bGQgaW5jbHVkZSBib3RoIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIGFzc3VtZWQgYW5kIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyB0aGV5IG9mdGVuIGFyZS4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLCBiZWNhdXNlIHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdpdGggYE9DRlMyX0ZTX08yQ0JgLiBJcyBlbmFibGluZyB0aGlzICplc3NlbnRpYWwqIHRvIG1vdW50aW5nIGFuIE9DRlMyIGZpbGUgc3lzdGVtPyBMZXQgbWUgc2Vl4oCmQWgsIHJpZ2h0LiAmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZy4mIzM0OyBPa2F5LCBzbyAqbm9ybWFsbHkqIHlvdSBjYW4gbW91bnQgT0NGUzIgbG9jYWxseSwgZXZlbiB3aXRob3V0IHRoZSBjbHVzdGVyaW5nIGNvbXBvbmVudCwgdXNpbmcgYGxvY2FsYWxsb2NgIG9yIHNpbWlsYXIgbWV0aG9kcy4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4g4oCTIGRvdWJsZS1jaGVja2luZyB0aGF0IGBPQ0ZTMl9GU19PMkNCYCBpc24mIzM5O3QgYSBoYXJkIHJlcXVpcmVtZW50IGhlcmUgaXMgdGhlIG1vc3QgcHJ1ZGVudCB0aGluZyB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdFxuICAyMTpcdFx0ICBQcm9qZWN0IHdlYiBwYWdlOiAgICBodHRwczovL29jZnMyLndpa2kua2VybmVsLm9yZy9cbiAgMjI6XHRcdCAgVG9vbHMgd2ViIHBhZ2U6ICAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hcmtmYXNoZWgvb2NmczItdG9vbHNcbiAgMjM6XHRcdCAgT0NGUzIgbWFpbGluZyBsaXN0czogaHR0cHM6Ly9zdWJzcGFjZS5rZXJuZWwub3JnL2xpc3RzLmxpbnV4LmRldi5odG1sXG4gIDI0Olx0XG4gIDI1Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE9DRlMyLCBzZWUgdGhlIGZpbGVcbiAgMjY6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnJzdFx1MDAzZS5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgT0NGUzJfRlNfTzJDQlxuICAyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4gIDMwOlx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG4gIDMxOlx0XHRkZWZhdWx0IHlcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgT0NGUzIgaW5jbHVkZXMgYSBzaW1wbGUga2VybmVsc3BhY2UgY2x1c3RlcmluZyBwYWNrYWdlLCB0aGUgT0NGUzJcbiAgMzQ6XHRcdCAgQ2x1c3RlciBCYXNlLiAgSXQgb25seSByZXF1aXJlcyBhIHZlcnkgc21hbGwgdXNlcnNwYWNlIGNvbXBvbmVudFxuICAzNTpcdFx0ICB0byBjb25maWd1cmUgaXQuIFRoaXMgY29tZXMgd2l0aCB0aGUgc3RhbmRhcmQgb2NmczItdG9vbHMgcGFja2FnZS5cbiAgMzY6XHRcdCAgTzJDQiBpcyBsaW1pdGVkIHRvIG1haW50YWluaW5nIGEgY2x1c3RlciBmb3IgT0NGUzIgZmlsZSBzeXN0ZW1zLlxuICAzNzpcdFx0ICBJdCBjYW5ub3QgbWFuYWdlIGFueSBvdGhlciBjbHVzdGVyIGFwcGxpY2F0aW9ucy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgSXQgaXMgYWx3YXlzIHNhZmUgdG8gc2F5IFkgaGVyZSwgYXMgdGhlIGNsdXN0ZXJpbmcgbWV0aG9kIGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg3CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGRlZmF1bHQgc2VlbXMgdG8gYmUgYHlgIGZvciBlbmFibGluZyBmZWF0dXJlcywgc28gYE9DRlMyX0ZTYCBhbG9uZSBzaG91bGQgc3VmZmljZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGNsb3NlbHkgYXQgYHBvc2l4X2FjbF9kdXBgIGFuZCBgZ2V0X2lub2RlX2FjbGAgYmVjYXVzZSB0aGUgcGF0Y2ggZXhwbGljaXRseSB1c2VzIHRoZW0sIGFuZCB0aGV5IGFyZSBwYXJ0IG9mIGBGU19QT1NJWF9BQ0xgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGBGU19QT1NJWF9BQ0xgIGlzLCBpbiB0dXJuLCBzZWxlY3RlZCBieSBgT0NGUzJfRlNgLCBoZW5jZSBteSBjaG9pY2Ugb2YgY29uZmlndXJhdGlvbnM6IGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuIEkmIzM5O2xsIHdhbnQgdG8ga2VlcCBhbiBleWUgb24gdGhvc2UuCgpOb3csIGxldCYjMzk7cyByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGFyZSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHRvdWNoZWQ7IGlmIGFueSBvZiB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIHdlcmUgc3RhdGljLCB0aGUgcG90ZW50aWFsIGltcGFjdCB3b3VsZCBiZSByZWR1Y2VkLiBIb3dldmVyLCBgb2NmczJfbWtub2RgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kLiBCb3RoIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub24tc3RhdGljLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeSB2aXNpYmlsaXR5IGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gYG9jZnMyX2luaXRfYWNsYCBpcyBkZWNsYXJlZCBpbiBgZnMvb2NmczIvYWNsLmhgIGFuZCBpcyBjYWxsZWQgZnJvbSBib3RoIGBmcy9vY2ZzMi9uYW1laS5jYCBhbmQgYGZzL29jZnMyL3hhdHRyLmNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IG5vdCBzdGF0aWMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGlzIGRlY2xhcmVkIGluIGBmcy9vY2ZzMi94YXR0ci5oYCBhbmQgaXMgY2FsbGVkIGZyb20gYGZzL29jZnMyL3JlZmNvdW50dHJlZS5jYCwgc28gaXQmIzM5O3MgYWxzbyBub24tc3RhdGljLCBjb25maXJtaW5nIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCkZyb20gdGhlIGRlc2NyaXB0aW9uLCBpdCBhcHBlYXJzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWUuIFRoZSBmaXggaW52b2x2ZXMgZmV0Y2hpbmcgdGhlIGRlZmF1bHQgQUNMICpiZWZvcmUqIHRha2luZyBsb2NrcyBvciBpbml0aWF0aW5nIGEgdHJhbnNhY3Rpb24sIHdoaWNoIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBPQ0ZTMiBoYW5kbGVzIGlub2RlIGNyZWF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbG9naWMgb2YgT0NGUzIsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBhdHRyYWN0aXZlIGZvciBmdXp6aW5nLgoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhpcyBwYXRjaCBhbHRlcnMgaG93IE9DRlMyIGludGVyYWN0cyB3aXRoIFBPU0lYIEFDTHMgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCksIHNwZWNpZmljYWxseSBieSByZW9yZGVyaW5nIHRoZSBBQ0wgZmV0Y2guIEl0JiMzOTtzIGludGVuZGVkIHRvIHJlc29sdmUgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KClRvIHN1bW1hcml6ZSB0aGUgZXNzZW50aWFsIGVsZW1lbnRzLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6Ci0gYG9jZnMyX2luaXRfYWNsYAotIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgCgpBbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzOgotIGBPQ0ZTMl9GU2AKLSBgQ09ORklHRlNfRlNgCgpPa2F5LCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHNldCBvZiBwYXJhbWV0ZXJzIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgT0NGUzIgdG8gZmV0Y2ggdGhlIGRlZmF1bHQgUE9TSVggQUNMIGJlZm9yZSBzdGFydGluZyBhIHRyYW5zYWN0aW9uIG9yIHRha2luZyBsb2NrcyBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKGUuZy4sIGluIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgVkZTIHN5c3RlbSBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBUaGVyZWZvcmUsIGl0IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBPQ0ZTMiB0byBmZXRjaCB0aGUgZGVmYXVsdCBQT1NJWCBBQ0wgYmVmb3JlIHN0YXJ0aW5nIGEgdHJhbnNhY3Rpb24gb3IgdGFraW5nIGxvY2tzIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgaW4gYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBzdGFuZGFyZCBWRlMgc3lzdGVtIGNhbGxzIChlLmcuLCBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCkgb24gYW4gT0NGUzIgbW91bnQuIFRoZXJlZm9yZSwgaXQgaGFzIGEgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwN2RhYjJlNTAyZGJmMTY2YjI2ZWQzMmEwODBjZWNkOTZiYTEyOWU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDk6MzA6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IGFmMWUyY2VkYjIxN2YuLmExNjM4NmMyMzYyNDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5jCkBAIC0zNTMsNyAmIzQzOzM1Myw3IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKLQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkgICBzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCwKIAkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQogewpAQCAtMzY0LDEyICYjNDM7MzY0LDggQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCiAKIAlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwkJCWlmIChkZWZhdWx0X2FjbCkKJiM0MzsJCQkJYWNsID0gcG9zaXhfYWNsX2R1cChkZWZhdWx0X2FjbCk7CiAJCX0KIAkJaWYgKCFhY2wpIHsKIAkJCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlICZhbXA7IH5jdXJyZW50X3VtYXNrKCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDYuLmMxYmEyZWIyNzRlY2MgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yMSw3ICYjNDM7MjEsNyBAQCBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKJiM0MzsJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgcG9zaXhfYWNsICosCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCAxMjc3NjY2Yzc3Y2QyLi42YmZjMmI5YWJlNzVlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3F1b3Rhb3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXZlcnNpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG9zaXhfYWNsLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtjbHVzdGVyL21hc2tsb2cuaCZndDsKIApAQCAtMjU2LDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCXNpZ3NldF90IG9sZHNldDsKIAlpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwOwogCXN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7CiAKIAl0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LSZndDtkX25hbWUubGVuLCBkZW50cnktJmd0O2RfbmFtZS5uYW1lLAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0mZ3Q7aXBfYmxrbm8sCkBAIC0zNjIsNiAmIzQzOzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQlnb3RvIGxlYXZlOwogCX0KIAomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwomIzQzOwkJaWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlzdGF0dXMgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTsKJiM0MzsJCQlkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJZ290byBsZWF2ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItJmd0O3NiLAogCQkJCQkJCSAgICBTX0lTRElSKG1vZGUpLAogCQkJCQkJCSAgICB4YXR0cl9jcmVkaXRzKSk7CkBAIC00MTEsNyAmIzQzOzQyMiw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCWluY19ubGluayhkaXIpOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsCiYjNDM7CXN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBkZWZhdWx0X2FjbCwKIAkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKIAogCWlmIChzdGF0dXMgJmx0OyAwKSB7CkBAIC00ODgsNiAmIzQzOzQ5OSw5IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKG1ldGFfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKIAomIzQzOwlpZiAoZGVmYXVsdF9hY2wpCiYjNDM7CQlwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7CiYjNDM7CiAJLyoKIAkgKiBXZSBzaG91bGQgY2FsbCBpcHV0IGFmdGVyIHRoZSBpX3J3c2VtIG9mIHRoZSBiaXRtYXAgYmVlbgogCSAqIHVubG9ja2VkIGluIG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dCwgb3IgdGhlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VjdXJpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG9zaXhfYWNsLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtjbHVzdGVyL21hc2tsb2cuaCZndDsKIApAQCAtNzI1Nyw2ICYjNDM7NzI1OCw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMOwomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7CiAKIAlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTsKIAlpZiAocmV0KSB7CkBAIC03MjY5LDEwICYjNDM7NzI3MSwyMyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gbGVhdmU7CiAJfQotCXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CWlmIChPQ0ZTMl9TQihkaXItJmd0O2lfc2IpLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwomIzQzOwkJaWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTsKJiM0MzsJCQlkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGVmYXVsdF9hY2wsIE5VTEwsIE5VTEwpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKIAomIzQzOwlpZiAoZGVmYXVsdF9hY2wpCiYjNDM7CQlwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7CiYjNDM7dW5sb2NrOgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOwogCWJyZWxzZShkaXJfYmgpOwogbGVhdmU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzkyCgkJCQkJCQlvdXRwdXQ6IDMwNQoJCQkJCQkJdGhvdWdodHM6IDEyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyBob3cgZGVmYXVsdCBBQ0xzIGFyZSBoYW5kbGVkIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgb2NmczJfaW5pdF9hY2xgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBzaGlmdGluZyB0aGUgQUNMIGZldGNoaW5nIGxvZ2ljIGZyb20gaW5zaWRlIGBvY2ZzMl9pbml0X2FjbGAgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIHdpdGhpbiBgb2NmczJfaW5pdF9hY2xgIHdoaWxlIGhvbGRpbmcgYGlwX3hhdHRyX3NlbWAuIE5vdywgdGhleSBhcmUgZmV0Y2hpbmcgaXQgd2l0aCB0aGUgVkZTIGZ1bmN0aW9uIGBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVClgICpiZWZvcmUqIGNhbGxpbmcgYG9jZnMyX2luaXRfYWNsYC4KCkxldCYjMzk7cyBkaXNzZWN0IHRoaXMsIGZvY3VzaW5nIG9uIGFueSBwb3RlbnRpYWwgbWVtb3J5IG9yIGxvY2tpbmcgcmlza3MuIEluIGBvY2ZzMl9ta25vZGAsIHRoZSBjb2RlIG5vdyBjaGVja3MgdGhlIGBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0xgIG1vdW50IG9wdGlvbi4gSWYgZW5hYmxlZCwgaXQgZmV0Y2hlcyB0aGUgZGVmYXVsdCBBQ0wsIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyAocmV0dXJuaW5nIGVhcmx5IGlmIGBnZXRfaW5vZGVfYWNsYCBmYWlscyksIGFuZCB0aGVuIHBhc3NlcyB0aGUgcmVzdWx0aW5nIGBzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbGAgdG8gYG9jZnMyX2luaXRfYWNsYC4gSW1wb3J0YW50bHksIGl0ICpyZWxlYXNlcyogdGhlIEFDTCB3aXRoIGBwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbClgIGFmdGVyd2FyZHMuIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm46IGZldGNoIEFDTCB3aXRoIGBnZXRfaW5vZGVfYWNsYCwgaGFuZGxlIGVycm9ycywgYW5kIHRoZW4gcGFzcyBpdCB0byBgb2NmczJfaW5pdF9hY2xgLCB3aGVyZSBpdCBzaG91bGQgYmUgaGFuZGxlZCB0aGVyZS4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gQnV0LCBsZXQmIzM5O3Mgc2VlLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgYWxsb2NhdGUgYW55IG5ldyBzdHJ1Y3R1cmVzIGFuZCBzZW5kIHRoZW0gdG8gdXNlcnNwYWNlLiBJbiBgb2NmczJfaW5pdF9hY2xgLCB0aGUgYGRlZmF1bHRfYWNsYCBpcyAqZHVwbGljYXRlZCogd2l0aCBgcG9zaXhfYWNsX2R1cChkZWZhdWx0X2FjbClgLCB3aGljaCBzaG91bGQgYmUgc2FmZSBhcyBsb25nIGFzIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBgZGVmYXVsdF9hY2xgIGlzIHZhbGlkLiBUaGUgYGdldF9pbm9kZV9hY2xgIGZ1bmN0aW9uIGlzIGEgc3RhbmRhcmQgVkZTIGZ1bmN0aW9uLiBJZiBpdCBmYWlscywgaXQgcmV0dXJucyBhbiBlcnJvciBwb2ludGVyIHdoaWNoIGlzIGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIEluIGVpdGhlciBgb2NmczJfbWtub2RgIG9yIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCB0aGUgYGRlZmF1bHRfYWNsYCBwb2ludGVyIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgTlVMTGAgYmVmb3JlIGJlaW5nIHBvdGVudGlhbGx5IG92ZXJ3cml0dGVuIGJ5IHRoZSBgZ2V0X2lub2RlX2FjbGAgcmVzdWx0LCBhbmQgdGhlcmUgYXJlIGFwcHJvcHJpYXRlIGVycm9yIHBhdGhzLiBJZiBgZ2V0X2lub2RlX2FjbGAgZmFpbHMgb3IgaWYgdGhlIFBPU0lYIEFDTCBtb3VudCBvcHRpb24gaXNuJiMzOTt0IHNldCwgYGRlZmF1bHRfYWNsYCByZW1haW5zIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgYGlmIChkZWZhdWx0X2FjbClgIGNoZWNrcyB3aWxsIHRoZW4gZW5zdXJlIHByb3BlciBoYW5kbGluZyBpbiBgb2NmczJfaW5pdF9hY2xgLgoKU28sICpleHBsaWNpdGx5KiBpbml0aWFsaXppbmcgYGRlZmF1bHRfYWNsYCB0byBgTlVMTGAgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGdldF9pbm9kZV9hY2xgIGluIGJvdGggYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgYSBnb29kIHByYWN0aWNlLiBJdCBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdXNpbmcgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KClRoZSAqcmVhbCogbW90aXZhdGlvbiBoZXJlLCBJIHN1c3BlY3QsIGlzIGEgbG9ja2luZyBpc3N1ZS4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSwgaG9sZGluZyBgaXBfeGF0dHJfc2VtYCB3aGlsZSBjYWxsaW5nIGBvY2ZzMl9nZXRfYWNsX25vbG9ja2AsIHdhcyBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIHNvbWUgZm9ybSBvZiBsb2NrIGludmVyc2lvbi4gTW92aW5nIHRoZSBBQ0wgZmV0Y2ggKm91dHNpZGUqIHRoaXMgcHJvdGVjdGVkIHJlZ2lvbiBsaWtlbHkgZml4ZXMgdGhhdC4gT3IgbWF5YmUgaXQmIzM5O3MgYXZvaWRpbmcgYSBsb2NrZGVwIHdhcm5pbmcuIFRoaXMgc2hpZnQgdG8gdGhlIFZGUyBmdW5jdGlvbiBjb3VsZCBzaWRlc3RlcCBzb21lIG9jZnMyLXNwZWNpZmljIGxvY2tpbmcgY29tcGxpY2F0aW9ucy4KClRoZXJlZm9yZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIHBhdGNoIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXNlIHdvdWxkIGZsYWcgYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzLiBUaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHByZXR0eSBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXG5cblRoZSBgZGVmYXVsdF9hY2xgIHBvaW50ZXJzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBOVUxMYCBpbiBib3RoIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSWYgYGdldF9pbm9kZV9hY2xgIHJldHVybnMgYW4gZXJyb3IsIGl0IGlzIHByb3Blcmx5IGNoZWNrZWQgdXNpbmcgYElTX0VSUmAuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBhbGxvY2F0ZWQgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBsZW5ndGhzLlxuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMDo1Mi40NzQ0MTI1NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTIwNDMxMzgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGRlZmF1bHQgQUNMcyBhcmUgZmV0Y2hlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIuIEluc3RlYWQgb2YgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIGluc2lkZSBgb2NmczJfaW5pdF9hY2xgLCBpdCBub3cgdXNlcyB0aGUgc3RhbmRhcmQgVkZTIGBnZXRfaW5vZGVfYWNsYCBpbiB0aGUgY2FsbGVycyAoYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApIGFuZCBwYXNzZXMgdGhlIHJlc3VsdGluZyBgcG9zaXhfYWNsYCBzdHJ1Y3QgdG8gYG9jZnMyX2luaXRfYWNsYC5cXG5cXG5UaGUgYGRlZmF1bHRfYWNsYCBwb2ludGVycyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYm90aCBtb2RpZmllZCBmdW5jdGlvbnMuIElmIGBnZXRfaW5vZGVfYWNsYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBwcm9wZXJseSBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzA6NTIuNDc0NDE3NDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3MTMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwN2RhYjJlNTAyZGJmMTY2YjI2ZWQzMmEwODBjZWNkOTZiYTEyOWU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjMwOjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcXG5pbmRleCBhZjFlMmNlZGIyMTdmLi5hMTYzODZjMjM2MjQzIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXFxuKysrIGIvZnMvb2NmczIvYWNsLmNcXG5AQCAtMzUzLDcgKzM1Myw3IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsLFxcbiBcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcXG4gXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXFxuIHtcXG5AQCAtMzY0LDEyICszNjQsOCBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFxuIFxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbiBcXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0XFx0XFx0aWYgKGRlZmF1bHRfYWNsKVxcbitcXHRcXHRcXHRcXHRhY2wgPSBwb3NpeF9hY2xfZHVwKGRlZmF1bHRfYWNsKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoIWFjbCkge1xcbiBcXHRcXHRcXHRtb2RlID0gaW5vZGUtXFx1MDAzZWlfbW9kZSBcXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmhcXG5pbmRleCA2NjdjNmYwM2ZhNjA2Li5jMWJhMmViMjc0ZWNjIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXFxuKysrIGIvZnMvb2NmczIvYWNsLmhcXG5AQCAtMjEsNyArMjEsNyBAQCBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XFxuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XFxuIGV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IHBvc2l4X2FjbCAqLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXFxuIFxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xcbmluZGV4IDEyNzc2NjZjNzdjZDIuLjZiZmMyYjlhYmU3NWUgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlnaG1lbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcXVvdGFvcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NjbHVzdGVyL21hc2tsb2cuaFxcdTAwM2VcXG4gXFxuQEAgLTI1Niw2ICsyNTcsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRzaWdzZXRfdCBvbGRzZXQ7XFxuIFxcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7XFxuIFxcbiBcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiBcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG5AQCAtMzYyLDYgKzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRkZWZhdWx0X2FjbCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcXG4rXFx0XFx0aWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0c3RhdHVzID0gUFRSX0VSUihkZWZhdWx0X2FjbCk7XFxuK1xcdFxcdFxcdGRlZmF1bHRfYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBsZWF2ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFNfSVNESVIobW9kZSksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB4YXR0cl9jcmVkaXRzKSk7XFxuQEAgLTQxMSw3ICs0MjIsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4rXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIGRlZmF1bHRfYWNsLFxcbiBcXHRcXHRcXHQgbWV0YV9hYywgZGF0YV9hYyk7XFxuIFxcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbkBAIC00ODgsNiArNDk5LDkgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0aWYgKG1ldGFfYWMpXFxuIFxcdFxcdG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTtcXG4gXFxuK1xcdGlmIChkZWZhdWx0X2FjbClcXG4rXFx0XFx0cG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogV2Ugc2hvdWxkIGNhbGwgaXB1dCBhZnRlciB0aGUgaV9yd3NlbSBvZiB0aGUgYml0bWFwIGJlZW5cXG4gXFx0ICogdW5sb2NrZWQgaW4gb2NmczJfZnJlZV9hbGxvY19jb250ZXh0LCBvciB0aGVcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmNcXG5pbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5jXFxuQEAgLTI2LDYgKzI2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcG9zaXhfYWNsLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcXHUwMDNlXFxuIFxcbkBAIC03MjU3LDYgKzcyNTgsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcXG4gXFxuIFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTcyNjksMTAgKzcyNzEsMjMgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuLVxcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRpZiAoT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZGVmYXVsdF9hY2wgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XFxuK1xcdFxcdGlmIChJU19FUlIoZGVmYXVsdF9hY2wpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRlZmF1bHRfYWNsLCBOVUxMLCBOVUxMKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXG4rXFx0aWYgKGRlZmF1bHRfYWNsKVxcbitcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XFxuK3VubG9jazpcXG4gXFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XFxuIFxcdGJyZWxzZShkaXJfYmgpO1xcbiBsZWF2ZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzA6NTIuOTM5OTcxMTY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzM2MjkzNTE3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDdkYWIyZTUwMmRiZjE2NmIyNmVkMzJhMDgwY2VjZDk2YmExMjllOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjMwOjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xuaW5kZXggYWYxZTJjZWRiMjE3Zi4uYTE2Mzg2YzIzNjI0MyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXG4rKysgYi9mcy9vY2ZzMi9hY2wuY1xuQEAgLTM1Myw3ICszNTMsNyBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuK1x0XHQgICBzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCxcbiBcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4gXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuIHtcbkBAIC0zNjQsMTIgKzM2NCw4IEBAIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuIFxuIFx0aWYgKCFTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiBcdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCxcbi1cdFx0XHRcdFx0XHQgICBkaXJfYmgpO1xuLVx0XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0aWYgKElTX0VSUihhY2wpKVxuLVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcbitcdFx0XHRpZiAoZGVmYXVsdF9hY2wpXG4rXHRcdFx0XHRhY2wgPSBwb3NpeF9hY2xfZHVwKGRlZmF1bHRfYWNsKTtcbiBcdFx0fVxuIFx0XHRpZiAoIWFjbCkge1xuIFx0XHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNi4uYzFiYTJlYjI3NGVjYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXG4rKysgYi9mcy9vY2ZzMi9hY2wuaFxuQEAgLTIxLDcgKzIxLDcgQEAgaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XG4gZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4rXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IHBvc2l4X2FjbCAqLFxuIFx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyLi42YmZjMmI5YWJlNzVlIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xuKysrIGIvZnMvb2NmczIvbmFtZWkuY1xuQEAgLTI3LDYgKzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9oaWdobWVtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9xdW90YW9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXZlcnNpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcdTAwM2VcbiBcbkBAIC0yNTYsNiArMjU3LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHNpZ3NldF90IG9sZHNldDtcbiBcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzYyLDYgKzM2NCwxNSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuIFxuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xuK1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHN0YXR1cyA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpO1xuK1x0XHRcdGRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRnb3RvIGxlYXZlO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLFxuIFx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4gXHRcdFx0XHRcdFx0XHQgICAgeGF0dHJfY3JlZGl0cykpO1xuQEAgLTQxMSw3ICs0MjIsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4rXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgZGVmYXVsdF9hY2wsXG4gXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuQEAgLTQ4OCw2ICs0OTksOSBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKG1ldGFfYWMpXG4gXHRcdG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTtcbiBcbitcdGlmIChkZWZhdWx0X2FjbClcbitcdFx0cG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpO1xuK1xuIFx0LypcbiBcdCAqIFdlIHNob3VsZCBjYWxsIGlwdXQgYWZ0ZXIgdGhlIGlfcndzZW0gb2YgdGhlIGJpdG1hcCBiZWVuXG4gXHQgKiB1bmxvY2tlZCBpbiBvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQsIG9yIHRoZVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkLi4xYjAyMGYzM2ZlNjU4IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTI2LDYgKzI2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjY2x1c3Rlci9tYXNrbG9nLmhcdTAwM2VcbiBcbkBAIC03MjU3LDYgKzcyNTgsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wgPSBOVUxMO1xuIFxuIFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNzI2OSwxMCArNzI3MSwyMyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuK1xuK1x0aWYgKE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKS1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGRlZmF1bHRfYWNsID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xuK1x0XHRpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoZGVmYXVsdF9hY2wpO1xuK1x0XHRcdGRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGVmYXVsdF9hY2wsIE5VTEwsIE5VTEwpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuK1x0aWYgKGRlZmF1bHRfYWNsKVxuK1x0XHRwb3NpeF9hY2xfcmVsZWFzZShkZWZhdWx0X2FjbCk7XG4rdW5sb2NrOlxuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMwOjUyLjkzOTk3MjU3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzA2NzM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCBzZWVtcyB0byBiZSBoaXR0aW5nIHNldmVyYWwgZmlsZXMgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtOiBgYWNsLmNgLCBgYWNsLmhgLCBgbmFtZWkuY2AsIGFuZCBgeGF0dHIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IHRoZSBkZWZhdWx0IEFjY2VzcyBDb250cm9sIExpc3QgKEFDTCkgaXMgaGFuZGxlZCBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24uIFNwZWNpZmljYWxseSwgYG9jZnMyX2luaXRfYWNsYCBpcyBiZWluZyBtb2RpZmllZCB0byBhY2NlcHQgYSBgc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2xgIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBhIGBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaGAuIFRoZSByYXRpb25hbGUgYXBwZWFycyB0byBiZSBhYm91dCByZXNvbHZpbmcgYSBkZWFkbG9jayBvciBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLiBUaGUgY29kZSBub3cgcmV0cmlldmVzIHRoZSBkZWZhdWx0IEFDTCAqYmVmb3JlKiBraWNraW5nIG9mZiBhIHRyYW5zYWN0aW9uIG9yIGFjcXVpcmluZyBsb2Nrcy5cblxuSSdtIHNlZWluZyB0aGlzIHBhdHRlcm4gaW4gYG9jZnMyX21rbm9kYCB3aGVyZSBgZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpYCBpcyBjYWxsZWQgYmVmb3JlIGBvY2ZzMl9zdGFydF90cmFuc2AuIFNhbWUgdGhpbmcgaW4gYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIHdoZXJlIHRoZSBBQ0wgaXMgZmV0Y2hlZCBwcmlvciB0byB0aGUgY2FsbCB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGlzIG1ha2VzIHNlbnNlLCBmZXRjaGluZyB3aGF0IHdlIG5lZWQsIGFoZWFkIG9mIHdoZXJlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGdvdCB0aGUgZGF0YSBwcmlvciB0byB0aGUgbG9jayBhY3F1aXNpdGlvbi4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgbmF0dXJlIG9mIHRoZSBkZWFkbG9jayBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nLCBidXQgaXQgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIGFwcHJvYWNoLCBhdm9pZGluZyBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgZGV0YWlscywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgT0NGUzIgaXMgZXZlbiBhIHRhcmdldCB3b3J0aCBteSB0aW1lLiBJcyBpdCBlYXNpbHkgYWNjZXNzaWJsZSBmb3IgdGVzdGluZyBhbmQgZnV6emluZz8gR29vZCwgT0NGUzIgaXMgaW5kZWVkIGEgZmlsZXN5c3RlbSwgc28gaXQgc2hvdWxkIGJlIG1vdW50YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0J3MgcmVhY2hhYmxlIGluIFFFTVUg4oCTIGFuZCB5ZXMsIGl0J3MgYSBzdGFuZGFyZCBmaWxlc3lzdGVtLiBTbywgYSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIHdvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgaW5zaWdodC4gSSB3aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGVuYWJsZWQgYW5kIHRoZSBhcHByb3ByaWF0ZSBjb25maWcgb3B0aW9ucyB0byBidWlsZCBhIGZ1enplciBmb3IgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMDo1OC44MTA2NDg0MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NTg1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMDo1OC44NTMzMTIxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzU4Nzk1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqT0NGUzJfRlMgRGVwZW5kZW5jeSBDaGVjayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaW1lIHRvIGdldCBteSBoZWFkIHdyYXBwZWQgYXJvdW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIE9DRlMyX0ZTLiBJIG5lZWQgdG8gZW5zdXJlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3VwcG9ydCBuZWVkZWQuXG5cbiogICAqKkZpcnN0LCB0aGUgYmFzaWNzOioqIFdoYXQgYXJlIHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzIHRoYXQgT0NGUzIgcmVsaWVzIHVwb24/IEknbSB0aGlua2luZyBmaWxlIHN5c3RlbSBpbmZyYXN0cnVjdHVyZSwgYmxvY2sgZGV2aWNlIGhhbmRsaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgbmV0d29ya2luZyBzdGFjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjbHVzdGVyZWQgZmlsZSBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXG4qICAgKipOZXh0LCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llczoqKiBBcmUgdGhlcmUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgT0NGUzIgdG8gYnVpbGQgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseT8gSSByZW1lbWJlciBwYXN0IGlzc3VlcyB3aXRoIGNlcnRhaW4gb3B0aW9ucyBiZWluZyBzdWJ0bHkgaW5jb21wYXRpYmxlLCBsZWFkaW5nIHRvIG9ic2N1cmUgZmFpbHVyZXMuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgY2xlYXIuXG4qICAgKipVc2VyIHNwYWNlIHN1cHBvcnQ6KiogV2hhdCBsaWJyYXJpZXMgYW5kIHRvb2xzIGRvZXMgYSB1c2VyIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCBPQ0ZTMj8gVGhlIE9DRlMyIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNvbWUgdG8gbWluZCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgYXZhaWxhYmxlIGFuZCBhcHByb3ByaWF0ZWx5IHZlcnNpb25lZC4gQXJlIHRoZXJlIGFueSBleHRlcm5hbCB0b29scyBvciBsaWJyYXJpZXMgdGhhdCB3ZSBkZXBlbmQgb24/XG4qICAgKipJbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzdWJzeXN0ZW1zOioqIERvZXMgT0NGUzIgaGF2ZSBhbnkgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcz8gSSBzaG91bGQgY2hlY2sgYW55IGNvbmZsaWN0cyB3aXRoIG90aGVyIGZpbGUgc3lzdGVtcywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhpbmdzIGxpa2Ugc2VjdXJpdHkgbW9kdWxlcywgYW5kIGV2ZW4gbWVtb3J5IG1hbmFnZW1lbnQuIEkgcmVjYWxsIHNvbWUgcGFzdCBjb25mbGljdHMgcmVsYXRlZCB0byBsb2NraW5nIG9yIGNhY2hpbmcgYmVoYXZpb3Igd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy5cbiogICAqKlZlcnNpb24gY29tcGF0aWJpbGl0eToqKiBDcnVjaWFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBvciBhbnkgZGVwcmVjYXRpb25zIG9yIHJlbW92YWxzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGNoZWNrIGZvciB1cHN0cmVhbSBjaGFuZ2VzIGFuZCBhbnkgY29ycmVzcG9uZGluZyBwYXRjaGVzIG9yIHdvcmthcm91bmRzLlxuKiAgICoqRG9jdW1lbnRhdGlvbiByZXZpZXc6KiogSSdsbCBuZWVkIHRvIGdvIGJhY2sgb3ZlciBhbnkgZG9jdW1lbnRhdGlvbiB0byByZWFjcXVhaW50IG15c2VsZiB3aXRoIHRoZSBkZXNpZ24uIFRoaXMgd291bGQgaW5jbHVkZSBhbnkgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbnMgb3IgUkZDcy5cblxuRXNzZW50aWFsbHksIEknbSBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBhbGwgdGhlIHBpZWNlcyByZXF1aXJlZCBmb3IgT0NGUzIncyBzdWNjZXNzZnVsIG9wZXJhdGlvbiwgYW5kIGVuc3VyaW5nIHRoZXkncmUgYWxsIGFjY291bnRlZCBmb3IuIFRoZSBnb2FsIGlzIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmVyZXF1aXNpdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MDMuMTI5MTk0NzA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDg0OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPQ0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MDMuMTc2Njg1NTYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTY1MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzLCBFdmVyeXdoZXJlLi4uKipcblxuUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIHBhdXNlLiBJdCdzIGNydWNpYWwgdG8gbGF5IG91dCB0aGUgZ3JvdW5kd29yayBmaXJzdCwgYW5kIG5vdCBjaGFyZ2UgYmxpbmRseSBhaGVhZC4gV2hhdCBhcmUgdGhlICpleGFjdCogZWxlbWVudHMgdGhpcyBoaW5nZXMgb24/IFdoYXQgb3RoZXIgc3lzdGVtcywgbGlicmFyaWVzLCBkYXRhc2V0cywgb3IgZXh0ZXJuYWwgZmFjdG9ycyBhcmUgZ29pbmcgdG8gaW5mbHVlbmNlIHRoZSBvdXRjb21lIGhlcmU/IEkgY2FuJ3QgZXZlbiBiZWdpbiB0byBwcm9wZXJseSBhc3Nlc3Mgb3IgcGxhbiB3aXRob3V0IGtub3dpbmcgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBsaXN0aW5nIHJlcXVpcmVtZW50czsgaXTigJlzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2F0ZSB3ZWIgb2YgaW50ZXJjb25uZWN0aW9ucy4gVGhlIGRldmlsJ3MgaW4gdGhlIGRldGFpbHMsIGFzIHRoZXkgc2F5LCBhbmQgdGhvc2UgZGV0YWlscyBhcmUgdGhlIGRlcGVuZGVuY2llcy4gQSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBub3cuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgdGhhdCB3aWxsIGNvbWUgYmFjayB0byBiaXRlIG1lIGxhdGVyLiBUaW1lIHRvIGNsYXJpZnkgd2hhdCAqZXhhY3RseSogaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjA2LjA2ODM0MDU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE9DRlMyX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgUVVPVEFcXG4gICA5OlxcdFxcdHNlbGVjdCBRVU9UQV9UUkVFXFxuICAxMDpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICAxMTpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBPQ0ZTMiBpcyBhIGdlbmVyYWwgcHVycG9zZSBleHRlbnQgYmFzZWQgc2hhcmVkIGRpc2sgY2x1c3RlciBmaWxlXFxuICAxNDpcXHRcXHQgIHN5c3RlbSB3aXRoIG1hbnkgc2ltaWxhcml0aWVzIHRvIGV4dDMuIEl0IHN1cHBvcnRzIDY0IGJpdCBpbm9kZVxcbiAgMTU6XFx0XFx0ICBudW1iZXJzLCBhbmQgaGFzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kaW5nIG1ldGFkYXRhIGdyb3VwcyB3aGljaCBtYXlcXG4gIDE2OlxcdFxcdCAgYWxzbyBtYWtlIGl0IGF0dHJhY3RpdmUgZm9yIG5vbi1jbHVzdGVyZWQgdXNlLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIFlvdSdsbCB3YW50IHRvIGluc3RhbGwgdGhlIG9jZnMyLXRvb2xzIHBhY2thZ2UgaW4gb3JkZXIgdG8gYXQgbGVhc3RcXG4gIDE5OlxcdFxcdCAgZ2V0IFxcXCJtb3VudC5vY2ZzMlxcXCIuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MDYuMDY4NDA3MzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY5NzI5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBPQ0ZTMiBGaWxlc3lzdGVtIE1vZHVsZSBEZXBlbmRlbmNpZXMgYW5kIENhbGwgUGF0aHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBgT0NGUzJfRlNgIG1vZHVsZSByZXF1aXJlcyBhIGZldyBwcmVyZXF1aXNpdGVzOiBgSU5FVGAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiBJdCBhbHNvIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgRlNfUE9TSVhfQUNMYC4gU28sIHRvIGdldCB0aGluZ3Mgcm9sbGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBgT0NGUzJfRlNgIGVuYWJsZWQuXG5cblRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCBzcGVjaWZpY2FsbHkgdG91Y2hlcyBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gYG9jZnMyX21rbm9kYCwgdGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhhdCdzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGBta25vZGAgc3lzY2FsbCB3aGVuIHdvcmtpbmcgd2l0aCB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gTm93LCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmUgdG8gbWUuIEkga25vdyBpdCdzICpjYWxsZWQqIGZyb20gYG9jZnMyX21rbm9kYCwgd2hpY2ggd2UganVzdCBpZGVudGlmaWVkIGFzIGxpbmtlZCB0byB0aGUgYG1rbm9kYCBzeXN0ZW0gY2FsbC4gQmV5b25kIHRoYXQsIGl0IGFsc28gc2VlbXMgdG8gYmUgaW52b2tlZCBmcm9tIGBvY2ZzMl9ta2RpcmAsIGBvY2ZzMl9jcmVhdGVgLCBhbmQgYG9jZnMyX3N5bWxpbmtgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGEgYnJvYWQgc2V0IG9mIG9wZXJhdGlvbnMgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBhY3R1YWxseSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjEwLjQzODEzOTQwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MjQ4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MjM4PXN0YXRpYyBpbnQgb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTYtXFx0aWYgKCFwcmVzZXJ2ZSkge1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XFx0XFx0ZXJyb3IgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woZGlyLCBuZXdfb3JwaGFuX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfZGVudHJ5LVxcdTAwM2VkX25hbWUpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz03MTczPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzI1NC0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjcyNTU6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9vY2ZzMi94YXR0ci5jLTcyNTYtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9ODA9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaC04NC1cXHRcXHRcXHQgYm9vbCBwcmVzZXJ2ZV9zZWN1cml0eSk7XFxuZnMvb2NmczIveGF0dHIuaDo4NTppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL3hhdHRyLmgtODYtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MTAuNDg1NTY5MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExOTg5MzUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkhhbmcgb24gYSBzZWNvbmQsIHRoYXQncyBub3QgcmlnaHQuLi4qKiBJIHRob3VnaHQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgd2FzIGEgcHJldHR5IGNvcmUgZnVuY3Rpb24sIGJ1dCB0aGUgdGV4dCBpcyBzYXlpbmcgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBvY2ZzMl9yZWZsaW5rYD8gVGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQsIG5vdCBhdCBhbGwuIEl0J3MgYSBmdW5kYW1lbnRhbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY2FsbCBncmFwaC4gSXQgc2VlbXMgdW5saWtlbHkgdGhpcyBpcyBjb3JyZWN0LiBJIGJldCBpdCBpcyBjYWxsZWQgb3RoZXIgcGxhY2VzIHRvby4gTGV0IG1lIHNlYXJjaCBmb3IgaXQgYW5kIG1ha2Ugc3VyZS4gTGV0IG1lIGdvIGxvb2sgYXQgYG9jZnMyX21rbm9kYCwgYmVjYXVzZSB0aGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgc3BvdCB3aGVyZSB0aG9zZSB0aGluZ3MgYXJlIGFsc28gbmVlZGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0IG9mIHRoZSBPQ0ZTMiBjb2RlIGJhc2UgaXMgYWNjdXJhdGUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHNlY3VyaXR5IGFuZCBBQ0wgaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMToxMy42MDU0NjU5NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDc2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX21rbm9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0zMjI9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzQ5LSAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxcbmZzL29jZnMyL2FjbC5jOjM1MDogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXFxuZnMvb2NmczIvYWNsLmMtMzUxLSAqL1xcbi0tXFxuZnMvb2NmczIvZGlyLmM9MjIxMz1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2Rpci5jLTIyMzctLypcXG5mcy9vY2ZzMi9kaXIuYzoyMjM4OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcXG5mcy9vY2ZzMi9kaXIuYy0yMjM5LSAqIHRoZSBpbmxpbmUtZGF0YSBmbGFnIGFuZCBpbml0aWFsaXplcyB0aGUgaW5saW5lLWRhdGEgc2VjdGlvbi5cXG4tLVxcbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4Ny1cXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxcbmZzL29jZnMyL2lub2RlLmM6Mzg4OlxcdCAqIGJ5IG9jZnMyX21rbm9kX2xvY2tlZCgpLCBzbyBhIGZhaWx1cmUgaXMgYSBjb2RlIGJ1Zy5cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cXHQgKi9cXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDIzLSAqIGJsb2NrcyArIHF1b3RhIHVwZGF0ZSAqL1xcbmZzL29jZnMyL2pvdXJuYWwuaDo0MjQ6c3RhdGljIGlubGluZSBpbnQgb2NmczJfbWtub2RfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaXNfZGlyLFxcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXFx0XFx0XFx0XFx0ICAgICAgaW50IHhhdHRyX2NyZWRpdHMpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvb2NmczIvam91cm5hbC5oLTU1MC17XFxuZnMvb2NmczIvam91cm5hbC5oOjU1MTpcXHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XFxuZnMvb2NmczIvam91cm5hbC5oLTU1Mi1cXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTYtXFxuZnMvb2NmczIvbmFtZWkuYzo1NzpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTU4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yMTY9c3RhdGljIHZvaWQgb2NmczJfY2xlYW51cF9hZGRfZW50cnlfZmFpbHVyZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjMwLVxcbmZzL29jZnMyL25hbWVpLmM6MjMxOnN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy0yMzItXFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNjEtXFxuZnMvb2NmczIvbmFtZWkuYzoyNjI6XFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI2My1cXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzc1LVxcbmZzL29jZnMyL25hbWVpLmM6Mzc2OlxcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXFx1MDAzZXNiLFxcbmZzL29jZnMyL25hbWVpLmMtMzc3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBTX0lTRElSKG1vZGUpLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0zOTUtXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzozOTY6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxcbmZzL29jZnMyL25hbWVpLmMtMzk3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTI0LVxcbmZzL29jZnMyL25hbWVpLmM6NTI1OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvbmFtZWkuYy01MjYtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjM2LVxcbmZzL29jZnMyL25hbWVpLmM6NjM3OnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbmZzL29jZnMyL25hbWVpLmMtNjM4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02NTktXFxuZnMvb2NmczIvbmFtZWkuYzo2NjA6XFx0cmV0dXJuIF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsIGRldiwgbmV3X2ZlX2JoLFxcbmZzL29jZnMyL25hbWVpLmMtNjYxLVxcdFxcdFxcdFxcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjczLVxcdFxcdFxcdCAgT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2NzQ6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUiwgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02NzUtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9NjgxPXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02OTAtXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcXG5mcy9vY2ZzMi9uYW1laS5jOjY5MTpcXHRyZXQgPSBvY2ZzMl9ta25vZChcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTY5Mi1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0xODIxPXN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk2My1cXG5mcy9vY2ZzMi9uYW1laS5jOjE5NjQ6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjUtXFx0XFx0XFx0XFx0ICAgIDAsIFxcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yNTI4PWludCBvY2ZzMl9jcmVhdGVfaW5vZGVfaW5fb3JwaGFuKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNTY4LVxcbmZzL29jZnMyL25hbWVpLmM6MjU2OTpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYiwgMCwgMCkpO1xcbmZzL29jZnMyL25hbWVpLmMtMjU3MC1cXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU5MS1cXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cXG5mcy9vY2ZzMi9uYW1laS5jOjI1OTI6XFx0c3RhdHVzID0gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI1OTMtXFx0XFx0XFx0XFx0ICAgICAgMCwgXFx1MDAyNm5ld19kaV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yOTQwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQ3LVxcdC5ta2RpclxcdFxcdD0gb2NmczJfbWtkaXIsXFxuZnMvb2NmczIvbmFtZWkuYzoyOTQ4OlxcdC5ta25vZFxcdFxcdD0gb2NmczJfbWtub2QsXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQ5LVxcdC5yZW5hbWVcXHRcXHQ9IG9jZnMyX3JlbmFtZSxcXG4tLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTgtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTk5OlRSQUNFX0VWRU5UKG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cXHRUUF9QUk9UTyh2b2lkICpkaXIsIHZvaWQgKmRlbnRyeSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMToxMy42NTM1NDg5NjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwOTE2OTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgT0NGUzIgRmlsZXN5c3RlbSoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYG9jZnMyX21rbm9kYCBpcyBjbGVhcmx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBmaWxlIGNyZWF0aW9uIHByaW1pdGl2ZXMgbGlrZSBgbWtkaXJgLCBgY3JlYXRlYCwgYW5kLCB3ZWxsLCBgbWtub2RgIGl0c2VsZi4gVGhlbiwgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgdHJpZ2dlcmVkIGJ5IGBvY2ZzMl9yZWZsaW5rYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhtbSwgYnV0ICp3YWl0KiwgYG9jZnMyX21rbm9kYCBkaXJlY3RseSBjYWxscyBgb2NmczJfaW5pdF9hY2xgLiBBbmQsIGxvb2tpbmcgYXQgaXQgY2xvc2VyLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhbHNvIGNhbGxzIGBvY2ZzMl9pbml0X2FjbGAuIFRoZSBwYXRjaCdzIG1vZGlmaWNhdGlvbnMgc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZmV0Y2hpbmcgb2YgdGhlIGRlZmF1bHQgQUNMIGluIGJvdGggYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKmJlZm9yZSogdHJhbnNhY3Rpb24gc3RhcnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHByb21pc2luZyBhcmVhIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIGZvY3VzIHdvdWxkIGJlIG9uIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBhbmQgYG9jZnMyX2luaXRfYWNsYCBhcyBmb2N1cyBzeW1ib2xzLiBCdXQgaG9sZCBvbiwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgYG9jZnMyX21rbm9kYCBpcyBzdGF0aWMuLi4gWWVwLCBpdCBpcy4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gRXZlbiB0aG91Z2ggaXQncyB0aGUgZ2F0ZXdheSBmb3IgYG9jZnMyX2luaXRfYWNsYCBjYWxscywgbWFraW5nIGl0IHN0YXRpYyByZXN0cmljdHMgdXNhZ2UuIFNvLCBjb25zaWRlcmluZyB0aGlzLCBhIGJldHRlciBhcHByb2FjaCB0byBnZXQgYXQgdGhlIGtleSBmdW5jdGlvbnMgaXMgdG8gdXNlIGBvY2ZzMl9ta2RpcmAsIGBvY2ZzMl9jcmVhdGVgLCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYW5kIGBvY2ZzMl9pbml0X2FjbGAgYXMgdGhlIG1vcmUgcHJhY3RpY2FsIGZvY3VzIHN5bWJvbHMuXG5cbk9oLCBvbmUgbW9yZSB0aGluZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBvY2ZzMl9pbml0X2FjbGAuIE9rYXksIGxvb2tzIGxpa2UgaXQncyBub24tc3RhdGljLiBHb29kLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgaW4gYGZzL29jZnMyL2FjbC5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjIwLjE2MjcyMjM4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzQyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG9jZnMyX2luaXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2FjbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FjbC5jPTMyMj1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNTEtICovXFxuZnMvb2NmczIvYWNsLmM6MzUyOmludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL29jZnMyL2FjbC5jLTM1My1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMToyMC4yMTA3MDU5ODlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTMxNDA1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhcyBJIHdvdWxkIGluIG15IG93biB3b3JrOlxuXG4qKkFDTCBJbml0aWFsaXphdGlvbiBhbmQgT2JqZWN0IENyZWF0aW9uOiBBIFF1aWNrIFNjYW4qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3QgYmVpbmcgc3RhdGljIGdpdmVzIHVzIHNvbWUgZmxleGliaWxpdHksIG9wZW5zIHRoZW0gdXAgZm9yIHBvdGVudGlhbCBleHRlcm5hbCB1c2Ugb3IgbW9kdWxlIGludGVyYWN0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgYSBkaXN0cmlidXRlZCBmaWxlc3lzdGVtIGxpa2UgT0NGUzIuIEknZCB0eXBpY2FsbHkgd2FudCB0byBrbm93IHdoeSB0aGV5ICp3b3VsZCogYmUgc3RhdGljLCB3aGljaCB3b3VsZCBiZSBnZW5lcmFsbHkgaWYgdGhleSBhcmUgb25seSBldmVyIHVzZWQgd2l0aGluIHRoZSBzYW1lIGZpbGUgYW5kIHRodXMgdmlzaWJpbGl0eSBpcyBiZWluZyByZWR1Y2VkLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoaXMgbm9uLXN0YXRpYy1uZXNzIGlzIGNvbnNpc3RlbnQgYW5kIGNoZWNrIHRoZSBjYWxsZXJzIG9yIHRob3NlIHRoYXQgbWlnaHQgY2FsbCB0aGVzZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYCBzaW5jZSB0aG9zZSBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcyBmb3IgaW5pdGlhbGl6aW5nIEFDTHMgd2hlbiBuZXcgZGlyZWN0b3JpZXMgb3IgZmlsZXMgYXJlIG1hZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIG9iamVjdCBjcmVhdGlvbiBwcm9jZXNzIGluIHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBmbG93IGlzIHNvdW5kIGFuZCB0aGUgQUNMIGhhbmRsaW5nIGlzIHJvYnVzdCBpbiB0aGUgY3JlYXRpb24gY29udGV4dC4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSwgd2hlbiwgYW5kIGhvdyB0aGVzZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhvc2UgY29yZSBvcGVyYXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGNhbGxzPyBFcnJvciBoYW5kbGluZz8gQW5kIEknbGwgYmUgbm90aW5nIGFueSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoaXMgYXJlYS4gSXQncyBhIHF1aWNrIHNwb3QgY2hlY2sgdG8gbWFrZSBzdXJlIG5vdGhpbmcgc3VycHJpc2luZyBwb3BzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTozMS42MDM4NTAwNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTAyOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX21rZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz02Mzc9c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTY2NC1cXG5mcy9vY2ZzMi9uYW1laS5jOjY2NTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy02NjYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjcxLVxcbmZzL29jZnMyL25hbWVpLmM6NjcyOlxcdHRyYWNlX29jZnMyX21rZGlyKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy02NzMtXFx0XFx0XFx0ICBPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9Mjk0MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjk0Ni1cXHQuc3ltbGlua1xcdD0gb2NmczJfc3ltbGluayxcXG5mcy9vY2ZzMi9uYW1laS5jOjI5NDc6XFx0Lm1rZGlyXFx0XFx0PSBvY2ZzMl9ta2RpcixcXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXFx0Lm1rbm9kXFx0XFx0PSBvY2ZzMl9ta25vZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MzEuNjU1MzU4NDU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODkwOTQ5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9DRlMyIEluaXRpYWxpemF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIGhvdyBPQ0ZTMiBoYW5kbGVzIEFDTCBpbml0aWFsaXphdGlvbiBhbmQgcmVsYXRlZCBzZWN1cml0eSBjb250ZXh0cy4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxseSDigJMgd2UgY2FuIGp1c3QgcmVseSBvbiBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBiZWNhdXNlLCBhcyBmYXIgYXMgSSBjYW4gc2VlIGF0IHRoaXMgcG9pbnQsIHRoZSBjb3JlIHJvdXRpbmVzIGFyZSBzdGF0aWMuXG5cblRoZW4gSSBwYXVzZWQg4oCTIGBvY2ZzMl9ta25vZGAgKmlzKiBzdGF0aWMsIGJ1dCBvZiBjb3Vyc2UsIGl0J3MgYW4gaW5vZGUgb3BlcmF0aW9uLiBTbywgVkZTIGNhbGxzIGl0LiBUaGF0IG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gdGhpbmsgbW9yZSBicm9hZGx5LCBiZXlvbmQgc2ltcGxlIGRpcmVjdCBjYWxscy5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBpbml0aWFsaXphdGlvbnMuIGBvY2ZzMl9yZWZsaW5rYCBpcyBkZWZpbml0ZWx5IHN0YXRpYy4gQWhhISBgb2NmczJfcmVmbGlua194YXR0cnNgIGlzICpub3QqIHN0YXRpYy4gVGhhdCdzIGEgZ29vZCBsZWFkLiBOb3cgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyBub24tc3RhdGljLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24uIExldCdzIGhlYWQgdG8gYGZzL29jZnMyL3hhdHRyLmNgIHRvIHNlZSBob3cgaXQncyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6MzguMTQ0NDU2NjUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4NzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgb2NmczJfcmVmbGlua194YXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi94YXR0ci5jPTcxNjQ9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXFxuZnMvb2NmczIveGF0dHIuYzo3MTczOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzQtXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTozOC4xODk2NTE3MzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MTE4NDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFzIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGJyYWluJ3Mgd2hpcnJpbmcuLi4gd2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgKmFic29sdXRlbHkqIG5lZWRlZCB0byBtYWtlIHRoaXMgd29yaz8gUmlnaHQsIGBPQ0ZTMl9GU2AgaXMgdGhlIGJpZyBvbmUuIEhhbmcgb24sIHRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGxldmVyYWdpbmcgYE9DRlMyX01PVU5UX1BPU0lYX0FDTGAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZy4uLiBkb2VzIGBPQ0ZTMl9GU2AgaW1wbGljaXRseSBzZWxlY3QgYEZTX1BPU0lYX0FDTGA/IFllcywgSSBzZWUgaXQgcmlnaHQgdGhlcmU6IGBzZWxlY3QgRlNfUE9TSVhfQUNMYCB3aXRoaW4gYE9DRlMyX0ZTYC4gR29vZC4gQWxyaWdodCwgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29tZSBpbnRvIHBsYXk/IEp1c3QgZG91YmxlLWNoZWNraW5nLi4uIExvb2tzIGxpa2UgYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIHByaW1hcnksIG92ZXJhcmNoaW5nIG9uZS5cblxuSG1tLCB3YWl0LCBhIGRlcGVuZGVuY3kgY2hlY2suLi4gYE9DRlMyX0ZTYCBkZXBlbmRzIG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNgLiBSaWdodC4gU28gd2Ugc2hvdWxkIGRlZmluaXRlbHkgbGlzdCBgT0NGUzJfRlNgIGluIEVuYWJsZUNvbmZpZ3MuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBPQ0ZTMl9GU2AgaXMgdGhlICpvbmx5KiBvbmUgZGlyZWN0bHkgbmVlZGVkIHRvIG1vdmUgZm9yd2FyZC4gTmVlZCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo0My40NTA4Mzg0NDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDUxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPQ0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzE6NDMuNDk1ODk1OTA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDAxODk1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIGZvciBDT05GSUdGU19GUyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQ09ORklHRlNfRlNgIGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgaXQncyBub3Qgc29tZXRoaW5nIHRoYXQncyBtaXNzZWQsIG9yIGEgdmFyaWFibGUgZGVmaW5pdGlvbiBpbiB0aGUgcHJvamVjdC4gSWYgaXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdCdsbCBhZmZlY3QgdGhlIGJ1aWxkIGFuZCBtb2R1bGUgbG9hZGluZyBiZWhhdmlvci4gSSBjYW4ndCBwcm9jZWVkIHdpdGggYW55IGFzc3VtcHRpb25zIGhlcmUuIEkgd2lsbCBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGdvaW5nIHRvIGRldGVybWluZSBob3cgSSBwcm9jZWVkIHdpdGggYW5hbHl6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMxOjQ4LjY5NjA4ODc4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2Mzk2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo0OC43Mzk3MzE3NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExNTU3OTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgQ09ORklHRlNfRlNgIGxpc3RlZCBoZXJlIOKAkyB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBubyBxdWVzdGlvbi4gVGhlcmVmb3JlLCBFbmFibGVDb25maWdzIHNob3VsZCBpbmNsdWRlIGJvdGggYE9DRlMyX0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYC4gSG93ZXZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgcXVpY2tseSBjaGVjayBpZiBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIGFzc3VtZWQgYW5kIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyB0aGV5IG9mdGVuIGFyZS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGEgYml0IGRlZXBlciwgYmVjYXVzZSB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdpdGggYE9DRlMyX0ZTX08yQ0JgLiBJcyBlbmFibGluZyB0aGlzICplc3NlbnRpYWwqIHRvIG1vdW50aW5nIGFuIE9DRlMyIGZpbGUgc3lzdGVtPyBMZXQgbWUgc2Vl4oCmQWgsIHJpZ2h0LiBcIk8yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZy5cIiBPa2F5LCBzbyAqbm9ybWFsbHkqIHlvdSBjYW4gbW91bnQgT0NGUzIgbG9jYWxseSwgZXZlbiB3aXRob3V0IHRoZSBjbHVzdGVyaW5nIGNvbXBvbmVudCwgdXNpbmcgYGxvY2FsYWxsb2NgIG9yIHNpbWlsYXIgbWV0aG9kcy4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4g4oCTIGRvdWJsZS1jaGVja2luZyB0aGF0IGBPQ0ZTMl9GU19PMkNCYCBpc24ndCBhIGhhcmQgcmVxdWlyZW1lbnQgaGVyZSBpcyB0aGUgbW9zdCBwcnVkZW50IHRoaW5nIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo1NS44NTUzMTM2OTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgUHJvamVjdCB3ZWIgcGFnZTogICAgaHR0cHM6Ly9vY2ZzMi53aWtpLmtlcm5lbC5vcmcvXFxuICAyMjpcXHRcXHQgIFRvb2xzIHdlYiBwYWdlOiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZmFzaGVoL29jZnMyLXRvb2xzXFxuICAyMzpcXHRcXHQgIE9DRlMyIG1haWxpbmcgbGlzdHM6IGh0dHBzOi8vc3Vic3BhY2Uua2VybmVsLm9yZy9saXN0cy5saW51eC5kZXYuaHRtbFxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE9DRlMyLCBzZWUgdGhlIGZpbGVcXG4gIDI2OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi5yc3RcXHUwMDNlLlxcbiAgMjc6XFx0XFxuICAyODpcXHRjb25maWcgT0NGUzJfRlNfTzJDQlxcbiAgMjk6XFx0XFx0dHJpc3RhdGUgXFxcIk8yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gT0NGUzJfRlNcXG4gIDMxOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBPQ0ZTMiBpbmNsdWRlcyBhIHNpbXBsZSBrZXJuZWxzcGFjZSBjbHVzdGVyaW5nIHBhY2thZ2UsIHRoZSBPQ0ZTMlxcbiAgMzQ6XFx0XFx0ICBDbHVzdGVyIEJhc2UuICBJdCBvbmx5IHJlcXVpcmVzIGEgdmVyeSBzbWFsbCB1c2Vyc3BhY2UgY29tcG9uZW50XFxuICAzNTpcXHRcXHQgIHRvIGNvbmZpZ3VyZSBpdC4gVGhpcyBjb21lcyB3aXRoIHRoZSBzdGFuZGFyZCBvY2ZzMi10b29scyBwYWNrYWdlLlxcbiAgMzY6XFx0XFx0ICBPMkNCIGlzIGxpbWl0ZWQgdG8gbWFpbnRhaW5pbmcgYSBjbHVzdGVyIGZvciBPQ0ZTMiBmaWxlIHN5c3RlbXMuXFxuICAzNzpcXHRcXHQgIEl0IGNhbm5vdCBtYW5hZ2UgYW55IG90aGVyIGNsdXN0ZXIgYXBwbGljYXRpb25zLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHQgIEl0IGlzIGFsd2F5cyBzYWZlIHRvIHNheSBZIGhlcmUsIGFzIHRoZSBjbHVzdGVyaW5nIG1ldGhvZCBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMTo1NS44NTUzNzM3NjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2Mjk5NTEwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgT0NGUzIgQUNMIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgZGVmYXVsdCBzZWVtcyB0byBiZSBgeWAgZm9yIGVuYWJsaW5nIGZlYXR1cmVzLCBzbyBgT0NGUzJfRlNgIGFsb25lIHNob3VsZCBzdWZmaWNlLiBJJ20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGBwb3NpeF9hY2xfZHVwYCBhbmQgYGdldF9pbm9kZV9hY2xgIGJlY2F1c2UgdGhlIHBhdGNoIGV4cGxpY2l0bHkgdXNlcyB0aGVtLCBhbmQgdGhleSBhcmUgcGFydCBvZiBgRlNfUE9TSVhfQUNMYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgRlNfUE9TSVhfQUNMYCBpcywgaW4gdHVybiwgc2VsZWN0ZWQgYnkgYE9DRlMyX0ZTYCwgaGVuY2UgbXkgY2hvaWNlIG9mIGNvbmZpZ3VyYXRpb25zOiBgT0NGUzJfRlNgIGFuZCBgQ09ORklHRlNfRlNgLiBJJ2xsIHdhbnQgdG8ga2VlcCBhbiBleWUgb24gdGhvc2UuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSB0b3VjaGVkOyBpZiBhbnkgb2YgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyB3ZXJlIHN0YXRpYywgdGhlIHBvdGVudGlhbCBpbXBhY3Qgd291bGQgYmUgcmVkdWNlZC4gSG93ZXZlciwgYG9jZnMyX21rbm9kYCBpcyBzdGF0aWMuIFRoYXQncyBnb29kLiBCb3RoIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub24tc3RhdGljLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgdmlzaWJpbGl0eSBmb3IgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBvY2ZzMl9pbml0X2FjbGAgaXMgZGVjbGFyZWQgaW4gYGZzL29jZnMyL2FjbC5oYCBhbmQgaXMgY2FsbGVkIGZyb20gYm90aCBgZnMvb2NmczIvbmFtZWkuY2AgYW5kIGBmcy9vY2ZzMi94YXR0ci5jYCwgc28gaXQncyBjbGVhcmx5IG5vdCBzdGF0aWMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgZGVjbGFyZWQgaW4gYGZzL29jZnMyL3hhdHRyLmhgIGFuZCBpcyBjYWxsZWQgZnJvbSBgZnMvb2NmczIvcmVmY291bnR0cmVlLmNgLCBzbyBpdCdzIGFsc28gbm9uLXN0YXRpYywgY29uZmlybWluZyB0aGF0IGl0J3MgYWNjZXNzaWJsZS5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIGl0IGFwcGVhcnMgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgbG9jayBvcmRlcmluZyBpc3N1ZS4gVGhlIGZpeCBpbnZvbHZlcyBmZXRjaGluZyB0aGUgZGVmYXVsdCBBQ0wgKmJlZm9yZSogdGFraW5nIGxvY2tzIG9yIGluaXRpYXRpbmcgYSB0cmFuc2FjdGlvbiwgd2hpY2ggaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IE9DRlMyIGhhbmRsZXMgaW5vZGUgY3JlYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBsb2dpYyBvZiBPQ0ZTMiwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGF0dHJhY3RpdmUgZm9yIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggYWx0ZXJzIGhvdyBPQ0ZTMiBpbnRlcmFjdHMgd2l0aCBQT1NJWCBBQ0xzIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApLCBzcGVjaWZpY2FsbHkgYnkgcmVvcmRlcmluZyB0aGUgQUNMIGZldGNoLiBJdCdzIGludGVuZGVkIHRvIHJlc29sdmUgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBzdW1tYXJpemUgdGhlIGVzc2VudGlhbCBlbGVtZW50cywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuLSBgb2NmczJfaW5pdF9hY2xgXG4tIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgXG5cbkFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3M6XG4tIGBPQ0ZTMl9GU2Bcbi0gYENPTkZJR0ZTX0ZTYFxuXG5Pa2F5LCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHNldCBvZiBwYXJhbWV0ZXJzIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ4NywiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMjowNi40ODUzMjczOTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5Mjk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9DRlMyIHRvIGZldGNoIHRoZSBkZWZhdWx0IFBPU0lYIEFDTCBiZWZvcmUgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiBvciB0YWtpbmcgbG9ja3MgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBpbiBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIHN0YW5kYXJkIFZGUyBzeXN0ZW0gY2FsbHMgKGUuZy4sIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgKSBvbiBhbiBPQ0ZTMiBtb3VudC4gVGhlcmVmb3JlLCBpdCBoYXMgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgT0NGUzIgdG8gZmV0Y2ggdGhlIGRlZmF1bHQgUE9TSVggQUNMIGJlZm9yZSBzdGFydGluZyBhIHRyYW5zYWN0aW9uIG9yIHRha2luZyBsb2NrcyBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKGUuZy4sIGluIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgc3RhbmRhcmQgVkZTIHN5c3RlbSBjYWxscyAoZS5nLiwgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWApIG9uIGFuIE9DRlMyIG1vdW50LiBUaGVyZWZvcmUsIGl0IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMjowNi41NjkzMjcyMjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTA5Mzg5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzI6MDYuNTY5ODkzMjQ3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3MTA4ODE4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGRlZmF1bHQgQUNMcyBhcmUgZmV0Y2hlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIuIEluc3RlYWQgb2YgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIGluc2lkZSBgb2NmczJfaW5pdF9hY2xgLCBpdCBub3cgdXNlcyB0aGUgc3RhbmRhcmQgVkZTIGBnZXRfaW5vZGVfYWNsYCBpbiB0aGUgY2FsbGVycyAoYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApIGFuZCBwYXNzZXMgdGhlIHJlc3VsdGluZyBgcG9zaXhfYWNsYCBzdHJ1Y3QgdG8gYG9jZnMyX2luaXRfYWNsYC5cXG5cXG5UaGUgYGRlZmF1bHRfYWNsYCBwb2ludGVycyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYm90aCBtb2RpZmllZCBmdW5jdGlvbnMuIElmIGBnZXRfaW5vZGVfYWNsYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBwcm9wZXJseSBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA3ZGFiMmU1MDJkYmYxNjZiMjZlZDMyYTA4MGNlY2Q5NmJhMTI5ZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozMDo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcbmluZGV4IGFmMWUyY2VkYjIxN2YuLmExNjM4NmMyMzYyNDMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0zNTMsNyArMzUzLDcgQEAgaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbitcdFx0ICAgc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wsXG4gXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuIFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcbiB7XG5AQCAtMzY0LDEyICszNjQsOCBAQCBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbiBcbiBcdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRcdFx0aWYgKGRlZmF1bHRfYWNsKVxuK1x0XHRcdFx0YWNsID0gcG9zaXhfYWNsX2R1cChkZWZhdWx0X2FjbCk7XG4gXHRcdH1cbiBcdFx0aWYgKCFhY2wpIHtcbiBcdFx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlIFx1MDAyNiB+Y3VycmVudF91bWFzaygpO1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmhcbmluZGV4IDY2N2M2ZjAzZmE2MDYuLmMxYmEyZWIyNzRlY2MgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxuKysrIGIvZnMvb2NmczIvYWNsLmhcbkBAIC0yMSw3ICsyMSw3IEBAIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuIGV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuK1x0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBwb3NpeF9hY2wgKixcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4gXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xuaW5kZXggMTI3NzY2NmM3N2NkMi4uNmJmYzJiOWFiZTc1ZSAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNyw2ICsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcXVvdGFvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NsdXN0ZXIvbWFza2xvZy5oXHUwMDNlXG4gXG5AQCAtMjU2LDYgKzI1Nyw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbCA9IE5VTEw7XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTM2Miw2ICszNjQsMTUgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0Z290byBsZWF2ZTtcbiBcdH1cbiBcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRkZWZhdWx0X2FjbCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHtcbitcdFx0XHRzdGF0dXMgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbitcdFx0XHRkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0Z290byBsZWF2ZTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYixcbiBcdFx0XHRcdFx0XHRcdCAgICBTX0lTRElSKG1vZGUpLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHhhdHRyX2NyZWRpdHMpKTtcbkBAIC00MTEsNyArNDIyLDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0aW5jX25saW5rKGRpcik7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLFxuK1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIGRlZmF1bHRfYWNsLFxuIFx0XHRcdCBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbkBAIC00ODgsNiArNDk5LDkgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChtZXRhX2FjKVxuIFx0XHRvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7XG4gXG4rXHRpZiAoZGVmYXVsdF9hY2wpXG4rXHRcdHBvc2l4X2FjbF9yZWxlYXNlKGRlZmF1bHRfYWNsKTtcbitcbiBcdC8qXG4gXHQgKiBXZSBzaG91bGQgY2FsbCBpcHV0IGFmdGVyIHRoZSBpX3J3c2VtIG9mIHRoZSBiaXRtYXAgYmVlblxuIFx0ICogdW5sb2NrZWQgaW4gb2NmczJfZnJlZV9hbGxvY19jb250ZXh0LCBvciB0aGVcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZC4uMWIwMjBmMzNmZTY1OCAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC0yNiw2ICsyNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NsdXN0ZXIvbWFza2xvZy5oXHUwMDNlXG4gXG5AQCAtNzI1Nyw2ICs3MjU4LDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsID0gTlVMTDtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyNzEsMjMgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdGlmIChPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYiktXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRkZWZhdWx0X2FjbCA9IGdldF9pbm9kZV9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihkZWZhdWx0X2FjbCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKGRlZmF1bHRfYWNsKTtcbitcdFx0XHRkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRlZmF1bHRfYWNsLCBOVUxMLCBOVUxMKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbitcdGlmIChkZWZhdWx0X2FjbClcbitcdFx0cG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpO1xuK3VubG9jazpcbiBcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xuIFx0YnJlbHNlKGRpcl9iaCk7XG4gbGVhdmU6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozMjowNi41Njk4OTU4MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMDg3OTQ3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyBob3cgZGVmYXVsdCBBQ0xzIGFyZSBoYW5kbGVkIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgb2NmczJfaW5pdF9hY2xgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBzaGlmdGluZyB0aGUgQUNMIGZldGNoaW5nIGxvZ2ljIGZyb20gaW5zaWRlIGBvY2ZzMl9pbml0X2FjbGAgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIHdpdGhpbiBgb2NmczJfaW5pdF9hY2xgIHdoaWxlIGhvbGRpbmcgYGlwX3hhdHRyX3NlbWAuIE5vdywgdGhleSBhcmUgZmV0Y2hpbmcgaXQgd2l0aCB0aGUgVkZTIGZ1bmN0aW9uIGBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVClgICpiZWZvcmUqIGNhbGxpbmcgYG9jZnMyX2luaXRfYWNsYC5cblxuTGV0J3MgZGlzc2VjdCB0aGlzLCBmb2N1c2luZyBvbiBhbnkgcG90ZW50aWFsIG1lbW9yeSBvciBsb2NraW5nIHJpc2tzLiBJbiBgb2NmczJfbWtub2RgLCB0aGUgY29kZSBub3cgY2hlY2tzIHRoZSBgT0NGUzJfTU9VTlRfUE9TSVhfQUNMYCBtb3VudCBvcHRpb24uIElmIGVuYWJsZWQsIGl0IGZldGNoZXMgdGhlIGRlZmF1bHQgQUNMLCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgKHJldHVybmluZyBlYXJseSBpZiBgZ2V0X2lub2RlX2FjbGAgZmFpbHMpLCBhbmQgdGhlbiBwYXNzZXMgdGhlIHJlc3VsdGluZyBgc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2xgIHRvIGBvY2ZzMl9pbml0X2FjbGAuIEltcG9ydGFudGx5LCBpdCAqcmVsZWFzZXMqIHRoZSBBQ0wgd2l0aCBgcG9zaXhfYWNsX3JlbGVhc2UoZGVmYXVsdF9hY2wpYCBhZnRlcndhcmRzLiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBmb2xsb3dzIGEgc2ltaWxhciBwYXR0ZXJuOiBmZXRjaCBBQ0wgd2l0aCBgZ2V0X2lub2RlX2FjbGAsIGhhbmRsZSBlcnJvcnMsIGFuZCB0aGVuIHBhc3MgaXQgdG8gYG9jZnMyX2luaXRfYWNsYCwgd2hlcmUgaXQgc2hvdWxkIGJlIGhhbmRsZWQgdGhlcmUuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjb21tb24gc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gQnV0LCBsZXQncyBzZWUuIFRoZSBwYXRjaCBkb2Vzbid0IGFsbG9jYXRlIGFueSBuZXcgc3RydWN0dXJlcyBhbmQgc2VuZCB0aGVtIHRvIHVzZXJzcGFjZS4gSW4gYG9jZnMyX2luaXRfYWNsYCwgdGhlIGBkZWZhdWx0X2FjbGAgaXMgKmR1cGxpY2F0ZWQqIHdpdGggYHBvc2l4X2FjbF9kdXAoZGVmYXVsdF9hY2wpYCwgd2hpY2ggc2hvdWxkIGJlIHNhZmUgYXMgbG9uZyBhcyB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYGRlZmF1bHRfYWNsYCBpcyB2YWxpZC4gVGhlIGBnZXRfaW5vZGVfYWNsYCBmdW5jdGlvbiBpcyBhIHN0YW5kYXJkIFZGUyBmdW5jdGlvbi4gSWYgaXQgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciB3aGljaCBpcyBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBJbiBlaXRoZXIgYG9jZnMyX21rbm9kYCBvciBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgdGhlIGBkZWZhdWx0X2FjbGAgcG9pbnRlciBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGJlZm9yZSBiZWluZyBwb3RlbnRpYWxseSBvdmVyd3JpdHRlbiBieSB0aGUgYGdldF9pbm9kZV9hY2xgIHJlc3VsdCwgYW5kIHRoZXJlIGFyZSBhcHByb3ByaWF0ZSBlcnJvciBwYXRocy4gSWYgYGdldF9pbm9kZV9hY2xgIGZhaWxzIG9yIGlmIHRoZSBQT1NJWCBBQ0wgbW91bnQgb3B0aW9uIGlzbid0IHNldCwgYGRlZmF1bHRfYWNsYCByZW1haW5zIGBOVUxMYC4gVGhlIHN1YnNlcXVlbnQgYGlmIChkZWZhdWx0X2FjbClgIGNoZWNrcyB3aWxsIHRoZW4gZW5zdXJlIHByb3BlciBoYW5kbGluZyBpbiBgb2NmczJfaW5pdF9hY2xgLlxuXG5TbywgKmV4cGxpY2l0bHkqIGluaXRpYWxpemluZyBgZGVmYXVsdF9hY2xgIHRvIGBOVUxMYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgZ2V0X2lub2RlX2FjbGAgaW4gYm90aCBgb2NmczJfbWtub2RgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBhIGdvb2QgcHJhY3RpY2UuIEl0IGVsaW1pbmF0ZXMgdGhlIGNoYW5jZSBvZiB1c2luZyBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLlxuXG5UaGUgKnJlYWwqIG1vdGl2YXRpb24gaGVyZSwgSSBzdXNwZWN0LCBpcyBhIGxvY2tpbmcgaXNzdWUuIEl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUsIGhvbGRpbmcgYGlwX3hhdHRyX3NlbWAgd2hpbGUgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgLCB3YXMgbGVhZGluZyB0byBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBzb21lIGZvcm0gb2YgbG9jayBpbnZlcnNpb24uIE1vdmluZyB0aGUgQUNMIGZldGNoICpvdXRzaWRlKiB0aGlzIHByb3RlY3RlZCByZWdpb24gbGlrZWx5IGZpeGVzIHRoYXQuIE9yIG1heWJlIGl0J3MgYXZvaWRpbmcgYSBsb2NrZGVwIHdhcm5pbmcuIFRoaXMgc2hpZnQgdG8gdGhlIFZGUyBmdW5jdGlvbiBjb3VsZCBzaWRlc3RlcCBzb21lIG9jZnMyLXNwZWNpZmljIGxvY2tpbmcgY29tcGxpY2F0aW9ucy5cblxuVGhlcmVmb3JlLCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBwYXRjaCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVzZSB3b3VsZCBmbGFnIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2NraW5nIGlzc3Vlcy4gVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBwcmV0dHkgY2xlYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTIsIk91dHB1dFRva2VucyI6MzA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjMyOjIzLjY3ODY5NDU0N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBkZWZhdWx0IEFDTHMgYXJlIGZldGNoZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyLiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG9jZnMyX2dldF9hY2xfbm9sb2NrYCBpbnNpZGUgYG9jZnMyX2luaXRfYWNsYCwgaXQgbm93IHVzZXMgdGhlIHN0YW5kYXJkIFZGUyBgZ2V0X2lub2RlX2FjbGAgaW4gdGhlIGNhbGxlcnMgKGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKSBhbmQgcGFzc2VzIHRoZSByZXN1bHRpbmcgYHBvc2l4X2FjbGAgc3RydWN0IHRvIGBvY2ZzMl9pbml0X2FjbGAuXFxuXFxuVGhlIGBkZWZhdWx0X2FjbGAgcG9pbnRlcnMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGluIGJvdGggbW9kaWZpZWQgZnVuY3Rpb25zLiBJZiBgZ2V0X2lub2RlX2FjbGAgcmV0dXJucyBhbiBlcnJvciwgaXQgaXMgcHJvcGVybHkgY2hlY2tlZCB1c2luZyBgSVNfRVJSYC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGxlbmd0aHMuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZS5nLiwgZGVhZGxvY2tzKSwgbWVtb3J5IG1hbmFnZW1lbnQgKGUuZy4sIG1lbW9yeSBsZWFrcyBpZiBgcG9zaXhfYWNsX3JlbGVhc2VgIGlzIG1pc3NlZCwgb3IgdXNlLWFmdGVyLWZyZWUpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBjb21wcmVoZW5zaXZlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGRlZmF1bHQgQUNMcyBhcmUgZmV0Y2hlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIuIEluc3RlYWQgb2YgY2FsbGluZyBgb2NmczJfZ2V0X2FjbF9ub2xvY2tgIGluc2lkZSBgb2NmczJfaW5pdF9hY2xgLCBpdCBub3cgdXNlcyB0aGUgc3RhbmRhcmQgVkZTIGBnZXRfaW5vZGVfYWNsYCBpbiB0aGUgY2FsbGVycyAoYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGApIGFuZCBwYXNzZXMgdGhlIHJlc3VsdGluZyBgcG9zaXhfYWNsYCBzdHJ1Y3QgdG8gYG9jZnMyX2luaXRfYWNsYC5cXG5cXG5UaGUgYGRlZmF1bHRfYWNsYCBwb2ludGVycyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYm90aCBtb2RpZmllZCBmdW5jdGlvbnMuIElmIGBnZXRfaW5vZGVfYWNsYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBwcm9wZXJseSBjaGVja2VkIHVzaW5nIGBJU19FUlJgLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgbGVuZ3Rocy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChlLmcuLCBkZWFkbG9ja3MpLCBtZW1vcnkgbWFuYWdlbWVudCAoZS5nLiwgbWVtb3J5IGxlYWtzIGlmIGBwb3NpeF9hY2xfcmVsZWFzZWAgaXMgbWlzc2VkLCBvciB1c2UtYWZ0ZXItZnJlZSksIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGNvbXByZWhlbnNpdmVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[1] Phase: Succeeded StartedAt: 2026-08-19 09:32:49 +0000 UTC FinishedAt: 2026-08-19 09:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 09:32:49 +0000 UTC FinishedAt: 2026-08-19 09:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2] Phase: Succeeded StartedAt: 2026-08-19 09:32:49 +0000 UTC FinishedAt: 2026-08-19 13:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 09:32:49 +0000 UTC FinishedAt: 2026-08-19 13:13:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 09:32:49 +0000 UTC FinishedAt: 2026-08-19 09:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 09:32:49 +0000 UTC FinishedAt: 2026-08-19 09:32:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxfldk/series-workflowxfldk-convert-artifact-3911307520/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 09:33:01 +0000 UTC FinishedAt: 2026-08-19 09:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 09:33:01 +0000 UTC FinishedAt: 2026-08-19 09:49:12 +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:*5251858a-bb49-40b0-a4f7-7b312f5e2ef2,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-workflowxfldk/series-workflowxfldk-convert-artifact-3911307520/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": "c97fdb3e-a1f2-48fd-a859-42da40006ec2", "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-workflowxfldk/series-workflowxfldk-build-action-3341753286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 09:33:01 +0000 UTC FinishedAt: 2026-08-19 09:49:02 +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:*5251858a-bb49-40b0-a4f7-7b312f5e2ef2,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-workflowxfldk/series-workflowxfldk-convert-artifact-3911307520/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": "c97fdb3e-a1f2-48fd-a859-42da40006ec2", "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-workflowxfldk/series-workflowxfldk-build-action-3341753286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 09:49:12 +0000 UTC FinishedAt: 2026-08-19 09:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 09:49:12 +0000 UTC FinishedAt: 2026-08-19 09:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 09:49:12 +0000 UTC FinishedAt: 2026-08-19 09:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 09:49:12 +0000 UTC FinishedAt: 2026-08-19 09:49:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxfldk/series-workflowxfldk-convert-artifact-1915302567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 09:49:22 +0000 UTC FinishedAt: 2026-08-19 09:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 09:49:22 +0000 UTC FinishedAt: 2026-08-19 09:51:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c97fdb3e-a1f2-48fd-a859-42da40006ec2,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-workflowxfldk/series-workflowxfldk-build-action-3341753286/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-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 09:51:40 +0000 UTC FinishedAt: 2026-08-19 09:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 09:51:40 +0000 UTC FinishedAt: 2026-08-19 09:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 09:51:40 +0000 UTC FinishedAt: 2026-08-19 10:08:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 09:51:40 +0000 UTC FinishedAt: 2026-08-19 10:08:55 +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:*5251858a-bb49-40b0-a4f7-7b312f5e2ef2,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-workflowxfldk/series-workflowxfldk-convert-artifact-1915302567/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": "f3e38d40-4774-4a7f-aa97-acbf9426b440", "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-workflowxfldk/series-workflowxfldk-build-action-3262751787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 09:51:40 +0000 UTC FinishedAt: 2026-08-19 10:08:45 +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:*5251858a-bb49-40b0-a4f7-7b312f5e2ef2,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-workflowxfldk/series-workflowxfldk-convert-artifact-1915302567/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": "f3e38d40-4774-4a7f-aa97-acbf9426b440", "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-workflowxfldk/series-workflowxfldk-build-action-3262751787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 10:08:55 +0000 UTC FinishedAt: 2026-08-19 10:08:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 10:08:55 +0000 UTC FinishedAt: 2026-08-19 10:08:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 10:08:55 +0000 UTC FinishedAt: 2026-08-19 10:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 10:08:55 +0000 UTC FinishedAt: 2026-08-19 10:10:55 +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:*f3e38d40-4774-4a7f-aa97-acbf9426b440,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-workflowxfldk/series-workflowxfldk-build-action-3262751787/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-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 10:11:04 +0000 UTC FinishedAt: 2026-08-19 13:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 10:11:04 +0000 UTC FinishedAt: 2026-08-19 13:13:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"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:*c97fdb3e-a1f2-48fd-a859-42da40006ec2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3e38d40-4774-4a7f-aa97-acbf9426b440,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-workflowxfldk/series-workflowxfldk-build-action-3341753286/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-workflowxfldk/series-workflowxfldk-build-action-3262751787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 10:11:04 +0000 UTC FinishedAt: 2026-08-19 10:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 10:11:04 +0000 UTC FinishedAt: 2026-08-19 10:11:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"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-workflowxfldk/series-workflowxfldk-convert-artifact-2132162560/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 10:11:04 +0000 UTC FinishedAt: 2026-08-19 10:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 10:11:04 +0000 UTC FinishedAt: 2026-08-19 10:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 10:11:05 +0000 UTC FinishedAt: 2026-08-19 10:11:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 10:11:15 +0000 UTC FinishedAt: 2026-08-19 13:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ocfs2_init_acl","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"a2d17605-f7c2-4cae-8f6e-0acb402bdfff","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 10:11:15 +0000 UTC FinishedAt: 2026-08-19 13:12:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c97fdb3e-a1f2-48fd-a859-42da40006ec2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3e38d40-4774-4a7f-aa97-acbf9426b440,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-workflowxfldk/series-workflowxfldk-build-action-3341753286/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-workflowxfldk/series-workflowxfldk-build-action-3262751787/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-workflowxfldk/series-workflowxfldk-convert-artifact-2132162560/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,}