Name: series-workflow8grc8 Phase: Succeeded StartedAt: 2026-08-02 05:13:53 +0000 UTC FinishedAt: 2026-08-02 09:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[0] Phase: Succeeded StartedAt: 2026-08-02 05:13:53 +0000 UTC FinishedAt: 2026-08-02 05:29:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 05:13:53 +0000 UTC FinishedAt: 2026-08-02 05:29:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDMABUF", "IO_URING", "VFIO", "IOMMUFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDMABUF", "IO_URING", "VFIO", "IOMMUFD" ], "series_id": "674d050e-c580-4339-bc5e-d6aedad29bcf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memfd_pin_folios", "udmabuf_create", "udmabuf_ioctl_create", "udmabuf_ioctl_create_list", "io_pin_pages", "io_sqe_buffer_register", "io_sqe_buffers_register", "vaddr_get_pfns", "pin_user_pages_fast", "pin_user_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VETUFCVUYmIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtJT01NVUZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7LAogICAgJiMzNDt1ZG1hYnVmX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt1ZG1hYnVmX2lvY3RsX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0JiMzNDssCiAgICAmIzM0O2lvX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3ZhZGRyX2dldF9wZm5zJiMzNDssCiAgICAmIzM0O3Bpbl91c2VyX3BhZ2VzX2Zhc3QmIzM0OywKICAgICYjMzQ7cGluX3VzZXJfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgIHdoZXJlIHRoZSBleHBlY3RlZCByZWZlcmVuY2UgY291bnQgb2YgYSBmb2xpbyB3YXMgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSBmb3Igb3JkZXItMCBmb2xpb3Mgd2hlbiBjaGVja2luZyBpZiB0aGV5IGNhbiBiZSBpc29sYXRlZC4gSXQgY2hhbmdlcyB0aGUgaGFyZGNvZGVkIGAxYCB0byBgcGluX3JlZnNgLCB3aGljaCBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIGZvciBvcmRlci0wIGZvbGlvcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGBGT0xMX0xPTkdURVJNYCBnZXRfdXNlcl9wYWdlcyAoR1VQKSBvcGVyYXRpb25zIChlLmcuLCBgcGluX3VzZXJfcGFnZXNgLCBgbWVtZmRfcGluX2ZvbGlvc2ApIHRvIG1pZ3JhdGUgcGFnZXMgb3V0IG9mIG1vdmFibGUgem9uZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN1YnN5c3RlbXMgdGhhdCBwaW4gbWVtb3J5IGxvbmctdGVybSwgc3VjaCBhcyB1ZG1hYnVmLCBpb191cmluZywgYW5kIFZGSU8vSU9NTVVGRC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI1OTA5YzE1MTYxNjI1MTZlY2M4YjAyODI2ZDE2NTcyYWQzY2Y5YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjI2OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IDk5OTAyYzE1NzAzYjAuLjQxYzMzMTdlMGYwZjQgMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmNcbkBAIC0yMjczLDYgJiM0MzsyMjczLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcbiBcbiBcdGZvciAoZm9saW8gPSBwb2ZzX2dldF9mb2xpbyhwb2ZzLCBpKTsgZm9saW87XG4gXHQgICAgIGZvbGlvID0gcG9mc19uZXh0X2ZvbGlvKGZvbGlvLCBwb2ZzLCBcdTAwMjZpKSkge1xuJiM0MztcdFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XG4gXG4gXHRcdGlmIChmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMjI4NywxNSAmIzQzOzIyODgsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFdlIGRyYWluIG5vdCBvbmx5IHRvIG1ha2UgdGhlIGZvbGlvX2lzb2xhdGVfbHJ1KCkgc3VjY2VlZCxcbiYjNDM7XHRcdCAqIGJ1dCBhbHNvIHRvIHJlbW92ZSBhbnkgb3RoZXIgZm9saW8gcmVmZXJlbmNlcyBmcm9tIExSVVxuJiM0MztcdFx0ICogY2FjaGVzLlxuJiM0MztcdFx0ICovXG4gXHRcdGlmIChkcmFpbmVkID09IDAgXHUwMDI2XHUwMDI2IGZvbGlvX21heV9iZV9scnVfY2FjaGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdGZvbGlvX3JlZl9jb3VudChmb2xpbykgIT1cbi1cdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgMSkge1xuJiM0MztcdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgcGluX3JlZnMpIHtcbiBcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDE7XG4gXHRcdH1cbiBcdFx0aWYgKGRyYWluZWQgPT0gMSBcdTAwMjZcdTAwMjYgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0Zm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPVxuLVx0XHRcdFx0Zm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdFx0Zm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyBwaW5fcmVmcykge1xuIFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDI7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VURNQUJVRiYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0lPTU1VRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDssCiAgICAmIzM0O3VkbWFidWZfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3QmIzM0OywKICAgICYjMzQ7aW9fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7dmFkZHJfZ2V0X3BmbnMmIzM0OywKICAgICYjMzQ7cGluX3VzZXJfcGFnZXNfZmFzdCYjMzQ7LAogICAgJiMzNDtwaW5fdXNlcl9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjU5MDljMTUxNjE2MjUxNmVjYzhiMDI4MjZkMTY1NzJhZDNjZjlhMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDU6MjY6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jCmluZGV4IDk5OTAyYzE1NzAzYjAuLjQxYzMzMTdlMGYwZjQgMTAwNjQ0Ci0tLSBhL21tL2d1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cC5jCkBAIC0yMjczLDYgJiM0MzsyMjczLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcygKIAogCWZvciAoZm9saW8gPSBwb2ZzX2dldF9mb2xpbyhwb2ZzLCBpKTsgZm9saW87CiAJICAgICBmb2xpbyA9IHBvZnNfbmV4dF9mb2xpbyhmb2xpbywgcG9mcywgJmFtcDtpKSkgewomIzQzOwkJY29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7CiAKIAkJaWYgKGZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwpAQCAtMjI4NywxNSAmIzQzOzIyODgsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcygKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBkcmFpbiBub3Qgb25seSB0byBtYWtlIHRoZSBmb2xpb19pc29sYXRlX2xydSgpIHN1Y2NlZWQsCiYjNDM7CQkgKiBidXQgYWxzbyB0byByZW1vdmUgYW55IG90aGVyIGZvbGlvIHJlZmVyZW5jZXMgZnJvbSBMUlUKJiM0MzsJCSAqIGNhY2hlcy4KJiM0MzsJCSAqLwogCQlpZiAoZHJhaW5lZCA9PSAwICZhbXA7JmFtcDsgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQlmb2xpb19yZWZfY291bnQoZm9saW8pICE9Ci0JCQkJZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSB7CiYjNDM7CQkJCWZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgcGluX3JlZnMpIHsKIAkJCWxydV9hZGRfZHJhaW4oKTsKIAkJCWRyYWluZWQgPSAxOwogCQl9CiAJCWlmIChkcmFpbmVkID09IDEgJmFtcDsmYW1wOyBmb2xpb19tYXlfYmVfbHJ1X2NhY2hlZChmb2xpbykgJmFtcDsmYW1wOwogCQkJCWZvbGlvX3JlZl9jb3VudChmb2xpbykgIT0KLQkJCQlmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpIHsKJiM0MzsJCQkJZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyBwaW5fcmVmcykgewogCQkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKIAkJCWRyYWluZWQgPSAyOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHVVAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9ndXAuY2AuIEl0JiMzOTtzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIG9uIGxvbmctdGVybSBwaW5uaW5nIGJlaGF2aW9yLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGEgc3VidGxlIGFkanVzdG1lbnQgaW4gaG93IHdlIGRldGVybWluZSBpZiBhIGZvbGlvIGNhbiBiZSB1bnBpbm5lZC4gUHJldmlvdXNseSwgdGhlIGNoZWNrIGludm9sdmVkIGNvbXBhcmluZyB0aGUgZm9saW8mIzM5O3MgcmVmZXJlbmNlIGNvdW50IHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUgcGx1cyBvbmUuIE5vdywgaXQmIzM5O3MgYWRkaW5nIGBwaW5fcmVmc2AgdG8gdGhhdCBleHBlY3RlZCBjb3VudC4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgY2hlY2sgZnJvbSBgZm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPSBmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICYjNDM7IDFgIHRvIGBmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICYjNDM7IHBpbl9yZWZzYC4gVGhlIGBwaW5fcmVmc2AgdmFyaWFibGUgaXRzZWxmIHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsOiBpdCYjMzk7cyBlaXRoZXIgYDFgIGlmIHRoZSBmb2xpbyBoYXMgYSBwaW4gY291bnQgb3IsIG90aGVyd2lzZSwgaXQmIzM5O3MgZXF1YWwgdG8gYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgbW0vZ3VwLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgJiMzOTtHVVBfUElOX0NPVU5USU5HX0JJQVMmIzM5OyByZXByZXNlbnRzLCBhcyB3ZWxsIGFzIHRoZSBjb250ZXh0IG9mIGBmb2xpb19oYXNfcGluY291bnQoKWAuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBob3cgdGhlIEdVUCAoZ2V0X3VzZXJfcGFnZXMpIGlzIGludGVyYWN0aW5nIHdpdGggZm9saW8gcGlubmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjIzNz1zdGF0aWMgc3RydWN0IGZvbGlvICpwb2ZzX25leHRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ndXAuYy0yMjY0LSAqL1xubW0vZ3VwLmM6MjI2NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxubW0vZ3VwLmMtMjI2Ni1cdFx0c3RydWN0IGxpc3RfaGVhZCAqbW92YWJsZV9mb2xpb19saXN0LFxuLS1cbm1tL2d1cC5jPTIzOTI9Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcbi0tXG5tbS9ndXAuYy0yMzk2LVxubW0vZ3VwLmM6MjM5NzpcdGNvbGxlY3RlZCA9IGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXHUwMDI2bW92YWJsZV9mb2xpb19saXN0LFxubW0vZ3VwLmMtMjM5OC1cdFx0XHRcdFx0XHQgICAgICAgcG9mcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3NgLiBJIHNlZSB0aGF0IGl0IGNhbGxzIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYC4gVGhhdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5IHRvIHVuZGVyc3RhbmQsIGJ1dCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvICp0aGF0KiwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGF0IHRyaWdnZXJzIGl0LiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsZXJzIG9mIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgcGllY2UgdG8gdGhlIHB1enpsZSBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSB0aGF0JiMzOTtzIGF0IHBsYXkuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGludm9raW5nIHRoaXMgcm91dGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2d1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2d1cC5jPTIzOTE9c3RhdGljIGxvbmdcbm1tL2d1cC5jOjIzOTI6Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcbm1tL2d1cC5jLTIzOTMte1xuLS1cbm1tL2d1cC5jPTI0MjY9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXG4tLVxubW0vZ3VwLmMtMjQzNC1cbm1tL2d1cC5jOjI0MzU6XHRyZXR1cm4gY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3MoXHUwMDI2cG9mcyk7XG5tbS9ndXAuYy0yNDM2LX1cbi0tXG5tbS9ndXAuYz0yNDQyPXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9ndXAuYy0yNDUwLVxubW0vZ3VwLmM6MjQ1MTpcdHJldHVybiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhcdTAwMjZwb2ZzKTtcbm1tL2d1cC5jLTI0NTItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDoKCioqVW5kZXJzdGFuZGluZyB0aGUgQ2FsbGluZyBTdHJ1Y3R1cmUgb2YgRm9saW8gYW5kIFBhZ2UgTWlncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgYW5kIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYC4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhlc2UgYXJlIGNlbnRyYWwgdG8gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBwcmVzdW1hYmx5IG9mIGRhdGEgcmVsYXRlZCB0byBmb2xpb3MgYW5kIHBhZ2VzLCB3aGljaCBtYWtlcyBzZW5zZSBpbiBhIGxhcmdlLXNjYWxlIGRhdGEgc3lzdGVtLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdobyAqdHJpZ2dlcnMqIHRoZXNlIG1pZ3JhdGlvbnM/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBoaWdoZXItbGV2ZWwgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHRlbGwgbWUgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IHRoZXNlIG1pZ3JhdGlvbnMgYXJlIGluaXRpYXRlZC4gQXJlIHRoZXkgcGFydCBvZiBhIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHByb2Nlc3MsIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBvciBpbnZva2VkIGRpcmVjdGx5IGJ5IHVzZXIgYWN0aW9ucz8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0YXNrcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgdGhlIHRvb2xpbmcgdG8gdHJhY2UgdGhlIGNhbGwgaGllcmFyY2h5IGFuZCBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjM5MT1zdGF0aWMgbG9uZ1xubW0vZ3VwLmM6MjM5MjpjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhzdHJ1Y3QgcGFnZXNfb3JfZm9saW9zICpwb2ZzKVxubW0vZ3VwLmMtMjM5My17XG4tLVxubW0vZ3VwLmM9MjQyNj1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0yNDM0LVxubW0vZ3VwLmM6MjQzNTpcdHJldHVybiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhcdTAwMjZwb2ZzKTtcbm1tL2d1cC5jLTI0MzYtfVxuLS1cbm1tL2d1cC5jLTI0NDEtICovXG5tbS9ndXAuYzoyNDQyOnN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbm1tL2d1cC5jLTI0NDMtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuLS1cbm1tL2d1cC5jLTI0NTAtXG5tbS9ndXAuYzoyNDUxOlx0cmV0dXJuIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKFx1MDAyNnBvZnMpO1xubW0vZ3VwLmMtMjQ1Mi19XG5tbS9ndXAuYy0yNDUzLSNlbHNlXG5tbS9ndXAuYzoyNDU0OnN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbm1tL2d1cC5jLTI0NTUtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuLS1cbm1tL2d1cC5jPTI0NzE9c3RhdGljIGxvbmcgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2d1cC5jLTI0OTUtXHRcdC8qIEZPTExfTE9OR1RFUk0gaW1wbGllcyBGT0xMX1BJTiAqL1xubW0vZ3VwLmM6MjQ5NjpcdFx0cmMgPSBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKG5yX3Bpbm5lZF9wYWdlcywgcGFnZXMpO1xubW0vZ3VwLmMtMjQ5Ny1cdH0gd2hpbGUgKHJjID09IC1FQUdBSU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEdVUCBMb2NrIGFuZCBQYWdlIE1pZ3JhdGlvbioqCgpSaWdodCwgc28gYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAga2lja3MgdGhpbmdzIG9mZiB3aXRoIGEgY2FsbCB0byBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2YgbG9uZy10ZXJtIGxvY2tzIGFuZCBwYWdlIG9wZXJhdGlvbnMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0cnlpbmcgdG8gaGFuZGxlIHBvdGVudGlhbGx5IG1vdmFibGUgcGFnZXMsIGFuZCBlbnN1cmluZyB0aGV5JiMzOTtyZSBpbiB0aGUgcmlnaHQgcGxhY2UgYmVmb3JlIGNvbnRpbnVpbmcuJiMzNDsKCkJ1dCB3aGF0IGFib3V0IHRoZSBjb3VudGVycGFydD8gU2hvdWxkbiYjMzk7dCB0aGVyZSBiZSBhIHBhcmFsbGVsIGZ1bmN0aW9uIGRlZGljYXRlZCB0byAqZm9saW9zKj8gV2UmIzM5O3JlIHN0YXJ0aW5nIHRvIGxlYW4gbW9yZSBpbnRvIGZvbGlvcyB0aGVzZSBkYXlzLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBPciBpcyBpdCBpbnRlbnRpb25hbGx5IG9taXR0ZWQ/IElzIHRoZSBmb2xpbyBoYW5kbGluZyBiZWluZyBzb21laG93IHN1YnN1bWVkIHdpdGhpbiB0aGUgcGFnZSBtaWdyYXRpb24sIG9yIGlzIGl0IGhhbmRsZWQgaW4gYSBkaWZmZXJlbnQgY29kZXBhdGggYWx0b2dldGhlcj8gSSBuZWVkIHRvIHJldmlldyB0aGlzIG1vcmUgY2FyZWZ1bGx5IHRvIHNlZSBob3cgdGhlIGZvbGlvIG1pZ3JhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGluIGNvbnRleHQuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AgYW5kIGEgaHlwb3RoZXRpY2FsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgbmVlZHMgY2xvc2VyIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2d1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2d1cC5jPTIzOTI9Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcbi0tXG5tbS9ndXAuYy0yNDI1LSAqL1xubW0vZ3VwLmM6MjQyNjpzdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbm1tL2d1cC5jLTI0MjctXHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zKVxuLS1cbm1tL2d1cC5jLTI0MzktICogUmV0dXJuIHZhbHVlcyBhbmQgYmVoYXZpb3IgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvclxubW0vZ3VwLmM6MjQ0MDogKiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcygpLlxubW0vZ3VwLmMtMjQ0MS0gKi9cbi0tXG5tbS9ndXAuYz0yNDU0PXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9ndXAuYy0yNDU5LVxubW0vZ3VwLmM6MjQ2MDpzdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbm1tL2d1cC5jLTI0NjEtXHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zKVxuLS1cbm1tL2d1cC5jPTM0NDc9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLS1cbm1tL2d1cC5jLTM1MzItXG5tbS9ndXAuYzozNTMzOlx0XHRyZXQgPSBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyhucl9mb2xpb3MsIGZvbGlvcyk7XG5tbS9ndXAuYy0zNTM0LVx0fSB3aGlsZSAocmV0ID09IC1FQUdBSU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGaXhlcyBmb3IgRnV6emluZyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHJlY29nbml6ZSB0aGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaG93IGdldF91c2VyX3BhZ2VzIChHVVApIHdpdGggRk9MTF9MT05HVEVSTSBpbnRlcmFjdHMgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGxvbmctdGVybSBsb2NrcyBhbmQgcGlubmVkIG1lbW9yeS4gV2UmIzM5O3ZlIGdvdCBgbWVtZmRfcGluX2ZvbGlvc2AgY2FsbGluZyBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3NgIGFuZCBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCBjYWxsaW5nIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYC4gVGhlc2UgYXJlIGJvdGggY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYWN0aXZlbHkgdXNlZC4KClRoZSBoZWFydCBvZiB0aGUgZml4IGxpZXMgaW4gY29ycmVjdGluZyBhbiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50IGNoZWNrLiBUaGUgY29kZSB3YXMgdXNpbmcgYGZvbGlvX3JlZl9jb3VudChmb2xpbykgIT0gZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxYCwgYnV0IGZvciBmb2xpb3MgdGhhdCBhcmVuJiMzOTt0IHVzaW5nIGEgcGluIGNvdW50LCBHVVAgYWRkcyBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCByYXRoZXIgdGhhbiBhIHNpbXBsZSBpbmNyZW1lbnQgb2YgMS4gQ29uc2VxdWVudGx5LCB3ZSBuZWVkIHRvIHN3YXAgdGhlIGluY29ycmVjdCBgJiM0MzsgMWAgd2l0aCBhIGNoZWNrIGFnYWluc3QgYHBpbl9yZWZzYC4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYmVoYXZpb3IuCgpOb3csIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBjb3JyZWN0ZWQgY29kZSBpcyBleGVjdXRlZC4gYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYGdldF91c2VyX3BhZ2VzYCwgYW5kIHBvdGVudGlhbGx5IG90aGVycy4gVGhhdCYjMzk7cyBhIHJpY2ggbGlzdCBvZiBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCB3aGljaCBvcGVucyBpdCB1cCB0byBmdXp6aW5nIGFzIHdlbGwuIFNvIEkgbmVlZCB0byBmaW5kIHRoZSB2YXJpb3VzIGNhbGxlcnMgb2YgYG1lbWZkX3Bpbl9mb2xpb3NgLCBhbmQgY29uc2lkZXIgdGhvc2UgYXMgZnV6eiB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE1LVx0ZW5kID0gc3RhcnQgJiM0MzsgKHBnY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIDE7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMxNjpcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFx1MDAyNnBnb2ZmKTtcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE3LVx0aWYgKG5yX2ZvbGlvcyBcdTAwM2M9IDApXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXHRcdCAqIEluIGEgZ2l2ZW4gcmFuZ2UsIG9ubHkgdGhlIGZpcnN0IHN1YnBhZ2Ugb2YgdGhlIGZpcnN0IGZvbGlvXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcdFx0ICogaGFzIGFuIG9mZnNldCwgdGhhdCBpcyByZXR1cm5lZCBieSBtZW1mZF9waW5fZm9saW9zKCkuXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cdFx0ICogVGhlIGZpcnN0IHN1YnBhZ2VzIG9mIG90aGVyIGZvbGlvcyAoaW4gdGhlIHJhbmdlKSBoYXZlIGFuXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cdC8qXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MzU6XHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVx0ICogd2UgY2FuIGNvbXB1dGUgbnBhZ2VzIHBpbm5lZCwgYW5kIGF2b2lkIGxvb3Bpbmcgb3ZlciBmb2xpb3MgaGVyZVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cdCAqL1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5Olx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cdTAwM2VmaWxlLCBzdGFydCwgZW5kLCB1c2VyLVx1MDAzZXVmb2xpb3MsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXHRcdFx0XHQgICBuZm9saW9zLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0zMzE3PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzE4LVx0XHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzMxOTpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzMyMC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYz0xOTA9RVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3BhZ2UpO1xuLS1cbm1tL2d1cC5jLTE5NS0gKlxubW0vZ3VwLmM6MTk2OiAqIEZvbGlvcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBtZW1mZF9waW5fZm9saW9zKCkgb3Igb3RoZXIgc2ltaWxhciByb3V0aW5lc1xubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXG4tLVxubW0vZ3VwLmM9MzQxOT1FWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKTtcbi0tXG5tbS9ndXAuYy0zNDIxLS8qKlxubW0vZ3VwLmM6MzQyMjogKiBtZW1mZF9waW5fZm9saW9zKCkgLSBwaW4gZm9saW9zIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWZkXG5tbS9ndXAuYy0zNDIzLSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcbi0tXG5tbS9ndXAuYy0zNDQ2LSAqL1xubW0vZ3VwLmM6MzQ0Nzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5tbS9ndXAuYy0zNDQ4LVx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxuLS1cbm1tL2d1cC5jLTM1NDMtfVxubW0vZ3VwLmM6MzU0NDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcbm1tL2d1cC5jLTM1NDUtXG4tLVxubW0vZ3VwLmMtMzU1NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xubW0vZ3VwLmM6MzU1NjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xubW0vZ3VwLmMtMzU1Ny0gKiAoZS5nLiwgaW5kaXZpZHVhbCBwYWdlcykgb2YgdGhlIGZvbGlvIGxhdGVyLCBmb3IgZXhhbXBsZSwgdXNpbmdcbi0tXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxubW0vbWVtZmQuYy02Ni0gKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cbi0tXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vbWVtZmRfbHVvLmMtMTI5LVx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcbm1tL21lbWZkX2x1by5jOjEzMDpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XG5tbS9tZW1mZF9sdW8uYy0xMzEtXHQgKiBzbG90cy5cbm1tL21lbWZkX2x1by5jLTEzMi1cdCAqL1xubW0vbWVtZmRfbHVvLmM6MTMzOlx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxubW0vbWVtZmRfbHVvLmMtMTM0LVx0XHRcdFx0ICAgICBcdTAwMjZvZmZzZXQpO1xuLS1cbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtMjkxLVx0Lypcbm1tL21lbWZkX2x1by5jOjI5MjpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxubW0vbWVtZmRfbHVvLmMtMjkzLVx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqUGlubmluZyBEb3duIE1lbW9yeSBpbiB0aGUgS2VybmVsIC0gTGV0JiMzOTtzIFRyYWNlIHRoZSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgZmV3IGtleSBmdW5jdGlvbnMgY2FsbGluZyBgbWVtZmRfcGluX2ZvbGlvc2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2AgZnJvbSB0aGUgaW9tbXVmZCBzdWJzeXN0ZW0gYXJlIGRlZmluaXRlbHkgdXNpbmcgaXQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJvdGggYXJlIGRlYWxpbmcgd2l0aCBETUEgYW5kIG1lbW9yeSBtYXBwaW5nLCBzbyBwaW5uaW5nIHBhZ2VzIHdvdWxkIGJlIGNydWNpYWwgdGhlcmUuIEFuZCwgb2gsIHRoZXJlJiMzOTtzIGBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zYCBpbiBgbW0vbWVtZmRfbHVvLmNgIHRvby4gVGhhdCBvbmXigJlzIGludGVyZXN0aW5nLCBtZW1vcnkgbGltaXRzIGFyZSBvZnRlbiB0aGUgbWFpbiByZWFzb24gZm9yIHBpbm5pbmcgZG93biB0aGUgbWVtb3J5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpyZWFsbHkqIGdvaW5nIG9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoaXMgcGlubmluZyBtZWNoYW5pc20gbGlrZWx5IGxpZXMsIGluIGhvdyBpdCBzZWN1cmVzIHRoZSBwaHlzaWNhbCBwYWdlcywgd2hhdCBpdHMgY29udGV4dCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ndXBfbG9uZ3Rlcm1fbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0yNDY3LS8qXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcbm1tL2d1cC5jLTI0NjktICogYWxsb3dzIHVzIHRvIHByb2Nlc3MgdGhlIEZPTExfTE9OR1RFUk0gZmxhZy5cbm1tL2d1cC5jLTI0NzAtICovXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2d1cC5jLTI0NzItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vZ3VwLmM9MzE4Nj1zdGF0aWMgaW50IGd1cF9mYXN0X2ZhbGxiYWNrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzIxOS1cdHBhZ2VzICYjNDM7PSBucl9waW5uZWQ7XG5tbS9ndXAuYzozMjIwOlx0cmV0ID0gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcbm1tL2d1cC5jLTMyMjEtXHRcdFx0XHQgICAgcGFnZXMsIFx1MDAyNmxvY2tlZCxcbi0tXG5tbS9ndXAuYz0zMzUzPWxvbmcgcGluX3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2d1cC5jLTMzNjItXHRcdHJldHVybiAwO1xubW0vZ3VwLmM6MzM2MzpcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQobW0sIHN0YXJ0LCBucl9wYWdlcywgcGFnZXMsXG5tbS9ndXAuYy0zMzY0LVx0XHRcdFx0ICAgICBsb2NrZWQgPyBsb2NrZWQgOiBcdTAwMjZsb2NhbF9sb2NrZWQsXG4tLVxubW0vZ3VwLmM9MzM4Nz1sb25nIHBpbl91c2VyX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzM5My1cdFx0cmV0dXJuIDA7XG5tbS9ndXAuYzozMzk0Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsXG5tbS9ndXAuYy0zMzk1LVx0XHRcdFx0ICAgICBwYWdlcywgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuLS1cbm1tL2d1cC5jPTM0MDc9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL2d1cC5jLTM0MTUtXG5tbS9ndXAuYzozNDE2Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxubW0vZ3VwLmMtMzQxNy1cdFx0XHRcdCAgICAgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1VQIExvbmd0ZXJtIExvY2tpbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGZ1bmN0aW9uIOKAkyBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBsb25nLXRlcm0gR1VQIGxvY2tpbmcgbG9naWMuIEl0JiMzOTtzIGNhbGxlZCBieSBgcGluX3VzZXJfcGFnZXNgLCBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCwgYHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkYCwgYW5kIGBndXBfZmFzdF9mYWxsYmFja2AsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgR1VQIGVudHJ5IHBvaW50cy4gTm90aGluZyB1bnVzdWFsIHRoZXJlLCBzdGFuZGFyZCBHVVAgc3R1ZmYuIFRoZSBjcnVjaWFsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYC4gVGhpcyBvbmUgaXMgY2FsbGVkIGJ5IGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYCBhbmQgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zYC4KClRoZSB0cmlnZ2VyIGZvciBhbGwgb2YgdGhpcyBpcyB3aGVuIGBGT0xMX0xPTkdURVJNYCBpcyBwYXNzZWQgdG8gR1VQLCBhbmQgdGhlIHRhcmdldCBwYWdlcyBvciBmb2xpb3MgcmVzaWRlIGluIGEgbW92YWJsZSB6b25lLCBsaWtlIFpPTkVfTU9WQUJMRSBvciBDTUEuIE1ha2VzIHNlbnNlLCB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGhhbmRsZSBsb25nLXRlcm0gcGlubmluZyBpbiBhIHdheSB0aGF0JiMzOTtzIGNvbXBhdGlibGUgd2l0aCBtZW1vcnkgbWlncmF0aW9uLgoKQnV0IHdhaXQsIEkgc2VlIHRoZSBidWc6IGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgMWAgaXMgYmVpbmcgdXNlZCBpbiB0aGUgY29kZS4gSSByZWNhbGwgdGhhdCBmb3IgbG9uZy10ZXJtIHBpbnMsIHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQgYnkgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AuIFRoYXQgaXMsIGlmIHRoZSBmb2xpbyBoYXMgYSBwaW5jb3VudCwgdGhlbiB0aGUgcmVmY291bnQgaXMgYWN0dWFsbHkgaW5jcmVtZW50ZWQgYnkgKjEwMjQqIQoKSG9sZCBvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtIGNvcnJlY3RseS4gTGV0JiMzOTtzIHNlZS4uLiBgZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKWAgaXMgdHJ1ZSBmb3IgbGFyZ2VyIGZvbGlvcywgdGhvc2Ugd2l0aCBhbiBvcmRlciBncmVhdGVyIHRoYW4gMCwgd2hlcmUgdGhlIHBpbiBjb3VudCBpcyBzdG9yZWQgc2VwYXJhdGVseS4gQnV0IGZvciBvcmRlci0wIGZvbGlvcywgdGhlIHBpbiBjb3VudCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIHJlZmNvdW50IGl0c2VsZi4gU28sIGZvciB0aG9zZSwgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgaXMgYWRkZWQgZGlyZWN0bHkgdG8gdGhlIHJlZmNvdW50ISBJdCYjMzk7cyBhIGJpdCB0cmlja3k7IEkgc2hvdWxkIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgZm9saW9faGFzX3BpbmNvdW50YCBsb2dpYy4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19oYXNfcGluY291bnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTI2NjU9c3RhdGljIGlubGluZSBwdWRfdCBmb2xpb19ta19wdWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgcGdwcm90X3QgcGdwcm90KVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yNjcyLVxuaW5jbHVkZS9saW51eC9tbS5oOjI2NzM6c3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19waW5jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9tbS5oLTI2NzQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yNzA1PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXliZV9kbWFfcGlubmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21tLmgtMjcwNi17XG5pbmNsdWRlL2xpbnV4L21tLmg6MjcwNzpcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKVxuaW5jbHVkZS9saW51eC9tbS5oLTI3MDgtXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpIFx1MDAzZSAwO1xuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtODUtXG5tbS9kZWJ1Zy5jOjg2Olx0XHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcbm1tL2RlYnVnLmMtODctXHRcdFx0cGluY291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpO1xuLS1cbm1tL2d1cC5jPTEwMj1zdGF0aWMgdm9pZCBndXBfcHV0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWZzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxubW0vZ3VwLmMtMTA3LVx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GT0xMX1BJTl9SRUxFQVNFRCwgcmVmcyk7XG5tbS9ndXAuYzoxMDg6XHRcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKVxubW0vZ3VwLmMtMTA5LVx0XHRcdGF0b21pY19zdWIocmVmcywgXHUwMDI2Zm9saW8tXHUwMDNlX3BpbmNvdW50KTtcbi0tXG5tbS9ndXAuYz0xNDA9aW50IF9fbXVzdF9jaGVjayB0cnlfZ3JhYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVmcyxcbi0tXG5tbS9ndXAuYy0xNjItXHRcdCAqL1xubW0vZ3VwLmM6MTYzOlx0XHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSkge1xubW0vZ3VwLmMtMTY0LVx0XHRcdGZvbGlvX3JlZl9hZGQoZm9saW8sIHJlZnMpO1xuLS1cbm1tL2d1cC5jPTIxMj12b2lkIGZvbGlvX2FkZF9waW4oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9ndXAuYy0yMjEtXHQgKi9cbm1tL2d1cC5jOjIyMjpcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKSB7XG5tbS9ndXAuYy0yMjMtXHRcdFdBUk5fT05fT05DRShhdG9taWNfcmVhZChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpIFx1MDAzYyAxKTtcbi0tXG5tbS9ndXAuYz01MTc9c3RhdGljIHN0cnVjdCBmb2xpbyAqdHJ5X2dyYWJfZm9saW9fZmFzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJlZnMsXG4tLVxubW0vZ3VwLmMtNTY1LVx0ICovXG5tbS9ndXAuYzo1NjY6XHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcbm1tL2d1cC5jLTU2Ny1cdFx0YXRvbWljX2FkZChyZWZzLCBcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpO1xuLS1cbm1tL2d1cC5jPTIyNjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcbi0tXG5tbS9ndXAuYy0yMjc1LVx0ICAgICBmb2xpbyA9IHBvZnNfbmV4dF9mb2xpbyhmb2xpbywgcG9mcywgXHUwMDI2aSkpIHtcbm1tL2d1cC5jOjIyNzY6XHRcdGNvbnN0IGludCBwaW5fcmVmcyA9IGZvbGlvX2hhc19waW5jb3VudChmb2xpbykgPyAxIDogR1VQX1BJTl9DT1VOVElOR19CSUFTO1xubW0vZ3VwLmMtMjI3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEZvbGlvIFBpbiBDb3VudCBDaGFuZ2UqKgoKT2theSwgc28gYGZvbGlvX2hhc19waW5jb3VudGAgZGVmaW5pdGl2ZWx5IHJldHVybnMgdHJ1ZSBmb3IgdGhvc2UgbGFyZ2UgZm9saW9zIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCBrZXkgcG9pbnQuIEFuZCBmb3Igb3JkZXItMCBmb2xpb3MsIHRoZSBzeXN0ZW0gaXMgbm93IGFkZGluZyBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCB0byB0aGUgcmVmY291bnQuIFRoaXMgdHJhbnNsYXRlcyBkaXJlY3RseSB0byB0aGUgYHBpbl9yZWZzYCB2YWx1ZSwgd2hpY2ggd2lsbCBiZSBlaXRoZXIgMSAoZm9yIGxhcmdlIGZvbGlvcykgb3IgdGhhdCBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCAoZm9yIG9yZGVyLTAgZm9saW9zKS4gU28sIGZyb20gYSBmdW5kYW1lbnRhbCBwZXJzcGVjdGl2ZSwgdGhpcyBjb25zdGl0dXRlcyBhICpmdW5jdGlvbmFsKiBzaGlmdCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSXQmIzM5O3Mgbm90IGp1c3QgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsOyBpdCYjMzk7cyBob3cgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3cgYmVpbmcgaGFuZGxlZC4KClRoZSBuZXh0IHF1ZXN0aW9uIOKAkyBpcyB0aGlzIGNoYW5nZSBicm9hZGx5IGltcGFjdGluZyB0aGUga2VybmVsPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgc2VlbXMgbGlrZWx5LCBhbmQgeWVzLCBJIHJlbWVtYmVyIGBwaW5fdXNlcl9wYWdlc2Agd2l0aCBgRk9MTF9MT05HVEVSTWAgYmVpbmcgdXNlZCB3aWRlbHkgdGhyb3VnaG91dCB0aGUga2VybmVsIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIGRyaXZlcnMuIGBpb191cmluZ2AgdXNlcyBgcGluX3VzZXJfcGFnZXNgIGZvciByZWdpc3RlcmVkIGJ1ZmZlcnMsIGFuZCB0aGF04oCZcyBhIGNyaXRpY2FsIGNhc2UgdG8gY29uc2lkZXIuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIGlmIGBpb191cmluZ2AgdXRpbGl6ZXMgYEZPTExfTE9OR1RFUk1gIGluIGl0cyBgcGluX3VzZXJfcGFnZXNgIGNhbGxzLiBJIG5lZWQgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Rk9MTF9MT05HVEVSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL21lbW1hcC5jPTQwPXN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbi0tXG5pb191cmluZy9tZW1tYXAuYy02Mi1cbmlvX3VyaW5nL21lbW1hcC5jOjYzOlx0cmV0ID0gcGluX3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgbnJfcGFnZXMsIEZPTExfV1JJVEUgfCBGT0xMX0xPTkdURVJNLFxuaW9fdXJpbmcvbWVtbWFwLmMtNjQtXHRcdFx0XHRcdHBhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBpb191cmluZyB3aXRoIEZPTExfTE9OR1RFUk06IFBvdGVudGlhbCBUYXJnZXRzKioKCk9rYXksIHNvIGBpb191cmluZ2AgKmRvZXMqIGxldmVyYWdlIGBGT0xMX0xPTkdURVJNYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldCBmb3IgZnV6emluZy4gVGltZSB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG91ciBlZmZvcnRzLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYCwgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zYCwgYW5kIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGFyZSBhbGwgaW50ZXJuYWwsIHNvIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBidXQgbGlrZWx5IGxlc3MgZXhwb3NlZCB0byBleHRlcm5hbCBpbnB1dCwgd2hpY2ggbWFrZXMgdGhlbSB0cmlja2llciB0byB0YXJnZXQgZGlyZWN0bHkuIFByb2JhYmx5IGJlc3QgdG8gdHJlYXQgdGhlbSBhcyBwb3RlbnRpYWwgc2Vjb25kYXJ5IHRhcmdldHMgb3IgY29uc2lkZXIgaG93IG91ciBjaG9zZW4gaW5wdXRzIGluZmx1ZW5jZSB0aGVtIGluZGlyZWN0bHkuCgpUaGUgZXhwb3J0ZWQgc3ltYm9scyBhcmUgdGhlIHJlYWwga2V5IGhlcmUuIFdlIGhhdmUgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCwgYHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkYCwgYW5kIGBtZW1mZF9waW5fZm9saW9zYC4gSG1tLCBgcGluX3VzZXJfcGFnZXNgLi4uIGl0JiMzOTtzIGEgaG90IHBhdGgsIGJ1dCBwZXJoYXBzIG5vdCB0aGUgKmhvdHRlc3QqPyBJdCYjMzk7cyB1c2VkIGZvciBwaW5uaW5nLCB3aGVyZWFzIGBnZXRfdXNlcl9wYWdlc2AgbWlnaHQgYmUgYSBtb3JlIGxpa2VseSBhcmVhIHRvIGZpbmQgYnVncy4gV2FpdCwgYG1lbWZkX3Bpbl9mb2xpb3NgIGxvb2tzIHByb21pc2luZyEgSXQmIzM5O3Mgc3VwZXIgc3BlY2lmaWMgYW5kIGRpcmVjdGx5IGhpdHMgdGhlIGNvZGUgcGF0aCB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gWWVzLCBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBnb2luZyBvbiB0aGUgbGlzdCwgYWxvbmdzaWRlIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGFuZCBgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWRgLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGdvb2QgZW50cnkgcG9pbnRzLiBJIHdvbmRlciBhYm91dCBgaW9fcGluX3BhZ2VzYCBpbiBpb191cmluZy4uLiBpdCYjMzk7cyB3b3J0aCBhIGxvb2suIExldCYjMzk7cyBkaWcgaW50byB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9tZW1tYXAuYz0xOD1zdGF0aWMgYm9vbCBpb19tZW1fYWxsb2NfY29tcG91bmQoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM5LVxuaW9fdXJpbmcvbWVtbWFwLmM6NDA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxuaW9fdXJpbmcvbWVtbWFwLmMtNDEte1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTEzND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9waW5fcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTE0MC1cbmlvX3VyaW5nL21lbW1hcC5jOjE0MTpcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHJlZy1cdTAwM2V1c2VyX2FkZHIsIHNpemUsIFx1MDAyNm5yX3BhZ2VzKTtcbmlvX3VyaW5nL21lbW1hcC5jLTE0Mi1cdGlmIChJU19FUlIocGFnZXMpKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5oLTktXG5pb191cmluZy9tZW1tYXAuaDoxMDpzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpO1xuaW9fdXJpbmcvbWVtbWFwLmgtMTEtXG4tLVxuaW9fdXJpbmcvcnNyYy5jPTg1NT1zdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9yc3JjLmMtODgzLVx0cmV0ID0gLUVOT01FTTtcbmlvX3VyaW5nL3JzcmMuYzo4ODQ6XHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVx1MDAzZWlvdl9iYXNlLCBpb3YtXHUwMDNlaW92X2xlbixcbmlvX3VyaW5nL3JzcmMuYy04ODUtXHRcdFx0XHRcdTAwMjZucl9wYWdlcyk7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTIwMj1zdGF0aWMgaW50IGlvX2ltcG9ydF91bWVtKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy0yMTMtXHRcdHJldHVybiAtRUZBVUxUO1xuaW9fdXJpbmcvemNyeC5jOjIxNDpcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFyZWFfcmVnLVx1MDAzZWFkZHIsIGFyZWFfcmVnLVx1MDAzZWxlbixcbmlvX3VyaW5nL3pjcnguYy0yMTUtXHRcdFx0XHQgICBcdTAwMjZucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgTWVtb3J5IE1hbmFnZW1lbnQgU3RyYXRlZ2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWdpZXMgZm9yIGVmZmljaWVudCBJL08uIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kOyB0aGF0JiMzOTtzIGEgc29saWQgY29udGVuZGVyLiBCdXQgSSBuZWVkIHRvIGV4cGxvcmUgYWx0ZXJuYXRpdmVzIGFuZCByZWxhdGVkIG1ldGhvZHMuIEkgd29uZGVyIGFib3V0IGBtZW1mZF9waW5fZm9saW9zYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBpbnRyaWd1aW5nLCBlc3BlY2lhbGx5IGdpdmVuIGl0cyByb2xlIGluIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgIGFuZCBgcGluX21lbWZkX3BhZ2VzYCwgdGhlIGlvbW11ZmQgY29tcG9uZW50LiBMZXQgbWUgZGlnIGludG8gdGhhdCBgdWRtYWJ1Zl9waW5fZm9saW9zYCBmdW5jdGlvbiwgYXMgaXQgc2VlbXMgY2VudHJhbCB0byB0aGlzIGxpbmUgb2YgaW5xdWlyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRtYWJ1Zl9waW5fZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTI5MD1zdGF0aWMgc3RydWN0IGRtYV9idWYgKmV4cG9ydF91ZG1hYnVmKHN0cnVjdCB1ZG1hYnVmICp1YnVmLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzAzLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMDQ6c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMwNS1cdFx0XHQgICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3Qgc2l6ZSwgc3RydWN0IGZvbGlvICoqZm9saW9zKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzUwPXN0YXRpYyBsb25nIHVkbWFidWZfY3JlYXRlKHN0cnVjdCBtaXNjZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00MTItXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQxMzpcdFx0cmV0ID0gdWRtYWJ1Zl9waW5fZm9saW9zKHVidWYsIG1lbWZkLCBsaXN0W2ldLm9mZnNldCxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDE0LVx0XHRcdFx0XHQgbGlzdFtpXS5zaXplLCBmb2xpb3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gRnV6emluZyB1ZG1hYnVmKioKCk9rYXksIHNvIGB1ZG1hYnVmX2NyZWF0ZWAgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgYW55IHVkbWFidWYgZnV6emluZyBlZmZvcnRzLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgYW5kIGl0IGNhbGxzIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgYSBsb3Qgb2YgdGhlIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJT01NVSBhY3R1YWxseSBoYXBwZW5zLiBUaGF0IG1ha2VzIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbGlrZSB0aGF0IGFzIGEgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBwaW5fbWVtZmRfcGFnZXNgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuY2AgbmV4dC4gSXQgc291bmRzIGxpa2UgdGhlIGtpbmQgb2YgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgb2Z0ZW4gY29udGFpbnMgaW50ZXJlc3RpbmcgYW5kIGV4cGxvaXRhYmxlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaW5fbWVtZmRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2lvbW11ZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgwNz1zdGF0aWMgdm9pZCBwZm5fcmVhZGVyX3VzZXJfZGVzdHJveShzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgyMy1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgyNDpzdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgyNS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODc2PXN0YXRpYyBpbnQgcGZuX3JlYWRlcl91c2VyX3BpbihzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkyOC1cdFx0c3RhcnQgPSBwYWdlcy1cdTAwM2VzdGFydCAmIzQzOyAoc3RhcnRfaW5kZXggKiBQQUdFX1NJWkUpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6OTI5Olx0XHRyYyA9IHBpbl9tZW1mZF9wYWdlcyh1c2VyLCBzdGFydCwgbnBhZ2VzKTtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkzMC1cdH0gZWxzZSBpZiAoIXJlbW90ZV9tbSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OgoKKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgUGlubmluZyBNZWNoYW5pc20qKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBgcGZuX3JlYWRlcl91c2VyX3BpbmAuIFRoaXMgZnVuY3Rpb24mIzM5O3MgY2FsbGluZyBgcGluX21lbWZkX3BhZ2VzYCwgcmlnaHQ/IEludGVyZXN0aW5nLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoaXMgYHBmbl9yZWFkZXJfdXNlcl9waW5gIGFuZCB0aGUgbWVtZmQgbWVjaGFuaXNtLCBhbmQgdGhhdCBgcGZuX3JlYWRlcl91c2VyX3BpbmAgbXVzdCBiZSB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9uLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIHRoaXMgYHBmbl9yZWFkZXJfdXNlcl9waW5gIGZ1bmN0aW9uLiBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB3aGVyZSB1c2VybGFuZCBtZW1vcnkgaXMgYmVpbmcgcGlubmVkIGJhc2VkIG9uIHBmbnMgLSBJIG5lZWQgdG8gc2VlIHdobyYjMzk7cyBhY3R1YWxseSAqdXNpbmcqIGl0LCB3aG8gbmVlZHMgdGhvc2UgcGFnZXMgcGlubmVkIGluIG1lbW9yeSBhbmQgd2h5IHRoZXkmIzM5O3JlIGFza2luZyBgcGluX21lbWZkX3BhZ2VzYCB0byBiZSBjYWxsZWQgdGhyb3VnaCB0aGlzIHBhdGguIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBUaGlzIGNhbGwgY2hhaW4gaXMga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bmbl9yZWFkZXJfdXNlcl9waW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2lvbW11ZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NzUtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4NzY6c3RhdGljIGludCBwZm5fcmVhZGVyX3VzZXJfcGluKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NzctXHRcdFx0ICAgICAgIHN0cnVjdCBpb3B0X3BhZ2VzICpwYWdlcyxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0xMTY4PXN0YXRpYyBpbnQgcGZuX3JlYWRlcl9maWxsX3NwYW4oc3RydWN0IHBmbl9yZWFkZXIgKnBmbnMpXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMTIwOS1cdGlmIChzdGFydF9pbmRleCBcdTAwM2U9IHVzZXItXHUwMDNldXBhZ2VzX2VuZCkge1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MTIxMDpcdFx0cmMgPSBwZm5fcmVhZGVyX3VzZXJfcGluKHVzZXIsIHBmbnMtXHUwMDNlcGFnZXMsIHN0YXJ0X2luZGV4LFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMTIxMS1cdFx0XHRcdFx0IHNwYW4tXHUwMDNlbGFzdF9ob2xlKTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0yMTQ3PXN0YXRpYyBpbnQgaW9wdF9wYWdlc19maWxsKHN0cnVjdCBpb3B0X3BhZ2VzICpwYWdlcyxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0yMTU3LVx0XHR1c2VyLVx1MDAzZXVwYWdlcyA9IG91dF9wYWdlcyAmIzQzOyAoY3VyX2luZGV4IC0gc3RhcnRfaW5kZXgpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MjE1ODpcdFx0cmMgPSBwZm5fcmVhZGVyX3VzZXJfcGluKHVzZXIsIHBhZ2VzLCBjdXJfaW5kZXgsIGxhc3RfaW5kZXgpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMjE1OS1cdFx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIERhdGEgRmlsbGluZyBXb3JrZmxvdyoqCgpBbHJpZ2h0LCBzbyBgaW9wdF9wYWdlc19maWxsYCBpcyB0cmlnZ2VyZWQgYnkgYGlvcHRfcGFnZXNfZmlsbF94YXJyYXlgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuIE5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvICpob3cqIGl0JiMzOTtzIGZpbGxpbmcgdGhlIHBhZ2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHVkbWFidWZfY3JlYXRlYCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGF0IHRoZSB1bmRlcmx5aW5nIFVETUFidWYgY3JlYXRpb24gYW5kIHNldHVwIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93IHRob3NlIHBhZ2VzIGFyZSBmaWxsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGJ1ZmZlciBpcyBpbnN0YW50aWF0ZWQsIHdoYXQgcHJvcGVydGllcyBhcmUgc2V0LCBhbmQgYW55IHNwZWNpZmljIGNvbnN0cmFpbnRzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UsIGJlY2F1c2UgdGhvc2UgY29uc3RyYWludHMgd2lsbCBkaWN0YXRlIG9yIGNvbnN0cmFpbiBgaW9wdF9wYWdlc19maWxsYCYjMzk7cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkbWFidWZfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTIwPW1vZHVsZV9wYXJhbShsaXN0X2xpbWl0LCBpbnQsIDA2NDQpO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoyMTpNT0RVTEVfUEFSTV9ERVNDKGxpc3RfbGltaXQsIFwmIzM0O3VkbWFidWZfY3JlYXRlX2xpc3QtXHUwMDNlY291bnQgbGltaXQuIERlZmF1bHQgaXMgMTAyNC5cJiMzNDspO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0yMi1cbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTI3PXN0cnVjdCB1ZG1hYnVmIHtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzLVx0ICogU28sIG5yX3Bpbm5lZCBpcyBub3QgdGhlIHNhbWUgdG8gcGFnZWNvdW50LCB0aGUgcGlubmVkX2ZvbGlvc1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNDpcdCAqIG9ubHkgc2V0IGVhY2ggZm9saW8gd2hpY2ggYWxyZWFkeSBwaW5uZWQgd2hlbiB1ZG1hYnVmX2NyZWF0ZS5cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzUtXHQgKiBOb3RlIHRoYXQsIHNpbmNlIGEgZm9saW8gbWF5IGJlIHBpbm5lZCBtdWx0aXBsZSB0aW1lcywgZWFjaCBmb2xpb1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzQ5LVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTA6c3RhdGljIGxvbmcgdWRtYWJ1Zl9jcmVhdGUoc3RydWN0IG1pc2NkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzUxOlx0XHRcdCAgIHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0ICpoZWFkLFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTI6XHRcdFx0ICAgc3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gKmxpc3QpXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTM1My17XG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00NDk9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NTAte1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTE6XHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUgY3JlYXRlO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTI6XHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfbGlzdCBoZWFkO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTM6XHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfaXRlbSBsaXN0O1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NTQtXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NjQtXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ2NTpcdHJldHVybiB1ZG1hYnVmX2NyZWF0ZShmaWxwLVx1MDAzZXByaXZhdGVfZGF0YSwgXHUwMDI2aGVhZCwgXHUwMDI2bGlzdCk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ2Ni19XG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00Njg9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ2OS17XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3MDpcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IGhlYWQ7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3MTpcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9pdGVtICpsaXN0O1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NzItXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ3OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3OTpcdGxzaXplID0gc2l6ZW9mKHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9pdGVtKSAqIGhlYWQuY291bnQ7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ4MC1cdGxpc3QgPSBtZW1kdXBfdXNlcigodm9pZCBfX3VzZXIgKikoYXJnICYjNDM7IHNpemVvZihoZWFkKSksIGxzaXplKTtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ4My1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDg0Olx0cmV0ID0gdWRtYWJ1Zl9jcmVhdGUoZmlscC1cdTAwM2Vwcml2YXRlX2RhdGEsIFx1MDAyNmhlYWQsIGxpc3QpO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00ODUtXHRrZnJlZShsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGAvZGV2L3VkbWFidWZgIElvY3RsIEludGVyZmFjZSBmb3IgRnV6emluZyoqCgpSaWdodCwgc28gYHVkbWFidWZfaW9jdGxfY3JlYXRlYCBhbmQgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3Rg4oCUdGhvc2UgYXJlIHRoZSBrZXkgaW9jdGxzIGZvciBpbnRlcmFjdGluZyB3aXRoIGAvZGV2L3VkbWFidWZgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSB3aG9sZSBpbnRlcmZhY2UgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciwgZnJhbmtseSwgYW55IGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaW5oZXJlbnQgaW4gRE1BIGFuZCBidWZmZXIgbWFuYWdlbWVudCwgaXQmIzM5O3Mgc2NyZWFtaW5nICYjMzQ7dnVsbmVyYWJpbGl0eSBvcHBvcnR1bml0eS4mIzM0OwoKQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGB1ZG1hYnVmYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGF2YWlsYWJsZSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFRoaXMgaW5jbHVkZXMga2VybmVsIGNvbXBpbGUgb3B0aW9ucywgbW9kdWxlIHBhcmFtZXRlcnMsIGFuZCBhbnkgcnVudGltZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBrbm93IHRoZSBib3VuZHMsIGxpbWl0YXRpb25zLCBhbmQgYXNzdW1wdGlvbnMgYmFrZWQgaW50byBpdHMgZGVzaWduIGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIG1hbGZvcm1lZCBkYXRhIGF0IGl0LiBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzLCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBvciBhY2Nlc3MgY29udHJvbCBsaXN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYnlwYXNzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gcGxhY2UsIGlmIGFueXRoaW5nLCB0byBwcmV2ZW50IG1lIGZyb20gZG9pbmcgc29tZXRoaW5nIHJlYWxseSBuYXN0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZG1hYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGg6IFRoZSBFbHVzaXZlIHVkbWFidWYqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgZGVlcCBpbiB0aGUgd2VlZHMgd2l0aCB0aGlzLCB3b3JraW5nIG9uIHRoYXQgbmV3IGltcGxlbWVudGF0aW9uLCBhbmQgbm93IEkmIzM5O3ZlIGhpdCBhIHNuYWcuIFRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgaW4gYW4gdW5leHBlY3RlZCB3YXksIGFuZCBteSBtZW50YWwgY2hlY2tsaXN0IGlzIHNjcmVhbWluZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlbiwgdGhlIHF1ZXN0aW9uIGhpdHMgbWU6IHdoZXJlIGV4YWN0bHkgKmlzKiB0aGUgYHVkbWFidWZgIGNvbmZpZ3VyZWQ/IEkga25vdyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byB0aGlzIGFyY2hpdGVjdHVyZSwgY3J1Y2lhbCBmb3IgdGhhdCBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSYjMzk7dmUgd29ya2VkIHdpdGggdGhpcyBiZWZvcmUsIEkgKnNob3VsZCoga25vdyB0aGlzIGNvbGQsIGJ1dCByaWdodCBub3csIG15IG1lbnRhbCBtYXAgaXMgYSBiaXQgZnV6enkuIEl0JiMzOTtzIHRpbWUgdG8gcGF1c2UgYW5kIGdvIGJhY2sgdG8gYmFzaWNzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBJcyBpdCBpbiB0aGUgZGV2aWNlIHRyZWU/IFRoZSBrZXJuZWwgY29uZmlnPyBNYXliZSBhIGRlZGljYXRlZCBkcml2ZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gZmlsZSBJJiMzOTt2ZSBvdmVybG9va2VkPyBJJiMzOTt2ZSBnb3QgYSBtZW50YWwgaXRjaCBub3c7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIHVudGlsIEkgZmluZCB0aGUgc291cmNlLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBJIG5lZWQgdG8gZ2V0IG1vdmluZyBhZ2Fpbi4gR290dGEgZGlnIGRlZXBlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZG1hYnVmLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1NXX1NZTkMpXHRcdCYjNDM7PSBzd19zeW5jLm8gc3luY19kZWJ1Zy5vXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfVURNQUJVRilcdFx0JiM0Mzs9IHVkbWFidWYub1xuZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVRE1BQlVGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfVURNQUJVRmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBvciByZWxldmFudCB3aXRoaW4gdGhpcyBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBETUEtQlVGIChEaXJlY3QgTWVtb3J5IEFjY2VzcyBCdWZmZXIpIGxpa2VseSByZXNpZGUuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byBzZWUgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VURNQUJVRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBVRE1BQlVGIGFuZCBpb191cmluZyBCdWZmZXIgUmVnaXN0cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBtZW1vcnkgYnVmZmVycyBhcmUgYmVpbmcgbWFuYWdlZCwgYW5kIGBVRE1BQlVGYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgYmVpbmcgZXhwb3J0ZWQg4oCTIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIEkgc2hvdWxkIGxvb2sgaW50byB0aGF0IGZ1cnRoZXIuIE15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAgd2l0aGluIGBpb191cmluZy9yc3JjLmNgLiBMb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxlZCBieSBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRoYXQgb3V0IGFzIHdlbGwsIGFzIEkmIzM5O20gc3VyZSB0aGVyZSYjMzk7cyBtb3JlIGNvbnRleHQgaW4gaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgIGlzIGFsbCBhYm91dC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwYXRoIGZvciBidWZmZXIgcmVnaXN0cmF0aW9uIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBmcmFtZXdvcmssIGFuZCBsaWtlbHkgd2hlcmUgdGhlIGBVRE1BQlVGYCBpbnRlZ3JhdGlvbiBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zcWVfYnVmZmVyc19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9NDY5PV9fY29sZCBpbnQgaW9fcmVnaXN0ZXJfcnNyYyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbi0tXG5pb191cmluZy9yc3JjLmMtNDk0LVx0XHRcdGJyZWFrO1xuaW9fdXJpbmcvcnNyYy5jOjQ5NTpcdFx0cmV0dXJuIGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKGN0eCwgdTY0X3RvX3VzZXJfcHRyKHJyLmRhdGEpLFxuaW9fdXJpbmcvcnNyYy5jLTQ5Ni1cdFx0XHRcdFx0ICAgICAgIHJyLm5yLCB1NjRfdG9fdXNlcl9wdHIocnIudGFncykpO1xuLS1cbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcnNyYy5jLTk0OS1cbmlvX3VyaW5nL3JzcmMuYzo5NTA6aW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuaW9fdXJpbmcvcnNyYy5jLTk1MS1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2FyZ3MsIHU2NCBfX3VzZXIgKnRhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njc1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEkvTyBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBJL08gcmVnaXN0cmF0aW9uIHByb2Nlc3MgYW5kIEkmIzM5O20gc2VlaW5nIGEgY2xlYXIgcHJvZ3Jlc3Npb246IGBpb19yZWdpc3Rlcl9yc3JjYCBsZWFkcyBkaXJlY3RseSBpbnRvIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAuIEZyb20gdGhlcmUsIGl0IGRyaWxscyBkb3duIHRvIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCB3aGljaCB1bHRpbWF0ZWx5IGdldHMgdXMgdG8gYGlvX3Bpbl9wYWdlc2AgYW5kIGZpbmFsbHksIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhpcyBzZXF1ZW5jZSBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgYXJlYSB0byBmb2N1cyBvbi4KCk15IGF0dGVudGlvbiBpcyBhbHNvIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gSSYjMzk7bSBub3RpbmcgdGhhdCBgSU9fVVJJTkdgIGlzIHRoZSBtYWluIGNvbmZpZyBmb3IgaW9fdXJpbmcsIGFuZCBmb3IgaW9tbXVmZCwgd2UgaGF2ZSBgSU9NTVVGRGAuIFdpdGggdGhlIGZvY3VzIG9uIGlvbW11ZmQsIEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9NTVVGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWc9Nz1jb25maWcgSU9NTVVfQVBJXG4tLVxuZHJpdmVycy9pb21tdS9LY29uZmlnLTktXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MTA6Y29uZmlnIElPTU1VRkRfRFJJVkVSXG5kcml2ZXJzL2lvbW11L0tjb25maWctMTEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBIEtlcm5lbCBDb25maWd1cmF0aW9uIFB1enpsZXIqKgoKV2FpdCBhIHNlY29uZC4uLiAqYElPTU1VRkRgKj8gVGhhdCByaW5nIGEgYmVsbC4gTGV0IG1lIHRoaW5rLi4uIGlzbiYjMzk7dCB0aGF0IHRoZSB1c2Vyc3BhY2UgSU9NTVUgZnJhbWV3b3JrPyBZZXMsIHRoYXQmIzM5O3MgaXQuIFNvLCB3aGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQ/IFdlbGwsIGxvZ2ljYWxseSwgaXQgc2hvdWxkIGJlIHNvbWV3aGVyZSByZWxhdGVkIHRvIElPTU1VLiBBbmQuLi4gaG9sZCBvbi4uLiBpcyBpdCByZWFsbHkgbGlzdGVkIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gYGRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnYD8gU2VyaW91c2x5PyBJIGhhdmUgdG8gYWRtaXQsIHRoYXQmIzM5O3Mgbm90IHdoZXJlIEkgd291bGQgaGF2ZSBpbml0aWFsbHkgZ3Vlc3NlZC4gSSYjMzk7ZCBoYXZlIHByb2JhYmx5IGFzc3VtZWQgaXQgd2FzIHVuZGVyIGEgYnJvYWRlciBJT01NVSB1bWJyZWxsYSwgcGVyaGFwcyBpbiBgZHJpdmVycy9pb21tdS9LY29uZmlnYCwgb3IgbWF5YmUgZXZlbiB1bmRlciBhIG1vcmUgZ2VuZXJhbCAmIzM0O3BsYXRmb3JtJiMzNDsgb3IgJiMzNDtkZXZpY2UmIzM0OyBzZWN0aW9uLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGFyY2hpdGVjdGVkLiBIbW0sIHRoYXQmIzM5O3MgdW5leHBlY3RlZCBidXQgbG9naWNhbCwgYW5kIGtub3dpbmcgaXQgaXMgZm91bmQgdGhlcmUgd2lsbCBzdHJlYW1saW5lIGhvdyBJIGNvbmZpZ3VyZSBpdCBuZXh0IHRpbWUgSSBhbSB3b3JraW5nIHdpdGggdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9NTVVGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyOmNvbmZpZyBJT01NVUZEX0RSSVZFUl9DT1JFXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zLVx0Ym9vbFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDpcdGRlZmF1bHQgKElPTU1VRkRfRFJJVkVSIHx8IElPTU1VRkQpIGlmIElPTU1VRkQhPW5cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTUtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzo2OmNvbmZpZyBJT01NVUZEXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SU9NTVUgVXNlcnNwYWNlIEFQSVwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MTg6aWYgSU9NTVVGRFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MTk6Y29uZmlnIElPTU1VRkRfVkZJT19DT05UQUlORVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjIwOlx0Ym9vbCBcJiMzNDtJT01NVUZEIHByb3ZpZGVzIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1wmIzM0O1xuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIFZGSU9fR1JPVVAgXHUwMDI2XHUwMDI2ICFWRklPX0NPTlRBSU5FUlxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTIzLVx0aGVscFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MjQ6XHQgIElPTU1VRkQgd2lsbCBwcm92aWRlIC9kZXYvdmZpby92ZmlvIGluc3RlYWQgb2YgVkZJTy4gVGhpcyByZWxpZXMgb25cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjI1Olx0ICBJT01NVUZEIHByb3ZpZGluZyBjb21wYXRpYmlsaXR5IGVtdWxhdGlvbiB0byBnaXZlIHRoZSBzYW1lIGlvY3Rscy5cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTI2LVx0ICBJdCBwcm92aWRlcyBhbiBvcHRpb24gdG8gYnVpbGQgYSBrZXJuZWwgd2l0aCBsZWdhY3kgVkZJTyBjb21wb25lbnRzXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjgtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyOTpcdCAgSU9NTVVGRCBWRklPIGNvbnRhaW5lciBlbXVsYXRpb24gaXMga25vd24gdG8gbGFjayBjZXJ0YWluIGZlYXR1cmVzXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMC1cdCAgb2YgdGhlIG5hdGl2ZSBWRklPIGNvbnRhaW5lciwgc3VjaCBhcyBwZWVyLXRvLXBlZXJcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMi1cdCAgdW5kaXNjb3ZlcmVkIGdhcHMuICBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgaW50ZW5kZWQgZm9yIHRoZVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MzM6XHQgIHB1cnBvc2Ugb2YgdGVzdGluZyBJT01NVUZEIHdpdGggdW5tb2RpZmllZCB1c2Vyc3BhY2Ugc3VwcG9ydGluZyBWRklPXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zNC1cdCAgYW5kIG1ha2luZyB1c2Ugb2YgdGhlIFR5cGUxIFZGSU8gSU9NTVUgYmFja2VuZC4gIEdlbmVyYWwgcHVycG9zZVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTM2LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mzc6XHQgIFVubGVzcyB0ZXN0aW5nIElPTU1VRkQsIHNheSBOIGhlcmUuXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zOC1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjM5OmNvbmZpZyBJT01NVUZEX1RFU1RcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJT01NVSBVc2Vyc3BhY2UgQVBJIFRlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQzLVx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDUtXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjQ2Olx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00Ny1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMxMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQXNzZXNzbWVudCBvZiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKClJpZ2h0LCBzbyBgSU9NTVVGRGAgc2VlbXMgbGlrZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gY2hvaWNlLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQgbGlrZWx5IHByb3ZpZGVzIHNwZWNpZmljIGJlbmVmaXRzIHJlbGF0ZWQgdG8gRE1BIGFuZCBkZXZpY2UgaXNvbGF0aW9uLCBidXQgSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIG15IGFwcGxpY2F0aW9uJiMzOTtzIHJlcXVpcmVtZW50cy4gTm93LCB0aGUgYG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3NgIG9wdGlvbiBoYXMgbWUgaW50cmlndWVkLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBpdCwgYnV0IGEgcXVpY2sgcmVmcmVzaGVyIGlzIGluIG9yZGVyLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgYW5kIGNvbnN1bHQgYG1tL21lbWZkX2x1by5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgdGhpcyBmbGFnIGVuYWJsZXMgYW5kIHRoZSB0cmFkZS1vZmZzIGl0IGVudGFpbHMgd2l0aCByZXNwZWN0IHRvIGZvbGlvIG1hbmFnZW1lbnQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCBtZW1vcnkgZnJhZ21lbnRhdGlvbiwgTlVNQSBiZWhhdmlvciwgb3IgcGVyaGFwcyBldmVuIGxhdGVuY3kgaW4gbXkgcGFydGljdWxhciBzY2VuYXJpby4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb21tZW50cyB3aXRoaW4gdGhlIHNvdXJjZSByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYy04Ni1cbm1tL21lbWZkX2x1by5jOjg3OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbm1tL21lbWZkX2x1by5jLTg4LVx0XHRcdFx0ICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxuLS1cbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtMzAyLVxubW0vbWVtZmRfbHVvLmM6MzAzOlx0ZXJyID0gbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhhcmdzLVx1MDAzZWZpbGUsIFx1MDAyNnNlci1cdTAwM2Vmb2xpb3MsXG5tbS9tZW1mZF9sdW8uYy0zMDQtXHRcdFx0XHRcdFx1MDAyNmZvbGlvc19zZXIsIFx1MDAyNm5yX2ZvbGlvcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Nzk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgbWVtZmRfbHVvLmNgJiMzOTtzIFJvbGUqKgoKT2theSwgZmlyc3QgdGhvdWdodDogJiMzNDttZW1mZF9sdW8uYyYjMzQ7IOKAkyB0aGF0IGZpbGVuYW1lICpmZWVscyogbGlrZSBpdCBtaWdodCBiZSBjb25uZWN0ZWQgdG8gS0hPLCB0aGUgS2V4ZWMgSGFuZE92ZXIgZnVuY3Rpb25hbGl0eS4gTXkgZ3V0IHNheXMgdGhlcmUmIzM5O3MgYSBzdHJvbmcgY29ycmVsYXRpb24gdGhlcmUsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGluIHRoaXMgc3BhY2UuIFNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSByZXZlYWxzIGFib3V0IGBtZW1mZF9sdW8uY2AgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIGhvcGVmdWxseSwgS2V4ZWMgSGFuZG92ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2x1by5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBQaW5uaW5nIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IHBpbm5pbmcgZm9yIGxpdmUgdXBkYXRlcywgYW5kIHRoZSBgQ09ORklHX0xJVkVVUERBVEVfTUVNRkRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGtlZXBzIGNvbWluZyB1cC4gV2hpbGUgdGhhdCYjMzk7cyBhbiBvcHRpb24sIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgdWRtYWJ1ZmAgbWlnaHQgYmUgYSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZ2VuZXJhbGx5IGFjY2VwdGVkIGFwcHJvYWNoLiBJIHdhbnQgdG8gcmV2aXNpdCBgbWVtZmRfcGluX2ZvbGlvc2AgYWdhaW4sIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBieSBgdWRtYWJ1Zl9waW5fZm9saW9zYC4KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgYmVzdCBwYXRoIGZvcndhcmQuIE15IGtleSBmb2N1cyByaWdodCBub3csIGJhc2VkIG9uIHRoZSBjdXJyZW50IHVuZGVyc3RhbmRpbmcsIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIG9uOiBgbWVtZmRfcGluX2ZvbGlvc2AsIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgLCBgdWRtYWJ1Zl9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBhbmQgYHBpbl91c2VyX3BhZ2VzYC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGBwaW5fdXNlcl9wYWdlc19mYXN0YCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgaW9fdXJpbmdgLiBVbmRlcnN0YW5kaW5nIHRoaXMgdXNhZ2UgcGF0dGVybiB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBmb3Igb3VyIGFwcGxpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaW5fdXNlcl9wYWdlc19mYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmM9NDA9c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTYyLVxuaW9fdXJpbmcvbWVtbWFwLmM6NjM6XHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG5pb191cmluZy9tZW1tYXAuYy02NC1cdFx0XHRcdFx0cGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gYGlvX3Bpbl9wYWdlc2AqKgoKT2theSwgc28gSSYjMzk7dmUgcmVtZW1iZXJlZCB0aGF0IGBpb19waW5fcGFnZXNgIGNhbGxzIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhhdCBtYWtlcyBgaW9fcGluX3BhZ2VzYCBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmdW5jdGlvbiB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LiBJdCYjMzk7cyBhIGtleSBwb2ludCBvZiBpbnRlcmFjdGlvbi4gR2l2ZW4gaXRzIGZ1bmN0aW9uLCBJJiMzOTtkIGxpa2UgdG8gY2hlY2sgaG93IGl0IGlzIHVzZWQuIEkmIzM5O2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gZHJpdmVycyB1c2luZyBgdmZpb2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bpbl91c2VyX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3NwYXByX3RjZS5jPTQ4ND1zdGF0aWMgaW50IHRjZV9pb21tdV91c2VfcGFnZSh1bnNpZ25lZCBsb25nIHRjZSwgdW5zaWduZWQgbG9uZyAqaHBhKVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3NwYXByX3RjZS5jLTQ4OC1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3NwYXByX3RjZS5jOjQ4OTpcdGlmIChwaW5fdXNlcl9wYWdlc19mYXN0KHRjZSBcdTAwMjYgUEFHRV9NQVNLLCAxLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfc3BhcHJfdGNlLmMtNDkwLVx0XHRcdGRpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFID8gRk9MTF9XUklURSA6IDAsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xMDQ9c3RydWN0IHZmaW9fYmF0Y2gge1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxMDU6XHRzdHJ1Y3QgcGFnZVx0XHQqKnBhZ2VzO1x0LyogZm9yIHBpbl91c2VyX3BhZ2VzX3JlbW90ZSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xMDYtXHRzdHJ1Y3QgcGFnZVx0XHQqZmFsbGJhY2tfcGFnZTsgLyogaWYgcGFnZXMgYWxsb2MgZmFpbHMgKi9cbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTQ4MD1zdGF0aWMgaW50IHB1dF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBwcm90KVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNDg0LVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo0ODU6XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCBwcm90IFx1MDAyNiBJT01NVV9XUklURSk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTQ4Ni1cdFx0cmV0dXJuIDE7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01ODQ9c3RhdGljIGxvbmcgdmFkZHJfZ2V0X3BmbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmFkZHIsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01OTYtXHRtbWFwX3JlYWRfbG9jayhtbSk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU5NzpcdHJldCA9IHBpbl91c2VyX3BhZ2VzX3JlbW90ZShtbSwgdmFkZHIsIHBpbl9wYWdlcywgZmxhZ3MgfCBGT0xMX0xPTkdURVJNLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01OTgtXHRcdFx0XHQgICAgYmF0Y2gtXHUwMDNlcGFnZXMsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uc2lkZXJpbmcgVkZJTyYjMzk7cyB1c2Ugb2YgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAgd2l0aCBgRk9MTF9MT05HVEVSTWAuIFRoYXQgbWVhbnMgYHZhZGRyX2dldF9wZm5zYCBpcyBhIGtleSBzeW1ib2wgdG8gdW5kZXJzdGFuZC4gSG93ZXZlciwgSSBzdXNwZWN0IHRoYXQgYGlvX3Bpbl9wYWdlc2AgYW5kIGB1ZG1hYnVmX2NyZWF0ZWAgbWlnaHQgYmUgbW9yZSBzdHJhaWdodGZvcndhcmQgZW50cnkgcG9pbnRzIGZvciBleHBsb2l0YXRpb24sIHNvIHRob3NlIGFyZSBhbHNvIGdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKTGV0IG1lIHRha2Ugc3RvY2sgb2YgdGhlIG1haW4gc3ltYm9scyBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgZnVydGhlcjoKCiogICBgbWVtZmRfcGluX2ZvbGlvc2AKKiAgIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgCiogICBgdWRtYWJ1Zl9jcmVhdGVgCiogICBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgCiogICBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAKKiAgIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAKKiAgIGB2YWRkcl9nZXRfcGZuc2AKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIEl0JiMzOTtzIGFuIGlvY3RsIG9uIGAvZGV2L3VkbWFidWZgLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIGF2ZW51ZS4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAgaXMgcmVhY2hhYmxlLiBJdCBpcyBjYWxsZWQgYnkgYGlvX3JlZ2lzdGVyX3JzcmNgLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIHRoYXQmIzM5O3MgYWxzbyBjbGVhcmx5IHJlYWNoYWJsZS4KCkZpbmFsbHksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYHZhZGRyX2dldF9wZm5zYC4gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgdmZpb19waW5fbWFwX2RtYWAuIFllcywgaXQmIzM5O3MgZGVmaW5pdGl2ZWx5IHJlYWNoYWJsZSBhcyB3ZWxsLgoKU28gdG8gZW5hYmxlIHRoZXNlIHRhcmdldHMsIHRoZSBrZXkga2VybmVsIGNvbmZpZ3VyYXRpb25zIEkmIzM5O2xsIG5lZWQgYXJlOgoKKiAgIGBVRE1BQlVGYAoqICAgYElPX1VSSU5HYAoqICAgYFZGSU9gCiogICBgSU9NTVVGRGAKCkkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBgVURNQUJVRmAgZGVwZW5kZW5jaWVzLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVURNQUJVRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgVURNQUJVRiBibG9jaywgYW5kIHNwZWFraW5nIHRvIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBVRE1BQlVGIEJsb2NrKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBVRE1BQlVGIGJsb2NrLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2hvbGUgaW1wbGVtZW50YXRpb24sIGFsbCB0aGUgZGV0YWlscy4gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUsIHVuZWRpdGVkIHNvdXJjZSBjb2RlIG9yIGF0IGxlYXN0IGEgZGV0YWlsZWQgZXhwbGFuYXRpb24uIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGp1c3Qgc25pcHBldHMgb3Igc3VtbWFyaWVzOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byBncmFzcCB0aGUgbnVhbmNlcy4gSSYjMzk7bSBhc3N1bWluZywgb2YgY291cnNlLCB0aGF0IHdlIGFyZSBkaXNjdXNzaW5nIFVETUFCVUYgYXMgaXQgcGVydGFpbnMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFsbG9jYXRpb24uIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyBpdOKAmXMgZGVzaWduZWQgdG8gaGFuZGxlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucyBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgRE1BIGNvbnRyb2xsZXIuIEkgd2FudCB0byBsb29rIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBidWZmZXIgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgcG90ZW50aWFsbHksIGZyYWdtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZW1vcnkgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdXNlcnNwYWNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdhdWdlIGl0cyBwb3RlbnRpYWwgc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzIGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBzeXN0ZW0uIFNvLCBzaG93IG1lIGV2ZXJ5dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVRE1BQlVGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWc9MjA9Y29uZmlnIFNXX1NZTkNcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zMi1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjMzOmNvbmZpZyBVRE1BQlVGXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cdGJvb2wgXCYjMzQ7dXNlcnNwYWNlIGRtYWJ1ZiBtaXNjIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg0NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIENvbnRleHR1YWwgRmxvdyoqCgpSaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBzZWUgKndoYXQgY29tZXMgbmV4dCouIFRoZSBzdGF0ZW1lbnQgaXRzZWxmIGlzIGxpa2VseSBpbmNvbXBsZXRlLCBvciBpdHMgZnVsbCBtZWFuaW5nIGhpbmdlcyBvbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEkga25vdyBjb250ZXh0IGlzICpldmVyeXRoaW5nKi4gSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byBmb3JtIGEgc29saWQgaW50ZXJwcmV0YXRpb24sIGxldCBhbG9uZSBhIHNvdW5kIGFyZ3VtZW50IG9yIHJlc3BvbnNlLCB1bnRpbCBJIHVuZGVyc3RhbmQgdGhlICplbnRpcmUqIHBpY3R1cmUuIElzIHRoaXMgYSBzdGF0ZW1lbnQgb24gaXRzIG93biBvciBwYXJ0IG9mIGEgYnJvYWRlciBhcmd1bWVudD8gQW0gSSBtaXNzaW5nIGtleSBpbmZvcm1hdGlvbiBiZWNhdXNlIEkmIzM5O20gb25seSBzZWVpbmcgYSBzZWdtZW50PyBJIG5lZWQgdG8gc2VlIHRoZSBzdXBwb3J0aW5nIGV2aWRlbmNlLCB0aGUgY291bnRlcnBvaW50cywgdGhlIGltcGxpY2F0aW9ucy4uLiB0aGUgY29tcGxldGUgcGljdHVyZS4gSW4gc2hvcnQsIGp1bXBpbmcgdG8gdGhlIGNvbmNsdXNpb24gbm93IHdvdWxkIGJlIG5lZ2xpZ2VudC4gSSBuZWVkIHRvIGVuc3VyZSBhbGwgcG90ZW50aWFsIGNvbm5lY3Rpb25zIGFuZCBpbnRlci1kZXBlbmRlbmNpZXMgYXJlIGV2YWx1YXRlZCAqYmVmb3JlKiByZXNwb25kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMzpcdGNvbmZpZyBVRE1BQlVGXG4gIDM0Olx0XHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiAgMzU6XHRcdGRlZmF1bHQgblxuICAzNjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICAzNzpcdFx0ZGVwZW5kcyBvbiBNRU1GRF9DUkVBVEUgfHwgQ09NUElMRV9URVNUXG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1NVVxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBBIGRyaXZlciB0byBsZXQgdXNlcnNwYWNlIHR1cm4gbWVtZmQgcmVnaW9ucyBpbnRvIGRtYS1idWZzLlxuICA0MTpcdFx0ICBRZW11IGNhbiB1c2UgdGhpcyB0byBjcmVhdGUgaG9zdCBkbWFidWZzIGZvciBndWVzdCBmcmFtZWJ1ZmZlcnMuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIERNQUJVRl9ERUJVR1xuICA0NDpcdFx0Ym9vbCBcJiMzNDtETUEtQlVGIGRlYnVnIGNoZWNrc1wmIzM0O1xuICA0NTpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA0NjpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYWRkaXRpb25hbCBjaGVja3MgZm9yIERNQS1CVUYgaW1wb3J0ZXJzIGFuZFxuICA0OTpcdFx0ICBleHBvcnRlcnMuIFNwZWNpZmljYWxseSBpdCB2YWxpZGF0ZXMgdGhhdCBpbXBvcnRlcnMgZG8gbm90IHBlZWsgYXQgdGhlXG4gIDUwOlx0XHQgIHVuZGVybHlpbmcgc3RydWN0IHBhZ2Ugd2hlbiB0aGV5IGltcG9ydCBhIGJ1ZmZlci5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgRE1BQlVGX0tVTklUX1RFU1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBVRE1BQlVGKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBVRE1BQlVGYCBhbmQgaG93IGl0IGZ1bmN0aW9ucy4gSXQmIzM5O3MgYnVpbHQgb24gYSBmZXcga2V5IGNvbXBvbmVudHMuIEkga25vdyBpdCBsZWFucyBoZWF2aWx5IG9uIGBETUFfU0hBUkVEX0JVRkZFUmAsIGBNRU1GRF9DUkVBVEVgLCBhbmQgdGhlIE1NVS4gVGhvc2UgYXJlIHRoZSBiaWcgYnVpbGRpbmcgYmxvY2tzIGluIHRoaXMgY2FzZS4KCkkmIzM5O2QgZXhwZWN0IGBETUFfU0hBUkVEX0JVRkZFUmAgdG8gYmUgZW5hYmxlZCBpbiBtb3N0IHNpdHVhdGlvbnMgLSBpdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdpdmVuLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24sIGp1c3QgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYERNQV9TSEFSRURfQlVGRkVSYCBmb3IgYSBiaXQgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byByZXZpc2l0IGFzc3VtcHRpb25zLCBldmVuIHRoZSBvYnZpb3VzIG9uZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhpbmdzIGFyZSBhcyBJIGV4cGVjdCB0aGVtIHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NjQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldoZXJlIERpZCBUaGF0IFNoYXJlZCBCdWZmZXIgR28/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJiMzOTttIGltbWVkaWF0ZWx5IHN0dWNrLiBXaGVyZSB0aGUgaGVjayBpcyBgRE1BX1NIQVJFRF9CVUZGRVJgIGRlZmluZWQ/IEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYSBkZWNsYXJhdGlvbiBvciBzb21lIGtpbmQgb2YgbWFjcm8gZGVmaW5pdGlvbiBuZWFyYnksIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgaXMgcmVmZXJlbmNpbmcgaXQuIElzIGl0IGEgZ2xvYmFsIHZhcmlhYmxlLCBwYXJ0IG9mIGEgaGVhZGVyIGZpbGUgSSYjMzk7bSBtaXNzaW5nLCBvciBwZXJoYXBzIGEgbWFjcm8gZGVmaW5lZCB0aHJvdWdoIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtub3cgdGhlIG1lbW9yeSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhpcyB0aGluZzsgSXMgaXQgaW4gc2hhcmVkIG1lbW9yeT8gSWYgc28sIHdoYXQgYXJlIHRoZSBhY2Nlc3MgbGltaXRhdGlvbnMgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlcj8gV2l0aG91dCBrbm93aW5nIGl0cyBvcmlnaW4sIHR5cGUsIGFuZCBpbnRlbmRlZCBwdXJwb3NlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLCBJIGNhbiYjMzk7dCBldmVuIGJlZ2luIHRvIGV2YWx1YXRlIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRoYXQgdXNlcyBpdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCB3aXRob3V0IGl0LCBJJiMzOTttIGp1c3Qgc3RhcmluZyBhdCBhbiBpbmNvbXBsZXRlIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgZGVlcGVyLCBzZWFyY2ggdGhlIHByb2plY3QgZGlyZWN0b3J5IGFuZCByZWxhdGVkIGhlYWRlcnMgdG8gdHJhY2sgZG93biB0aGlzIHZpdGFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGRlbGF5IG1lIHVubGVzcyBpdCYjMzk7cyBvYnZpb3VzbHkgZGVjbGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFwmIzM0O2RyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxuZHJpdmVycy9iYXNlL0tjb25maWc6MjE1OmNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTeXN0ZW0gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgYm9vbGVhbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gc2VsZWN0ZWQgZWxzZXdoZXJlLiBDb25zaWRlcmluZyB0aGF0LCBgVURNQUJVRmAgc2VlbXMgbGlrZSB0aGUgc2Vuc2libGUgY2hvaWNlIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHNvbHV0aW9uIGZvciB0aGlzIGtpbmQgb2Ygc2V0dXAuCgpOb3csIEkgd2FudCB0byBkcmlsbCBkb3duIGFuZCBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBJT19VUklOR2AuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgbGlua2VkIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGNvbXBsZXhpdHkgd2lsbCBsaWUsIGxpa2VseS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gdGhpcyBmZWF0dXJlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTE9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE4LVxuaW5pdC9LY29uZmlnOjE5MTk6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Mjg9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTQwLVxuaW5pdC9LY29uZmlnOjE5NDE6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5NDItXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiYjMzk7cyByZXZlbGF0aW9uLCByZW5kZXJlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqSU9fVVJJTkcmIzM5O3MgQ29uZmlndXJhdGlvbiBMb2NhdGlvbioqCgpPa2F5LCBzbyBJIHdhcyBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElPX1VSSU5HYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHNvbWUgb2JzY3VyZSBtb2R1bGUgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGdlbmVyYXRlZCBkeW5hbWljYWxseS4gQnV0LCBsbyBhbmQgYmVob2xkLCBhIHF1aWNrIHNlYXJjaCBhbmQgSSBmb3VuZCBpdCByaWdodCB0aGVyZSBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyBhY3R1YWxseSBwcmV0dHkgbG9naWNhbCwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4gVGhlIGBpbml0YCBkaXJlY3Rvcnkgb2Z0ZW4gaG91c2VzIGNvcmUgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCB0aGUgaWRlYWwgbG9jYXRpb24gZm9yIGEgZm91bmRhdGlvbmFsIGZlYXR1cmUgbGlrZSBgSU9fVVJJTkdgIHRoYXQgZnVuZGFtZW50YWxseSBpbXBhY3RzIEkvTyBvcGVyYXRpb25zIGZyb20gdGhlIGtlcm5lbCYjMzk7cyB2ZXJ5IGJvb3QuIEl0IGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgaXRzIGNvcmUgZmVhdHVyZXMsIGFuZCBtYWtlcyBtZSBjb25zaWRlciBwb3RlbnRpYWwgY2hhbmdlcyB0byBtYWtlLCBnb2luZyBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkxOTpcdGNvbmZpZyBJT19VUklOR1xuMTkyMDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbjE5MjE6XHRcdHNlbGVjdCBJT19XUVxuMTkyMjpcdFx0ZGVmYXVsdCB5XG4xOTIzOlx0XHRoZWxwXG4xOTI0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcbjE5MjU6XHRcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxuMTkyNjpcdFx0ICBjb21wbGV0aW9uIHJpbmdzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIGFwcGxpY2F0aW9uLlxuMTkyNzpcdFxuMTkyODpcdGNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFZGSU8gRGVwZW5kZW5jeSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGRlZmF1bHQgaXMgc2V0IHRvICYjMzk7eSYjMzk7LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGluaXRpYWwgc3RhdGUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBpdCBhbGlnbnMgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgZ2l2ZW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgaW50ZW5kZWQgYXBwbGljYXRpb24uCgpCZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBgVkZJT2AgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGFzcGVjdCwgYW5kIGdldHRpbmcgdGhpcyB3cm9uZyBjYW4gbGVhZCB0byBkaWZmaWN1bHQgZGVidWdnaW5nIGRvd24gdGhlIGxpbmUsIHNvIEkmIzM5O2xsIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IGNvbmZsaWN0cyBvciBtaXNzaW5nIGNvbXBvbmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEkga25vdyB0aGUgbnVhbmNlcyBvZiB0aGUgZHJpdmVycyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbmQgd2hlcmUgdGhleSB0ZW5kIHRvIHJ1biBpbnRvIHRyb3VibGUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhIGtleSBzdGVwIHRvIHByZXZlbnRpbmcgbGF0ZXIgc3VycHJpc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoxNzpjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuZHJpdmVycy92ZmlvL0tjb25maWctMTgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0yOS1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjMwOmNvbmZpZyBWRklPX0dST1VQXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTM5LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnOjUzOmNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNTYtXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU4LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz02MT1lbmRpZlxuZHJpdmVycy92ZmlvL0tjb25maWctNjItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VkZJTyBOby1JT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo3ODpjb25maWcgVkZJT19WSVJRRkRcbmRyaXZlcnMvdmZpby9LY29uZmlnLTc5LVx0Ym9vbFxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTgyLVxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xuZHJpdmVycy92ZmlvL0tjb25maWctODQtXHRib29sIFwmIzM0O0V4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKlZGSU8gU2V0dXAgJmFtcDsgRGVwZW5kZW5jeSBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhpbmtpbmcgYWJvdXQgdmlydHVhbGl6YXRpb24gd2l0aCBWRklPLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBWRklPIGFuZCB0aGUgYFZGSU9fSU9NTVVfVFlQRTFgIHNldHRpbmcgYXJlIHRoZSBpZGVhbCBwYXRoIHRvIHB1cnN1ZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBtb3N0IHJvYnVzdCB3YXkgdG8gZ2V0IGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgSU9NTVVGRGAgdG8gZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlci4gSXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA2Olx0Y29uZmlnIElPTU1VRkRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0lPTU1VIFVzZXJzcGFjZSBBUElcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gICA5Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbiAgMTA6XHRcdHNlbGVjdCBJT01NVV9BUElcbiAgMTE6XHRcdGRlZmF1bHQgblxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBQcm92aWRlcyAvZGV2L2lvbW11LCB0aGUgdXNlciBBUEkgdG8gY29udHJvbCB0aGUgSU9NTVUgc3Vic3lzdGVtIGFzXG4gIDE0Olx0XHQgIGl0IHJlbGF0ZXMgdG8gbWFuYWdpbmcgSU8gcGFnZSB0YWJsZXMgdGhhdCBwb2ludCBhdCB1c2VyIHNwYWNlIG1lbW9yeS5cbiAgMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4OTcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGlubmluZyBEb3duIE1lbW9yeTogQSBTdHJhdGVnaWMgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBJT01NVUZEYCBpcyBhIHNvbGlkIGZvdW5kYXRpb24sIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgSSB3YW50IHRvIHJldmlzaXQgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJIG5lZWQgdG8gZW5zdXJlIGl0cyB1c2FnZSBpcyBjb25zaXN0ZW50IGFuZCBwcmVkaWN0YWJsZSB3aXRoaW4gdGhlIHN5c3RlbS4KCkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHNob3dzIGl0JiMzOTtzIGRpcmVjdGx5IGludm9rZWQgYnkgYHVkbWFidWZfcGluX2ZvbGlvc2AgYW5kIGBwaW5fbWVtZmRfcGFnZXNgLiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzOiBgdWRtYWJ1Zl9jcmVhdGVgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBmb3IgcmV2aWV3LCBhbG9uZyB3aXRoIGBwaW5fbWVtZmRfcGFnZXNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcmVsZXZhbnQgYGlvX3Bpbl9wYWdlc2AgYW5kIGB2YWRkcl9nZXRfcGZuc2Agd2FycmFudCBleGFtaW5hdGlvbiBhcyB3ZWxsLiBUaGVzZSBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcyBmb3IgZGVlcCBkaXZlcy4KCkhvbGQgb24gYSBtaW51dGUuLi4gYG1lbWZkX3Bpbl9mb2xpb3NgIGlzICpleHBvcnRlZCo/IFRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGVuIG90aGVyIG1vZHVsZXMsIHBvdGVudGlhbGx5IGxlc3Mgc2NydXRpbml6ZWQgb25lcywgY291bGQgYmUgY2FsbGluZyBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gYnJvYWRlbiBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZmluZCAqZXZlcnkqIGNhbGxlciBvZiBgbWVtZmRfcGluX2ZvbGlvc2AgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5leHBlY3RlZCBpbnRlZ3JhdGlvbnMgb3IsIGV2ZW4gd29yc2UsIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHN0ZW1taW5nIGZyb20gaXRzIHVzYWdlLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzaW5nLiBMZXQmIzM5O3Mgc2VlIHdobyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cdGVuZCA9IHN0YXJ0ICYjNDM7IChwZ2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcdTAwMjZwZ29mZik7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cdGlmIChucl9mb2xpb3MgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVx0XHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XHRcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXHRcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXHQvKlxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1Olx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXHQgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cdTAwM2V1Zm9saW9zLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVx0XHRcdFx0ICAgbmZvbGlvcywgXHUwMDI2b2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzMxNz1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzMxOC1cdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMzMTk6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzMjAtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcbi0tXG5tbS9ndXAuYy0xOTUtICpcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxuLS1cbm1tL2d1cC5jPTM0MTk9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XG4tLVxubW0vZ3VwLmMtMzQyMS0vKipcbm1tL2d1cC5jOjM0MjI6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxubW0vZ3VwLmMtMzQyMy0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXG4tLVxubW0vZ3VwLmMtMzQ0Ni0gKi9cbm1tL2d1cC5jOjM0NDc6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxubW0vZ3VwLmMtMzQ0OC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0zNTQzLX1cbm1tL2d1cC5jOjM1NDQ6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XG5tbS9ndXAuYy0zNTQ1LVxuLS1cbm1tL2d1cC5jLTM1NTUtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cbm1tL2d1cC5jOjM1NTY6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcbm1tL2d1cC5jLTM1NTctICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4tLVxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTEyOS1cdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXG5tbS9tZW1mZF9sdW8uYzoxMzA6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxubW0vbWVtZmRfbHVvLmMtMTMxLVx0ICogc2xvdHMuXG5tbS9tZW1mZF9sdW8uYy0xMzItXHQgKi9cbm1tL21lbWZkX2x1by5jOjEzMzpcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcbm1tL21lbWZkX2x1by5jLTEzNC1cdFx0XHRcdCAgICAgXHUwMDI2b2Zmc2V0KTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTI5MS1cdC8qXG5tbS9tZW1mZF9sdW8uYzoyOTI6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcbm1tL21lbWZkX2x1by5jLTI5My1cdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBwaW5uaW5nIGFuZCB1c2VyIHNwYWNlIGludGVyYWN0aW9uLiBJJiMzOTttIHNlZWluZyBhIHN0cm9uZyBjYXNlIGZvciBmb2N1c2luZyBvbiBgbWVtZmRfcGluX2ZvbGlvc2AuIEkgYWxzbyB0aGluayBgdWRtYWJ1Zl9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgLCBhbmQgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZ2l2ZW4gdGhlaXIgc3BlY2lmaWMgaW50ZXJhY3Rpb25zLiBTaW1pbGFybHksIGBpb19waW5fcGFnZXNgLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgIHNlZW0gdG8gZGlyZWN0bHkgZGVhbCB3aXRoIHBpbm5pbmcgcGFnZXMgaW4gdGhlIGNvbnRleHQgb2YgSS9PLiBBbmQgSSBzZWUgYSBsb3QgdG8gbGVhcm4gZnJvbSBgdmFkZHJfZ2V0X3BmbnNgLgoKTm93LCBJJiMzOTttIGV2YWx1YXRpbmcgYHBpbl91c2VyX3BhZ2VzYCBhcyBhIGZvY3VzLiBJdCYjMzk7cyBleHBvcnRlZCwgYnV0IGl0IGZlZWxzIGEgYml0IGJyb2FkLiBgcGluX3VzZXJfcGFnZXNfZmFzdGAgaGFzIHRoZSBzYW1lIGlzc3VlLiBIb3dldmVyLCB0aGV5IGFyZSBkaXJlY3QgY2FsbGVycyBvZiBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCwgd2hpY2ggaW4gdHVybiwgaXMgd2hlcmUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlcmVmb3JlLCB0aGVpciBpbmNsdXNpb24gaXMganVzdGlmaWVkLgoKSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ndXBfbG9uZ3Rlcm1fbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0yNDY3LS8qXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcbm1tL2d1cC5jLTI0NjktICogYWxsb3dzIHVzIHRvIHByb2Nlc3MgdGhlIEZPTExfTE9OR1RFUk0gZmxhZy5cbm1tL2d1cC5jLTI0NzAtICovXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2d1cC5jLTI0NzItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vZ3VwLmM9MzE4Nj1zdGF0aWMgaW50IGd1cF9mYXN0X2ZhbGxiYWNrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzIxOS1cdHBhZ2VzICYjNDM7PSBucl9waW5uZWQ7XG5tbS9ndXAuYzozMjIwOlx0cmV0ID0gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcbm1tL2d1cC5jLTMyMjEtXHRcdFx0XHQgICAgcGFnZXMsIFx1MDAyNmxvY2tlZCxcbi0tXG5tbS9ndXAuYz0zMzUzPWxvbmcgcGluX3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2d1cC5jLTMzNjItXHRcdHJldHVybiAwO1xubW0vZ3VwLmM6MzM2MzpcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQobW0sIHN0YXJ0LCBucl9wYWdlcywgcGFnZXMsXG5tbS9ndXAuYy0zMzY0LVx0XHRcdFx0ICAgICBsb2NrZWQgPyBsb2NrZWQgOiBcdTAwMjZsb2NhbF9sb2NrZWQsXG4tLVxubW0vZ3VwLmM9MzM4Nz1sb25nIHBpbl91c2VyX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzM5My1cdFx0cmV0dXJuIDA7XG5tbS9ndXAuYzozMzk0Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsXG5tbS9ndXAuYy0zMzk1LVx0XHRcdFx0ICAgICBwYWdlcywgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuLS1cbm1tL2d1cC5jPTM0MDc9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL2d1cC5jLTM0MTUtXG5tbS9ndXAuYzozNDE2Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxubW0vZ3VwLmMtMzQxNy1cdFx0XHRcdCAgICAgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1NAoJCQkJCQkJb3V0cHV0OiAzMjkKCQkJCQkJCXRob3VnaHRzOiA1NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IFBpbm5pbmcgYW5kIEZvbGlvIElzb2xhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIHRob3VnaHQgaXMgdGhhdCBgcGluX3VzZXJfcGFnZXNfZmFzdGAgc2VlbXMgbGlrZSBhIGtleSBlbnRyeSBwb2ludCwgYXMgaXQgdWx0aW1hdGVseSBsZWFkcyB0byBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCB2aWEgYGd1cF9mYXN0X2ZhbGxiYWNrYCBhbmQgYGludGVybmFsX2dldF91c2VyX3BhZ2VzX2Zhc3RgLiBUaGlzIGlzIGRlZmluaXRlbHkgd2hlcmUgSSB3YW50IHRvIHN0YXJ0IGlmIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyBvZiBtZW1vcnkgcGlubmluZyBvcGVyYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNpZ25pZmljYW50IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBvbmVzIHRoYXQgcmVwcmVzZW50IG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB1c2VyLXNwYWNlIHBpbm5pbmcuIEkmIzM5O2xsIGluY2x1ZGUgdGhlc2U6IGBtZW1mZF9waW5fZm9saW9zYCwgYHVkbWFidWZfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgLCBgaW9fcGluX3BhZ2VzYCwgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLCBgdmFkZHJfZ2V0X3BmbnNgLCBgcGluX3VzZXJfcGFnZXNfZmFzdGAsIGFuZCBgcGluX3VzZXJfcGFnZXNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB0aGlzIHBhdGNoIGltcGFjdHMgc3lzdGVtcyB1c2luZyBgVURNQUJVRmAsIGBJT19VUklOR2AsIGBWRklPYCwgYW5kIGBJT01NVUZEYC4gVGhlc2UgY29uZmlndXJhdGlvbnMgYWxsIHJlbHkgb24gbWVtb3J5IHBpbm5pbmcgaW4gc29tZSBmYXNoaW9uLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgLiBUaGUgcHJvYmxlbSB3YXMgYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBjYWxjdWxhdGlvbiBmb3Igb3JkZXItMCBmb2xpb3Mgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGlzb2xhdGluZyB0aGVtLiBUaGUgaGFyZGNvZGVkIHZhbHVlIG9mIGAxYCBmb3IgcmVmZXJlbmNlIGNvdW50IHdhcyB3cm9uZy4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgdXNpbmcgYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoZSBjb3JyZWN0aW9uIGVuc3VyZXMgdGhlIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBpc29sYXRpbmcgcGFnZXMgZm9yIGxvbmctdGVybSBHVVAgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IG1pZ3JhdGUgcGFnZXMgZnJvbSBtb3ZhYmxlIHpvbmVzLiBUaGlzIGFmZmVjdHMgc3Vic3lzdGVtcyBzdWNoIGFzIGB1ZG1hYnVmYCwgYGlvX3VyaW5nYCwgYW5kIGBWRklPL0lPTU1VRkRgIHdoaWNoIHBpbiBtZW1vcnkgbG9uZyB0ZXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VURNQUJVRiYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0lPTU1VRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDssCiAgICAmIzM0O3VkbWFidWZfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3QmIzM0OywKICAgICYjMzQ7aW9fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7dmFkZHJfZ2V0X3BmbnMmIzM0OywKICAgICYjMzQ7cGluX3VzZXJfcGFnZXNfZmFzdCYjMzQ7LAogICAgJiMzNDtwaW5fdXNlcl9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRE1BQlVGJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7SU9NTVVGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OywKICAgICYjMzQ7dWRtYWJ1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7dWRtYWJ1Zl9pb2N0bF9jcmVhdGUmIzM0OywKICAgICYjMzQ7dWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdCYjMzQ7LAogICAgJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyc19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDt2YWRkcl9nZXRfcGZucyYjMzQ7LAogICAgJiMzNDtwaW5fdXNlcl9wYWdlc19mYXN0JiMzNDssCiAgICAmIzM0O3Bpbl91c2VyX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCB3aGVyZSB0aGUgZXhwZWN0ZWQgcmVmZXJlbmNlIGNvdW50IG9mIGEgZm9saW8gd2FzIGNhbGN1bGF0ZWQgaW5jb3JyZWN0bHkgZm9yIG9yZGVyLTAgZm9saW9zIHdoZW4gY2hlY2tpbmcgaWYgdGhleSBjYW4gYmUgaXNvbGF0ZWQuIEl0IGNoYW5nZXMgdGhlIGhhcmRjb2RlZCBgMWAgdG8gYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBgRk9MTF9MT05HVEVSTWAgZ2V0X3VzZXJfcGFnZXMgKEdVUCkgb3BlcmF0aW9ucyAoZS5nLiwgYHBpbl91c2VyX3BhZ2VzYCwgYG1lbWZkX3Bpbl9mb2xpb3NgKSB0byBtaWdyYXRlIHBhZ2VzIG91dCBvZiBtb3ZhYmxlIHpvbmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdWJzeXN0ZW1zIHRoYXQgcGluIG1lbW9yeSBsb25nLXRlcm0sIHN1Y2ggYXMgdWRtYWJ1ZiwgaW9fdXJpbmcsIGFuZCBWRklPL0lPTU1VRkQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjozNS41NTAzMTQ0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjQyODAyMTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRE1BQlVGXCIsXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiSU9NTVVGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWZkX3Bpbl9mb2xpb3NcIixcbiAgICBcInVkbWFidWZfY3JlYXRlXCIsXG4gICAgXCJ1ZG1hYnVmX2lvY3RsX2NyZWF0ZVwiLFxuICAgIFwidWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdFwiLFxuICAgIFwiaW9fcGluX3BhZ2VzXCIsXG4gICAgXCJpb19zcWVfYnVmZmVyX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19zcWVfYnVmZmVyc19yZWdpc3RlclwiLFxuICAgIFwidmFkZHJfZ2V0X3BmbnNcIixcbiAgICBcInBpbl91c2VyX3BhZ2VzX2Zhc3RcIixcbiAgICBcInBpbl91c2VyX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgIHdoZXJlIHRoZSBleHBlY3RlZCByZWZlcmVuY2UgY291bnQgb2YgYSBmb2xpbyB3YXMgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSBmb3Igb3JkZXItMCBmb2xpb3Mgd2hlbiBjaGVja2luZyBpZiB0aGV5IGNhbiBiZSBpc29sYXRlZC4gSXQgY2hhbmdlcyB0aGUgaGFyZGNvZGVkIGAxYCB0byBgcGluX3JlZnNgLCB3aGljaCBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIGZvciBvcmRlci0wIGZvbGlvcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGBGT0xMX0xPTkdURVJNYCBnZXRfdXNlcl9wYWdlcyAoR1VQKSBvcGVyYXRpb25zIChlLmcuLCBgcGluX3VzZXJfcGFnZXNgLCBgbWVtZmRfcGluX2ZvbGlvc2ApIHRvIG1pZ3JhdGUgcGFnZXMgb3V0IG9mIG1vdmFibGUgem9uZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN1YnN5c3RlbXMgdGhhdCBwaW4gbWVtb3J5IGxvbmctdGVybSwgc3VjaCBhcyB1ZG1hYnVmLCBpb191cmluZywgYW5kIFZGSU8vSU9NTVVGRC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6MzUuNTUwMzIxMjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODU3NjE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI1OTA5YzE1MTYxNjI1MTZlY2M4YjAyODI2ZDE2NTcyYWQzY2Y5YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAwNToyNjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jXFxuaW5kZXggOTk5MDJjMTU3MDNiMC4uNDFjMzMxN2UwZjBmNCAxMDA2NDRcXG4tLS0gYS9tbS9ndXAuY1xcbisrKyBiL21tL2d1cC5jXFxuQEAgLTIyNzMsNiArMjI3Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXFxuIFxcbiBcXHRmb3IgKGZvbGlvID0gcG9mc19nZXRfZm9saW8ocG9mcywgaSk7IGZvbGlvO1xcbiBcXHQgICAgIGZvbGlvID0gcG9mc19uZXh0X2ZvbGlvKGZvbGlvLCBwb2ZzLCBcXHUwMDI2aSkpIHtcXG4rXFx0XFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XFxuIFxcbiBcXHRcXHRpZiAoZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMjI4NywxNSArMjI4OCwyMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogV2UgZHJhaW4gbm90IG9ubHkgdG8gbWFrZSB0aGUgZm9saW9faXNvbGF0ZV9scnUoKSBzdWNjZWVkLFxcbitcXHRcXHQgKiBidXQgYWxzbyB0byByZW1vdmUgYW55IG90aGVyIGZvbGlvIHJlZmVyZW5jZXMgZnJvbSBMUlVcXG4rXFx0XFx0ICogY2FjaGVzLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGRyYWluZWQgPT0gMCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXlfYmVfbHJ1X2NhY2hlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0Zm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPVxcbi1cXHRcXHRcXHRcXHRmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICsgMSkge1xcbitcXHRcXHRcXHRcXHRmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICsgcGluX3JlZnMpIHtcXG4gXFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbiBcXHRcXHRcXHRkcmFpbmVkID0gMTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZHJhaW5lZCA9PSAxIFxcdTAwMjZcXHUwMDI2IGZvbGlvX21heV9iZV9scnVfY2FjaGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHRmb2xpb19yZWZfY291bnQoZm9saW8pICE9XFxuLVxcdFxcdFxcdFxcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxKSB7XFxuK1xcdFxcdFxcdFxcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyBwaW5fcmVmcykge1xcbiBcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbiBcXHRcXHRcXHRkcmFpbmVkID0gMjtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjozNS44NTk1NDQ2OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDYxMTg3ODMxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVURNQUJVRlwiLFxuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIklPTU1VRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCIsXG4gICAgXCJ1ZG1hYnVmX2NyZWF0ZVwiLFxuICAgIFwidWRtYWJ1Zl9pb2N0bF9jcmVhdGVcIixcbiAgICBcInVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RcIixcbiAgICBcImlvX3Bpbl9wYWdlc1wiLFxuICAgIFwiaW9fc3FlX2J1ZmZlcl9yZWdpc3RlclwiLFxuICAgIFwiaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJcIixcbiAgICBcInZhZGRyX2dldF9wZm5zXCIsXG4gICAgXCJwaW5fdXNlcl9wYWdlc19mYXN0XCIsXG4gICAgXCJwaW5fdXNlcl9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCB3aGVyZSB0aGUgZXhwZWN0ZWQgcmVmZXJlbmNlIGNvdW50IG9mIGEgZm9saW8gd2FzIGNhbGN1bGF0ZWQgaW5jb3JyZWN0bHkgZm9yIG9yZGVyLTAgZm9saW9zIHdoZW4gY2hlY2tpbmcgaWYgdGhleSBjYW4gYmUgaXNvbGF0ZWQuIEl0IGNoYW5nZXMgdGhlIGhhcmRjb2RlZCBgMWAgdG8gYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBgRk9MTF9MT05HVEVSTWAgZ2V0X3VzZXJfcGFnZXMgKEdVUCkgb3BlcmF0aW9ucyAoZS5nLiwgYHBpbl91c2VyX3BhZ2VzYCwgYG1lbWZkX3Bpbl9mb2xpb3NgKSB0byBtaWdyYXRlIHBhZ2VzIG91dCBvZiBtb3ZhYmxlIHpvbmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdWJzeXN0ZW1zIHRoYXQgcGluIG1lbW9yeSBsb25nLXRlcm0sIHN1Y2ggYXMgdWRtYWJ1ZiwgaW9fdXJpbmcsIGFuZCBWRklPL0lPTU1VRkQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1OTA5YzE1MTYxNjI1MTZlY2M4YjAyODI2ZDE2NTcyYWQzY2Y5YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjI2OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuY1xuaW5kZXggOTk5MDJjMTU3MDNiMC4uNDFjMzMxN2UwZjBmNCAxMDA2NDRcbi0tLSBhL21tL2d1cC5jXG4rKysgYi9tbS9ndXAuY1xuQEAgLTIyNzMsNiArMjI3Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXG4gXG4gXHRmb3IgKGZvbGlvID0gcG9mc19nZXRfZm9saW8ocG9mcywgaSk7IGZvbGlvO1xuIFx0ICAgICBmb2xpbyA9IHBvZnNfbmV4dF9mb2xpbyhmb2xpbywgcG9mcywgXHUwMDI2aSkpIHtcbitcdFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XG4gXG4gXHRcdGlmIChmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMjI4NywxNSArMjI4OCwyMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFdlIGRyYWluIG5vdCBvbmx5IHRvIG1ha2UgdGhlIGZvbGlvX2lzb2xhdGVfbHJ1KCkgc3VjY2VlZCxcbitcdFx0ICogYnV0IGFsc28gdG8gcmVtb3ZlIGFueSBvdGhlciBmb2xpbyByZWZlcmVuY2VzIGZyb20gTFJVXG4rXHRcdCAqIGNhY2hlcy5cbitcdFx0ICovXG4gXHRcdGlmIChkcmFpbmVkID09IDAgXHUwMDI2XHUwMDI2IGZvbGlvX21heV9iZV9scnVfY2FjaGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdGZvbGlvX3JlZl9jb3VudChmb2xpbykgIT1cbi1cdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxKSB7XG4rXHRcdFx0XHRmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICsgcGluX3JlZnMpIHtcbiBcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDE7XG4gXHRcdH1cbiBcdFx0aWYgKGRyYWluZWQgPT0gMSBcdTAwMjZcdTAwMjYgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0Zm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPVxuLVx0XHRcdFx0Zm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSArIDEpIHtcbitcdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyBwaW5fcmVmcykge1xuIFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDI7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjM1Ljg1OTU0NjIzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzkzODg2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHVVAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vZ3VwLmNgLiBJdCdzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIG9uIGxvbmctdGVybSBwaW5uaW5nIGJlaGF2aW9yLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGEgc3VidGxlIGFkanVzdG1lbnQgaW4gaG93IHdlIGRldGVybWluZSBpZiBhIGZvbGlvIGNhbiBiZSB1bnBpbm5lZC4gUHJldmlvdXNseSwgdGhlIGNoZWNrIGludm9sdmVkIGNvbXBhcmluZyB0aGUgZm9saW8ncyByZWZlcmVuY2UgY291bnQgd2l0aCBhbiBleHBlY3RlZCB2YWx1ZSBwbHVzIG9uZS4gTm93LCBpdCdzIGFkZGluZyBgcGluX3JlZnNgIHRvIHRoYXQgZXhwZWN0ZWQgY291bnQuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBjaGVjayBmcm9tIGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxYCB0byBgZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSArIHBpbl9yZWZzYC4gVGhlIGBwaW5fcmVmc2AgdmFyaWFibGUgaXRzZWxmIHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsOiBpdCdzIGVpdGhlciBgMWAgaWYgdGhlIGZvbGlvIGhhcyBhIHBpbiBjb3VudCBvciwgb3RoZXJ3aXNlLCBpdCdzIGVxdWFsIHRvIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgLlxuXG5JJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBtbS9ndXAuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCAnR1VQX1BJTl9DT1VOVElOR19CSUFTJyByZXByZXNlbnRzLCBhcyB3ZWxsIGFzIHRoZSBjb250ZXh0IG9mIGBmb2xpb19oYXNfcGluY291bnQoKWAuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBob3cgdGhlIEdVUCAoZ2V0X3VzZXJfcGFnZXMpIGlzIGludGVyYWN0aW5nIHdpdGggZm9saW8gcGlubmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjM5LjczODkzNzU3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwOTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2d1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2d1cC5jPTIyMzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqcG9mc19uZXh0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ndXAuYy0yMjY0LSAqL1xcbm1tL2d1cC5jOjIyNjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcXG5tbS9ndXAuYy0yMjY2LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jPTIzOTI9Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcXG4tLVxcbm1tL2d1cC5jLTIzOTYtXFxubW0vZ3VwLmM6MjM5NzpcXHRjb2xsZWN0ZWQgPSBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxcdTAwMjZtb3ZhYmxlX2ZvbGlvX2xpc3QsXFxubW0vZ3VwLmMtMjM5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcG9mcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjM5Ljc4Nzk1MzE3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDQyMTA2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYCBDYWxsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYC4gSSBzZWUgdGhhdCBpdCBjYWxscyBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AuIFRoYXQncyBhIGtleSBkZXBlbmRlbmN5IHRvIHVuZGVyc3RhbmQsIGJ1dCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvICp0aGF0KiwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGF0IHRyaWdnZXJzIGl0LiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsZXJzIG9mIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCdzIGJlaW5nIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCBwaWVjZSB0byB0aGUgcHV6emxlIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHRoYXQncyBhdCBwbGF5LiBMZXQncyBzZWUgd2hvJ3MgaW52b2tpbmcgdGhpcyByb3V0aW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDIuNjkyMTY2MzU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mzk2MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2d1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2d1cC5jPTIzOTE9c3RhdGljIGxvbmdcXG5tbS9ndXAuYzoyMzkyOmNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKHN0cnVjdCBwYWdlc19vcl9mb2xpb3MgKnBvZnMpXFxubW0vZ3VwLmMtMjM5My17XFxuLS1cXG5tbS9ndXAuYz0yNDI2PXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmMtMjQzNC1cXG5tbS9ndXAuYzoyNDM1OlxcdHJldHVybiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhcXHUwMDI2cG9mcyk7XFxubW0vZ3VwLmMtMjQzNi19XFxuLS1cXG5tbS9ndXAuYz0yNDQyPXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL2d1cC5jLTI0NTAtXFxubW0vZ3VwLmM6MjQ1MTpcXHRyZXR1cm4gY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3MoXFx1MDAyNnBvZnMpO1xcbm1tL2d1cC5jLTI0NTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjo0Mi43NDA1NjY4MjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMDM1MjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgQ2FsbGluZyBTdHJ1Y3R1cmUgb2YgRm9saW8gYW5kIFBhZ2UgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3NgIGFuZCBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoZXNlIGFyZSBjZW50cmFsIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcywgcHJlc3VtYWJseSBvZiBkYXRhIHJlbGF0ZWQgdG8gZm9saW9zIGFuZCBwYWdlcywgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gYSBsYXJnZS1zY2FsZSBkYXRhIHN5c3RlbS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aG8gKnRyaWdnZXJzKiB0aGVzZSBtaWdyYXRpb25zPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBoaWdoZXItbGV2ZWwgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHRlbGwgbWUgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IHRoZXNlIG1pZ3JhdGlvbnMgYXJlIGluaXRpYXRlZC4gQXJlIHRoZXkgcGFydCBvZiBhIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHByb2Nlc3MsIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBvciBpbnZva2VkIGRpcmVjdGx5IGJ5IHVzZXIgYWN0aW9ucz8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0YXNrcy4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgdG9vbGluZyB0byB0cmFjZSB0aGUgY2FsbCBoaWVyYXJjaHkgYW5kIGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDYuMDQyNjA0MzA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTIxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZ3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjM5MT1zdGF0aWMgbG9uZ1xcbm1tL2d1cC5jOjIzOTI6Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcXG5tbS9ndXAuYy0yMzkzLXtcXG4tLVxcbm1tL2d1cC5jPTI0MjY9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0yNDM0LVxcbm1tL2d1cC5jOjI0MzU6XFx0cmV0dXJuIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKFxcdTAwMjZwb2ZzKTtcXG5tbS9ndXAuYy0yNDM2LX1cXG4tLVxcbm1tL2d1cC5jLTI0NDEtICovXFxubW0vZ3VwLmM6MjQ0MjpzdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxubW0vZ3VwLmMtMjQ0My1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4tLVxcbm1tL2d1cC5jLTI0NTAtXFxubW0vZ3VwLmM6MjQ1MTpcXHRyZXR1cm4gY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3MoXFx1MDAyNnBvZnMpO1xcbm1tL2d1cC5jLTI0NTItfVxcbm1tL2d1cC5jLTI0NTMtI2Vsc2VcXG5tbS9ndXAuYzoyNDU0OnN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9ndXAuYy0yNDU1LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbi0tXFxubW0vZ3VwLmM9MjQ3MT1zdGF0aWMgbG9uZyBfX2d1cF9sb25ndGVybV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9ndXAuYy0yNDk1LVxcdFxcdC8qIEZPTExfTE9OR1RFUk0gaW1wbGllcyBGT0xMX1BJTiAqL1xcbm1tL2d1cC5jOjI0OTY6XFx0XFx0cmMgPSBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKG5yX3Bpbm5lZF9wYWdlcywgcGFnZXMpO1xcbm1tL2d1cC5jLTI0OTctXFx0fSB3aGlsZSAocmMgPT0gLUVBR0FJTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjQ2LjA4ODUzMDA0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTIxNDAxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgR1VQIExvY2sgYW5kIFBhZ2UgTWlncmF0aW9uKipcblxuUmlnaHQsIHNvIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGtpY2tzIHRoaW5ncyBvZmYgd2l0aCBhIGNhbGwgdG8gYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2YgbG9uZy10ZXJtIGxvY2tzIGFuZCBwYWdlIG9wZXJhdGlvbnMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCBtYWtlcyBzZW5zZS4gV2UncmUgdHJ5aW5nIHRvIGhhbmRsZSBwb3RlbnRpYWxseSBtb3ZhYmxlIHBhZ2VzLCBhbmQgZW5zdXJpbmcgdGhleSdyZSBpbiB0aGUgcmlnaHQgcGxhY2UgYmVmb3JlIGNvbnRpbnVpbmcuXCJcblxuQnV0IHdoYXQgYWJvdXQgdGhlIGNvdW50ZXJwYXJ0PyBTaG91bGRuJ3QgdGhlcmUgYmUgYSBwYXJhbGxlbCBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gKmZvbGlvcyo/IFdlJ3JlIHN0YXJ0aW5nIHRvIGxlYW4gbW9yZSBpbnRvIGZvbGlvcyB0aGVzZSBkYXlzLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBPciBpcyBpdCBpbnRlbnRpb25hbGx5IG9taXR0ZWQ/IElzIHRoZSBmb2xpbyBoYW5kbGluZyBiZWluZyBzb21laG93IHN1YnN1bWVkIHdpdGhpbiB0aGUgcGFnZSBtaWdyYXRpb24sIG9yIGlzIGl0IGhhbmRsZWQgaW4gYSBkaWZmZXJlbnQgY29kZXBhdGggYWx0b2dldGhlcj8gSSBuZWVkIHRvIHJldmlldyB0aGlzIG1vcmUgY2FyZWZ1bGx5IHRvIHNlZSBob3cgdGhlIGZvbGlvIG1pZ3JhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGluIGNvbnRleHQuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AgYW5kIGEgaHlwb3RoZXRpY2FsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgbmVlZHMgY2xvc2VyIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDkuMTQwNjcyNjA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk4NTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ndXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ndXAuYz0yMzkyPWNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKHN0cnVjdCBwYWdlc19vcl9mb2xpb3MgKnBvZnMpXFxuLS1cXG5tbS9ndXAuYy0yNDI1LSAqL1xcbm1tL2d1cC5jOjI0MjY6c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxubW0vZ3VwLmMtMjQyNy1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcylcXG4tLVxcbm1tL2d1cC5jLTI0MzktICogUmV0dXJuIHZhbHVlcyBhbmQgYmVoYXZpb3IgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvclxcbm1tL2d1cC5jOjI0NDA6ICogY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3MoKS5cXG5tbS9ndXAuYy0yNDQxLSAqL1xcbi0tXFxubW0vZ3VwLmM9MjQ1ND1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9ndXAuYy0yNDU5LVxcbm1tL2d1cC5jOjI0NjA6c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxubW0vZ3VwLmMtMjQ2MS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcylcXG4tLVxcbm1tL2d1cC5jPTM0NDc9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxubW0vZ3VwLmMtMzUzMi1cXG5tbS9ndXAuYzozNTMzOlxcdFxcdHJldCA9IGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zKG5yX2ZvbGlvcywgZm9saW9zKTtcXG5tbS9ndXAuYy0zNTM0LVxcdH0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDkuMTg5NjY0NTc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjU0NTYwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZpeGVzIGZvciBGdXp6aW5nIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHJlY29nbml6ZSB0aGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaG93IGdldF91c2VyX3BhZ2VzIChHVVApIHdpdGggRk9MTF9MT05HVEVSTSBpbnRlcmFjdHMgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGxvbmctdGVybSBsb2NrcyBhbmQgcGlubmVkIG1lbW9yeS4gV2UndmUgZ290IGBtZW1mZF9waW5fZm9saW9zYCBjYWxsaW5nIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgYW5kIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGNhbGxpbmcgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNgLiBUaGVzZSBhcmUgYm90aCBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBhY3RpdmVseSB1c2VkLlxuXG5UaGUgaGVhcnQgb2YgdGhlIGZpeCBsaWVzIGluIGNvcnJlY3RpbmcgYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBjaGVjay4gVGhlIGNvZGUgd2FzIHVzaW5nIGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxYCwgYnV0IGZvciBmb2xpb3MgdGhhdCBhcmVuJ3QgdXNpbmcgYSBwaW4gY291bnQsIEdVUCBhZGRzIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIHJhdGhlciB0aGFuIGEgc2ltcGxlIGluY3JlbWVudCBvZiAxLiBDb25zZXF1ZW50bHksIHdlIG5lZWQgdG8gc3dhcCB0aGUgaW5jb3JyZWN0IGArIDFgIHdpdGggYSBjaGVjayBhZ2FpbnN0IGBwaW5fcmVmc2AuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGJlaGF2aW9yLlxuXG5Ob3csIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGNvcnJlY3RlZCBjb2RlIGlzIGV4ZWN1dGVkLiBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBgcGluX3VzZXJfcGFnZXNgLCBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBgZ2V0X3VzZXJfcGFnZXNgLCBhbmQgcG90ZW50aWFsbHkgb3RoZXJzLiBUaGF0J3MgYSByaWNoIGxpc3Qgb2YgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gT24gdGhlIG90aGVyIGhhbmQsIGBtZW1mZF9waW5fZm9saW9zYCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgd2hpY2ggb3BlbnMgaXQgdXAgdG8gZnV6emluZyBhcyB3ZWxsLiBTbyBJIG5lZWQgdG8gZmluZCB0aGUgdmFyaW91cyBjYWxsZXJzIG9mIGBtZW1mZF9waW5fZm9saW9zYCwgYW5kIGNvbnNpZGVyIHRob3NlIGFzIGZ1enogdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjo1NC4zMTUxMjMwMDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDMzODYxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfcGluX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cXHRlbmQgPSBzdGFydCArIChwZ2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAtIDE7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XFx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXFx1MDAyNnBnb2ZmKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cXHRpZiAobnJfZm9saW9zIFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cXHRcXHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4OlxcdFxcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVxcdFxcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVxcdC8qXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1OlxcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVxcdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XFx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cXHUwMDNldWZvbGlvcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXFx0XFx0XFx0XFx0ICAgbmZvbGlvcywgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzMxNz1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzMTgtXFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMzE5OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzMyMC1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcXG4tLVxcbm1tL2d1cC5jLTE5NS0gKlxcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cXG4tLVxcbm1tL2d1cC5jPTM0MTk9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XFxuLS1cXG5tbS9ndXAuYy0zNDIxLS8qKlxcbm1tL2d1cC5jOjM0MjI6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxcbm1tL2d1cC5jLTM0MjMtICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxcbi0tXFxubW0vZ3VwLmMtMzQ0Ni0gKi9cXG5tbS9ndXAuYzozNDQ3OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5tbS9ndXAuYy0zNDQ4LVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0zNTQzLX1cXG5tbS9ndXAuYzozNTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xcbm1tL2d1cC5jLTM1NDUtXFxuLS1cXG5tbS9ndXAuYy0zNTU1LSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXFxubW0vZ3VwLmM6MzU1NjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xcbm1tL2d1cC5jLTM1NTctICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuLS1cXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0xMjktXFx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcXG5tbS9tZW1mZF9sdW8uYzoxMzA6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcXG5tbS9tZW1mZF9sdW8uYy0xMzEtXFx0ICogc2xvdHMuXFxubW0vbWVtZmRfbHVvLmMtMTMyLVxcdCAqL1xcbm1tL21lbWZkX2x1by5jOjEzMzpcXHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMTM0LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMjkxLVxcdC8qXFxubW0vbWVtZmRfbHVvLmM6MjkyOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxcbm1tL21lbWZkX2x1by5jLTI5My1cXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjU1Ljk1ODUxMzUyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY1Njc0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlBpbm5pbmcgRG93biBNZW1vcnkgaW4gdGhlIEtlcm5lbCAtIExldCdzIFRyYWNlIHRoZSBGbG93KipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIGZldyBrZXkgZnVuY3Rpb25zIGNhbGxpbmcgYG1lbWZkX3Bpbl9mb2xpb3NgLiBSaWdodCBvZmYgdGhlIGJhdCwgYHVkbWFidWZfcGluX2ZvbGlvc2AgYW5kIGBwaW5fbWVtZmRfcGFnZXNgIGZyb20gdGhlIGlvbW11ZmQgc3Vic3lzdGVtIGFyZSBkZWZpbml0ZWx5IHVzaW5nIGl0LiBUaGF0IG1ha2VzIHNlbnNlLCBib3RoIGFyZSBkZWFsaW5nIHdpdGggRE1BIGFuZCBtZW1vcnkgbWFwcGluZywgc28gcGlubmluZyBwYWdlcyB3b3VsZCBiZSBjcnVjaWFsIHRoZXJlLiBBbmQsIG9oLCB0aGVyZSdzIGBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zYCBpbiBgbW0vbWVtZmRfbHVvLmNgIHRvby4gVGhhdCBvbmXigJlzIGludGVyZXN0aW5nLCBtZW1vcnkgbGltaXRzIGFyZSBvZnRlbiB0aGUgbWFpbiByZWFzb24gZm9yIHBpbm5pbmcgZG93biB0aGUgbWVtb3J5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqcmVhbGx5KiBnb2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhpcyBwaW5uaW5nIG1lY2hhbmlzbSBsaWtlbHkgbGllcywgaW4gaG93IGl0IHNlY3VyZXMgdGhlIHBoeXNpY2FsIHBhZ2VzLCB3aGF0IGl0cyBjb250ZXh0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NTkuMzI0MTkwOTkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAzODIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2d1cF9sb25ndGVybV9sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZ3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jLTI0NjctLypcXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcXG5tbS9ndXAuYy0yNDY5LSAqIGFsbG93cyB1cyB0byBwcm9jZXNzIHRoZSBGT0xMX0xPTkdURVJNIGZsYWcuXFxubW0vZ3VwLmMtMjQ3MC0gKi9cXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9ndXAuYy0yNDcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2d1cC5jPTMxODY9c3RhdGljIGludCBndXBfZmFzdF9mYWxsYmFjayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzIxOS1cXHRwYWdlcyArPSBucl9waW5uZWQ7XFxubW0vZ3VwLmM6MzIyMDpcXHRyZXQgPSBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcXG5tbS9ndXAuYy0zMjIxLVxcdFxcdFxcdFxcdCAgICBwYWdlcywgXFx1MDAyNmxvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzNTM9bG9uZyBwaW5fdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9ndXAuYy0zMzYyLVxcdFxcdHJldHVybiAwO1xcbm1tL2d1cC5jOjMzNjM6XFx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChtbSwgc3RhcnQsIG5yX3BhZ2VzLCBwYWdlcyxcXG5tbS9ndXAuYy0zMzY0LVxcdFxcdFxcdFxcdCAgICAgbG9ja2VkID8gbG9ja2VkIDogXFx1MDAyNmxvY2FsX2xvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzODc9bG9uZyBwaW5fdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzM5My1cXHRcXHRyZXR1cm4gMDtcXG5tbS9ndXAuYzozMzk0OlxcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyxcXG5tbS9ndXAuYy0zMzk1LVxcdFxcdFxcdFxcdCAgICAgcGFnZXMsIFxcdTAwMjZsb2NrZWQsIGd1cF9mbGFncyk7XFxuLS1cXG5tbS9ndXAuYz0zNDA3PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL2d1cC5jLTM0MTUtXFxubW0vZ3VwLmM6MzQxNjpcXHRyZXR1cm4gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXFx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxcbm1tL2d1cC5jLTM0MTctXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjo1OS4zNzgyMzY0MjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1OTMwODg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdVUCBMb25ndGVybSBMb2NraW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgZnVuY3Rpb24g4oCTIGl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGxvbmctdGVybSBHVVAgbG9ja2luZyBsb2dpYy4gSXQncyBjYWxsZWQgYnkgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGBwaW5fdXNlcl9wYWdlc191bmxvY2tlZGAsIGFuZCBgZ3VwX2Zhc3RfZmFsbGJhY2tgLCB3aGljaCBhcmUgYWxsIHN0YW5kYXJkIEdVUCBlbnRyeSBwb2ludHMuIE5vdGhpbmcgdW51c3VhbCB0aGVyZSwgc3RhbmRhcmQgR1VQIHN0dWZmLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AuIFRoaXMgb25lIGlzIGNhbGxlZCBieSBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3NgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AgYW5kIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AuXG5cblRoZSB0cmlnZ2VyIGZvciBhbGwgb2YgdGhpcyBpcyB3aGVuIGBGT0xMX0xPTkdURVJNYCBpcyBwYXNzZWQgdG8gR1VQLCBhbmQgdGhlIHRhcmdldCBwYWdlcyBvciBmb2xpb3MgcmVzaWRlIGluIGEgbW92YWJsZSB6b25lLCBsaWtlIFpPTkVfTU9WQUJMRSBvciBDTUEuIE1ha2VzIHNlbnNlLCB3ZSdyZSB0cnlpbmcgdG8gaGFuZGxlIGxvbmctdGVybSBwaW5uaW5nIGluIGEgd2F5IHRoYXQncyBjb21wYXRpYmxlIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi5cblxuQnV0IHdhaXQsIEkgc2VlIHRoZSBidWc6IGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb2RlLiBJIHJlY2FsbCB0aGF0IGZvciBsb25nLXRlcm0gcGlucywgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBpbmNyZW1lbnRlZCBieSBgR1VQX1BJTl9DT1VOVElOR19CSUFTYC4gVGhhdCBpcywgaWYgdGhlIGZvbGlvIGhhcyBhIHBpbmNvdW50LCB0aGVuIHRoZSByZWZjb3VudCBpcyBhY3R1YWxseSBpbmNyZW1lbnRlZCBieSAqMTAyNCohXG5cbkhvbGQgb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSBjb3JyZWN0bHkuIExldCdzIHNlZS4uLiBgZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKWAgaXMgdHJ1ZSBmb3IgbGFyZ2VyIGZvbGlvcywgdGhvc2Ugd2l0aCBhbiBvcmRlciBncmVhdGVyIHRoYW4gMCwgd2hlcmUgdGhlIHBpbiBjb3VudCBpcyBzdG9yZWQgc2VwYXJhdGVseS4gQnV0IGZvciBvcmRlci0wIGZvbGlvcywgdGhlIHBpbiBjb3VudCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIHJlZmNvdW50IGl0c2VsZi4gU28sIGZvciB0aG9zZSwgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgaXMgYWRkZWQgZGlyZWN0bHkgdG8gdGhlIHJlZmNvdW50ISBJdCdzIGEgYml0IHRyaWNreTsgSSBzaG91bGQgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBmb2xpb19oYXNfcGluY291bnRgIGxvZ2ljLiBUaGF0J3MgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzowNS4yMzc1NDg5NjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQ5OTY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9faGFzX3BpbmNvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9MjY2NT1zdGF0aWMgaW5saW5lIHB1ZF90IGZvbGlvX21rX3B1ZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwZ3Byb3RfdCBwZ3Byb3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjY3Mi1cXG5pbmNsdWRlL2xpbnV4L21tLmg6MjY3MzpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX3BpbmNvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9tbS5oLTI2NzQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTI3MDU9c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heWJlX2RtYV9waW5uZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjcwNi17XFxuaW5jbHVkZS9saW51eC9tbS5oOjI3MDc6XFx0aWYgKGZvbGlvX2hhc19waW5jb3VudChmb2xpbykpXFxuaW5jbHVkZS9saW51eC9tbS5oLTI3MDgtXFx0XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50KSBcXHUwMDNlIDA7XFxuLS1cXG5tbS9kZWJ1Zy5jPTcwPXN0YXRpYyB2b2lkIF9fZHVtcF9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2RlYnVnLmMtODUtXFxubW0vZGVidWcuYzo4NjpcXHRcXHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcXG5tbS9kZWJ1Zy5jLTg3LVxcdFxcdFxcdHBpbmNvdW50ID0gYXRvbWljX3JlYWQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfcGluY291bnQpO1xcbi0tXFxubW0vZ3VwLmM9MTAyPXN0YXRpYyB2b2lkIGd1cF9wdXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlZnMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm1tL2d1cC5jLTEwNy1cXHRcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GT0xMX1BJTl9SRUxFQVNFRCwgcmVmcyk7XFxubW0vZ3VwLmM6MTA4OlxcdFxcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKVxcbm1tL2d1cC5jLTEwOS1cXHRcXHRcXHRhdG9taWNfc3ViKHJlZnMsIFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50KTtcXG4tLVxcbm1tL2d1cC5jPTE0MD1pbnQgX19tdXN0X2NoZWNrIHRyeV9ncmFiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWZzLFxcbi0tXFxubW0vZ3VwLmMtMTYyLVxcdFxcdCAqL1xcbm1tL2d1cC5jOjE2MzpcXHRcXHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSkge1xcbm1tL2d1cC5jLTE2NC1cXHRcXHRcXHRmb2xpb19yZWZfYWRkKGZvbGlvLCByZWZzKTtcXG4tLVxcbm1tL2d1cC5jPTIxMj12b2lkIGZvbGlvX2FkZF9waW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2d1cC5jLTIyMS1cXHQgKi9cXG5tbS9ndXAuYzoyMjI6XFx0aWYgKGZvbGlvX2hhc19waW5jb3VudChmb2xpbykpIHtcXG5tbS9ndXAuYy0yMjMtXFx0XFx0V0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50KSBcXHUwMDNjIDEpO1xcbi0tXFxubW0vZ3VwLmM9NTE3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnRyeV9ncmFiX2ZvbGlvX2Zhc3Qoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCByZWZzLFxcbi0tXFxubW0vZ3VwLmMtNTY1LVxcdCAqL1xcbm1tL2d1cC5jOjU2NjpcXHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcXG5tbS9ndXAuYy01NjctXFx0XFx0YXRvbWljX2FkZChyZWZzLCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9waW5jb3VudCk7XFxuLS1cXG5tbS9ndXAuYz0yMjY1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXFxuLS1cXG5tbS9ndXAuYy0yMjc1LVxcdCAgICAgZm9saW8gPSBwb2ZzX25leHRfZm9saW8oZm9saW8sIHBvZnMsIFxcdTAwMjZpKSkge1xcbm1tL2d1cC5jOjIyNzY6XFx0XFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XFxubW0vZ3VwLmMtMjI3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MDcuMTAyNTUxMzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTkzNjkyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBGb2xpbyBQaW4gQ291bnQgQ2hhbmdlKipcblxuT2theSwgc28gYGZvbGlvX2hhc19waW5jb3VudGAgZGVmaW5pdGl2ZWx5IHJldHVybnMgdHJ1ZSBmb3IgdGhvc2UgbGFyZ2UgZm9saW9zIOKAkyB0aGF0J3MgdGhlIGZpcnN0IGtleSBwb2ludC4gQW5kIGZvciBvcmRlci0wIGZvbGlvcywgdGhlIHN5c3RlbSBpcyBub3cgYWRkaW5nIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIHRvIHRoZSByZWZjb3VudC4gVGhpcyB0cmFuc2xhdGVzIGRpcmVjdGx5IHRvIHRoZSBgcGluX3JlZnNgIHZhbHVlLCB3aGljaCB3aWxsIGJlIGVpdGhlciAxIChmb3IgbGFyZ2UgZm9saW9zKSBvciB0aGF0IGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIChmb3Igb3JkZXItMCBmb2xpb3MpLiBTbywgZnJvbSBhIGZ1bmRhbWVudGFsIHBlcnNwZWN0aXZlLCB0aGlzIGNvbnN0aXR1dGVzIGEgKmZ1bmN0aW9uYWwqIHNoaWZ0IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdCdzIG5vdCBqdXN0IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbDsgaXQncyBob3cgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3cgYmVpbmcgaGFuZGxlZC5cblxuVGhlIG5leHQgcXVlc3Rpb24g4oCTIGlzIHRoaXMgY2hhbmdlIGJyb2FkbHkgaW1wYWN0aW5nIHRoZSBrZXJuZWw/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBzZWVtcyBsaWtlbHksIGFuZCB5ZXMsIEkgcmVtZW1iZXIgYHBpbl91c2VyX3BhZ2VzYCB3aXRoIGBGT0xMX0xPTkdURVJNYCBiZWluZyB1c2VkIHdpZGVseSB0aHJvdWdob3V0IHRoZSBrZXJuZWwgYnkgYSB3aWRlIHZhcmlldHkgb2YgZHJpdmVycy4gYGlvX3VyaW5nYCB1c2VzIGBwaW5fdXNlcl9wYWdlc2AgZm9yIHJlZ2lzdGVyZWQgYnVmZmVycywgYW5kIHRoYXTigJlzIGEgY3JpdGljYWwgY2FzZSB0byBjb25zaWRlci4gVGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gaWYgYGlvX3VyaW5nYCB1dGlsaXplcyBgRk9MTF9MT05HVEVSTWAgaW4gaXRzIGBwaW5fdXNlcl9wYWdlc2AgY2FsbHMuIEkgbmVlZCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjExLjM2MTkyMzc5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNTUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRk9MTF9MT05HVEVSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9tZW1tYXAuYz00MD1zdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy02Mi1cXG5pb191cmluZy9tZW1tYXAuYzo2MzpcXHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuaW9fdXJpbmcvbWVtbWFwLmMtNjQtXFx0XFx0XFx0XFx0XFx0cGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzoxMS40MTMwODU1MTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzMjk4NzQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIGlvX3VyaW5nIHdpdGggRk9MTF9MT05HVEVSTTogUG90ZW50aWFsIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBgaW9fdXJpbmdgICpkb2VzKiBsZXZlcmFnZSBgRk9MTF9MT05HVEVSTWAuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enppbmcuIFRpbWUgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmb2N1cyBvdXIgZWZmb3J0cy5cblxuRmlyc3QsIGxldCdzIGxvb2sgYXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMuIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCwgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYCwgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNgLCBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3NgLCBhbmQgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgYXJlIGFsbCBpbnRlcm5hbCwgc28gcG90ZW50aWFsbHkgcmVhY2hhYmxlIGJ1dCBsaWtlbHkgbGVzcyBleHBvc2VkIHRvIGV4dGVybmFsIGlucHV0LCB3aGljaCBtYWtlcyB0aGVtIHRyaWNraWVyIHRvIHRhcmdldCBkaXJlY3RseS4gUHJvYmFibHkgYmVzdCB0byB0cmVhdCB0aGVtIGFzIHBvdGVudGlhbCBzZWNvbmRhcnkgdGFyZ2V0cyBvciBjb25zaWRlciBob3cgb3VyIGNob3NlbiBpbnB1dHMgaW5mbHVlbmNlIHRoZW0gaW5kaXJlY3RseS5cblxuVGhlIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHRoZSByZWFsIGtleSBoZXJlLiBXZSBoYXZlIGBwaW5fdXNlcl9wYWdlc2AsIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGBwaW5fdXNlcl9wYWdlc191bmxvY2tlZGAsIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuIEhtbSwgYHBpbl91c2VyX3BhZ2VzYC4uLiBpdCdzIGEgaG90IHBhdGgsIGJ1dCBwZXJoYXBzIG5vdCB0aGUgKmhvdHRlc3QqPyBJdCdzIHVzZWQgZm9yIHBpbm5pbmcsIHdoZXJlYXMgYGdldF91c2VyX3BhZ2VzYCBtaWdodCBiZSBhIG1vcmUgbGlrZWx5IGFyZWEgdG8gZmluZCBidWdzLiBXYWl0LCBgbWVtZmRfcGluX2ZvbGlvc2AgbG9va3MgcHJvbWlzaW5nISBJdCdzIHN1cGVyIHNwZWNpZmljIGFuZCBkaXJlY3RseSBoaXRzIHRoZSBjb2RlIHBhdGggd2UncmUgaW50ZXJlc3RlZCBpbi4gWWVzLCBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBnb2luZyBvbiB0aGUgbGlzdCwgYWxvbmdzaWRlIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGFuZCBgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWRgLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBnb29kIGVudHJ5IHBvaW50cy4gSSB3b25kZXIgYWJvdXQgYGlvX3Bpbl9wYWdlc2AgaW4gaW9fdXJpbmcuLi4gaXQncyB3b3J0aCBhIGxvb2suIExldCdzIGRpZyBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjE3LjQ0NjA3NTM2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NzkwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcGluX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL21lbW1hcC5jPTE4PXN0YXRpYyBib29sIGlvX21lbV9hbGxvY19jb21wb3VuZChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0zOS1cXG5pb191cmluZy9tZW1tYXAuYzo0MDpzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDEte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTM0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX3Bpbl9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xNDAtXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTQxOlxcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHJlZy1cXHUwMDNldXNlcl9hZGRyLCBzaXplLCBcXHUwMDI2bnJfcGFnZXMpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTE0Mi1cXHRpZiAoSVNfRVJSKHBhZ2VzKSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTktXFxuaW9fdXJpbmcvbWVtbWFwLmg6MTA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKTtcXG5pb191cmluZy9tZW1tYXAuaC0xMS1cXG4tLVxcbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtODgzLVxcdHJldCA9IC1FTk9NRU07XFxuaW9fdXJpbmcvcnNyYy5jOjg4NDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVxcdTAwM2Vpb3ZfYmFzZSwgaW92LVxcdTAwM2Vpb3ZfbGVuLFxcbmlvX3VyaW5nL3JzcmMuYy04ODUtXFx0XFx0XFx0XFx0XFx1MDAyNm5yX3BhZ2VzKTtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0yMDI9c3RhdGljIGludCBpb19pbXBvcnRfdW1lbShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yMTMtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuaW9fdXJpbmcvemNyeC5jOjIxNDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZylhcmVhX3JlZy1cXHUwMDNlYWRkciwgYXJlYV9yZWctXFx1MDAzZWxlbixcXG5pb191cmluZy96Y3J4LmMtMjE1LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjE3LjQ5OTU1OTA5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAyMTE3NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBTdHJhdGVnaWVzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWdpZXMgZm9yIGVmZmljaWVudCBJL08uIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kOyB0aGF0J3MgYSBzb2xpZCBjb250ZW5kZXIuIEJ1dCBJIG5lZWQgdG8gZXhwbG9yZSBhbHRlcm5hdGl2ZXMgYW5kIHJlbGF0ZWQgbWV0aG9kcy4gSSB3b25kZXIgYWJvdXQgYG1lbWZkX3Bpbl9mb2xpb3NgLiBUaGF0IGZ1bmN0aW9uJ3MgaW50cmlndWluZywgZXNwZWNpYWxseSBnaXZlbiBpdHMgcm9sZSBpbiBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2AsIHRoZSBpb21tdWZkIGNvbXBvbmVudC4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgYHVkbWFidWZfcGluX2ZvbGlvc2AgZnVuY3Rpb24sIGFzIGl0IHNlZW1zIGNlbnRyYWwgdG8gdGhpcyBsaW5lIG9mIGlucXVpcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MjAuNzAxNjc5NzQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0MDY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZG1hYnVmX3Bpbl9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTI5MD1zdGF0aWMgc3RydWN0IGRtYV9idWYgKmV4cG9ydF91ZG1hYnVmKHN0cnVjdCB1ZG1hYnVmICp1YnVmLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMDMtXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMDQ6c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMDUtXFx0XFx0XFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IHNpemUsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcylcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzUwPXN0YXRpYyBsb25nIHVkbWFidWZfY3JlYXRlKHN0cnVjdCBtaXNjZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQxMi1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQxMzpcXHRcXHRyZXQgPSB1ZG1hYnVmX3Bpbl9mb2xpb3ModWJ1ZiwgbWVtZmQsIGxpc3RbaV0ub2Zmc2V0LFxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDE0LVxcdFxcdFxcdFxcdFxcdCBsaXN0W2ldLnNpemUsIGZvbGlvcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjIwLjc1MDYyNjI3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1NzQ5NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gRnV6emluZyB1ZG1hYnVmKipcblxuT2theSwgc28gYHVkbWFidWZfY3JlYXRlYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgdWRtYWJ1ZiBmdXp6aW5nIGVmZm9ydHMuIEl0J3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGFuZCBpdCBjYWxscyBgdWRtYWJ1Zl9waW5fZm9saW9zYCwgd2hpY2ggaXMgbGlrZWx5IHdoZXJlIGEgbG90IG9mIHRoZSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSU9NTVUgYWN0dWFsbHkgaGFwcGVucy4gVGhhdCBtYWtlcyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIGxpa2UgdGhhdCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBkaWcgaW50byB0aGF0IGBwaW5fbWVtZmRfcGFnZXNgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuY2AgbmV4dC4gSXQgc291bmRzIGxpa2UgdGhlIGtpbmQgb2YgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgb2Z0ZW4gY29udGFpbnMgaW50ZXJlc3RpbmcgYW5kIGV4cGxvaXRhYmxlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjI0LjE1NjM3ODQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk0MTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaW5fbWVtZmRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz04MDc9c3RhdGljIHZvaWQgcGZuX3JlYWRlcl91c2VyX2Rlc3Ryb3koc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlcixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgyMy1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MjQ6c3RhdGljIGxvbmcgcGluX21lbWZkX3BhZ2VzKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODI1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTg3Nj1zdGF0aWMgaW50IHBmbl9yZWFkZXJfdXNlcl9waW4oc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlcixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkyOC1cXHRcXHRzdGFydCA9IHBhZ2VzLVxcdTAwM2VzdGFydCArIChzdGFydF9pbmRleCAqIFBBR0VfU0laRSk7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6OTI5OlxcdFxcdHJjID0gcGluX21lbWZkX3BhZ2VzKHVzZXIsIHN0YXJ0LCBucGFnZXMpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkzMC1cXHR9IGVsc2UgaWYgKCFyZW1vdGVfbW0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MjQuMjAwMzI0MjQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYxMDI2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDpcblxuKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgUGlubmluZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYHBmbl9yZWFkZXJfdXNlcl9waW5gLiBUaGlzIGZ1bmN0aW9uJ3MgY2FsbGluZyBgcGluX21lbWZkX3BhZ2VzYCwgcmlnaHQ/IEludGVyZXN0aW5nLiBJdCdzIGNsZWFyIHRoYXQgdGhlcmUncyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGlzIGBwZm5fcmVhZGVyX3VzZXJfcGluYCBhbmQgdGhlIG1lbWZkIG1lY2hhbmlzbSwgYW5kIHRoYXQgYHBmbl9yZWFkZXJfdXNlcl9waW5gIG11c3QgYmUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbi5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIHRoaXMgYHBmbl9yZWFkZXJfdXNlcl9waW5gIGZ1bmN0aW9uLiBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB3aGVyZSB1c2VybGFuZCBtZW1vcnkgaXMgYmVpbmcgcGlubmVkIGJhc2VkIG9uIHBmbnMgLSBJIG5lZWQgdG8gc2VlIHdobydzIGFjdHVhbGx5ICp1c2luZyogaXQsIHdobyBuZWVkcyB0aG9zZSBwYWdlcyBwaW5uZWQgaW4gbWVtb3J5IGFuZCB3aHkgdGhleSdyZSBhc2tpbmcgYHBpbl9tZW1mZF9wYWdlc2AgdG8gYmUgY2FsbGVkIHRocm91Z2ggdGhpcyBwYXRoLiBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gVGhpcyBjYWxsIGNoYWluIGlzIGtleSB0byBmaWd1cmluZyBvdXQgaG93IG1lbW9yeSBpcyBiZWluZyBtYW5hZ2VkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjI3LjY5NjQyOTA4MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3Mjc0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZuX3JlYWRlcl91c2VyX3BpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lvbW11L2lvbW11ZmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTg3NS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4NzY6c3RhdGljIGludCBwZm5fcmVhZGVyX3VzZXJfcGluKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODc3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9wdF9wYWdlcyAqcGFnZXMsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0xMTY4PXN0YXRpYyBpbnQgcGZuX3JlYWRlcl9maWxsX3NwYW4oc3RydWN0IHBmbl9yZWFkZXIgKnBmbnMpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0xMjA5LVxcdGlmIChzdGFydF9pbmRleCBcXHUwMDNlPSB1c2VyLVxcdTAwM2V1cGFnZXNfZW5kKSB7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MTIxMDpcXHRcXHRyYyA9IHBmbl9yZWFkZXJfdXNlcl9waW4odXNlciwgcGZucy1cXHUwMDNlcGFnZXMsIHN0YXJ0X2luZGV4LFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTEyMTEtXFx0XFx0XFx0XFx0XFx0IHNwYW4tXFx1MDAzZWxhc3RfaG9sZSk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0yMTQ3PXN0YXRpYyBpbnQgaW9wdF9wYWdlc19maWxsKHN0cnVjdCBpb3B0X3BhZ2VzICpwYWdlcyxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTIxNTctXFx0XFx0dXNlci1cXHUwMDNldXBhZ2VzID0gb3V0X3BhZ2VzICsgKGN1cl9pbmRleCAtIHN0YXJ0X2luZGV4KTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzoyMTU4OlxcdFxcdHJjID0gcGZuX3JlYWRlcl91c2VyX3Bpbih1c2VyLCBwYWdlcywgY3VyX2luZGV4LCBsYXN0X2luZGV4KTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0yMTU5LVxcdFxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MjcuNzQxMTYwMzMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDE0NTQ0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERhdGEgRmlsbGluZyBXb3JrZmxvdyoqXG5cbkFscmlnaHQsIHNvIGBpb3B0X3BhZ2VzX2ZpbGxgIGlzIHRyaWdnZXJlZCBieSBgaW9wdF9wYWdlc19maWxsX3hhcnJheWAuIFRoYXQncyB0aGUga2V5IHJlbGF0aW9uc2hpcCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlLiBOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byAqaG93KiBpdCdzIGZpbGxpbmcgdGhlIHBhZ2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHVkbWFidWZfY3JlYXRlYCBjb25maWd1cmF0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIHVuZGVybHlpbmcgVURNQWJ1ZiBjcmVhdGlvbiBhbmQgc2V0dXAgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgdGhvc2UgcGFnZXMgYXJlIGZpbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgYnVmZmVyIGlzIGluc3RhbnRpYXRlZCwgd2hhdCBwcm9wZXJ0aWVzIGFyZSBzZXQsIGFuZCBhbnkgc3BlY2lmaWMgY29uc3RyYWludHMgdGhhdCBtaWdodCBiZSBpbiBwbGFjZSwgYmVjYXVzZSB0aG9zZSBjb25zdHJhaW50cyB3aWxsIGRpY3RhdGUgb3IgY29uc3RyYWluIGBpb3B0X3BhZ2VzX2ZpbGxgJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjMwLjc4MjYxODQyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2ODg0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRtYWJ1Zl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTIwPW1vZHVsZV9wYXJhbShsaXN0X2xpbWl0LCBpbnQsIDA2NDQpO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MjE6TU9EVUxFX1BBUk1fREVTQyhsaXN0X2xpbWl0LCBcXFwidWRtYWJ1Zl9jcmVhdGVfbGlzdC1cXHUwMDNlY291bnQgbGltaXQuIERlZmF1bHQgaXMgMTAyNC5cXFwiKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTIyLVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0yNz1zdHJ1Y3QgdWRtYWJ1ZiB7XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzLVxcdCAqIFNvLCBucl9waW5uZWQgaXMgbm90IHRoZSBzYW1lIHRvIHBhZ2Vjb3VudCwgdGhlIHBpbm5lZF9mb2xpb3NcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjM0OlxcdCAqIG9ubHkgc2V0IGVhY2ggZm9saW8gd2hpY2ggYWxyZWFkeSBwaW5uZWQgd2hlbiB1ZG1hYnVmX2NyZWF0ZS5cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTM1LVxcdCAqIE5vdGUgdGhhdCwgc2luY2UgYSBmb2xpbyBtYXkgYmUgcGlubmVkIG11bHRpcGxlIHRpbWVzLCBlYWNoIGZvbGlvXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzQ5LVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzUwOnN0YXRpYyBsb25nIHVkbWFidWZfY3JlYXRlKHN0cnVjdCBtaXNjZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTE6XFx0XFx0XFx0ICAgc3RydWN0IHVkbWFidWZfY3JlYXRlX2xpc3QgKmhlYWQsXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTI6XFx0XFx0XFx0ICAgc3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gKmxpc3QpXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zNTMte1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00NDk9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDUwLXtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ1MTpcXHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUgY3JlYXRlO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDUyOlxcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IGhlYWQ7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTM6XFx0c3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gbGlzdDtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ1NC1cXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDY0LVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDY1OlxcdHJldHVybiB1ZG1hYnVmX2NyZWF0ZShmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcdTAwMjZoZWFkLCBcXHUwMDI2bGlzdCk7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NjYtfVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00Njg9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00Njkte1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDcwOlxcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IGhlYWQ7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NzE6XFx0c3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gKmxpc3Q7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NzItXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ3OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3OTpcXHRsc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfaXRlbSkgKiBoZWFkLmNvdW50O1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDgwLVxcdGxpc3QgPSBtZW1kdXBfdXNlcigodm9pZCBfX3VzZXIgKikoYXJnICsgc2l6ZW9mKGhlYWQpKSwgbHNpemUpO1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00ODMtXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0ODQ6XFx0cmV0ID0gdWRtYWJ1Zl9jcmVhdGUoZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXHUwMDI2aGVhZCwgbGlzdCk7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00ODUtXFx0a2ZyZWUobGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjMwLjgyNjMxMTE4MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg2NDQwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGAvZGV2L3VkbWFidWZgIElvY3RsIEludGVyZmFjZSBmb3IgRnV6emluZyoqXG5cblJpZ2h0LCBzbyBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgIGFuZCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGDigJR0aG9zZSBhcmUgdGhlIGtleSBpb2N0bHMgZm9yIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdWRtYWJ1ZmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIHdob2xlIGludGVyZmFjZSBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igb2ZmLWJ5LW9uZSBlcnJvcnMsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yLCBmcmFua2x5LCBhbnkga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbiBpbmhlcmVudCBpbiBETUEgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBpdCdzIHNjcmVhbWluZyBcInZ1bG5lcmFiaWxpdHkgb3Bwb3J0dW5pdHkuXCJcblxuQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGB1ZG1hYnVmYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGF2YWlsYWJsZSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFRoaXMgaW5jbHVkZXMga2VybmVsIGNvbXBpbGUgb3B0aW9ucywgbW9kdWxlIHBhcmFtZXRlcnMsIGFuZCBhbnkgcnVudGltZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBrbm93IHRoZSBib3VuZHMsIGxpbWl0YXRpb25zLCBhbmQgYXNzdW1wdGlvbnMgYmFrZWQgaW50byBpdHMgZGVzaWduIGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIG1hbGZvcm1lZCBkYXRhIGF0IGl0LiBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzLCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBvciBhY2Nlc3MgY29udHJvbCBsaXN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYnlwYXNzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBwbGFjZSwgaWYgYW55dGhpbmcsIHRvIHByZXZlbnQgbWUgZnJvbSBkb2luZyBzb21ldGhpbmcgcmVhbGx5IG5hc3R5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjM0LjYxMjc1NDcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTA5NzMyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRtYWJ1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MzQuNjgxODc2OTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzkwOTU0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGg6IFRoZSBFbHVzaXZlIHVkbWFidWYqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIHRoaXMsIHdvcmtpbmcgb24gdGhhdCBuZXcgaW1wbGVtZW50YXRpb24sIGFuZCBub3cgSSd2ZSBoaXQgYSBzbmFnLiBUaGUgc3lzdGVtIGlzIGJlaGF2aW5nIGluIGFuIHVuZXhwZWN0ZWQgd2F5LCBhbmQgbXkgbWVudGFsIGNoZWNrbGlzdCBpcyBzY3JlYW1pbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZW4sIHRoZSBxdWVzdGlvbiBoaXRzIG1lOiB3aGVyZSBleGFjdGx5ICppcyogdGhlIGB1ZG1hYnVmYCBjb25maWd1cmVkPyBJIGtub3cgaXQncyBmdW5kYW1lbnRhbCB0byB0aGlzIGFyY2hpdGVjdHVyZSwgY3J1Y2lhbCBmb3IgdGhhdCBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSd2ZSB3b3JrZWQgd2l0aCB0aGlzIGJlZm9yZSwgSSAqc2hvdWxkKiBrbm93IHRoaXMgY29sZCwgYnV0IHJpZ2h0IG5vdywgbXkgbWVudGFsIG1hcCBpcyBhIGJpdCBmdXp6eS4gSXQncyB0aW1lIHRvIHBhdXNlIGFuZCBnbyBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgaXQgaW4gdGhlIGRldmljZSB0cmVlPyBUaGUga2VybmVsIGNvbmZpZz8gTWF5YmUgYSBkZWRpY2F0ZWQgZHJpdmVyIG1vZHVsZSBjb25maWd1cmF0aW9uIGZpbGUgSSd2ZSBvdmVybG9va2VkPyBJJ3ZlIGdvdCBhIG1lbnRhbCBpdGNoIG5vdzsgSSBuZWVkIHRvIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMgdW50aWwgSSBmaW5kIHRoZSBzb3VyY2UuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIEkgbmVlZCB0byBnZXQgbW92aW5nIGFnYWluLiBHb3R0YSBkaWcgZGVlcGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MzcuOTYwOTc1NTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk4Nzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZG1hYnVmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZT03PW9iai0kKENPTkZJR19TV19TWU5DKVxcdFxcdCs9IHN3X3N5bmMubyBzeW5jX2RlYnVnLm9cXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfVURNQUJVRilcXHRcXHQrPSB1ZG1hYnVmLm9cXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUtOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MzguMDA4OTY5OTg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzc0MzgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVURNQUJVRiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYENPTkZJR19VRE1BQlVGYCBpcyBhY3R1YWxseSBlbmFibGVkIG9yIHJlbGV2YW50IHdpdGhpbiB0aGlzIGNvbnRleHQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRE1BLUJVRiAoRGlyZWN0IE1lbW9yeSBBY2Nlc3MgQnVmZmVyKSBsaWtlbHkgcmVzaWRlLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBzZWUgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIHNpZ25pZmljYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzo0MC44ODY0MTAyNzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjk3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVETUFCVUZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWc9MjA9Y29uZmlnIFNXX1NZTkNcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTMyLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjMzOmNvbmZpZyBVRE1BQlVGXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXFx0Ym9vbCBcXFwidXNlcnNwYWNlIGRtYWJ1ZiBtaXNjIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NDAuOTM0NzE0MTc3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjYyMzE4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIFVETUFCVUYgYW5kIGlvX3VyaW5nIEJ1ZmZlciBSZWdpc3RyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBtZW1vcnkgYnVmZmVycyBhcmUgYmVpbmcgbWFuYWdlZCwgYW5kIGBVRE1BQlVGYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgYmVpbmcgZXhwb3J0ZWQg4oCTIHRoYXQncyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgSSBzaG91bGQgbG9vayBpbnRvIHRoYXQgZnVydGhlci4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCB3aXRoaW4gYGlvX3VyaW5nL3JzcmMuY2AuIExvb2tzIGxpa2UgaXQncyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGNhbGxlZCBieSBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgdGhhdCBvdXQgYXMgd2VsbCwgYXMgSSdtIHN1cmUgdGhlcmUncyBtb3JlIGNvbnRleHQgaW4gaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIExldCdzIHNlZSB3aGF0IGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAgaXMgYWxsIGFib3V0LiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNyaXRpY2FsIHBhdGggZm9yIGJ1ZmZlciByZWdpc3RyYXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yaywgYW5kIGxpa2VseSB3aGVyZSB0aGUgYFVETUFCVUZgIGludGVncmF0aW9uIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NDcuMzAwOTUwMTQ0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc5MzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19zcWVfYnVmZmVyc19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcnNyYy5jPTQ2OT1fX2NvbGQgaW50IGlvX3JlZ2lzdGVyX3JzcmMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtNDk0LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JzcmMuYzo0OTU6XFx0XFx0cmV0dXJuIGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKGN0eCwgdTY0X3RvX3VzZXJfcHRyKHJyLmRhdGEpLFxcbmlvX3VyaW5nL3JzcmMuYy00OTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJyLm5yLCB1NjRfdG9fdXNlcl9wdHIocnIudGFncykpO1xcbi0tXFxuaW9fdXJpbmcvcnNyYy5jPTg1NT1zdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy05NDktXFxuaW9fdXJpbmcvcnNyYy5jOjk1MDppbnQgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvcnNyYy5jLTk1MS1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX2FyZ3MsIHU2NCBfX3VzZXIgKnRhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjQ3LjM1MTc0OTMxMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY3MDk2MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEkvTyBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSS9PIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGFuZCBJJ20gc2VlaW5nIGEgY2xlYXIgcHJvZ3Jlc3Npb246IGBpb19yZWdpc3Rlcl9yc3JjYCBsZWFkcyBkaXJlY3RseSBpbnRvIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAuIEZyb20gdGhlcmUsIGl0IGRyaWxscyBkb3duIHRvIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCB3aGljaCB1bHRpbWF0ZWx5IGdldHMgdXMgdG8gYGlvX3Bpbl9wYWdlc2AgYW5kIGZpbmFsbHksIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhpcyBzZXF1ZW5jZSBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgYXJlYSB0byBmb2N1cyBvbi5cblxuTXkgYXR0ZW50aW9uIGlzIGFsc28gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBJJ20gbm90aW5nIHRoYXQgYElPX1VSSU5HYCBpcyB0aGUgbWFpbiBjb25maWcgZm9yIGlvX3VyaW5nLCBhbmQgZm9yIGlvbW11ZmQsIHdlIGhhdmUgYElPTU1VRkRgLiBXaXRoIHRoZSBmb2N1cyBvbiBpb21tdWZkLCBJIHRoaW5rIGl0J3MgdGltZSB0byBjaGVjayB0aGUgYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NTAuOTE4ODQ4Mzk1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg4MDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJT01NVUZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L0tjb25maWc9Nz1jb25maWcgSU9NTVVfQVBJXFxuLS1cXG5kcml2ZXJzL2lvbW11L0tjb25maWctOS1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MTA6Y29uZmlnIElPTU1VRkRfRFJJVkVSXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTExLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NTAuOTY4NzM1NzM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTE1Mjc0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQSBLZXJuZWwgQ29uZmlndXJhdGlvbiBQdXp6bGVyKipcblxuV2FpdCBhIHNlY29uZC4uLiAqYElPTU1VRkRgKj8gVGhhdCByaW5nIGEgYmVsbC4gTGV0IG1lIHRoaW5rLi4uIGlzbid0IHRoYXQgdGhlIHVzZXJzcGFjZSBJT01NVSBmcmFtZXdvcms/IFllcywgdGhhdCdzIGl0LiBTbywgd2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0PyBXZWxsLCBsb2dpY2FsbHksIGl0IHNob3VsZCBiZSBzb21ld2hlcmUgcmVsYXRlZCB0byBJT01NVS4gQW5kLi4uIGhvbGQgb24uLi4gaXMgaXQgcmVhbGx5IGxpc3RlZCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIGBkcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZ2A/IFNlcmlvdXNseT8gSSBoYXZlIHRvIGFkbWl0LCB0aGF0J3Mgbm90IHdoZXJlIEkgd291bGQgaGF2ZSBpbml0aWFsbHkgZ3Vlc3NlZC4gSSdkIGhhdmUgcHJvYmFibHkgYXNzdW1lZCBpdCB3YXMgdW5kZXIgYSBicm9hZGVyIElPTU1VIHVtYnJlbGxhLCBwZXJoYXBzIGluIGBkcml2ZXJzL2lvbW11L0tjb25maWdgLCBvciBtYXliZSBldmVuIHVuZGVyIGEgbW9yZSBnZW5lcmFsIFwicGxhdGZvcm1cIiBvciBcImRldmljZVwiIHNlY3Rpb24sIGRlcGVuZGluZyBvbiBob3cgaXQncyBhcmNoaXRlY3RlZC4gSG1tLCB0aGF0J3MgdW5leHBlY3RlZCBidXQgbG9naWNhbCwgYW5kIGtub3dpbmcgaXQgaXMgZm91bmQgdGhlcmUgd2lsbCBzdHJlYW1saW5lIGhvdyBJIGNvbmZpZ3VyZSBpdCBuZXh0IHRpbWUgSSBhbSB3b3JraW5nIHdpdGggdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzo1NC40NjAyNjcxMzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTE2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPTU1VRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyOmNvbmZpZyBJT01NVUZEX0RSSVZFUl9DT1JFXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMy1cXHRib29sXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDpcXHRkZWZhdWx0IChJT01NVUZEX0RSSVZFUiB8fCBJT01NVUZEKSBpZiBJT01NVUZEIT1uXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzo2OmNvbmZpZyBJT01NVUZEXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSU9NTVUgVXNlcnNwYWNlIEFQSVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjE4OmlmIElPTU1VRkRcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoxOTpjb25maWcgSU9NTVVGRF9WRklPX0NPTlRBSU5FUlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjIwOlxcdGJvb2wgXFxcIklPTU1VRkQgcHJvdmlkZXMgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gVkZJT19HUk9VUCBcXHUwMDI2XFx1MDAyNiAhVkZJT19DT05UQUlORVJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTIzLVxcdGhlbHBcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyNDpcXHQgIElPTU1VRkQgd2lsbCBwcm92aWRlIC9kZXYvdmZpby92ZmlvIGluc3RlYWQgb2YgVkZJTy4gVGhpcyByZWxpZXMgb25cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyNTpcXHQgIElPTU1VRkQgcHJvdmlkaW5nIGNvbXBhdGliaWxpdHkgZW11bGF0aW9uIHRvIGdpdmUgdGhlIHNhbWUgaW9jdGxzLlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTI2LVxcdCAgSXQgcHJvdmlkZXMgYW4gb3B0aW9uIHRvIGJ1aWxkIGEga2VybmVsIHdpdGggbGVnYWN5IFZGSU8gY29tcG9uZW50c1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjgtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mjk6XFx0ICBJT01NVUZEIFZGSU8gY29udGFpbmVyIGVtdWxhdGlvbiBpcyBrbm93biB0byBsYWNrIGNlcnRhaW4gZmVhdHVyZXNcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMC1cXHQgIG9mIHRoZSBuYXRpdmUgVkZJTyBjb250YWluZXIsIHN1Y2ggYXMgcGVlci10by1wZWVyXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMi1cXHQgIHVuZGlzY292ZXJlZCBnYXBzLiAgVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IGludGVuZGVkIGZvciB0aGVcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzozMzpcXHQgIHB1cnBvc2Ugb2YgdGVzdGluZyBJT01NVUZEIHdpdGggdW5tb2RpZmllZCB1c2Vyc3BhY2Ugc3VwcG9ydGluZyBWRklPXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMzQtXFx0ICBhbmQgbWFraW5nIHVzZSBvZiB0aGUgVHlwZTEgVkZJTyBJT01NVSBiYWNrZW5kLiAgR2VuZXJhbCBwdXJwb3NlXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzozNzpcXHQgIFVubGVzcyB0ZXN0aW5nIElPTU1VRkQsIHNheSBOIGhlcmUuXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMzgtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mzk6Y29uZmlnIElPTU1VRkRfVEVTVFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklPTU1VIFVzZXJzcGFjZSBBUEkgVGVzdCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDMtXFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjQ0OlxcdGRlcGVuZHMgb24gSU9NTVVfUFRfQU1EVjE9eSB8fCBJT01NVUZEPUlPTU1VX1BUX0FNRFYxXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDUtXFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDY6XFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjU0LjUwODM5MDE1NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwODkyMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFzc2Vzc21lbnQgb2YgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cblJpZ2h0LCBzbyBgSU9NTVVGRGAgc2VlbXMgbGlrZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gY2hvaWNlLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQgbGlrZWx5IHByb3ZpZGVzIHNwZWNpZmljIGJlbmVmaXRzIHJlbGF0ZWQgdG8gRE1BIGFuZCBkZXZpY2UgaXNvbGF0aW9uLCBidXQgSSdkIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgbXkgYXBwbGljYXRpb24ncyByZXF1aXJlbWVudHMuIE5vdywgdGhlIGBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zYCBvcHRpb24gaGFzIG1lIGludHJpZ3VlZC4gSSB2YWd1ZWx5IHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaXQsIGJ1dCBhIHF1aWNrIHJlZnJlc2hlciBpcyBpbiBvcmRlci4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgYW5kIGNvbnN1bHQgYG1tL21lbWZkX2x1by5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgdGhpcyBmbGFnIGVuYWJsZXMgYW5kIHRoZSB0cmFkZS1vZmZzIGl0IGVudGFpbHMgd2l0aCByZXNwZWN0IHRvIGZvbGlvIG1hbmFnZW1lbnQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbWlnaHQgaW1wYWN0IG1lbW9yeSBmcmFnbWVudGF0aW9uLCBOVU1BIGJlaGF2aW9yLCBvciBwZXJoYXBzIGV2ZW4gbGF0ZW5jeSBpbiBteSBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudHMgd2l0aGluIHRoZSBzb3VyY2UgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMxMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjU3LjkwOTI4NTM4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNTg2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1mZF9sdW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1mZF9sdW8uYy04Ni1cXG5tbS9tZW1mZF9sdW8uYzo4NzpzdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxubW0vbWVtZmRfbHVvLmMtODgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxcbi0tXFxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTMwMi1cXG5tbS9tZW1mZF9sdW8uYzozMDM6XFx0ZXJyID0gbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhhcmdzLVxcdTAwM2VmaWxlLCBcXHUwMDI2c2VyLVxcdTAwM2Vmb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMzA0LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmb2xpb3Nfc2VyLCBcXHUwMDI2bnJfZm9saW9zKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NTcuOTUxNDQ5OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYyNjkxNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYG1lbWZkX2x1by5jYCdzIFJvbGUqKlxuXG5Pa2F5LCBmaXJzdCB0aG91Z2h0OiBcIm1lbWZkX2x1by5jXCIg4oCTIHRoYXQgZmlsZW5hbWUgKmZlZWxzKiBsaWtlIGl0IG1pZ2h0IGJlIGNvbm5lY3RlZCB0byBLSE8sIHRoZSBLZXhlYyBIYW5kT3ZlciBmdW5jdGlvbmFsaXR5LiBNeSBndXQgc2F5cyB0aGVyZSdzIGEgc3Ryb25nIGNvcnJlbGF0aW9uIHRoZXJlLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIEknbSBmYW1pbGlhciB3aXRoIGluIHRoaXMgc3BhY2UuIFNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gTGV0J3MgZGlnIGludG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSByZXZlYWxzIGFib3V0IGBtZW1mZF9sdW8uY2AgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaG9wZWZ1bGx5LCBLZXhlYyBIYW5kb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3OTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODowMC45MTQxNDQyMTJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDgxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX2x1by5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcbm1tL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MDAuOTY4MjMzNTAyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mzg1NTc3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBQaW5uaW5nIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBwaW5uaW5nIGZvciBsaXZlIHVwZGF0ZXMsIGFuZCB0aGUgYENPTkZJR19MSVZFVVBEQVRFX01FTUZEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBrZWVwcyBjb21pbmcgdXAuIFdoaWxlIHRoYXQncyBhbiBvcHRpb24sIEknbSB0aGlua2luZyB0aGF0IGB1ZG1hYnVmYCBtaWdodCBiZSBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBnZW5lcmFsbHkgYWNjZXB0ZWQgYXBwcm9hY2guIEkgd2FudCB0byByZXZpc2l0IGBtZW1mZF9waW5fZm9saW9zYCBhZ2Fpbiwgc2luY2UgaXQncyBjYWxsZWQgYnkgYHVkbWFidWZfcGluX2ZvbGlvc2AuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgYmVzdCBwYXRoIGZvcndhcmQuIE15IGtleSBmb2N1cyByaWdodCBub3csIGJhc2VkIG9uIHRoZSBjdXJyZW50IHVuZGVyc3RhbmRpbmcsIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIG9uOiBgbWVtZmRfcGluX2ZvbGlvc2AsIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgLCBgdWRtYWJ1Zl9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBhbmQgYHBpbl91c2VyX3BhZ2VzYC5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBgcGluX3VzZXJfcGFnZXNfZmFzdGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gYGlvX3VyaW5nYC4gVW5kZXJzdGFuZGluZyB0aGlzIHVzYWdlIHBhdHRlcm4gd2lsbCBwcm92aWRlIHNvbWUgY29udGV4dCBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgZm9yIG91ciBhcHBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MDUuNDA2NzkzODU5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY5MTc1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGluX3VzZXJfcGFnZXNfZmFzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9tZW1tYXAuYz00MD1zdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy02Mi1cXG5pb191cmluZy9tZW1tYXAuYzo2MzpcXHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuaW9fdXJpbmcvbWVtbWFwLmMtNjQtXFx0XFx0XFx0XFx0XFx0cGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODowNS42MDM3MTk3MDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1NDAzMzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBgaW9fcGluX3BhZ2VzYCoqXG5cbk9rYXksIHNvIEkndmUgcmVtZW1iZXJlZCB0aGF0IGBpb19waW5fcGFnZXNgIGNhbGxzIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhhdCBtYWtlcyBgaW9fcGluX3BhZ2VzYCBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmdW5jdGlvbiB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LiBJdCdzIGEga2V5IHBvaW50IG9mIGludGVyYWN0aW9uLiBHaXZlbiBpdHMgZnVuY3Rpb24sIEknZCBsaWtlIHRvIGNoZWNrIGhvdyBpdCBpcyB1c2VkLiBJJ2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gZHJpdmVycyB1c2luZyBgdmZpb2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgYXBwbGljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MDguMjU3NzU2NDIzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ2OTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaW5fdXNlcl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfc3BhcHJfdGNlLmM9NDg0PXN0YXRpYyBpbnQgdGNlX2lvbW11X3VzZV9wYWdlKHVuc2lnbmVkIGxvbmcgdGNlLCB1bnNpZ25lZCBsb25nICpocGEpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV9zcGFwcl90Y2UuYy00ODgtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfc3BhcHJfdGNlLmM6NDg5OlxcdGlmIChwaW5fdXNlcl9wYWdlc19mYXN0KHRjZSBcXHUwMDI2IFBBR0VfTUFTSywgMSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV9zcGFwcl90Y2UuYy00OTAtXFx0XFx0XFx0ZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UgPyBGT0xMX1dSSVRFIDogMCxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MTA0PXN0cnVjdCB2ZmlvX2JhdGNoIHtcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjEwNTpcXHRzdHJ1Y3QgcGFnZVxcdFxcdCoqcGFnZXM7XFx0LyogZm9yIHBpbl91c2VyX3BhZ2VzX3JlbW90ZSAqL1xcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTA2LVxcdHN0cnVjdCBwYWdlXFx0XFx0KmZhbGxiYWNrX3BhZ2U7IC8qIGlmIHBhZ2VzIGFsbG9jIGZhaWxzICovXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTQ4MD1zdGF0aWMgaW50IHB1dF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBwcm90KVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy00ODQtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo0ODU6XFx0XFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFxcdTAwMjZwYWdlLCAxLCBwcm90IFxcdTAwMjYgSU9NTVVfV1JJVEUpO1xcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNDg2LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01ODQ9c3RhdGljIGxvbmcgdmFkZHJfZ2V0X3BmbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmFkZHIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU5Ni1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1OTc6XFx0cmV0ID0gcGluX3VzZXJfcGFnZXNfcmVtb3RlKG1tLCB2YWRkciwgcGluX3BhZ2VzLCBmbGFncyB8IEZPTExfTE9OR1RFUk0sXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01OTgtXFx0XFx0XFx0XFx0ICAgIGJhdGNoLVxcdTAwM2VwYWdlcywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjA4LjMwMTIzMDI5MloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUxMzc4MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBLZXJuZWwgVnVsbmVyYWJpbGl0eSBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uc2lkZXJpbmcgVkZJTydzIHVzZSBvZiBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCB3aXRoIGBGT0xMX0xPTkdURVJNYC4gVGhhdCBtZWFucyBgdmFkZHJfZ2V0X3BmbnNgIGlzIGEga2V5IHN5bWJvbCB0byB1bmRlcnN0YW5kLiBIb3dldmVyLCBJIHN1c3BlY3QgdGhhdCBgaW9fcGluX3BhZ2VzYCBhbmQgYHVkbWFidWZfY3JlYXRlYCBtaWdodCBiZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBlbnRyeSBwb2ludHMgZm9yIGV4cGxvaXRhdGlvbiwgc28gdGhvc2UgYXJlIGFsc28gZ29vZCB0byBrZWVwIGluIG1pbmQuXG5cbkxldCBtZSB0YWtlIHN0b2NrIG9mIHRoZSBtYWluIHN5bWJvbHMgSSB3YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXI6XG5cbiogICBgbWVtZmRfcGluX2ZvbGlvc2BcbiogICBgdWRtYWJ1Zl9waW5fZm9saW9zYFxuKiAgIGB1ZG1hYnVmX2NyZWF0ZWBcbiogICBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgXG4qICAgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgXG4qICAgYGlvX3Bpbl9wYWdlc2BcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmBcbiogICBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgXG4qICAgYHZhZGRyX2dldF9wZm5zYFxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIEl0J3MgYW4gaW9jdGwgb24gYC9kZXYvdWRtYWJ1ZmAsIHNvIGl0J3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLiBHb29kLCB0aGF0J3Mgb25lIGF2ZW51ZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCBpcyByZWFjaGFibGUuIEl0IGlzIGNhbGxlZCBieSBgaW9fcmVnaXN0ZXJfcnNyY2AsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGlvX3VyaW5nX3JlZ2lzdGVyYC4gT2theSwgdGhhdCdzIGFsc28gY2xlYXJseSByZWFjaGFibGUuXG5cbkZpbmFsbHksIGxldCdzIGRvdWJsZS1jaGVjayBgdmFkZHJfZ2V0X3BmbnNgLiBUaGF0J3MgY2FsbGVkIGJ5IGB2ZmlvX3Bpbl9wYWdlc19yZW1vdGVgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHZmaW9fcGluX21hcF9kbWFgLiBZZXMsIGl0J3MgZGVmaW5pdGl2ZWx5IHJlYWNoYWJsZSBhcyB3ZWxsLlxuXG5TbyB0byBlbmFibGUgdGhlc2UgdGFyZ2V0cywgdGhlIGtleSBrZXJuZWwgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIGFyZTpcblxuKiAgIGBVRE1BQlVGYFxuKiAgIGBJT19VUklOR2BcbiogICBgVkZJT2BcbiogICBgSU9NTVVGRGBcblxuSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgYFVETUFCVUZgIGRlcGVuZGVuY2llcywganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MTQuNDUyNjExNjkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1MzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVURNQUJVRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJ1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoxNC41MDMwNjg2MTFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNTYwMzEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBVRE1BQlVGIGJsb2NrLCBhbmQgc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgVURNQUJVRiBCbG9jayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIFVETUFCVUYgYmxvY2suIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbiwgYWxsIHRoZSBkZXRhaWxzLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSwgdW5lZGl0ZWQgc291cmNlIGNvZGUgb3IgYXQgbGVhc3QgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4gSSdtIG5vdCBsb29raW5nIGZvciBqdXN0IHNuaXBwZXRzIG9yIHN1bW1hcmllczsgSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gZ3Jhc3AgdGhlIG51YW5jZXMuIEknbSBhc3N1bWluZywgb2YgY291cnNlLCB0aGF0IHdlIGFyZSBkaXNjdXNzaW5nIFVETUFCVUYgYXMgaXQgcGVydGFpbnMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFsbG9jYXRpb24uIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyBpdOKAmXMgZGVzaWduZWQgdG8gaGFuZGxlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucyBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgRE1BIGNvbnRyb2xsZXIuIEkgd2FudCB0byBsb29rIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBidWZmZXIgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgcG90ZW50aWFsbHksIGZyYWdtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZW1vcnkgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdXNlcnNwYWNlLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZ2F1Z2UgaXRzIHBvdGVudGlhbCBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIGV4aXN0aW5nIHN5c3RlbS4gU28sIHNob3cgbWUgZXZlcnl0aGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoxNy43MTg2NzQyMDlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODc1NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVRE1BQlVGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjE3Ljc3MjU1NjUzOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5Mzc4OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb250ZXh0dWFsIEZsb3cqKlxuXG5SaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBzZWUgKndoYXQgY29tZXMgbmV4dCouIFRoZSBzdGF0ZW1lbnQgaXRzZWxmIGlzIGxpa2VseSBpbmNvbXBsZXRlLCBvciBpdHMgZnVsbCBtZWFuaW5nIGhpbmdlcyBvbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEkga25vdyBjb250ZXh0IGlzICpldmVyeXRoaW5nKi4gSSBjYW4ndCBldmVuIGJlZ2luIHRvIGZvcm0gYSBzb2xpZCBpbnRlcnByZXRhdGlvbiwgbGV0IGFsb25lIGEgc291bmQgYXJndW1lbnQgb3IgcmVzcG9uc2UsIHVudGlsIEkgdW5kZXJzdGFuZCB0aGUgKmVudGlyZSogcGljdHVyZS4gSXMgdGhpcyBhIHN0YXRlbWVudCBvbiBpdHMgb3duIG9yIHBhcnQgb2YgYSBicm9hZGVyIGFyZ3VtZW50PyBBbSBJIG1pc3Npbmcga2V5IGluZm9ybWF0aW9uIGJlY2F1c2UgSSdtIG9ubHkgc2VlaW5nIGEgc2VnbWVudD8gSSBuZWVkIHRvIHNlZSB0aGUgc3VwcG9ydGluZyBldmlkZW5jZSwgdGhlIGNvdW50ZXJwb2ludHMsIHRoZSBpbXBsaWNhdGlvbnMuLi4gdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEluIHNob3J0LCBqdW1waW5nIHRvIHRoZSBjb25jbHVzaW9uIG5vdyB3b3VsZCBiZSBuZWdsaWdlbnQuIEkgbmVlZCB0byBlbnN1cmUgYWxsIHBvdGVudGlhbCBjb25uZWN0aW9ucyBhbmQgaW50ZXItZGVwZW5kZW5jaWVzIGFyZSBldmFsdWF0ZWQgKmJlZm9yZSogcmVzcG9uZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoyMS4xMjE5Mzg2NzRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzM6XFx0Y29uZmlnIFVETUFCVUZcXG4gIDM0OlxcdFxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuICAzNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTUVNRkRfQ1JFQVRFIHx8IENPTVBJTEVfVEVTVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgQSBkcml2ZXIgdG8gbGV0IHVzZXJzcGFjZSB0dXJuIG1lbWZkIHJlZ2lvbnMgaW50byBkbWEtYnVmcy5cXG4gIDQxOlxcdFxcdCAgUWVtdSBjYW4gdXNlIHRoaXMgdG8gY3JlYXRlIGhvc3QgZG1hYnVmcyBmb3IgZ3Vlc3QgZnJhbWVidWZmZXJzLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgRE1BQlVGX0RFQlVHXFxuICA0NDpcXHRcXHRib29sIFxcXCJETUEtQlVGIGRlYnVnIGNoZWNrc1xcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDQ2OlxcdFxcdGRlZmF1bHQgeSBpZiBERUJVR1xcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGFkZGl0aW9uYWwgY2hlY2tzIGZvciBETUEtQlVGIGltcG9ydGVycyBhbmRcXG4gIDQ5OlxcdFxcdCAgZXhwb3J0ZXJzLiBTcGVjaWZpY2FsbHkgaXQgdmFsaWRhdGVzIHRoYXQgaW1wb3J0ZXJzIGRvIG5vdCBwZWVrIGF0IHRoZVxcbiAgNTA6XFx0XFx0ICB1bmRlcmx5aW5nIHN0cnVjdCBwYWdlIHdoZW4gdGhleSBpbXBvcnQgYSBidWZmZXIuXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBETUFCVUZfS1VOSVRfVEVTVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoyMS4xMjE5OTU0MDRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDcwNDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgVURNQUJVRioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYFVETUFCVUZgIGFuZCBob3cgaXQgZnVuY3Rpb25zLiBJdCdzIGJ1aWx0IG9uIGEgZmV3IGtleSBjb21wb25lbnRzLiBJIGtub3cgaXQgbGVhbnMgaGVhdmlseSBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLCBgTUVNRkRfQ1JFQVRFYCwgYW5kIHRoZSBNTVUuIFRob3NlIGFyZSB0aGUgYmlnIGJ1aWxkaW5nIGJsb2NrcyBpbiB0aGlzIGNhc2UuXG5cbkknZCBleHBlY3QgYERNQV9TSEFSRURfQlVGRkVSYCB0byBiZSBlbmFibGVkIGluIG1vc3Qgc2l0dWF0aW9ucyAtIGl0J3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0J3MgYWxtb3N0IGFsd2F5cyBhIGdpdmVuLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24sIGp1c3QgdG8gYmUgdGhvcm91Z2guIExldCdzIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgRE1BX1NIQVJFRF9CVUZGRVJgIGZvciBhIGJpdCBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSXQncyBhbHdheXMgZ29vZCB0byByZXZpc2l0IGFzc3VtcHRpb25zLCBldmVuIHRoZSBvYnZpb3VzIG9uZXMuIExldCdzIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGFzIEkgZXhwZWN0IHRoZW0gdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoyNC4zNjI3MDM4MTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzE3MDQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjI0LjQxMTQyODUyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjk1ODU0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqV2hlcmUgRGlkIFRoYXQgU2hhcmVkIEJ1ZmZlciBHbz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJ20gaW1tZWRpYXRlbHkgc3R1Y2suIFdoZXJlIHRoZSBoZWNrIGlzIGBETUFfU0hBUkVEX0JVRkZFUmAgZGVmaW5lZD8gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBhIGRlY2xhcmF0aW9uIG9yIHNvbWUga2luZCBvZiBtYWNybyBkZWZpbml0aW9uIG5lYXJieSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSBpcyByZWZlcmVuY2luZyBpdC4gSXMgaXQgYSBnbG9iYWwgdmFyaWFibGUsIHBhcnQgb2YgYSBoZWFkZXIgZmlsZSBJJ20gbWlzc2luZywgb3IgcGVyaGFwcyBhIG1hY3JvIGRlZmluZWQgdGhyb3VnaCBzb21lIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBrbm93IHRoZSBtZW1vcnkgY2hhcmFjdGVyaXN0aWNzIG9mIHRoaXMgdGhpbmc7IElzIGl0IGluIHNoYXJlZCBtZW1vcnk/IElmIHNvLCB3aGF0IGFyZSB0aGUgYWNjZXNzIGxpbWl0YXRpb25zIGFuZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBidWZmZXI/IFdpdGhvdXQga25vd2luZyBpdHMgb3JpZ2luLCB0eXBlLCBhbmQgaW50ZW5kZWQgcHVycG9zZSBpbiB0aGlzIGFyY2hpdGVjdHVyZSwgSSBjYW4ndCBldmVuIGJlZ2luIHRvIGV2YWx1YXRlIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRoYXQgdXNlcyBpdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCB3aXRob3V0IGl0LCBJJ20ganVzdCBzdGFyaW5nIGF0IGFuIGluY29tcGxldGUgcGljdHVyZS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGRlZXBlciwgc2VhcmNoIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBhbmQgcmVsYXRlZCBoZWFkZXJzIHRvIHRyYWNrIGRvd24gdGhpcyB2aXRhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBpcyBnb2luZyB0byBkZWxheSBtZSB1bmxlc3MgaXQncyBvYnZpb3VzbHkgZGVjbGFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MjcuNzQxMDE2NTE2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1MjQzMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MjkuMjc2MjY1NjUxWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTIxMTQyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5c3RlbSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgYm9vbGVhbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gc2VsZWN0ZWQgZWxzZXdoZXJlLiBDb25zaWRlcmluZyB0aGF0LCBgVURNQUJVRmAgc2VlbXMgbGlrZSB0aGUgc2Vuc2libGUgY2hvaWNlIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgc3RhbmRhcmQgc29sdXRpb24gZm9yIHRoaXMga2luZCBvZiBzZXR1cC5cblxuTm93LCBJIHdhbnQgdG8gZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgSU9fVVJJTkdgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSB3aWxsIGxpZSwgbGlrZWx5LiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCB3aGVuIHRoaXMgZmVhdHVyZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODozMi4wMjgzODM2MzdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzc3MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTE9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTgtXFxuaW5pdC9LY29uZmlnOjE5MTk6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MjAtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjg9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5NDAtXFxuaW5pdC9LY29uZmlnOjE5NDE6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQyLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjMyLjA3MTc2NDI1NloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk5MTQyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGRvY3VtZW50YXRpb24ncyByZXZlbGF0aW9uLCByZW5kZXJlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJT19VUklORydzIENvbmZpZ3VyYXRpb24gTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhcyBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElPX1VSSU5HYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHNvbWUgb2JzY3VyZSBtb2R1bGUgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGdlbmVyYXRlZCBkeW5hbWljYWxseS4gQnV0LCBsbyBhbmQgYmVob2xkLCBhIHF1aWNrIHNlYXJjaCBhbmQgSSBmb3VuZCBpdCByaWdodCB0aGVyZSBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIGFjdHVhbGx5IHByZXR0eSBsb2dpY2FsLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LiBUaGUgYGluaXRgIGRpcmVjdG9yeSBvZnRlbiBob3VzZXMgY29yZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgbWFraW5nIGl0IHRoZSBpZGVhbCBsb2NhdGlvbiBmb3IgYSBmb3VuZGF0aW9uYWwgZmVhdHVyZSBsaWtlIGBJT19VUklOR2AgdGhhdCBmdW5kYW1lbnRhbGx5IGltcGFjdHMgSS9PIG9wZXJhdGlvbnMgZnJvbSB0aGUga2VybmVsJ3MgdmVyeSBib290LiBJdCBnaXZlcyBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGl0cyBjb3JlIGZlYXR1cmVzLCBhbmQgbWFrZXMgbWUgY29uc2lkZXIgcG90ZW50aWFsIGNoYW5nZXMgdG8gbWFrZSwgZ29pbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODozNS40NzA5MTExMjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTE5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTE5OlxcdGNvbmZpZyBJT19VUklOR1xcbjE5MjA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5MjE6XFx0XFx0c2VsZWN0IElPX1dRXFxuMTkyMjpcXHRcXHRkZWZhdWx0IHlcXG4xOTIzOlxcdFxcdGhlbHBcXG4xOTI0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgaW9fdXJpbmcgaW50ZXJmYWNlLCBlbmFibGluZ1xcbjE5MjU6XFx0XFx0ICBhcHBsaWNhdGlvbnMgdG8gc3VibWl0IGFuZCBjb21wbGV0ZSBJTyB0aHJvdWdoIHN1Ym1pc3Npb24gYW5kXFxuMTkyNjpcXHRcXHQgIGNvbXBsZXRpb24gcmluZ3MgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgYXBwbGljYXRpb24uXFxuMTkyNzpcXHRcXG4xOTI4OlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MzUuNDcxMDUxNTgxWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjAyMjI2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVkZJTyBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBkZWZhdWx0IGlzIHNldCB0byAneScuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgaW5pdGlhbCBzdGF0ZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBnaXZlbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBpbnRlbmRlZCBhcHBsaWNhdGlvbi5cblxuQmVmb3JlIHByb2NlZWRpbmcgZnVydGhlciwgSSBuZWVkIHRvIG1ha2UgYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgYFZGSU9gIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBhc3BlY3QsIGFuZCBnZXR0aW5nIHRoaXMgd3JvbmcgY2FuIGxlYWQgdG8gZGlmZmljdWx0IGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLCBzbyBJJ2xsIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgY29uZmxpY3RzIG9yIG1pc3NpbmcgY29tcG9uZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSBrbm93IHRoZSBudWFuY2VzIG9mIHRoZSBkcml2ZXJzIEknbSB3b3JraW5nIHdpdGggYW5kIHdoZXJlIHRoZXkgdGVuZCB0byBydW4gaW50byB0cm91YmxlLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgYSBrZXkgc3RlcCB0byBwcmV2ZW50aW5nIGxhdGVyIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjM4LjkzMTI3NzIyNFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4MjY0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODItXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODozOS4wMTAxMDcxMDNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwOTU3ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKlZGSU8gU2V0dXAgXHUwMDI2IERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGlua2luZyBhYm91dCB2aXJ0dWFsaXphdGlvbiB3aXRoIFZGSU8sIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgVkZJTyBhbmQgdGhlIGBWRklPX0lPTU1VX1RZUEUxYCBzZXR0aW5nIGFyZSB0aGUgaWRlYWwgcGF0aCB0byBwdXJzdWUuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBtb3N0IHJvYnVzdCB3YXkgdG8gZ2V0IGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYElPTU1VRkRgIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0J3MgY3J1Y2lhbCB0byBjb25maXJtIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGNvbXBvbmVudHMgb3IgY29uZmlndXJhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6NDIuMTE5Njg3NjQyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDY6XFx0Y29uZmlnIElPTU1VRkRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJJT01NVSBVc2Vyc3BhY2UgQVBJXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IElOVEVSVkFMX1RSRUVcXG4gICA5OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxcbiAgMTA6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTE6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFByb3ZpZGVzIC9kZXYvaW9tbXUsIHRoZSB1c2VyIEFQSSB0byBjb250cm9sIHRoZSBJT01NVSBzdWJzeXN0ZW0gYXNcXG4gIDE0OlxcdFxcdCAgaXQgcmVsYXRlcyB0byBtYW5hZ2luZyBJTyBwYWdlIHRhYmxlcyB0aGF0IHBvaW50IGF0IHVzZXIgc3BhY2UgbWVtb3J5LlxcbiAgMTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjQyLjExOTc1MDMyMloiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY5MzI5NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBpbm5pbmcgRG93biBNZW1vcnk6IEEgU3RyYXRlZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYElPTU1VRkRgIGlzIGEgc29saWQgZm91bmRhdGlvbiwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBJIHdhbnQgdG8gcmV2aXNpdCBgbWVtZmRfcGluX2ZvbGlvc2AuIEkgbmVlZCB0byBlbnN1cmUgaXRzIHVzYWdlIGlzIGNvbnNpc3RlbnQgYW5kIHByZWRpY3RhYmxlIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5BIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBzaG93cyBpdCdzIGRpcmVjdGx5IGludm9rZWQgYnkgYHVkbWFidWZfcGluX2ZvbGlvc2AgYW5kIGBwaW5fbWVtZmRfcGFnZXNgLiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzOiBgdWRtYWJ1Zl9jcmVhdGVgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBmb3IgcmV2aWV3LCBhbG9uZyB3aXRoIGBwaW5fbWVtZmRfcGFnZXNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcmVsZXZhbnQgYGlvX3Bpbl9wYWdlc2AgYW5kIGB2YWRkcl9nZXRfcGZuc2Agd2FycmFudCBleGFtaW5hdGlvbiBhcyB3ZWxsLiBUaGVzZSBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcyBmb3IgZGVlcCBkaXZlcy5cblxuSG9sZCBvbiBhIG1pbnV0ZS4uLiBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgKmV4cG9ydGVkKj8gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gSWYgaXQncyBleHBvcnRlZCwgdGhlbiBvdGhlciBtb2R1bGVzLCBwb3RlbnRpYWxseSBsZXNzIHNjcnV0aW5pemVkIG9uZXMsIGNvdWxkIGJlIGNhbGxpbmcgaXQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGJyb2FkZW4gbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGZpbmQgKmV2ZXJ5KiBjYWxsZXIgb2YgYG1lbWZkX3Bpbl9mb2xpb3NgIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgdW5leHBlY3RlZCBpbnRlZ3JhdGlvbnMgb3IsIGV2ZW4gd29yc2UsIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHN0ZW1taW5nIGZyb20gaXRzIHVzYWdlLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzaW5nLiBMZXQncyBzZWUgd2hvIGVsc2UgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg5NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjQ2LjU4OTA4MjU4WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4ODk0NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX3Bpbl9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTUtXFx0ZW5kID0gc3RhcnQgKyAocGdjbnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzE2OlxcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFxcdTAwMjZwZ29mZik7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTctXFx0aWYgKG5yX2ZvbGlvcyBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXFx0XFx0ICogSW4gYSBnaXZlbiByYW5nZSwgb25seSB0aGUgZmlyc3Qgc3VicGFnZSBvZiB0aGUgZmlyc3QgZm9saW9cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcXHRcXHQgKiBoYXMgYW4gb2Zmc2V0LCB0aGF0IGlzIHJldHVybmVkIGJ5IG1lbWZkX3Bpbl9mb2xpb3MoKS5cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cXHRcXHQgKiBUaGUgZmlyc3Qgc3VicGFnZXMgb2Ygb3RoZXIgZm9saW9zIChpbiB0aGUgcmFuZ2UpIGhhdmUgYW5cXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cXHQvKlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzNTpcXHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cXHQgKiB3ZSBjYW4gY29tcHV0ZSBucGFnZXMgcGlubmVkLCBhbmQgYXZvaWQgbG9vcGluZyBvdmVyIGZvbGlvcyBoZXJlXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXFx0ICovXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5OlxcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXFx1MDAzZWZpbGUsIHN0YXJ0LCBlbmQsIHVzZXItXFx1MDAzZXVmb2xpb3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVxcdFxcdFxcdFxcdCAgIG5mb2xpb3MsIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMzMTc9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzE4LVxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzMxOTpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzMjAtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jPTE5MD1FWFBPUlRfU1lNQk9MKHVucGluX3VzZXJfcGFnZSk7XFxuLS1cXG5tbS9ndXAuYy0xOTUtICpcXG5tbS9ndXAuYzoxOTY6ICogRm9saW9zIHRoYXQgd2VyZSBwaW5uZWQgdmlhIG1lbWZkX3Bpbl9mb2xpb3MoKSBvciBvdGhlciBzaW1pbGFyIHJvdXRpbmVzXFxubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXFxuLS1cXG5tbS9ndXAuYz0zNDE5PUVYUE9SVF9TWU1CT0wocGluX3VzZXJfcGFnZXNfdW5sb2NrZWQpO1xcbi0tXFxubW0vZ3VwLmMtMzQyMS0vKipcXG5tbS9ndXAuYzozNDIyOiAqIG1lbWZkX3Bpbl9mb2xpb3MoKSAtIHBpbiBmb2xpb3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtZmRcXG5tbS9ndXAuYy0zNDIzLSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcXG4tLVxcbm1tL2d1cC5jLTM0NDYtICovXFxubW0vZ3VwLmM6MzQ0Nzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxubW0vZ3VwLmMtMzQ0OC1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmMtMzU0My19XFxubW0vZ3VwLmM6MzU0NDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcXG5tbS9ndXAuYy0zNTQ1LVxcbi0tXFxubW0vZ3VwLmMtMzU1NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xcbm1tL2d1cC5jOjM1NTY6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcXG5tbS9ndXAuYy0zNTU3LSAqIChlLmcuLCBpbmRpdmlkdWFsIHBhZ2VzKSBvZiB0aGUgZm9saW8gbGF0ZXIsIGZvciBleGFtcGxlLCB1c2luZ1xcbi0tXFxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXFxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cXG5tbS9tZW1mZC5jLTY2LSAqIGluZGV4IGluIHRoZSBtYXBwaW5nLlxcbi0tXFxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMTI5LVxcdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXFxubW0vbWVtZmRfbHVvLmM6MTMwOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XFxubW0vbWVtZmRfbHVvLmMtMTMxLVxcdCAqIHNsb3RzLlxcbm1tL21lbWZkX2x1by5jLTEzMi1cXHQgKi9cXG5tbS9tZW1mZF9sdW8uYzoxMzM6XFx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxcbm1tL21lbWZkX2x1by5jLTEzNC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTI5MS1cXHQvKlxcbm1tL21lbWZkX2x1by5jOjI5MjpcXHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcXG5tbS9tZW1mZF9sdW8uYy0yOTMtXFx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODo0OC4xMTc5ODUyMDVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MDcyMzEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBwaW5uaW5nIGFuZCB1c2VyIHNwYWNlIGludGVyYWN0aW9uLiBJJ20gc2VlaW5nIGEgc3Ryb25nIGNhc2UgZm9yIGZvY3VzaW5nIG9uIGBtZW1mZF9waW5fZm9saW9zYC4gSSBhbHNvIHRoaW5rIGB1ZG1hYnVmX2NyZWF0ZWAsIGB1ZG1hYnVmX2lvY3RsX2NyZWF0ZWAsIGFuZCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAgYXJlIGdvb2QgY2FuZGlkYXRlcyBnaXZlbiB0aGVpciBzcGVjaWZpYyBpbnRlcmFjdGlvbnMuIFNpbWlsYXJseSwgYGlvX3Bpbl9wYWdlc2AsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYW5kIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAgc2VlbSB0byBkaXJlY3RseSBkZWFsIHdpdGggcGlubmluZyBwYWdlcyBpbiB0aGUgY29udGV4dCBvZiBJL08uIEFuZCBJIHNlZSBhIGxvdCB0byBsZWFybiBmcm9tIGB2YWRkcl9nZXRfcGZuc2AuXG5cbk5vdywgSSdtIGV2YWx1YXRpbmcgYHBpbl91c2VyX3BhZ2VzYCBhcyBhIGZvY3VzLiBJdCdzIGV4cG9ydGVkLCBidXQgaXQgZmVlbHMgYSBiaXQgYnJvYWQuIGBwaW5fdXNlcl9wYWdlc19mYXN0YCBoYXMgdGhlIHNhbWUgaXNzdWUuIEhvd2V2ZXIsIHRoZXkgYXJlIGRpcmVjdCBjYWxsZXJzIG9mIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgLCB3aGljaCBpbiB0dXJuLCBpcyB3aGVyZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGVyZWZvcmUsIHRoZWlyIGluY2x1c2lvbiBpcyBqdXN0aWZpZWQuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJlLWV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4NDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6NTIuNjY4NzExOTAxWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDI3Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2d1cF9sb25ndGVybV9sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZ3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jLTI0NjctLypcXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcXG5tbS9ndXAuYy0yNDY5LSAqIGFsbG93cyB1cyB0byBwcm9jZXNzIHRoZSBGT0xMX0xPTkdURVJNIGZsYWcuXFxubW0vZ3VwLmMtMjQ3MC0gKi9cXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9ndXAuYy0yNDcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2d1cC5jPTMxODY9c3RhdGljIGludCBndXBfZmFzdF9mYWxsYmFjayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzIxOS1cXHRwYWdlcyArPSBucl9waW5uZWQ7XFxubW0vZ3VwLmM6MzIyMDpcXHRyZXQgPSBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcXG5tbS9ndXAuYy0zMjIxLVxcdFxcdFxcdFxcdCAgICBwYWdlcywgXFx1MDAyNmxvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzNTM9bG9uZyBwaW5fdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9ndXAuYy0zMzYyLVxcdFxcdHJldHVybiAwO1xcbm1tL2d1cC5jOjMzNjM6XFx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChtbSwgc3RhcnQsIG5yX3BhZ2VzLCBwYWdlcyxcXG5tbS9ndXAuYy0zMzY0LVxcdFxcdFxcdFxcdCAgICAgbG9ja2VkID8gbG9ja2VkIDogXFx1MDAyNmxvY2FsX2xvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzODc9bG9uZyBwaW5fdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzM5My1cXHRcXHRyZXR1cm4gMDtcXG5tbS9ndXAuYzozMzk0OlxcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyxcXG5tbS9ndXAuYy0zMzk1LVxcdFxcdFxcdFxcdCAgICAgcGFnZXMsIFxcdTAwMjZsb2NrZWQsIGd1cF9mbGFncyk7XFxuLS1cXG5tbS9ndXAuYz0zNDA3PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL2d1cC5jLTM0MTUtXFxubW0vZ3VwLmM6MzQxNjpcXHRyZXR1cm4gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXFx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxcbm1tL2d1cC5jLTM0MTctXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODo1Mi43Mjg5OTU1NVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTc1MTkwMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBQaW5uaW5nIGFuZCBGb2xpbyBJc29sYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1haW4gdGhvdWdodCBpcyB0aGF0IGBwaW5fdXNlcl9wYWdlc19mYXN0YCBzZWVtcyBsaWtlIGEga2V5IGVudHJ5IHBvaW50LCBhcyBpdCB1bHRpbWF0ZWx5IGxlYWRzIHRvIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIHZpYSBgZ3VwX2Zhc3RfZmFsbGJhY2tgIGFuZCBgaW50ZXJuYWxfZ2V0X3VzZXJfcGFnZXNfZmFzdGAuIFRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSBJIHdhbnQgdG8gc3RhcnQgaWYgSSdtIHRyYWNpbmcgdGhlIGZsb3cgb2YgbWVtb3J5IHBpbm5pbmcgb3BlcmF0aW9ucy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc2lnbmlmaWNhbnQgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEuIEknbSBmb2N1c2luZyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBwaW5uaW5nLiBJJ2xsIGluY2x1ZGUgdGhlc2U6IGBtZW1mZF9waW5fZm9saW9zYCwgYHVkbWFidWZfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgLCBgaW9fcGluX3BhZ2VzYCwgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLCBgdmFkZHJfZ2V0X3BmbnNgLCBgcGluX3VzZXJfcGFnZXNfZmFzdGAsIGFuZCBgcGluX3VzZXJfcGFnZXNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4uXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhpcyBwYXRjaCBpbXBhY3RzIHN5c3RlbXMgdXNpbmcgYFVETUFCVUZgLCBgSU9fVVJJTkdgLCBgVkZJT2AsIGFuZCBgSU9NTVVGRGAuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFsbCByZWx5IG9uIG1lbW9yeSBwaW5uaW5nIGluIHNvbWUgZmFzaGlvbi5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgLiBUaGUgcHJvYmxlbSB3YXMgYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBjYWxjdWxhdGlvbiBmb3Igb3JkZXItMCBmb2xpb3Mgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGlzb2xhdGluZyB0aGVtLiBUaGUgaGFyZGNvZGVkIHZhbHVlIG9mIGAxYCBmb3IgcmVmZXJlbmNlIGNvdW50IHdhcyB3cm9uZy4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgdXNpbmcgYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoZSBjb3JyZWN0aW9uIGVuc3VyZXMgdGhlIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBpc29sYXRpbmcgcGFnZXMgZm9yIGxvbmctdGVybSBHVVAgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IG1pZ3JhdGUgcGFnZXMgZnJvbSBtb3ZhYmxlIHpvbmVzLiBUaGlzIGFmZmVjdHMgc3Vic3lzdGVtcyBzdWNoIGFzIGB1ZG1hYnVmYCwgYGlvX3VyaW5nYCwgYW5kIGBWRklPL0lPTU1VRkRgIHdoaWNoIHBpbiBtZW1vcnkgbG9uZyB0ZXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk1NCwiT3V0cHV0VG9rZW5zIjozMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjk6MDEuOTA0MTg4MzcxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxMzY3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVETUFCVUZcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJJT01NVUZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiLFxuICAgIFwidWRtYWJ1Zl9jcmVhdGVcIixcbiAgICBcInVkbWFidWZfaW9jdGxfY3JlYXRlXCIsXG4gICAgXCJ1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0XCIsXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyXCIsXG4gICAgXCJ2YWRkcl9nZXRfcGZuc1wiLFxuICAgIFwicGluX3VzZXJfcGFnZXNfZmFzdFwiLFxuICAgIFwicGluX3VzZXJfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVETUFCVUZcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJJT01NVUZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiLFxuICAgIFwidWRtYWJ1Zl9jcmVhdGVcIixcbiAgICBcInVkbWFidWZfaW9jdGxfY3JlYXRlXCIsXG4gICAgXCJ1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0XCIsXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyXCIsXG4gICAgXCJ2YWRkcl9nZXRfcGZuc1wiLFxuICAgIFwicGluX3VzZXJfcGFnZXNfZmFzdFwiLFxuICAgIFwicGluX3VzZXJfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 05:13:53 +0000 UTC FinishedAt: 2026-08-02 05:29:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDMABUF", "IO_URING", "VFIO", "IOMMUFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UDMABUF", "IO_URING", "VFIO", "IOMMUFD" ], "series_id": "674d050e-c580-4339-bc5e-d6aedad29bcf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memfd_pin_folios", "udmabuf_create", "udmabuf_ioctl_create", "udmabuf_ioctl_create_list", "io_pin_pages", "io_sqe_buffer_register", "io_sqe_buffers_register", "vaddr_get_pfns", "pin_user_pages_fast", "pin_user_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VETUFCVUYmIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtJT01NVUZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7LAogICAgJiMzNDt1ZG1hYnVmX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt1ZG1hYnVmX2lvY3RsX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0JiMzNDssCiAgICAmIzM0O2lvX3Bpbl9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3ZhZGRyX2dldF9wZm5zJiMzNDssCiAgICAmIzM0O3Bpbl91c2VyX3BhZ2VzX2Zhc3QmIzM0OywKICAgICYjMzQ7cGluX3VzZXJfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgIHdoZXJlIHRoZSBleHBlY3RlZCByZWZlcmVuY2UgY291bnQgb2YgYSBmb2xpbyB3YXMgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSBmb3Igb3JkZXItMCBmb2xpb3Mgd2hlbiBjaGVja2luZyBpZiB0aGV5IGNhbiBiZSBpc29sYXRlZC4gSXQgY2hhbmdlcyB0aGUgaGFyZGNvZGVkIGAxYCB0byBgcGluX3JlZnNgLCB3aGljaCBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIGZvciBvcmRlci0wIGZvbGlvcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGBGT0xMX0xPTkdURVJNYCBnZXRfdXNlcl9wYWdlcyAoR1VQKSBvcGVyYXRpb25zIChlLmcuLCBgcGluX3VzZXJfcGFnZXNgLCBgbWVtZmRfcGluX2ZvbGlvc2ApIHRvIG1pZ3JhdGUgcGFnZXMgb3V0IG9mIG1vdmFibGUgem9uZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN1YnN5c3RlbXMgdGhhdCBwaW4gbWVtb3J5IGxvbmctdGVybSwgc3VjaCBhcyB1ZG1hYnVmLCBpb191cmluZywgYW5kIFZGSU8vSU9NTVVGRC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI1OTA5YzE1MTYxNjI1MTZlY2M4YjAyODI2ZDE2NTcyYWQzY2Y5YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjI2OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IDk5OTAyYzE1NzAzYjAuLjQxYzMzMTdlMGYwZjQgMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmNcbkBAIC0yMjczLDYgJiM0MzsyMjczLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcbiBcbiBcdGZvciAoZm9saW8gPSBwb2ZzX2dldF9mb2xpbyhwb2ZzLCBpKTsgZm9saW87XG4gXHQgICAgIGZvbGlvID0gcG9mc19uZXh0X2ZvbGlvKGZvbGlvLCBwb2ZzLCBcdTAwMjZpKSkge1xuJiM0MztcdFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XG4gXG4gXHRcdGlmIChmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMjI4NywxNSAmIzQzOzIyODgsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFdlIGRyYWluIG5vdCBvbmx5IHRvIG1ha2UgdGhlIGZvbGlvX2lzb2xhdGVfbHJ1KCkgc3VjY2VlZCxcbiYjNDM7XHRcdCAqIGJ1dCBhbHNvIHRvIHJlbW92ZSBhbnkgb3RoZXIgZm9saW8gcmVmZXJlbmNlcyBmcm9tIExSVVxuJiM0MztcdFx0ICogY2FjaGVzLlxuJiM0MztcdFx0ICovXG4gXHRcdGlmIChkcmFpbmVkID09IDAgXHUwMDI2XHUwMDI2IGZvbGlvX21heV9iZV9scnVfY2FjaGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdGZvbGlvX3JlZl9jb3VudChmb2xpbykgIT1cbi1cdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgMSkge1xuJiM0MztcdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgcGluX3JlZnMpIHtcbiBcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDE7XG4gXHRcdH1cbiBcdFx0aWYgKGRyYWluZWQgPT0gMSBcdTAwMjZcdTAwMjYgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0Zm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPVxuLVx0XHRcdFx0Zm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdFx0Zm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyBwaW5fcmVmcykge1xuIFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDI7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VURNQUJVRiYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0lPTU1VRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDssCiAgICAmIzM0O3VkbWFidWZfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3QmIzM0OywKICAgICYjMzQ7aW9fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7dmFkZHJfZ2V0X3BmbnMmIzM0OywKICAgICYjMzQ7cGluX3VzZXJfcGFnZXNfZmFzdCYjMzQ7LAogICAgJiMzNDtwaW5fdXNlcl9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjU5MDljMTUxNjE2MjUxNmVjYzhiMDI4MjZkMTY1NzJhZDNjZjlhMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDU6MjY6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jCmluZGV4IDk5OTAyYzE1NzAzYjAuLjQxYzMzMTdlMGYwZjQgMTAwNjQ0Ci0tLSBhL21tL2d1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cC5jCkBAIC0yMjczLDYgJiM0MzsyMjczLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcygKIAogCWZvciAoZm9saW8gPSBwb2ZzX2dldF9mb2xpbyhwb2ZzLCBpKTsgZm9saW87CiAJICAgICBmb2xpbyA9IHBvZnNfbmV4dF9mb2xpbyhmb2xpbywgcG9mcywgJmFtcDtpKSkgewomIzQzOwkJY29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7CiAKIAkJaWYgKGZvbGlvX2lzX2xvbmd0ZXJtX3Bpbm5hYmxlKGZvbGlvKSkKIAkJCWNvbnRpbnVlOwpAQCAtMjI4NywxNSAmIzQzOzIyODgsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcygKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBXZSBkcmFpbiBub3Qgb25seSB0byBtYWtlIHRoZSBmb2xpb19pc29sYXRlX2xydSgpIHN1Y2NlZWQsCiYjNDM7CQkgKiBidXQgYWxzbyB0byByZW1vdmUgYW55IG90aGVyIGZvbGlvIHJlZmVyZW5jZXMgZnJvbSBMUlUKJiM0MzsJCSAqIGNhY2hlcy4KJiM0MzsJCSAqLwogCQlpZiAoZHJhaW5lZCA9PSAwICZhbXA7JmFtcDsgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoZm9saW8pICZhbXA7JmFtcDsKIAkJCQlmb2xpb19yZWZfY291bnQoZm9saW8pICE9Ci0JCQkJZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSB7CiYjNDM7CQkJCWZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgcGluX3JlZnMpIHsKIAkJCWxydV9hZGRfZHJhaW4oKTsKIAkJCWRyYWluZWQgPSAxOwogCQl9CiAJCWlmIChkcmFpbmVkID09IDEgJmFtcDsmYW1wOyBmb2xpb19tYXlfYmVfbHJ1X2NhY2hlZChmb2xpbykgJmFtcDsmYW1wOwogCQkJCWZvbGlvX3JlZl9jb3VudChmb2xpbykgIT0KLQkJCQlmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpIHsKJiM0MzsJCQkJZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyBwaW5fcmVmcykgewogCQkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKIAkJCWRyYWluZWQgPSAyOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHVVAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9ndXAuY2AuIEl0JiMzOTtzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIG9uIGxvbmctdGVybSBwaW5uaW5nIGJlaGF2aW9yLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGEgc3VidGxlIGFkanVzdG1lbnQgaW4gaG93IHdlIGRldGVybWluZSBpZiBhIGZvbGlvIGNhbiBiZSB1bnBpbm5lZC4gUHJldmlvdXNseSwgdGhlIGNoZWNrIGludm9sdmVkIGNvbXBhcmluZyB0aGUgZm9saW8mIzM5O3MgcmVmZXJlbmNlIGNvdW50IHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUgcGx1cyBvbmUuIE5vdywgaXQmIzM5O3MgYWRkaW5nIGBwaW5fcmVmc2AgdG8gdGhhdCBleHBlY3RlZCBjb3VudC4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgY2hlY2sgZnJvbSBgZm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPSBmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICYjNDM7IDFgIHRvIGBmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICYjNDM7IHBpbl9yZWZzYC4gVGhlIGBwaW5fcmVmc2AgdmFyaWFibGUgaXRzZWxmIHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsOiBpdCYjMzk7cyBlaXRoZXIgYDFgIGlmIHRoZSBmb2xpbyBoYXMgYSBwaW4gY291bnQgb3IsIG90aGVyd2lzZSwgaXQmIzM5O3MgZXF1YWwgdG8gYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgbW0vZ3VwLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgJiMzOTtHVVBfUElOX0NPVU5USU5HX0JJQVMmIzM5OyByZXByZXNlbnRzLCBhcyB3ZWxsIGFzIHRoZSBjb250ZXh0IG9mIGBmb2xpb19oYXNfcGluY291bnQoKWAuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBob3cgdGhlIEdVUCAoZ2V0X3VzZXJfcGFnZXMpIGlzIGludGVyYWN0aW5nIHdpdGggZm9saW8gcGlubmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjIzNz1zdGF0aWMgc3RydWN0IGZvbGlvICpwb2ZzX25leHRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ndXAuYy0yMjY0LSAqL1xubW0vZ3VwLmM6MjI2NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxubW0vZ3VwLmMtMjI2Ni1cdFx0c3RydWN0IGxpc3RfaGVhZCAqbW92YWJsZV9mb2xpb19saXN0LFxuLS1cbm1tL2d1cC5jPTIzOTI9Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcbi0tXG5tbS9ndXAuYy0yMzk2LVxubW0vZ3VwLmM6MjM5NzpcdGNvbGxlY3RlZCA9IGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXHUwMDI2bW92YWJsZV9mb2xpb19saXN0LFxubW0vZ3VwLmMtMjM5OC1cdFx0XHRcdFx0XHQgICAgICAgcG9mcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYCBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3NgLiBJIHNlZSB0aGF0IGl0IGNhbGxzIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYC4gVGhhdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5IHRvIHVuZGVyc3RhbmQsIGJ1dCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvICp0aGF0KiwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGF0IHRyaWdnZXJzIGl0LiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsZXJzIG9mIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgcGllY2UgdG8gdGhlIHB1enpsZSBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSB0aGF0JiMzOTtzIGF0IHBsYXkuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGludm9raW5nIHRoaXMgcm91dGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2d1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2d1cC5jPTIzOTE9c3RhdGljIGxvbmdcbm1tL2d1cC5jOjIzOTI6Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcbm1tL2d1cC5jLTIzOTMte1xuLS1cbm1tL2d1cC5jPTI0MjY9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXG4tLVxubW0vZ3VwLmMtMjQzNC1cbm1tL2d1cC5jOjI0MzU6XHRyZXR1cm4gY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3MoXHUwMDI2cG9mcyk7XG5tbS9ndXAuYy0yNDM2LX1cbi0tXG5tbS9ndXAuYz0yNDQyPXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9ndXAuYy0yNDUwLVxubW0vZ3VwLmM6MjQ1MTpcdHJldHVybiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhcdTAwMjZwb2ZzKTtcbm1tL2d1cC5jLTI0NTItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDoKCioqVW5kZXJzdGFuZGluZyB0aGUgQ2FsbGluZyBTdHJ1Y3R1cmUgb2YgRm9saW8gYW5kIFBhZ2UgTWlncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgYW5kIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYC4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhlc2UgYXJlIGNlbnRyYWwgdG8gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBwcmVzdW1hYmx5IG9mIGRhdGEgcmVsYXRlZCB0byBmb2xpb3MgYW5kIHBhZ2VzLCB3aGljaCBtYWtlcyBzZW5zZSBpbiBhIGxhcmdlLXNjYWxlIGRhdGEgc3lzdGVtLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdobyAqdHJpZ2dlcnMqIHRoZXNlIG1pZ3JhdGlvbnM/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBoaWdoZXItbGV2ZWwgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHRlbGwgbWUgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IHRoZXNlIG1pZ3JhdGlvbnMgYXJlIGluaXRpYXRlZC4gQXJlIHRoZXkgcGFydCBvZiBhIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHByb2Nlc3MsIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBvciBpbnZva2VkIGRpcmVjdGx5IGJ5IHVzZXIgYWN0aW9ucz8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0YXNrcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgdGhlIHRvb2xpbmcgdG8gdHJhY2UgdGhlIGNhbGwgaGllcmFyY2h5IGFuZCBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjM5MT1zdGF0aWMgbG9uZ1xubW0vZ3VwLmM6MjM5MjpjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhzdHJ1Y3QgcGFnZXNfb3JfZm9saW9zICpwb2ZzKVxubW0vZ3VwLmMtMjM5My17XG4tLVxubW0vZ3VwLmM9MjQyNj1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0yNDM0LVxubW0vZ3VwLmM6MjQzNTpcdHJldHVybiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhcdTAwMjZwb2ZzKTtcbm1tL2d1cC5jLTI0MzYtfVxuLS1cbm1tL2d1cC5jLTI0NDEtICovXG5tbS9ndXAuYzoyNDQyOnN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbm1tL2d1cC5jLTI0NDMtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuLS1cbm1tL2d1cC5jLTI0NTAtXG5tbS9ndXAuYzoyNDUxOlx0cmV0dXJuIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKFx1MDAyNnBvZnMpO1xubW0vZ3VwLmMtMjQ1Mi19XG5tbS9ndXAuYy0yNDUzLSNlbHNlXG5tbS9ndXAuYzoyNDU0OnN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbm1tL2d1cC5jLTI0NTUtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuLS1cbm1tL2d1cC5jPTI0NzE9c3RhdGljIGxvbmcgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2d1cC5jLTI0OTUtXHRcdC8qIEZPTExfTE9OR1RFUk0gaW1wbGllcyBGT0xMX1BJTiAqL1xubW0vZ3VwLmM6MjQ5NjpcdFx0cmMgPSBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKG5yX3Bpbm5lZF9wYWdlcywgcGFnZXMpO1xubW0vZ3VwLmMtMjQ5Ny1cdH0gd2hpbGUgKHJjID09IC1FQUdBSU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEdVUCBMb2NrIGFuZCBQYWdlIE1pZ3JhdGlvbioqCgpSaWdodCwgc28gYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAga2lja3MgdGhpbmdzIG9mZiB3aXRoIGEgY2FsbCB0byBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2YgbG9uZy10ZXJtIGxvY2tzIGFuZCBwYWdlIG9wZXJhdGlvbnMuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0cnlpbmcgdG8gaGFuZGxlIHBvdGVudGlhbGx5IG1vdmFibGUgcGFnZXMsIGFuZCBlbnN1cmluZyB0aGV5JiMzOTtyZSBpbiB0aGUgcmlnaHQgcGxhY2UgYmVmb3JlIGNvbnRpbnVpbmcuJiMzNDsKCkJ1dCB3aGF0IGFib3V0IHRoZSBjb3VudGVycGFydD8gU2hvdWxkbiYjMzk7dCB0aGVyZSBiZSBhIHBhcmFsbGVsIGZ1bmN0aW9uIGRlZGljYXRlZCB0byAqZm9saW9zKj8gV2UmIzM5O3JlIHN0YXJ0aW5nIHRvIGxlYW4gbW9yZSBpbnRvIGZvbGlvcyB0aGVzZSBkYXlzLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBPciBpcyBpdCBpbnRlbnRpb25hbGx5IG9taXR0ZWQ/IElzIHRoZSBmb2xpbyBoYW5kbGluZyBiZWluZyBzb21laG93IHN1YnN1bWVkIHdpdGhpbiB0aGUgcGFnZSBtaWdyYXRpb24sIG9yIGlzIGl0IGhhbmRsZWQgaW4gYSBkaWZmZXJlbnQgY29kZXBhdGggYWx0b2dldGhlcj8gSSBuZWVkIHRvIHJldmlldyB0aGlzIG1vcmUgY2FyZWZ1bGx5IHRvIHNlZSBob3cgdGhlIGZvbGlvIG1pZ3JhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGluIGNvbnRleHQuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AgYW5kIGEgaHlwb3RoZXRpY2FsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgbmVlZHMgY2xvc2VyIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2d1cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2d1cC5jPTIzOTI9Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcbi0tXG5tbS9ndXAuYy0yNDI1LSAqL1xubW0vZ3VwLmM6MjQyNjpzdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbm1tL2d1cC5jLTI0MjctXHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zKVxuLS1cbm1tL2d1cC5jLTI0MzktICogUmV0dXJuIHZhbHVlcyBhbmQgYmVoYXZpb3IgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvclxubW0vZ3VwLmM6MjQ0MDogKiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcygpLlxubW0vZ3VwLmMtMjQ0MS0gKi9cbi0tXG5tbS9ndXAuYz0yNDU0PXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9ndXAuYy0yNDU5LVxubW0vZ3VwLmM6MjQ2MDpzdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbm1tL2d1cC5jLTI0NjEtXHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zKVxuLS1cbm1tL2d1cC5jPTM0NDc9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLS1cbm1tL2d1cC5jLTM1MzItXG5tbS9ndXAuYzozNTMzOlx0XHRyZXQgPSBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyhucl9mb2xpb3MsIGZvbGlvcyk7XG5tbS9ndXAuYy0zNTM0LVx0fSB3aGlsZSAocmV0ID09IC1FQUdBSU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGaXhlcyBmb3IgRnV6emluZyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHJlY29nbml6ZSB0aGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaG93IGdldF91c2VyX3BhZ2VzIChHVVApIHdpdGggRk9MTF9MT05HVEVSTSBpbnRlcmFjdHMgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGxvbmctdGVybSBsb2NrcyBhbmQgcGlubmVkIG1lbW9yeS4gV2UmIzM5O3ZlIGdvdCBgbWVtZmRfcGluX2ZvbGlvc2AgY2FsbGluZyBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3NgIGFuZCBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCBjYWxsaW5nIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYC4gVGhlc2UgYXJlIGJvdGggY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYWN0aXZlbHkgdXNlZC4KClRoZSBoZWFydCBvZiB0aGUgZml4IGxpZXMgaW4gY29ycmVjdGluZyBhbiBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50IGNoZWNrLiBUaGUgY29kZSB3YXMgdXNpbmcgYGZvbGlvX3JlZl9jb3VudChmb2xpbykgIT0gZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxYCwgYnV0IGZvciBmb2xpb3MgdGhhdCBhcmVuJiMzOTt0IHVzaW5nIGEgcGluIGNvdW50LCBHVVAgYWRkcyBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCByYXRoZXIgdGhhbiBhIHNpbXBsZSBpbmNyZW1lbnQgb2YgMS4gQ29uc2VxdWVudGx5LCB3ZSBuZWVkIHRvIHN3YXAgdGhlIGluY29ycmVjdCBgJiM0MzsgMWAgd2l0aCBhIGNoZWNrIGFnYWluc3QgYHBpbl9yZWZzYC4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgYmVoYXZpb3IuCgpOb3csIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBjb3JyZWN0ZWQgY29kZSBpcyBleGVjdXRlZC4gYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYGdldF91c2VyX3BhZ2VzYCwgYW5kIHBvdGVudGlhbGx5IG90aGVycy4gVGhhdCYjMzk7cyBhIHJpY2ggbGlzdCBvZiBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYG1lbWZkX3Bpbl9mb2xpb3NgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCB3aGljaCBvcGVucyBpdCB1cCB0byBmdXp6aW5nIGFzIHdlbGwuIFNvIEkgbmVlZCB0byBmaW5kIHRoZSB2YXJpb3VzIGNhbGxlcnMgb2YgYG1lbWZkX3Bpbl9mb2xpb3NgLCBhbmQgY29uc2lkZXIgdGhvc2UgYXMgZnV6eiB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE1LVx0ZW5kID0gc3RhcnQgJiM0MzsgKHBnY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIDE7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMxNjpcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFx1MDAyNnBnb2ZmKTtcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzE3LVx0aWYgKG5yX2ZvbGlvcyBcdTAwM2M9IDApXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXHRcdCAqIEluIGEgZ2l2ZW4gcmFuZ2UsIG9ubHkgdGhlIGZpcnN0IHN1YnBhZ2Ugb2YgdGhlIGZpcnN0IGZvbGlvXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcdFx0ICogaGFzIGFuIG9mZnNldCwgdGhhdCBpcyByZXR1cm5lZCBieSBtZW1mZF9waW5fZm9saW9zKCkuXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cdFx0ICogVGhlIGZpcnN0IHN1YnBhZ2VzIG9mIG90aGVyIGZvbGlvcyAoaW4gdGhlIHJhbmdlKSBoYXZlIGFuXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cdC8qXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MzU6XHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVx0ICogd2UgY2FuIGNvbXB1dGUgbnBhZ2VzIHBpbm5lZCwgYW5kIGF2b2lkIGxvb3Bpbmcgb3ZlciBmb2xpb3MgaGVyZVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cdCAqL1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5Olx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cdTAwM2VmaWxlLCBzdGFydCwgZW5kLCB1c2VyLVx1MDAzZXVmb2xpb3MsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXHRcdFx0XHQgICBuZm9saW9zLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0zMzE3PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzE4LVx0XHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzMxOTpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzMyMC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYz0xOTA9RVhQT1JUX1NZTUJPTCh1bnBpbl91c2VyX3BhZ2UpO1xuLS1cbm1tL2d1cC5jLTE5NS0gKlxubW0vZ3VwLmM6MTk2OiAqIEZvbGlvcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBtZW1mZF9waW5fZm9saW9zKCkgb3Igb3RoZXIgc2ltaWxhciByb3V0aW5lc1xubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXG4tLVxubW0vZ3VwLmM9MzQxOT1FWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKTtcbi0tXG5tbS9ndXAuYy0zNDIxLS8qKlxubW0vZ3VwLmM6MzQyMjogKiBtZW1mZF9waW5fZm9saW9zKCkgLSBwaW4gZm9saW9zIGFzc29jaWF0ZWQgd2l0aCBhIG1lbWZkXG5tbS9ndXAuYy0zNDIzLSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcbi0tXG5tbS9ndXAuYy0zNDQ2LSAqL1xubW0vZ3VwLmM6MzQ0Nzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5tbS9ndXAuYy0zNDQ4LVx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxuLS1cbm1tL2d1cC5jLTM1NDMtfVxubW0vZ3VwLmM6MzU0NDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcbm1tL2d1cC5jLTM1NDUtXG4tLVxubW0vZ3VwLmMtMzU1NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xubW0vZ3VwLmM6MzU1NjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xubW0vZ3VwLmMtMzU1Ny0gKiAoZS5nLiwgaW5kaXZpZHVhbCBwYWdlcykgb2YgdGhlIGZvbGlvIGxhdGVyLCBmb3IgZXhhbXBsZSwgdXNpbmdcbi0tXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxubW0vbWVtZmQuYy02Ni0gKiBpbmRleCBpbiB0aGUgbWFwcGluZy5cbi0tXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vbWVtZmRfbHVvLmMtMTI5LVx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcbm1tL21lbWZkX2x1by5jOjEzMDpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XG5tbS9tZW1mZF9sdW8uYy0xMzEtXHQgKiBzbG90cy5cbm1tL21lbWZkX2x1by5jLTEzMi1cdCAqL1xubW0vbWVtZmRfbHVvLmM6MTMzOlx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxubW0vbWVtZmRfbHVvLmMtMTM0LVx0XHRcdFx0ICAgICBcdTAwMjZvZmZzZXQpO1xuLS1cbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtMjkxLVx0Lypcbm1tL21lbWZkX2x1by5jOjI5MjpcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxubW0vbWVtZmRfbHVvLmMtMjkzLVx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqUGlubmluZyBEb3duIE1lbW9yeSBpbiB0aGUgS2VybmVsIC0gTGV0JiMzOTtzIFRyYWNlIHRoZSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgZmV3IGtleSBmdW5jdGlvbnMgY2FsbGluZyBgbWVtZmRfcGluX2ZvbGlvc2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2AgZnJvbSB0aGUgaW9tbXVmZCBzdWJzeXN0ZW0gYXJlIGRlZmluaXRlbHkgdXNpbmcgaXQuIFRoYXQgbWFrZXMgc2Vuc2UsIGJvdGggYXJlIGRlYWxpbmcgd2l0aCBETUEgYW5kIG1lbW9yeSBtYXBwaW5nLCBzbyBwaW5uaW5nIHBhZ2VzIHdvdWxkIGJlIGNydWNpYWwgdGhlcmUuIEFuZCwgb2gsIHRoZXJlJiMzOTtzIGBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zYCBpbiBgbW0vbWVtZmRfbHVvLmNgIHRvby4gVGhhdCBvbmXigJlzIGludGVyZXN0aW5nLCBtZW1vcnkgbGltaXRzIGFyZSBvZnRlbiB0aGUgbWFpbiByZWFzb24gZm9yIHBpbm5pbmcgZG93biB0aGUgbWVtb3J5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICpyZWFsbHkqIGdvaW5nIG9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoaXMgcGlubmluZyBtZWNoYW5pc20gbGlrZWx5IGxpZXMsIGluIGhvdyBpdCBzZWN1cmVzIHRoZSBwaHlzaWNhbCBwYWdlcywgd2hhdCBpdHMgY29udGV4dCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ndXBfbG9uZ3Rlcm1fbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0yNDY3LS8qXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcbm1tL2d1cC5jLTI0NjktICogYWxsb3dzIHVzIHRvIHByb2Nlc3MgdGhlIEZPTExfTE9OR1RFUk0gZmxhZy5cbm1tL2d1cC5jLTI0NzAtICovXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2d1cC5jLTI0NzItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vZ3VwLmM9MzE4Nj1zdGF0aWMgaW50IGd1cF9mYXN0X2ZhbGxiYWNrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzIxOS1cdHBhZ2VzICYjNDM7PSBucl9waW5uZWQ7XG5tbS9ndXAuYzozMjIwOlx0cmV0ID0gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcbm1tL2d1cC5jLTMyMjEtXHRcdFx0XHQgICAgcGFnZXMsIFx1MDAyNmxvY2tlZCxcbi0tXG5tbS9ndXAuYz0zMzUzPWxvbmcgcGluX3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2d1cC5jLTMzNjItXHRcdHJldHVybiAwO1xubW0vZ3VwLmM6MzM2MzpcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQobW0sIHN0YXJ0LCBucl9wYWdlcywgcGFnZXMsXG5tbS9ndXAuYy0zMzY0LVx0XHRcdFx0ICAgICBsb2NrZWQgPyBsb2NrZWQgOiBcdTAwMjZsb2NhbF9sb2NrZWQsXG4tLVxubW0vZ3VwLmM9MzM4Nz1sb25nIHBpbl91c2VyX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzM5My1cdFx0cmV0dXJuIDA7XG5tbS9ndXAuYzozMzk0Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsXG5tbS9ndXAuYy0zMzk1LVx0XHRcdFx0ICAgICBwYWdlcywgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuLS1cbm1tL2d1cC5jPTM0MDc9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL2d1cC5jLTM0MTUtXG5tbS9ndXAuYzozNDE2Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxubW0vZ3VwLmMtMzQxNy1cdFx0XHRcdCAgICAgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1VQIExvbmd0ZXJtIExvY2tpbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGZ1bmN0aW9uIOKAkyBpdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBsb25nLXRlcm0gR1VQIGxvY2tpbmcgbG9naWMuIEl0JiMzOTtzIGNhbGxlZCBieSBgcGluX3VzZXJfcGFnZXNgLCBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCwgYHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkYCwgYW5kIGBndXBfZmFzdF9mYWxsYmFja2AsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgR1VQIGVudHJ5IHBvaW50cy4gTm90aGluZyB1bnVzdWFsIHRoZXJlLCBzdGFuZGFyZCBHVVAgc3R1ZmYuIFRoZSBjcnVjaWFsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYC4gVGhpcyBvbmUgaXMgY2FsbGVkIGJ5IGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYCBhbmQgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zYC4KClRoZSB0cmlnZ2VyIGZvciBhbGwgb2YgdGhpcyBpcyB3aGVuIGBGT0xMX0xPTkdURVJNYCBpcyBwYXNzZWQgdG8gR1VQLCBhbmQgdGhlIHRhcmdldCBwYWdlcyBvciBmb2xpb3MgcmVzaWRlIGluIGEgbW92YWJsZSB6b25lLCBsaWtlIFpPTkVfTU9WQUJMRSBvciBDTUEuIE1ha2VzIHNlbnNlLCB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGhhbmRsZSBsb25nLXRlcm0gcGlubmluZyBpbiBhIHdheSB0aGF0JiMzOTtzIGNvbXBhdGlibGUgd2l0aCBtZW1vcnkgbWlncmF0aW9uLgoKQnV0IHdhaXQsIEkgc2VlIHRoZSBidWc6IGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgJiM0MzsgMWAgaXMgYmVpbmcgdXNlZCBpbiB0aGUgY29kZS4gSSByZWNhbGwgdGhhdCBmb3IgbG9uZy10ZXJtIHBpbnMsIHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQgYnkgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AuIFRoYXQgaXMsIGlmIHRoZSBmb2xpbyBoYXMgYSBwaW5jb3VudCwgdGhlbiB0aGUgcmVmY291bnQgaXMgYWN0dWFsbHkgaW5jcmVtZW50ZWQgYnkgKjEwMjQqIQoKSG9sZCBvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtIGNvcnJlY3RseS4gTGV0JiMzOTtzIHNlZS4uLiBgZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKWAgaXMgdHJ1ZSBmb3IgbGFyZ2VyIGZvbGlvcywgdGhvc2Ugd2l0aCBhbiBvcmRlciBncmVhdGVyIHRoYW4gMCwgd2hlcmUgdGhlIHBpbiBjb3VudCBpcyBzdG9yZWQgc2VwYXJhdGVseS4gQnV0IGZvciBvcmRlci0wIGZvbGlvcywgdGhlIHBpbiBjb3VudCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIHJlZmNvdW50IGl0c2VsZi4gU28sIGZvciB0aG9zZSwgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgaXMgYWRkZWQgZGlyZWN0bHkgdG8gdGhlIHJlZmNvdW50ISBJdCYjMzk7cyBhIGJpdCB0cmlja3k7IEkgc2hvdWxkIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgZm9saW9faGFzX3BpbmNvdW50YCBsb2dpYy4gVGhhdCYjMzk7cyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19oYXNfcGluY291bnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTI2NjU9c3RhdGljIGlubGluZSBwdWRfdCBmb2xpb19ta19wdWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgcGdwcm90X3QgcGdwcm90KVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yNjcyLVxuaW5jbHVkZS9saW51eC9tbS5oOjI2NzM6c3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19waW5jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9tbS5oLTI2NzQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yNzA1PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXliZV9kbWFfcGlubmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21tLmgtMjcwNi17XG5pbmNsdWRlL2xpbnV4L21tLmg6MjcwNzpcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKVxuaW5jbHVkZS9saW51eC9tbS5oLTI3MDgtXHRcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpIFx1MDAzZSAwO1xuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtODUtXG5tbS9kZWJ1Zy5jOjg2Olx0XHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcbm1tL2RlYnVnLmMtODctXHRcdFx0cGluY291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpO1xuLS1cbm1tL2d1cC5jPTEwMj1zdGF0aWMgdm9pZCBndXBfcHV0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWZzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxubW0vZ3VwLmMtMTA3LVx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GT0xMX1BJTl9SRUxFQVNFRCwgcmVmcyk7XG5tbS9ndXAuYzoxMDg6XHRcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKVxubW0vZ3VwLmMtMTA5LVx0XHRcdGF0b21pY19zdWIocmVmcywgXHUwMDI2Zm9saW8tXHUwMDNlX3BpbmNvdW50KTtcbi0tXG5tbS9ndXAuYz0xNDA9aW50IF9fbXVzdF9jaGVjayB0cnlfZ3JhYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVmcyxcbi0tXG5tbS9ndXAuYy0xNjItXHRcdCAqL1xubW0vZ3VwLmM6MTYzOlx0XHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSkge1xubW0vZ3VwLmMtMTY0LVx0XHRcdGZvbGlvX3JlZl9hZGQoZm9saW8sIHJlZnMpO1xuLS1cbm1tL2d1cC5jPTIxMj12b2lkIGZvbGlvX2FkZF9waW4oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9ndXAuYy0yMjEtXHQgKi9cbm1tL2d1cC5jOjIyMjpcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKSB7XG5tbS9ndXAuYy0yMjMtXHRcdFdBUk5fT05fT05DRShhdG9taWNfcmVhZChcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpIFx1MDAzYyAxKTtcbi0tXG5tbS9ndXAuYz01MTc9c3RhdGljIHN0cnVjdCBmb2xpbyAqdHJ5X2dyYWJfZm9saW9fZmFzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJlZnMsXG4tLVxubW0vZ3VwLmMtNTY1LVx0ICovXG5tbS9ndXAuYzo1NjY6XHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcbm1tL2d1cC5jLTU2Ny1cdFx0YXRvbWljX2FkZChyZWZzLCBcdTAwMjZmb2xpby1cdTAwM2VfcGluY291bnQpO1xuLS1cbm1tL2d1cC5jPTIyNjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcbi0tXG5tbS9ndXAuYy0yMjc1LVx0ICAgICBmb2xpbyA9IHBvZnNfbmV4dF9mb2xpbyhmb2xpbywgcG9mcywgXHUwMDI2aSkpIHtcbm1tL2d1cC5jOjIyNzY6XHRcdGNvbnN0IGludCBwaW5fcmVmcyA9IGZvbGlvX2hhc19waW5jb3VudChmb2xpbykgPyAxIDogR1VQX1BJTl9DT1VOVElOR19CSUFTO1xubW0vZ3VwLmMtMjI3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEZvbGlvIFBpbiBDb3VudCBDaGFuZ2UqKgoKT2theSwgc28gYGZvbGlvX2hhc19waW5jb3VudGAgZGVmaW5pdGl2ZWx5IHJldHVybnMgdHJ1ZSBmb3IgdGhvc2UgbGFyZ2UgZm9saW9zIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCBrZXkgcG9pbnQuIEFuZCBmb3Igb3JkZXItMCBmb2xpb3MsIHRoZSBzeXN0ZW0gaXMgbm93IGFkZGluZyBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCB0byB0aGUgcmVmY291bnQuIFRoaXMgdHJhbnNsYXRlcyBkaXJlY3RseSB0byB0aGUgYHBpbl9yZWZzYCB2YWx1ZSwgd2hpY2ggd2lsbCBiZSBlaXRoZXIgMSAoZm9yIGxhcmdlIGZvbGlvcykgb3IgdGhhdCBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCAoZm9yIG9yZGVyLTAgZm9saW9zKS4gU28sIGZyb20gYSBmdW5kYW1lbnRhbCBwZXJzcGVjdGl2ZSwgdGhpcyBjb25zdGl0dXRlcyBhICpmdW5jdGlvbmFsKiBzaGlmdCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSXQmIzM5O3Mgbm90IGp1c3QgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsOyBpdCYjMzk7cyBob3cgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3cgYmVpbmcgaGFuZGxlZC4KClRoZSBuZXh0IHF1ZXN0aW9uIOKAkyBpcyB0aGlzIGNoYW5nZSBicm9hZGx5IGltcGFjdGluZyB0aGUga2VybmVsPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgc2VlbXMgbGlrZWx5LCBhbmQgeWVzLCBJIHJlbWVtYmVyIGBwaW5fdXNlcl9wYWdlc2Agd2l0aCBgRk9MTF9MT05HVEVSTWAgYmVpbmcgdXNlZCB3aWRlbHkgdGhyb3VnaG91dCB0aGUga2VybmVsIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIGRyaXZlcnMuIGBpb191cmluZ2AgdXNlcyBgcGluX3VzZXJfcGFnZXNgIGZvciByZWdpc3RlcmVkIGJ1ZmZlcnMsIGFuZCB0aGF04oCZcyBhIGNyaXRpY2FsIGNhc2UgdG8gY29uc2lkZXIuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIGlmIGBpb191cmluZ2AgdXRpbGl6ZXMgYEZPTExfTE9OR1RFUk1gIGluIGl0cyBgcGluX3VzZXJfcGFnZXNgIGNhbGxzLiBJIG5lZWQgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Rk9MTF9MT05HVEVSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL21lbW1hcC5jPTQwPXN0cnVjdCBwYWdlICoqaW9fcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdWFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgKm5wYWdlcylcbi0tXG5pb191cmluZy9tZW1tYXAuYy02Mi1cbmlvX3VyaW5nL21lbW1hcC5jOjYzOlx0cmV0ID0gcGluX3VzZXJfcGFnZXNfZmFzdCh1YWRkciwgbnJfcGFnZXMsIEZPTExfV1JJVEUgfCBGT0xMX0xPTkdURVJNLFxuaW9fdXJpbmcvbWVtbWFwLmMtNjQtXHRcdFx0XHRcdHBhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBpb191cmluZyB3aXRoIEZPTExfTE9OR1RFUk06IFBvdGVudGlhbCBUYXJnZXRzKioKCk9rYXksIHNvIGBpb191cmluZ2AgKmRvZXMqIGxldmVyYWdlIGBGT0xMX0xPTkdURVJNYC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldCBmb3IgZnV6emluZy4gVGltZSB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG91ciBlZmZvcnRzLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzYCwgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zYCwgYW5kIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGFyZSBhbGwgaW50ZXJuYWwsIHNvIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBidXQgbGlrZWx5IGxlc3MgZXhwb3NlZCB0byBleHRlcm5hbCBpbnB1dCwgd2hpY2ggbWFrZXMgdGhlbSB0cmlja2llciB0byB0YXJnZXQgZGlyZWN0bHkuIFByb2JhYmx5IGJlc3QgdG8gdHJlYXQgdGhlbSBhcyBwb3RlbnRpYWwgc2Vjb25kYXJ5IHRhcmdldHMgb3IgY29uc2lkZXIgaG93IG91ciBjaG9zZW4gaW5wdXRzIGluZmx1ZW5jZSB0aGVtIGluZGlyZWN0bHkuCgpUaGUgZXhwb3J0ZWQgc3ltYm9scyBhcmUgdGhlIHJlYWwga2V5IGhlcmUuIFdlIGhhdmUgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCwgYHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkYCwgYW5kIGBtZW1mZF9waW5fZm9saW9zYC4gSG1tLCBgcGluX3VzZXJfcGFnZXNgLi4uIGl0JiMzOTtzIGEgaG90IHBhdGgsIGJ1dCBwZXJoYXBzIG5vdCB0aGUgKmhvdHRlc3QqPyBJdCYjMzk7cyB1c2VkIGZvciBwaW5uaW5nLCB3aGVyZWFzIGBnZXRfdXNlcl9wYWdlc2AgbWlnaHQgYmUgYSBtb3JlIGxpa2VseSBhcmVhIHRvIGZpbmQgYnVncy4gV2FpdCwgYG1lbWZkX3Bpbl9mb2xpb3NgIGxvb2tzIHByb21pc2luZyEgSXQmIzM5O3Mgc3VwZXIgc3BlY2lmaWMgYW5kIGRpcmVjdGx5IGhpdHMgdGhlIGNvZGUgcGF0aCB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gWWVzLCBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBnb2luZyBvbiB0aGUgbGlzdCwgYWxvbmdzaWRlIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGFuZCBgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWRgLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGdvb2QgZW50cnkgcG9pbnRzLiBJIHdvbmRlciBhYm91dCBgaW9fcGluX3BhZ2VzYCBpbiBpb191cmluZy4uLiBpdCYjMzk7cyB3b3J0aCBhIGxvb2suIExldCYjMzk7cyBkaWcgaW50byB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9tZW1tYXAuYz0xOD1zdGF0aWMgYm9vbCBpb19tZW1fYWxsb2NfY29tcG91bmQoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM5LVxuaW9fdXJpbmcvbWVtbWFwLmM6NDA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxuaW9fdXJpbmcvbWVtbWFwLmMtNDEte1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTEzND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9waW5fcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTE0MC1cbmlvX3VyaW5nL21lbW1hcC5jOjE0MTpcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHJlZy1cdTAwM2V1c2VyX2FkZHIsIHNpemUsIFx1MDAyNm5yX3BhZ2VzKTtcbmlvX3VyaW5nL21lbW1hcC5jLTE0Mi1cdGlmIChJU19FUlIocGFnZXMpKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5oLTktXG5pb191cmluZy9tZW1tYXAuaDoxMDpzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpO1xuaW9fdXJpbmcvbWVtbWFwLmgtMTEtXG4tLVxuaW9fdXJpbmcvcnNyYy5jPTg1NT1zdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9yc3JjLmMtODgzLVx0cmV0ID0gLUVOT01FTTtcbmlvX3VyaW5nL3JzcmMuYzo4ODQ6XHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVx1MDAzZWlvdl9iYXNlLCBpb3YtXHUwMDNlaW92X2xlbixcbmlvX3VyaW5nL3JzcmMuYy04ODUtXHRcdFx0XHRcdTAwMjZucl9wYWdlcyk7XG4tLVxuaW9fdXJpbmcvemNyeC5jPTIwMj1zdGF0aWMgaW50IGlvX2ltcG9ydF91bWVtKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxLFxuLS1cbmlvX3VyaW5nL3pjcnguYy0yMTMtXHRcdHJldHVybiAtRUZBVUxUO1xuaW9fdXJpbmcvemNyeC5jOjIxNDpcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFyZWFfcmVnLVx1MDAzZWFkZHIsIGFyZWFfcmVnLVx1MDAzZWxlbixcbmlvX3VyaW5nL3pjcnguYy0yMTUtXHRcdFx0XHQgICBcdTAwMjZucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgTWVtb3J5IE1hbmFnZW1lbnQgU3RyYXRlZ2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWdpZXMgZm9yIGVmZmljaWVudCBJL08uIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kOyB0aGF0JiMzOTtzIGEgc29saWQgY29udGVuZGVyLiBCdXQgSSBuZWVkIHRvIGV4cGxvcmUgYWx0ZXJuYXRpdmVzIGFuZCByZWxhdGVkIG1ldGhvZHMuIEkgd29uZGVyIGFib3V0IGBtZW1mZF9waW5fZm9saW9zYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBpbnRyaWd1aW5nLCBlc3BlY2lhbGx5IGdpdmVuIGl0cyByb2xlIGluIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgIGFuZCBgcGluX21lbWZkX3BhZ2VzYCwgdGhlIGlvbW11ZmQgY29tcG9uZW50LiBMZXQgbWUgZGlnIGludG8gdGhhdCBgdWRtYWJ1Zl9waW5fZm9saW9zYCBmdW5jdGlvbiwgYXMgaXQgc2VlbXMgY2VudHJhbCB0byB0aGlzIGxpbmUgb2YgaW5xdWlyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRtYWJ1Zl9waW5fZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTI5MD1zdGF0aWMgc3RydWN0IGRtYV9idWYgKmV4cG9ydF91ZG1hYnVmKHN0cnVjdCB1ZG1hYnVmICp1YnVmLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzAzLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMDQ6c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMwNS1cdFx0XHQgICAgICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3Qgc2l6ZSwgc3RydWN0IGZvbGlvICoqZm9saW9zKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzUwPXN0YXRpYyBsb25nIHVkbWFidWZfY3JlYXRlKHN0cnVjdCBtaXNjZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00MTItXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQxMzpcdFx0cmV0ID0gdWRtYWJ1Zl9waW5fZm9saW9zKHVidWYsIG1lbWZkLCBsaXN0W2ldLm9mZnNldCxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDE0LVx0XHRcdFx0XHQgbGlzdFtpXS5zaXplLCBmb2xpb3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gRnV6emluZyB1ZG1hYnVmKioKCk9rYXksIHNvIGB1ZG1hYnVmX2NyZWF0ZWAgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgYW55IHVkbWFidWYgZnV6emluZyBlZmZvcnRzLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgYW5kIGl0IGNhbGxzIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgYSBsb3Qgb2YgdGhlIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJT01NVSBhY3R1YWxseSBoYXBwZW5zLiBUaGF0IG1ha2VzIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbGlrZSB0aGF0IGFzIGEgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBwaW5fbWVtZmRfcGFnZXNgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuY2AgbmV4dC4gSXQgc291bmRzIGxpa2UgdGhlIGtpbmQgb2YgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgb2Z0ZW4gY29udGFpbnMgaW50ZXJlc3RpbmcgYW5kIGV4cGxvaXRhYmxlIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaW5fbWVtZmRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2lvbW11ZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgwNz1zdGF0aWMgdm9pZCBwZm5fcmVhZGVyX3VzZXJfZGVzdHJveShzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgyMy1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgyNDpzdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgyNS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODc2PXN0YXRpYyBpbnQgcGZuX3JlYWRlcl91c2VyX3BpbihzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkyOC1cdFx0c3RhcnQgPSBwYWdlcy1cdTAwM2VzdGFydCAmIzQzOyAoc3RhcnRfaW5kZXggKiBQQUdFX1NJWkUpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6OTI5Olx0XHRyYyA9IHBpbl9tZW1mZF9wYWdlcyh1c2VyLCBzdGFydCwgbnBhZ2VzKTtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkzMC1cdH0gZWxzZSBpZiAoIXJlbW90ZV9tbSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OgoKKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgUGlubmluZyBNZWNoYW5pc20qKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBgcGZuX3JlYWRlcl91c2VyX3BpbmAuIFRoaXMgZnVuY3Rpb24mIzM5O3MgY2FsbGluZyBgcGluX21lbWZkX3BhZ2VzYCwgcmlnaHQ/IEludGVyZXN0aW5nLiBJdCYjMzk7cyBjbGVhciB0aGF0IHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoaXMgYHBmbl9yZWFkZXJfdXNlcl9waW5gIGFuZCB0aGUgbWVtZmQgbWVjaGFuaXNtLCBhbmQgdGhhdCBgcGZuX3JlYWRlcl91c2VyX3BpbmAgbXVzdCBiZSB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9uLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIHRoaXMgYHBmbl9yZWFkZXJfdXNlcl9waW5gIGZ1bmN0aW9uLiBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB3aGVyZSB1c2VybGFuZCBtZW1vcnkgaXMgYmVpbmcgcGlubmVkIGJhc2VkIG9uIHBmbnMgLSBJIG5lZWQgdG8gc2VlIHdobyYjMzk7cyBhY3R1YWxseSAqdXNpbmcqIGl0LCB3aG8gbmVlZHMgdGhvc2UgcGFnZXMgcGlubmVkIGluIG1lbW9yeSBhbmQgd2h5IHRoZXkmIzM5O3JlIGFza2luZyBgcGluX21lbWZkX3BhZ2VzYCB0byBiZSBjYWxsZWQgdGhyb3VnaCB0aGlzIHBhdGguIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBUaGlzIGNhbGwgY2hhaW4gaXMga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bmbl9yZWFkZXJfdXNlcl9waW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2lvbW11ZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NzUtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4NzY6c3RhdGljIGludCBwZm5fcmVhZGVyX3VzZXJfcGluKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NzctXHRcdFx0ICAgICAgIHN0cnVjdCBpb3B0X3BhZ2VzICpwYWdlcyxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0xMTY4PXN0YXRpYyBpbnQgcGZuX3JlYWRlcl9maWxsX3NwYW4oc3RydWN0IHBmbl9yZWFkZXIgKnBmbnMpXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMTIwOS1cdGlmIChzdGFydF9pbmRleCBcdTAwM2U9IHVzZXItXHUwMDNldXBhZ2VzX2VuZCkge1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MTIxMDpcdFx0cmMgPSBwZm5fcmVhZGVyX3VzZXJfcGluKHVzZXIsIHBmbnMtXHUwMDNlcGFnZXMsIHN0YXJ0X2luZGV4LFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMTIxMS1cdFx0XHRcdFx0IHNwYW4tXHUwMDNlbGFzdF9ob2xlKTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0yMTQ3PXN0YXRpYyBpbnQgaW9wdF9wYWdlc19maWxsKHN0cnVjdCBpb3B0X3BhZ2VzICpwYWdlcyxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0yMTU3LVx0XHR1c2VyLVx1MDAzZXVwYWdlcyA9IG91dF9wYWdlcyAmIzQzOyAoY3VyX2luZGV4IC0gc3RhcnRfaW5kZXgpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MjE1ODpcdFx0cmMgPSBwZm5fcmVhZGVyX3VzZXJfcGluKHVzZXIsIHBhZ2VzLCBjdXJfaW5kZXgsIGxhc3RfaW5kZXgpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMjE1OS1cdFx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIERhdGEgRmlsbGluZyBXb3JrZmxvdyoqCgpBbHJpZ2h0LCBzbyBgaW9wdF9wYWdlc19maWxsYCBpcyB0cmlnZ2VyZWQgYnkgYGlvcHRfcGFnZXNfZmlsbF94YXJyYXlgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuIE5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvICpob3cqIGl0JiMzOTtzIGZpbGxpbmcgdGhlIHBhZ2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHVkbWFidWZfY3JlYXRlYCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGF0IHRoZSB1bmRlcmx5aW5nIFVETUFidWYgY3JlYXRpb24gYW5kIHNldHVwIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93IHRob3NlIHBhZ2VzIGFyZSBmaWxsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGJ1ZmZlciBpcyBpbnN0YW50aWF0ZWQsIHdoYXQgcHJvcGVydGllcyBhcmUgc2V0LCBhbmQgYW55IHNwZWNpZmljIGNvbnN0cmFpbnRzIHRoYXQgbWlnaHQgYmUgaW4gcGxhY2UsIGJlY2F1c2UgdGhvc2UgY29uc3RyYWludHMgd2lsbCBkaWN0YXRlIG9yIGNvbnN0cmFpbiBgaW9wdF9wYWdlc19maWxsYCYjMzk7cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkbWFidWZfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTIwPW1vZHVsZV9wYXJhbShsaXN0X2xpbWl0LCBpbnQsIDA2NDQpO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzoyMTpNT0RVTEVfUEFSTV9ERVNDKGxpc3RfbGltaXQsIFwmIzM0O3VkbWFidWZfY3JlYXRlX2xpc3QtXHUwMDNlY291bnQgbGltaXQuIERlZmF1bHQgaXMgMTAyNC5cJiMzNDspO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0yMi1cbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTI3PXN0cnVjdCB1ZG1hYnVmIHtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzLVx0ICogU28sIG5yX3Bpbm5lZCBpcyBub3QgdGhlIHNhbWUgdG8gcGFnZWNvdW50LCB0aGUgcGlubmVkX2ZvbGlvc1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNDpcdCAqIG9ubHkgc2V0IGVhY2ggZm9saW8gd2hpY2ggYWxyZWFkeSBwaW5uZWQgd2hlbiB1ZG1hYnVmX2NyZWF0ZS5cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzUtXHQgKiBOb3RlIHRoYXQsIHNpbmNlIGEgZm9saW8gbWF5IGJlIHBpbm5lZCBtdWx0aXBsZSB0aW1lcywgZWFjaCBmb2xpb1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzQ5LVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTA6c3RhdGljIGxvbmcgdWRtYWJ1Zl9jcmVhdGUoc3RydWN0IG1pc2NkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzUxOlx0XHRcdCAgIHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0ICpoZWFkLFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTI6XHRcdFx0ICAgc3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gKmxpc3QpXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTM1My17XG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00NDk9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NTAte1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTE6XHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUgY3JlYXRlO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTI6XHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfbGlzdCBoZWFkO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTM6XHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfaXRlbSBsaXN0O1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NTQtXG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NjQtXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ2NTpcdHJldHVybiB1ZG1hYnVmX2NyZWF0ZShmaWxwLVx1MDAzZXByaXZhdGVfZGF0YSwgXHUwMDI2aGVhZCwgXHUwMDI2bGlzdCk7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ2Ni19XG4tLVxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00Njg9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ2OS17XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3MDpcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IGhlYWQ7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3MTpcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9pdGVtICpsaXN0O1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NzItXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ3OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3OTpcdGxzaXplID0gc2l6ZW9mKHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9pdGVtKSAqIGhlYWQuY291bnQ7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ4MC1cdGxpc3QgPSBtZW1kdXBfdXNlcigodm9pZCBfX3VzZXIgKikoYXJnICYjNDM7IHNpemVvZihoZWFkKSksIGxzaXplKTtcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ4My1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDg0Olx0cmV0ID0gdWRtYWJ1Zl9jcmVhdGUoZmlscC1cdTAwM2Vwcml2YXRlX2RhdGEsIFx1MDAyNmhlYWQsIGxpc3QpO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00ODUtXHRrZnJlZShsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGAvZGV2L3VkbWFidWZgIElvY3RsIEludGVyZmFjZSBmb3IgRnV6emluZyoqCgpSaWdodCwgc28gYHVkbWFidWZfaW9jdGxfY3JlYXRlYCBhbmQgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3Rg4oCUdGhvc2UgYXJlIHRoZSBrZXkgaW9jdGxzIGZvciBpbnRlcmFjdGluZyB3aXRoIGAvZGV2L3VkbWFidWZgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSB3aG9sZSBpbnRlcmZhY2UgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciwgZnJhbmtseSwgYW55IGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaW5oZXJlbnQgaW4gRE1BIGFuZCBidWZmZXIgbWFuYWdlbWVudCwgaXQmIzM5O3Mgc2NyZWFtaW5nICYjMzQ7dnVsbmVyYWJpbGl0eSBvcHBvcnR1bml0eS4mIzM0OwoKQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGB1ZG1hYnVmYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGF2YWlsYWJsZSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFRoaXMgaW5jbHVkZXMga2VybmVsIGNvbXBpbGUgb3B0aW9ucywgbW9kdWxlIHBhcmFtZXRlcnMsIGFuZCBhbnkgcnVudGltZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBrbm93IHRoZSBib3VuZHMsIGxpbWl0YXRpb25zLCBhbmQgYXNzdW1wdGlvbnMgYmFrZWQgaW50byBpdHMgZGVzaWduIGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIG1hbGZvcm1lZCBkYXRhIGF0IGl0LiBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzLCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBvciBhY2Nlc3MgY29udHJvbCBsaXN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYnlwYXNzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gcGxhY2UsIGlmIGFueXRoaW5nLCB0byBwcmV2ZW50IG1lIGZyb20gZG9pbmcgc29tZXRoaW5nIHJlYWxseSBuYXN0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZG1hYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGg6IFRoZSBFbHVzaXZlIHVkbWFidWYqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgZGVlcCBpbiB0aGUgd2VlZHMgd2l0aCB0aGlzLCB3b3JraW5nIG9uIHRoYXQgbmV3IGltcGxlbWVudGF0aW9uLCBhbmQgbm93IEkmIzM5O3ZlIGhpdCBhIHNuYWcuIFRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgaW4gYW4gdW5leHBlY3RlZCB3YXksIGFuZCBteSBtZW50YWwgY2hlY2tsaXN0IGlzIHNjcmVhbWluZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlbiwgdGhlIHF1ZXN0aW9uIGhpdHMgbWU6IHdoZXJlIGV4YWN0bHkgKmlzKiB0aGUgYHVkbWFidWZgIGNvbmZpZ3VyZWQ/IEkga25vdyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byB0aGlzIGFyY2hpdGVjdHVyZSwgY3J1Y2lhbCBmb3IgdGhhdCBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSYjMzk7dmUgd29ya2VkIHdpdGggdGhpcyBiZWZvcmUsIEkgKnNob3VsZCoga25vdyB0aGlzIGNvbGQsIGJ1dCByaWdodCBub3csIG15IG1lbnRhbCBtYXAgaXMgYSBiaXQgZnV6enkuIEl0JiMzOTtzIHRpbWUgdG8gcGF1c2UgYW5kIGdvIGJhY2sgdG8gYmFzaWNzLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBJcyBpdCBpbiB0aGUgZGV2aWNlIHRyZWU/IFRoZSBrZXJuZWwgY29uZmlnPyBNYXliZSBhIGRlZGljYXRlZCBkcml2ZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gZmlsZSBJJiMzOTt2ZSBvdmVybG9va2VkPyBJJiMzOTt2ZSBnb3QgYSBtZW50YWwgaXRjaCBub3c7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIHVudGlsIEkgZmluZCB0aGUgc291cmNlLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZSBJIG5lZWQgdG8gZ2V0IG1vdmluZyBhZ2Fpbi4gR290dGEgZGlnIGRlZXBlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZG1hYnVmLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1NXX1NZTkMpXHRcdCYjNDM7PSBzd19zeW5jLm8gc3luY19kZWJ1Zy5vXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfVURNQUJVRilcdFx0JiM0Mzs9IHVkbWFidWYub1xuZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlLTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVRE1BQlVGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfVURNQUJVRmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBvciByZWxldmFudCB3aXRoaW4gdGhpcyBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBETUEtQlVGIChEaXJlY3QgTWVtb3J5IEFjY2VzcyBCdWZmZXIpIGxpa2VseSByZXNpZGUuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byBzZWUgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VURNQUJVRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcy4KCioqSW52ZXN0aWdhdGluZyBVRE1BQlVGIGFuZCBpb191cmluZyBCdWZmZXIgUmVnaXN0cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBtZW1vcnkgYnVmZmVycyBhcmUgYmVpbmcgbWFuYWdlZCwgYW5kIGBVRE1BQlVGYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgYmVpbmcgZXhwb3J0ZWQg4oCTIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIEkgc2hvdWxkIGxvb2sgaW50byB0aGF0IGZ1cnRoZXIuIE15IG5leHQgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAgd2l0aGluIGBpb191cmluZy9yc3JjLmNgLiBMb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxlZCBieSBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRoYXQgb3V0IGFzIHdlbGwsIGFzIEkmIzM5O20gc3VyZSB0aGVyZSYjMzk7cyBtb3JlIGNvbnRleHQgaW4gaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgIGlzIGFsbCBhYm91dC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwYXRoIGZvciBidWZmZXIgcmVnaXN0cmF0aW9uIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBmcmFtZXdvcmssIGFuZCBsaWtlbHkgd2hlcmUgdGhlIGBVRE1BQlVGYCBpbnRlZ3JhdGlvbiBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zcWVfYnVmZmVyc19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9NDY5PV9fY29sZCBpbnQgaW9fcmVnaXN0ZXJfcnNyYyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbi0tXG5pb191cmluZy9yc3JjLmMtNDk0LVx0XHRcdGJyZWFrO1xuaW9fdXJpbmcvcnNyYy5jOjQ5NTpcdFx0cmV0dXJuIGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKGN0eCwgdTY0X3RvX3VzZXJfcHRyKHJyLmRhdGEpLFxuaW9fdXJpbmcvcnNyYy5jLTQ5Ni1cdFx0XHRcdFx0ICAgICAgIHJyLm5yLCB1NjRfdG9fdXNlcl9wdHIocnIudGFncykpO1xuLS1cbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvcnNyYy5jLTk0OS1cbmlvX3VyaW5nL3JzcmMuYzo5NTA6aW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuaW9fdXJpbmcvcnNyYy5jLTk1MS1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX2FyZ3MsIHU2NCBfX3VzZXIgKnRhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njc1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEkvTyBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBJL08gcmVnaXN0cmF0aW9uIHByb2Nlc3MgYW5kIEkmIzM5O20gc2VlaW5nIGEgY2xlYXIgcHJvZ3Jlc3Npb246IGBpb19yZWdpc3Rlcl9yc3JjYCBsZWFkcyBkaXJlY3RseSBpbnRvIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAuIEZyb20gdGhlcmUsIGl0IGRyaWxscyBkb3duIHRvIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCB3aGljaCB1bHRpbWF0ZWx5IGdldHMgdXMgdG8gYGlvX3Bpbl9wYWdlc2AgYW5kIGZpbmFsbHksIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhpcyBzZXF1ZW5jZSBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgYXJlYSB0byBmb2N1cyBvbi4KCk15IGF0dGVudGlvbiBpcyBhbHNvIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gSSYjMzk7bSBub3RpbmcgdGhhdCBgSU9fVVJJTkdgIGlzIHRoZSBtYWluIGNvbmZpZyBmb3IgaW9fdXJpbmcsIGFuZCBmb3IgaW9tbXVmZCwgd2UgaGF2ZSBgSU9NTVVGRGAuIFdpdGggdGhlIGZvY3VzIG9uIGlvbW11ZmQsIEkgdGhpbmsgaXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9NTVVGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWc9Nz1jb25maWcgSU9NTVVfQVBJXG4tLVxuZHJpdmVycy9pb21tdS9LY29uZmlnLTktXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MTA6Y29uZmlnIElPTU1VRkRfRFJJVkVSXG5kcml2ZXJzL2lvbW11L0tjb25maWctMTEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDc0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBIEtlcm5lbCBDb25maWd1cmF0aW9uIFB1enpsZXIqKgoKV2FpdCBhIHNlY29uZC4uLiAqYElPTU1VRkRgKj8gVGhhdCByaW5nIGEgYmVsbC4gTGV0IG1lIHRoaW5rLi4uIGlzbiYjMzk7dCB0aGF0IHRoZSB1c2Vyc3BhY2UgSU9NTVUgZnJhbWV3b3JrPyBZZXMsIHRoYXQmIzM5O3MgaXQuIFNvLCB3aGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQ/IFdlbGwsIGxvZ2ljYWxseSwgaXQgc2hvdWxkIGJlIHNvbWV3aGVyZSByZWxhdGVkIHRvIElPTU1VLiBBbmQuLi4gaG9sZCBvbi4uLiBpcyBpdCByZWFsbHkgbGlzdGVkIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gYGRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnYD8gU2VyaW91c2x5PyBJIGhhdmUgdG8gYWRtaXQsIHRoYXQmIzM5O3Mgbm90IHdoZXJlIEkgd291bGQgaGF2ZSBpbml0aWFsbHkgZ3Vlc3NlZC4gSSYjMzk7ZCBoYXZlIHByb2JhYmx5IGFzc3VtZWQgaXQgd2FzIHVuZGVyIGEgYnJvYWRlciBJT01NVSB1bWJyZWxsYSwgcGVyaGFwcyBpbiBgZHJpdmVycy9pb21tdS9LY29uZmlnYCwgb3IgbWF5YmUgZXZlbiB1bmRlciBhIG1vcmUgZ2VuZXJhbCAmIzM0O3BsYXRmb3JtJiMzNDsgb3IgJiMzNDtkZXZpY2UmIzM0OyBzZWN0aW9uLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGFyY2hpdGVjdGVkLiBIbW0sIHRoYXQmIzM5O3MgdW5leHBlY3RlZCBidXQgbG9naWNhbCwgYW5kIGtub3dpbmcgaXQgaXMgZm91bmQgdGhlcmUgd2lsbCBzdHJlYW1saW5lIGhvdyBJIGNvbmZpZ3VyZSBpdCBuZXh0IHRpbWUgSSBhbSB3b3JraW5nIHdpdGggdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU9NTVVGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyOmNvbmZpZyBJT01NVUZEX0RSSVZFUl9DT1JFXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zLVx0Ym9vbFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDpcdGRlZmF1bHQgKElPTU1VRkRfRFJJVkVSIHx8IElPTU1VRkQpIGlmIElPTU1VRkQhPW5cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTUtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzo2OmNvbmZpZyBJT01NVUZEXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SU9NTVUgVXNlcnNwYWNlIEFQSVwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MTg6aWYgSU9NTVVGRFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MTk6Y29uZmlnIElPTU1VRkRfVkZJT19DT05UQUlORVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjIwOlx0Ym9vbCBcJiMzNDtJT01NVUZEIHByb3ZpZGVzIHRoZSBWRklPIGNvbnRhaW5lciAvZGV2L3ZmaW8vdmZpb1wmIzM0O1xuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIFZGSU9fR1JPVVAgXHUwMDI2XHUwMDI2ICFWRklPX0NPTlRBSU5FUlxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTIzLVx0aGVscFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MjQ6XHQgIElPTU1VRkQgd2lsbCBwcm92aWRlIC9kZXYvdmZpby92ZmlvIGluc3RlYWQgb2YgVkZJTy4gVGhpcyByZWxpZXMgb25cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjI1Olx0ICBJT01NVUZEIHByb3ZpZGluZyBjb21wYXRpYmlsaXR5IGVtdWxhdGlvbiB0byBnaXZlIHRoZSBzYW1lIGlvY3Rscy5cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTI2LVx0ICBJdCBwcm92aWRlcyBhbiBvcHRpb24gdG8gYnVpbGQgYSBrZXJuZWwgd2l0aCBsZWdhY3kgVkZJTyBjb21wb25lbnRzXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjgtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyOTpcdCAgSU9NTVVGRCBWRklPIGNvbnRhaW5lciBlbXVsYXRpb24gaXMga25vd24gdG8gbGFjayBjZXJ0YWluIGZlYXR1cmVzXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMC1cdCAgb2YgdGhlIG5hdGl2ZSBWRklPIGNvbnRhaW5lciwgc3VjaCBhcyBwZWVyLXRvLXBlZXJcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMi1cdCAgdW5kaXNjb3ZlcmVkIGdhcHMuICBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgaW50ZW5kZWQgZm9yIHRoZVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6MzM6XHQgIHB1cnBvc2Ugb2YgdGVzdGluZyBJT01NVUZEIHdpdGggdW5tb2RpZmllZCB1c2Vyc3BhY2Ugc3VwcG9ydGluZyBWRklPXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zNC1cdCAgYW5kIG1ha2luZyB1c2Ugb2YgdGhlIFR5cGUxIFZGSU8gSU9NTVUgYmFja2VuZC4gIEdlbmVyYWwgcHVycG9zZVxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTM2LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mzc6XHQgIFVubGVzcyB0ZXN0aW5nIElPTU1VRkQsIHNheSBOIGhlcmUuXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zOC1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjM5OmNvbmZpZyBJT01NVUZEX1RFU1RcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJT01NVSBVc2Vyc3BhY2UgQVBJIFRlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQzLVx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDUtXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjQ2Olx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy00Ny1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMxMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQXNzZXNzbWVudCBvZiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKClJpZ2h0LCBzbyBgSU9NTVVGRGAgc2VlbXMgbGlrZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gY2hvaWNlLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQgbGlrZWx5IHByb3ZpZGVzIHNwZWNpZmljIGJlbmVmaXRzIHJlbGF0ZWQgdG8gRE1BIGFuZCBkZXZpY2UgaXNvbGF0aW9uLCBidXQgSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIG15IGFwcGxpY2F0aW9uJiMzOTtzIHJlcXVpcmVtZW50cy4gTm93LCB0aGUgYG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3NgIG9wdGlvbiBoYXMgbWUgaW50cmlndWVkLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBpdCwgYnV0IGEgcXVpY2sgcmVmcmVzaGVyIGlzIGluIG9yZGVyLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgYW5kIGNvbnN1bHQgYG1tL21lbWZkX2x1by5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgdGhpcyBmbGFnIGVuYWJsZXMgYW5kIHRoZSB0cmFkZS1vZmZzIGl0IGVudGFpbHMgd2l0aCByZXNwZWN0IHRvIGZvbGlvIG1hbmFnZW1lbnQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCBtZW1vcnkgZnJhZ21lbnRhdGlvbiwgTlVNQSBiZWhhdmlvciwgb3IgcGVyaGFwcyBldmVuIGxhdGVuY3kgaW4gbXkgcGFydGljdWxhciBzY2VuYXJpby4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBjb21tZW50cyB3aXRoaW4gdGhlIHNvdXJjZSByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYy04Ni1cbm1tL21lbWZkX2x1by5jOjg3OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbm1tL21lbWZkX2x1by5jLTg4LVx0XHRcdFx0ICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxuLS1cbm1tL21lbWZkX2x1by5jPTI1OD1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtMzAyLVxubW0vbWVtZmRfbHVvLmM6MzAzOlx0ZXJyID0gbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhhcmdzLVx1MDAzZWZpbGUsIFx1MDAyNnNlci1cdTAwM2Vmb2xpb3MsXG5tbS9tZW1mZF9sdW8uYy0zMDQtXHRcdFx0XHRcdFx1MDAyNmZvbGlvc19zZXIsIFx1MDAyNm5yX2ZvbGlvcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Nzk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgbWVtZmRfbHVvLmNgJiMzOTtzIFJvbGUqKgoKT2theSwgZmlyc3QgdGhvdWdodDogJiMzNDttZW1mZF9sdW8uYyYjMzQ7IOKAkyB0aGF0IGZpbGVuYW1lICpmZWVscyogbGlrZSBpdCBtaWdodCBiZSBjb25uZWN0ZWQgdG8gS0hPLCB0aGUgS2V4ZWMgSGFuZE92ZXIgZnVuY3Rpb25hbGl0eS4gTXkgZ3V0IHNheXMgdGhlcmUmIzM5O3MgYSBzdHJvbmcgY29ycmVsYXRpb24gdGhlcmUsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoIGluIHRoaXMgc3BhY2UuIFNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSByZXZlYWxzIGFib3V0IGBtZW1mZF9sdW8uY2AgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIGhvcGVmdWxseSwgS2V4ZWMgSGFuZG92ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2x1by5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xubW0vTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBQaW5uaW5nIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IHBpbm5pbmcgZm9yIGxpdmUgdXBkYXRlcywgYW5kIHRoZSBgQ09ORklHX0xJVkVVUERBVEVfTUVNRkRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGtlZXBzIGNvbWluZyB1cC4gV2hpbGUgdGhhdCYjMzk7cyBhbiBvcHRpb24sIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgdWRtYWJ1ZmAgbWlnaHQgYmUgYSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZ2VuZXJhbGx5IGFjY2VwdGVkIGFwcHJvYWNoLiBJIHdhbnQgdG8gcmV2aXNpdCBgbWVtZmRfcGluX2ZvbGlvc2AgYWdhaW4sIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBieSBgdWRtYWJ1Zl9waW5fZm9saW9zYC4KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgYmVzdCBwYXRoIGZvcndhcmQuIE15IGtleSBmb2N1cyByaWdodCBub3csIGJhc2VkIG9uIHRoZSBjdXJyZW50IHVuZGVyc3RhbmRpbmcsIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIG9uOiBgbWVtZmRfcGluX2ZvbGlvc2AsIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgLCBgdWRtYWJ1Zl9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBhbmQgYHBpbl91c2VyX3BhZ2VzYC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGBwaW5fdXNlcl9wYWdlc19mYXN0YCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgaW9fdXJpbmdgLiBVbmRlcnN0YW5kaW5nIHRoaXMgdXNhZ2UgcGF0dGVybiB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBmb3Igb3VyIGFwcGxpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaW5fdXNlcl9wYWdlc19mYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvbWVtbWFwLmM9NDA9c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTYyLVxuaW9fdXJpbmcvbWVtbWFwLmM6NjM6XHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXG5pb191cmluZy9tZW1tYXAuYy02NC1cdFx0XHRcdFx0cGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gYGlvX3Bpbl9wYWdlc2AqKgoKT2theSwgc28gSSYjMzk7dmUgcmVtZW1iZXJlZCB0aGF0IGBpb19waW5fcGFnZXNgIGNhbGxzIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhhdCBtYWtlcyBgaW9fcGluX3BhZ2VzYCBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmdW5jdGlvbiB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LiBJdCYjMzk7cyBhIGtleSBwb2ludCBvZiBpbnRlcmFjdGlvbi4gR2l2ZW4gaXRzIGZ1bmN0aW9uLCBJJiMzOTtkIGxpa2UgdG8gY2hlY2sgaG93IGl0IGlzIHVzZWQuIEkmIzM5O2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gZHJpdmVycyB1c2luZyBgdmZpb2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bpbl91c2VyX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3NwYXByX3RjZS5jPTQ4ND1zdGF0aWMgaW50IHRjZV9pb21tdV91c2VfcGFnZSh1bnNpZ25lZCBsb25nIHRjZSwgdW5zaWduZWQgbG9uZyAqaHBhKVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3NwYXByX3RjZS5jLTQ4OC1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3NwYXByX3RjZS5jOjQ4OTpcdGlmIChwaW5fdXNlcl9wYWdlc19mYXN0KHRjZSBcdTAwMjYgUEFHRV9NQVNLLCAxLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfc3BhcHJfdGNlLmMtNDkwLVx0XHRcdGRpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFID8gRk9MTF9XUklURSA6IDAsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz0xMDQ9c3RydWN0IHZmaW9fYmF0Y2gge1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzoxMDU6XHRzdHJ1Y3QgcGFnZVx0XHQqKnBhZ2VzO1x0LyogZm9yIHBpbl91c2VyX3BhZ2VzX3JlbW90ZSAqL1xuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy0xMDYtXHRzdHJ1Y3QgcGFnZVx0XHQqZmFsbGJhY2tfcGFnZTsgLyogaWYgcGFnZXMgYWxsb2MgZmFpbHMgKi9cbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTQ4MD1zdGF0aWMgaW50IHB1dF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBwcm90KVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNDg0LVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo0ODU6XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCBwcm90IFx1MDAyNiBJT01NVV9XUklURSk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTQ4Ni1cdFx0cmV0dXJuIDE7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01ODQ9c3RhdGljIGxvbmcgdmFkZHJfZ2V0X3BmbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmFkZHIsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01OTYtXHRtbWFwX3JlYWRfbG9jayhtbSk7XG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU5NzpcdHJldCA9IHBpbl91c2VyX3BhZ2VzX3JlbW90ZShtbSwgdmFkZHIsIHBpbl9wYWdlcywgZmxhZ3MgfCBGT0xMX0xPTkdURVJNLFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01OTgtXHRcdFx0XHQgICAgYmF0Y2gtXHUwMDNlcGFnZXMsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uc2lkZXJpbmcgVkZJTyYjMzk7cyB1c2Ugb2YgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAgd2l0aCBgRk9MTF9MT05HVEVSTWAuIFRoYXQgbWVhbnMgYHZhZGRyX2dldF9wZm5zYCBpcyBhIGtleSBzeW1ib2wgdG8gdW5kZXJzdGFuZC4gSG93ZXZlciwgSSBzdXNwZWN0IHRoYXQgYGlvX3Bpbl9wYWdlc2AgYW5kIGB1ZG1hYnVmX2NyZWF0ZWAgbWlnaHQgYmUgbW9yZSBzdHJhaWdodGZvcndhcmQgZW50cnkgcG9pbnRzIGZvciBleHBsb2l0YXRpb24sIHNvIHRob3NlIGFyZSBhbHNvIGdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKTGV0IG1lIHRha2Ugc3RvY2sgb2YgdGhlIG1haW4gc3ltYm9scyBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgZnVydGhlcjoKCiogICBgbWVtZmRfcGluX2ZvbGlvc2AKKiAgIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgCiogICBgdWRtYWJ1Zl9jcmVhdGVgCiogICBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgCiogICBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAKKiAgIGBpb19waW5fcGFnZXNgCiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAKKiAgIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAKKiAgIGB2YWRkcl9nZXRfcGZuc2AKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIEl0JiMzOTtzIGFuIGlvY3RsIG9uIGAvZGV2L3VkbWFidWZgLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIGF2ZW51ZS4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAgaXMgcmVhY2hhYmxlLiBJdCBpcyBjYWxsZWQgYnkgYGlvX3JlZ2lzdGVyX3JzcmNgLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBpb191cmluZ19yZWdpc3RlcmAuIE9rYXksIHRoYXQmIzM5O3MgYWxzbyBjbGVhcmx5IHJlYWNoYWJsZS4KCkZpbmFsbHksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYHZhZGRyX2dldF9wZm5zYC4gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYHZmaW9fcGluX3BhZ2VzX3JlbW90ZWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgdmZpb19waW5fbWFwX2RtYWAuIFllcywgaXQmIzM5O3MgZGVmaW5pdGl2ZWx5IHJlYWNoYWJsZSBhcyB3ZWxsLgoKU28gdG8gZW5hYmxlIHRoZXNlIHRhcmdldHMsIHRoZSBrZXkga2VybmVsIGNvbmZpZ3VyYXRpb25zIEkmIzM5O2xsIG5lZWQgYXJlOgoKKiAgIGBVRE1BQlVGYAoqICAgYElPX1VSSU5HYAoqICAgYFZGSU9gCiogICBgSU9NTVVGRGAKCkkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBgVURNQUJVRmAgZGVwZW5kZW5jaWVzLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVURNQUJVRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgVURNQUJVRiBibG9jaywgYW5kIHNwZWFraW5nIHRvIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBVRE1BQlVGIEJsb2NrKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBVRE1BQlVGIGJsb2NrLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2hvbGUgaW1wbGVtZW50YXRpb24sIGFsbCB0aGUgZGV0YWlscy4gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUsIHVuZWRpdGVkIHNvdXJjZSBjb2RlIG9yIGF0IGxlYXN0IGEgZGV0YWlsZWQgZXhwbGFuYXRpb24uIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGp1c3Qgc25pcHBldHMgb3Igc3VtbWFyaWVzOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byBncmFzcCB0aGUgbnVhbmNlcy4gSSYjMzk7bSBhc3N1bWluZywgb2YgY291cnNlLCB0aGF0IHdlIGFyZSBkaXNjdXNzaW5nIFVETUFCVUYgYXMgaXQgcGVydGFpbnMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFsbG9jYXRpb24uIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyBpdOKAmXMgZGVzaWduZWQgdG8gaGFuZGxlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucyBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgRE1BIGNvbnRyb2xsZXIuIEkgd2FudCB0byBsb29rIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBidWZmZXIgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgcG90ZW50aWFsbHksIGZyYWdtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZW1vcnkgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdXNlcnNwYWNlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGdhdWdlIGl0cyBwb3RlbnRpYWwgc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzIGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBzeXN0ZW0uIFNvLCBzaG93IG1lIGV2ZXJ5dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVRE1BQlVGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kbWEtYnVmL0tjb25maWc9MjA9Y29uZmlnIFNXX1NZTkNcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zMi1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjMzOmNvbmZpZyBVRE1BQlVGXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cdGJvb2wgXCYjMzQ7dXNlcnNwYWNlIGRtYWJ1ZiBtaXNjIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg0NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIENvbnRleHR1YWwgRmxvdyoqCgpSaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBzZWUgKndoYXQgY29tZXMgbmV4dCouIFRoZSBzdGF0ZW1lbnQgaXRzZWxmIGlzIGxpa2VseSBpbmNvbXBsZXRlLCBvciBpdHMgZnVsbCBtZWFuaW5nIGhpbmdlcyBvbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEkga25vdyBjb250ZXh0IGlzICpldmVyeXRoaW5nKi4gSSBjYW4mIzM5O3QgZXZlbiBiZWdpbiB0byBmb3JtIGEgc29saWQgaW50ZXJwcmV0YXRpb24sIGxldCBhbG9uZSBhIHNvdW5kIGFyZ3VtZW50IG9yIHJlc3BvbnNlLCB1bnRpbCBJIHVuZGVyc3RhbmQgdGhlICplbnRpcmUqIHBpY3R1cmUuIElzIHRoaXMgYSBzdGF0ZW1lbnQgb24gaXRzIG93biBvciBwYXJ0IG9mIGEgYnJvYWRlciBhcmd1bWVudD8gQW0gSSBtaXNzaW5nIGtleSBpbmZvcm1hdGlvbiBiZWNhdXNlIEkmIzM5O20gb25seSBzZWVpbmcgYSBzZWdtZW50PyBJIG5lZWQgdG8gc2VlIHRoZSBzdXBwb3J0aW5nIGV2aWRlbmNlLCB0aGUgY291bnRlcnBvaW50cywgdGhlIGltcGxpY2F0aW9ucy4uLiB0aGUgY29tcGxldGUgcGljdHVyZS4gSW4gc2hvcnQsIGp1bXBpbmcgdG8gdGhlIGNvbmNsdXNpb24gbm93IHdvdWxkIGJlIG5lZ2xpZ2VudC4gSSBuZWVkIHRvIGVuc3VyZSBhbGwgcG90ZW50aWFsIGNvbm5lY3Rpb25zIGFuZCBpbnRlci1kZXBlbmRlbmNpZXMgYXJlIGV2YWx1YXRlZCAqYmVmb3JlKiByZXNwb25kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMzpcdGNvbmZpZyBVRE1BQlVGXG4gIDM0Olx0XHRib29sIFwmIzM0O3VzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcJiMzNDtcbiAgMzU6XHRcdGRlZmF1bHQgblxuICAzNjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICAzNzpcdFx0ZGVwZW5kcyBvbiBNRU1GRF9DUkVBVEUgfHwgQ09NUElMRV9URVNUXG4gIDM4Olx0XHRkZXBlbmRzIG9uIE1NVVxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBBIGRyaXZlciB0byBsZXQgdXNlcnNwYWNlIHR1cm4gbWVtZmQgcmVnaW9ucyBpbnRvIGRtYS1idWZzLlxuICA0MTpcdFx0ICBRZW11IGNhbiB1c2UgdGhpcyB0byBjcmVhdGUgaG9zdCBkbWFidWZzIGZvciBndWVzdCBmcmFtZWJ1ZmZlcnMuXG4gIDQyOlx0XG4gIDQzOlx0Y29uZmlnIERNQUJVRl9ERUJVR1xuICA0NDpcdFx0Ym9vbCBcJiMzNDtETUEtQlVGIGRlYnVnIGNoZWNrc1wmIzM0O1xuICA0NTpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA0NjpcdFx0ZGVmYXVsdCB5IGlmIERFQlVHXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYWRkaXRpb25hbCBjaGVja3MgZm9yIERNQS1CVUYgaW1wb3J0ZXJzIGFuZFxuICA0OTpcdFx0ICBleHBvcnRlcnMuIFNwZWNpZmljYWxseSBpdCB2YWxpZGF0ZXMgdGhhdCBpbXBvcnRlcnMgZG8gbm90IHBlZWsgYXQgdGhlXG4gIDUwOlx0XHQgIHVuZGVybHlpbmcgc3RydWN0IHBhZ2Ugd2hlbiB0aGV5IGltcG9ydCBhIGJ1ZmZlci5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgRE1BQlVGX0tVTklUX1RFU1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBVRE1BQlVGKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBVRE1BQlVGYCBhbmQgaG93IGl0IGZ1bmN0aW9ucy4gSXQmIzM5O3MgYnVpbHQgb24gYSBmZXcga2V5IGNvbXBvbmVudHMuIEkga25vdyBpdCBsZWFucyBoZWF2aWx5IG9uIGBETUFfU0hBUkVEX0JVRkZFUmAsIGBNRU1GRF9DUkVBVEVgLCBhbmQgdGhlIE1NVS4gVGhvc2UgYXJlIHRoZSBiaWcgYnVpbGRpbmcgYmxvY2tzIGluIHRoaXMgY2FzZS4KCkkmIzM5O2QgZXhwZWN0IGBETUFfU0hBUkVEX0JVRkZFUmAgdG8gYmUgZW5hYmxlZCBpbiBtb3N0IHNpdHVhdGlvbnMgLSBpdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGdpdmVuLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24sIGp1c3QgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYERNQV9TSEFSRURfQlVGRkVSYCBmb3IgYSBiaXQgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byByZXZpc2l0IGFzc3VtcHRpb25zLCBldmVuIHRoZSBvYnZpb3VzIG9uZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhpbmdzIGFyZSBhcyBJIGV4cGVjdCB0aGVtIHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NjQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldoZXJlIERpZCBUaGF0IFNoYXJlZCBCdWZmZXIgR28/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJiMzOTttIGltbWVkaWF0ZWx5IHN0dWNrLiBXaGVyZSB0aGUgaGVjayBpcyBgRE1BX1NIQVJFRF9CVUZGRVJgIGRlZmluZWQ/IEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYSBkZWNsYXJhdGlvbiBvciBzb21lIGtpbmQgb2YgbWFjcm8gZGVmaW5pdGlvbiBuZWFyYnksIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgaXMgcmVmZXJlbmNpbmcgaXQuIElzIGl0IGEgZ2xvYmFsIHZhcmlhYmxlLCBwYXJ0IG9mIGEgaGVhZGVyIGZpbGUgSSYjMzk7bSBtaXNzaW5nLCBvciBwZXJoYXBzIGEgbWFjcm8gZGVmaW5lZCB0aHJvdWdoIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtub3cgdGhlIG1lbW9yeSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhpcyB0aGluZzsgSXMgaXQgaW4gc2hhcmVkIG1lbW9yeT8gSWYgc28sIHdoYXQgYXJlIHRoZSBhY2Nlc3MgbGltaXRhdGlvbnMgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlcj8gV2l0aG91dCBrbm93aW5nIGl0cyBvcmlnaW4sIHR5cGUsIGFuZCBpbnRlbmRlZCBwdXJwb3NlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLCBJIGNhbiYjMzk7dCBldmVuIGJlZ2luIHRvIGV2YWx1YXRlIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRoYXQgdXNlcyBpdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCB3aXRob3V0IGl0LCBJJiMzOTttIGp1c3Qgc3RhcmluZyBhdCBhbiBpbmNvbXBsZXRlIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgZGVlcGVyLCBzZWFyY2ggdGhlIHByb2plY3QgZGlyZWN0b3J5IGFuZCByZWxhdGVkIGhlYWRlcnMgdG8gdHJhY2sgZG93biB0aGlzIHZpdGFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGRlbGF5IG1lIHVubGVzcyBpdCYjMzk7cyBvYnZpb3VzbHkgZGVjbGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFwmIzM0O2RyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxuZHJpdmVycy9iYXNlL0tjb25maWc6MjE1OmNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzAxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTeXN0ZW0gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgYm9vbGVhbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gc2VsZWN0ZWQgZWxzZXdoZXJlLiBDb25zaWRlcmluZyB0aGF0LCBgVURNQUJVRmAgc2VlbXMgbGlrZSB0aGUgc2Vuc2libGUgY2hvaWNlIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHNvbHV0aW9uIGZvciB0aGlzIGtpbmQgb2Ygc2V0dXAuCgpOb3csIEkgd2FudCB0byBkcmlsbCBkb3duIGFuZCBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIGBJT19VUklOR2AuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgbGlua2VkIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGNvbXBsZXhpdHkgd2lsbCBsaWUsIGxpa2VseS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gdGhpcyBmZWF0dXJlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTE9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE4LVxuaW5pdC9LY29uZmlnOjE5MTk6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Mjg9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTQwLVxuaW5pdC9LY29uZmlnOjE5NDE6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5NDItXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiYjMzk7cyByZXZlbGF0aW9uLCByZW5kZXJlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqSU9fVVJJTkcmIzM5O3MgQ29uZmlndXJhdGlvbiBMb2NhdGlvbioqCgpPa2F5LCBzbyBJIHdhcyBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElPX1VSSU5HYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHNvbWUgb2JzY3VyZSBtb2R1bGUgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGdlbmVyYXRlZCBkeW5hbWljYWxseS4gQnV0LCBsbyBhbmQgYmVob2xkLCBhIHF1aWNrIHNlYXJjaCBhbmQgSSBmb3VuZCBpdCByaWdodCB0aGVyZSBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyBhY3R1YWxseSBwcmV0dHkgbG9naWNhbCwgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdC4gVGhlIGBpbml0YCBkaXJlY3Rvcnkgb2Z0ZW4gaG91c2VzIGNvcmUgc3lzdGVtIGNvbmZpZ3VyYXRpb24sIG1ha2luZyBpdCB0aGUgaWRlYWwgbG9jYXRpb24gZm9yIGEgZm91bmRhdGlvbmFsIGZlYXR1cmUgbGlrZSBgSU9fVVJJTkdgIHRoYXQgZnVuZGFtZW50YWxseSBpbXBhY3RzIEkvTyBvcGVyYXRpb25zIGZyb20gdGhlIGtlcm5lbCYjMzk7cyB2ZXJ5IGJvb3QuIEl0IGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgaXRzIGNvcmUgZmVhdHVyZXMsIGFuZCBtYWtlcyBtZSBjb25zaWRlciBwb3RlbnRpYWwgY2hhbmdlcyB0byBtYWtlLCBnb2luZyBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkxOTpcdGNvbmZpZyBJT19VUklOR1xuMTkyMDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbjE5MjE6XHRcdHNlbGVjdCBJT19XUVxuMTkyMjpcdFx0ZGVmYXVsdCB5XG4xOTIzOlx0XHRoZWxwXG4xOTI0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGlvX3VyaW5nIGludGVyZmFjZSwgZW5hYmxpbmdcbjE5MjU6XHRcdCAgYXBwbGljYXRpb25zIHRvIHN1Ym1pdCBhbmQgY29tcGxldGUgSU8gdGhyb3VnaCBzdWJtaXNzaW9uIGFuZFxuMTkyNjpcdFx0ICBjb21wbGV0aW9uIHJpbmdzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIGFwcGxpY2F0aW9uLlxuMTkyNzpcdFxuMTkyODpcdGNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFZGSU8gRGVwZW5kZW5jeSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhlIGRlZmF1bHQgaXMgc2V0IHRvICYjMzk7eSYjMzk7LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGluaXRpYWwgc3RhdGUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBpdCBhbGlnbnMgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgZ2l2ZW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgaW50ZW5kZWQgYXBwbGljYXRpb24uCgpCZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBgVkZJT2AgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGFzcGVjdCwgYW5kIGdldHRpbmcgdGhpcyB3cm9uZyBjYW4gbGVhZCB0byBkaWZmaWN1bHQgZGVidWdnaW5nIGRvd24gdGhlIGxpbmUsIHNvIEkmIzM5O2xsIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IGNvbmZsaWN0cyBvciBtaXNzaW5nIGNvbXBvbmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEkga25vdyB0aGUgbnVhbmNlcyBvZiB0aGUgZHJpdmVycyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbmQgd2hlcmUgdGhleSB0ZW5kIHRvIHJ1biBpbnRvIHRyb3VibGUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhIGtleSBzdGVwIHRvIHByZXZlbnRpbmcgbGF0ZXIgc3VycHJpc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoxNzpjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuZHJpdmVycy92ZmlvL0tjb25maWctMTgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0yOS1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjMwOmNvbmZpZyBWRklPX0dST1VQXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTM5LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnOjUzOmNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNTYtXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU4LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz02MT1lbmRpZlxuZHJpdmVycy92ZmlvL0tjb25maWctNjItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VkZJTyBOby1JT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo3ODpjb25maWcgVkZJT19WSVJRRkRcbmRyaXZlcnMvdmZpby9LY29uZmlnLTc5LVx0Ym9vbFxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTgyLVxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xuZHJpdmVycy92ZmlvL0tjb25maWctODQtXHRib29sIFwmIzM0O0V4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKlZGSU8gU2V0dXAgJmFtcDsgRGVwZW5kZW5jeSBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhpbmtpbmcgYWJvdXQgdmlydHVhbGl6YXRpb24gd2l0aCBWRklPLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBWRklPIGFuZCB0aGUgYFZGSU9fSU9NTVVfVFlQRTFgIHNldHRpbmcgYXJlIHRoZSBpZGVhbCBwYXRoIHRvIHB1cnN1ZS4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBtb3N0IHJvYnVzdCB3YXkgdG8gZ2V0IGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgSU9NTVVGRGAgdG8gZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlci4gSXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3J1Y2lhbCBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA2Olx0Y29uZmlnIElPTU1VRkRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0lPTU1VIFVzZXJzcGFjZSBBUElcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gICA5Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcbiAgMTA6XHRcdHNlbGVjdCBJT01NVV9BUElcbiAgMTE6XHRcdGRlZmF1bHQgblxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBQcm92aWRlcyAvZGV2L2lvbW11LCB0aGUgdXNlciBBUEkgdG8gY29udHJvbCB0aGUgSU9NTVUgc3Vic3lzdGVtIGFzXG4gIDE0Olx0XHQgIGl0IHJlbGF0ZXMgdG8gbWFuYWdpbmcgSU8gcGFnZSB0YWJsZXMgdGhhdCBwb2ludCBhdCB1c2VyIHNwYWNlIG1lbW9yeS5cbiAgMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4OTcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGlubmluZyBEb3duIE1lbW9yeTogQSBTdHJhdGVnaWMgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBJT01NVUZEYCBpcyBhIHNvbGlkIGZvdW5kYXRpb24sIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgSSB3YW50IHRvIHJldmlzaXQgYG1lbWZkX3Bpbl9mb2xpb3NgLiBJIG5lZWQgdG8gZW5zdXJlIGl0cyB1c2FnZSBpcyBjb25zaXN0ZW50IGFuZCBwcmVkaWN0YWJsZSB3aXRoaW4gdGhlIHN5c3RlbS4KCkEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHNob3dzIGl0JiMzOTtzIGRpcmVjdGx5IGludm9rZWQgYnkgYHVkbWFidWZfcGluX2ZvbGlvc2AgYW5kIGBwaW5fbWVtZmRfcGFnZXNgLiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzOiBgdWRtYWJ1Zl9jcmVhdGVgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBmb3IgcmV2aWV3LCBhbG9uZyB3aXRoIGBwaW5fbWVtZmRfcGFnZXNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcmVsZXZhbnQgYGlvX3Bpbl9wYWdlc2AgYW5kIGB2YWRkcl9nZXRfcGZuc2Agd2FycmFudCBleGFtaW5hdGlvbiBhcyB3ZWxsLiBUaGVzZSBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcyBmb3IgZGVlcCBkaXZlcy4KCkhvbGQgb24gYSBtaW51dGUuLi4gYG1lbWZkX3Bpbl9mb2xpb3NgIGlzICpleHBvcnRlZCo/IFRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGVuIG90aGVyIG1vZHVsZXMsIHBvdGVudGlhbGx5IGxlc3Mgc2NydXRpbml6ZWQgb25lcywgY291bGQgYmUgY2FsbGluZyBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gYnJvYWRlbiBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZmluZCAqZXZlcnkqIGNhbGxlciBvZiBgbWVtZmRfcGluX2ZvbGlvc2AgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5leHBlY3RlZCBpbnRlZ3JhdGlvbnMgb3IsIGV2ZW4gd29yc2UsIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHN0ZW1taW5nIGZyb20gaXRzIHVzYWdlLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzaW5nLiBMZXQmIzM5O3Mgc2VlIHdobyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfcGluX2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcbi0tXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cdGVuZCA9IHN0YXJ0ICYjNDM7IChwZ2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XHRucl9mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKG1lbWZkLCBzdGFydCwgZW5kLCBmb2xpb3MsIHBnY250LCBcdTAwMjZwZ29mZik7XG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cdGlmIChucl9mb2xpb3MgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM3LVx0XHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMzg6XHRcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzktXHRcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzQtXHQvKlxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1Olx0ICogdG9kbzogbWVtZmRfcGluX2ZvbGlvcyBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHBpbm5lZCBvZmZzZXQgc29cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXHQgKi9cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzOTpcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cdTAwM2V1Zm9saW9zLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVx0XHRcdFx0ICAgbmZvbGlvcywgXHUwMDI2b2Zmc2V0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MzMxNz1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzMxOC1cdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oOjMzMTk6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuaW5jbHVkZS9saW51eC9tbS5oLTMzMjAtXHRcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXG4tLVxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcbi0tXG5tbS9ndXAuYy0xOTUtICpcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcbm1tL2d1cC5jLTE5Ny0gKiBtdXN0IGJlIHJlbGVhc2VkIGVpdGhlciB1c2luZyB1bnBpbl9mb2xpbygpIG9yIHVucGluX2ZvbGlvcygpLlxuLS1cbm1tL2d1cC5jPTM0MTk9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XG4tLVxubW0vZ3VwLmMtMzQyMS0vKipcbm1tL2d1cC5jOjM0MjI6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxubW0vZ3VwLmMtMzQyMy0gKiBAbWVtZmQ6ICAgICAgdGhlIG1lbWZkIHdob3NlIGZvbGlvcyBhcmUgdG8gYmUgcGlubmVkXG4tLVxubW0vZ3VwLmMtMzQ0Ni0gKi9cbm1tL2d1cC5jOjM0NDc6bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxubW0vZ3VwLmMtMzQ0OC1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0zNTQzLX1cbm1tL2d1cC5jOjM1NDQ6RVhQT1JUX1NZTUJPTF9HUEwobWVtZmRfcGluX2ZvbGlvcyk7XG5tbS9ndXAuYy0zNTQ1LVxuLS1cbm1tL2d1cC5jLTM1NTUtICogVGhpcyBmdW5jdGlvbiBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIG9idGFpbmVkIGEgcGluIG9uIGEgbGFyZ2UgZm9saW9cbm1tL2d1cC5jOjM1NTY6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcbm1tL2d1cC5jLTM1NTctICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXG4tLVxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5tbS9tZW1mZC5jLTY0LSAqIEl0IGlzIG1haW5seSBjYWxsZWQgdG8gYWxsb2NhdGUgYSBmb2xpbyBpbiBhIG1lbWZkIHdoZW4gdGhlIGNhbGxlclxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXG4tLVxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTEyOS1cdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXG5tbS9tZW1mZF9sdW8uYzoxMzA6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgdmFyaWFudCB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGEgcGFnZSBvbiBlbXB0eVxubW0vbWVtZmRfbHVvLmMtMTMxLVx0ICogc2xvdHMuXG5tbS9tZW1mZF9sdW8uYy0xMzItXHQgKi9cbm1tL21lbWZkX2x1by5jOjEzMzpcdG5yX3Bpbm5lZCA9IG1lbWZkX3Bpbl9mb2xpb3MoZmlsZSwgMCwgc2l6ZSAtIDEsIGZvbGlvcywgbWF4X2ZvbGlvcyxcbm1tL21lbWZkX2x1by5jLTEzNC1cdFx0XHRcdCAgICAgXHUwMDI2b2Zmc2V0KTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTI5MS1cdC8qXG5tbS9tZW1mZF9sdW8uYzoyOTI6XHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcbm1tL21lbWZkX2x1by5jLTI5My1cdCAqIGZpbGVzIHRvIGF2b2lkIHNpbGVudGx5IHByZXNlcnZpbmcgb25seSBhIHByZWZpeC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBwaW5uaW5nIGFuZCB1c2VyIHNwYWNlIGludGVyYWN0aW9uLiBJJiMzOTttIHNlZWluZyBhIHN0cm9uZyBjYXNlIGZvciBmb2N1c2luZyBvbiBgbWVtZmRfcGluX2ZvbGlvc2AuIEkgYWxzbyB0aGluayBgdWRtYWJ1Zl9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgLCBhbmQgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgIGFyZSBnb29kIGNhbmRpZGF0ZXMgZ2l2ZW4gdGhlaXIgc3BlY2lmaWMgaW50ZXJhY3Rpb25zLiBTaW1pbGFybHksIGBpb19waW5fcGFnZXNgLCBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmAsIGFuZCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgIHNlZW0gdG8gZGlyZWN0bHkgZGVhbCB3aXRoIHBpbm5pbmcgcGFnZXMgaW4gdGhlIGNvbnRleHQgb2YgSS9PLiBBbmQgSSBzZWUgYSBsb3QgdG8gbGVhcm4gZnJvbSBgdmFkZHJfZ2V0X3BmbnNgLgoKTm93LCBJJiMzOTttIGV2YWx1YXRpbmcgYHBpbl91c2VyX3BhZ2VzYCBhcyBhIGZvY3VzLiBJdCYjMzk7cyBleHBvcnRlZCwgYnV0IGl0IGZlZWxzIGEgYml0IGJyb2FkLiBgcGluX3VzZXJfcGFnZXNfZmFzdGAgaGFzIHRoZSBzYW1lIGlzc3VlLiBIb3dldmVyLCB0aGV5IGFyZSBkaXJlY3QgY2FsbGVycyBvZiBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCwgd2hpY2ggaW4gdHVybiwgaXMgd2hlcmUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlcmVmb3JlLCB0aGVpciBpbmNsdXNpb24gaXMganVzdGlmaWVkLgoKSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ndXBfbG9uZ3Rlcm1fbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcbi0tXG5tbS9ndXAuYy0yNDY3LS8qXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcbm1tL2d1cC5jLTI0NjktICogYWxsb3dzIHVzIHRvIHByb2Nlc3MgdGhlIEZPTExfTE9OR1RFUk0gZmxhZy5cbm1tL2d1cC5jLTI0NzAtICovXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2d1cC5jLTI0NzItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vZ3VwLmM9MzE4Nj1zdGF0aWMgaW50IGd1cF9mYXN0X2ZhbGxiYWNrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzIxOS1cdHBhZ2VzICYjNDM7PSBucl9waW5uZWQ7XG5tbS9ndXAuYzozMjIwOlx0cmV0ID0gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcbm1tL2d1cC5jLTMyMjEtXHRcdFx0XHQgICAgcGFnZXMsIFx1MDAyNmxvY2tlZCxcbi0tXG5tbS9ndXAuYz0zMzUzPWxvbmcgcGluX3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2d1cC5jLTMzNjItXHRcdHJldHVybiAwO1xubW0vZ3VwLmM6MzM2MzpcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQobW0sIHN0YXJ0LCBucl9wYWdlcywgcGFnZXMsXG5tbS9ndXAuYy0zMzY0LVx0XHRcdFx0ICAgICBsb2NrZWQgPyBsb2NrZWQgOiBcdTAwMjZsb2NhbF9sb2NrZWQsXG4tLVxubW0vZ3VwLmM9MzM4Nz1sb25nIHBpbl91c2VyX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vZ3VwLmMtMzM5My1cdFx0cmV0dXJuIDA7XG5tbS9ndXAuYzozMzk0Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsXG5tbS9ndXAuYy0zMzk1LVx0XHRcdFx0ICAgICBwYWdlcywgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuLS1cbm1tL2d1cC5jPTM0MDc9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL2d1cC5jLTM0MTUtXG5tbS9ndXAuYzozNDE2Olx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChjdXJyZW50LVx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxubW0vZ3VwLmMtMzQxNy1cdFx0XHRcdCAgICAgXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1NAoJCQkJCQkJb3V0cHV0OiAzMjkKCQkJCQkJCXRob3VnaHRzOiA1NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IFBpbm5pbmcgYW5kIEZvbGlvIElzb2xhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIHRob3VnaHQgaXMgdGhhdCBgcGluX3VzZXJfcGFnZXNfZmFzdGAgc2VlbXMgbGlrZSBhIGtleSBlbnRyeSBwb2ludCwgYXMgaXQgdWx0aW1hdGVseSBsZWFkcyB0byBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCB2aWEgYGd1cF9mYXN0X2ZhbGxiYWNrYCBhbmQgYGludGVybmFsX2dldF91c2VyX3BhZ2VzX2Zhc3RgLiBUaGlzIGlzIGRlZmluaXRlbHkgd2hlcmUgSSB3YW50IHRvIHN0YXJ0IGlmIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyBvZiBtZW1vcnkgcGlubmluZyBvcGVyYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNpZ25pZmljYW50IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBvbmVzIHRoYXQgcmVwcmVzZW50IG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB1c2VyLXNwYWNlIHBpbm5pbmcuIEkmIzM5O2xsIGluY2x1ZGUgdGhlc2U6IGBtZW1mZF9waW5fZm9saW9zYCwgYHVkbWFidWZfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgLCBgaW9fcGluX3BhZ2VzYCwgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLCBgdmFkZHJfZ2V0X3BmbnNgLCBgcGluX3VzZXJfcGFnZXNfZmFzdGAsIGFuZCBgcGluX3VzZXJfcGFnZXNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB0aGlzIHBhdGNoIGltcGFjdHMgc3lzdGVtcyB1c2luZyBgVURNQUJVRmAsIGBJT19VUklOR2AsIGBWRklPYCwgYW5kIGBJT01NVUZEYC4gVGhlc2UgY29uZmlndXJhdGlvbnMgYWxsIHJlbHkgb24gbWVtb3J5IHBpbm5pbmcgaW4gc29tZSBmYXNoaW9uLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgLiBUaGUgcHJvYmxlbSB3YXMgYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBjYWxjdWxhdGlvbiBmb3Igb3JkZXItMCBmb2xpb3Mgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGlzb2xhdGluZyB0aGVtLiBUaGUgaGFyZGNvZGVkIHZhbHVlIG9mIGAxYCBmb3IgcmVmZXJlbmNlIGNvdW50IHdhcyB3cm9uZy4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgdXNpbmcgYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoZSBjb3JyZWN0aW9uIGVuc3VyZXMgdGhlIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBpc29sYXRpbmcgcGFnZXMgZm9yIGxvbmctdGVybSBHVVAgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IG1pZ3JhdGUgcGFnZXMgZnJvbSBtb3ZhYmxlIHpvbmVzLiBUaGlzIGFmZmVjdHMgc3Vic3lzdGVtcyBzdWNoIGFzIGB1ZG1hYnVmYCwgYGlvX3VyaW5nYCwgYW5kIGBWRklPL0lPTU1VRkRgIHdoaWNoIHBpbiBtZW1vcnkgbG9uZyB0ZXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VURNQUJVRiYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O0lPTU1VRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1mZF9waW5fZm9saW9zJiMzNDssCiAgICAmIzM0O3VkbWFidWZfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlJiMzNDssCiAgICAmIzM0O3VkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3QmIzM0OywKICAgICYjMzQ7aW9fcGluX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3NxZV9idWZmZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7dmFkZHJfZ2V0X3BmbnMmIzM0OywKICAgICYjMzQ7cGluX3VzZXJfcGFnZXNfZmFzdCYjMzQ7LAogICAgJiMzNDtwaW5fdXNlcl9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRE1BQlVGJiMzNDssCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7SU9NTVVGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbWZkX3Bpbl9mb2xpb3MmIzM0OywKICAgICYjMzQ7dWRtYWJ1Zl9jcmVhdGUmIzM0OywKICAgICYjMzQ7dWRtYWJ1Zl9pb2N0bF9jcmVhdGUmIzM0OywKICAgICYjMzQ7dWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdCYjMzQ7LAogICAgJiMzNDtpb19waW5fcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fc3FlX2J1ZmZlcl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtpb19zcWVfYnVmZmVyc19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDt2YWRkcl9nZXRfcGZucyYjMzQ7LAogICAgJiMzNDtwaW5fdXNlcl9wYWdlc19mYXN0JiMzNDssCiAgICAmIzM0O3Bpbl91c2VyX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCB3aGVyZSB0aGUgZXhwZWN0ZWQgcmVmZXJlbmNlIGNvdW50IG9mIGEgZm9saW8gd2FzIGNhbGN1bGF0ZWQgaW5jb3JyZWN0bHkgZm9yIG9yZGVyLTAgZm9saW9zIHdoZW4gY2hlY2tpbmcgaWYgdGhleSBjYW4gYmUgaXNvbGF0ZWQuIEl0IGNoYW5nZXMgdGhlIGhhcmRjb2RlZCBgMWAgdG8gYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBgRk9MTF9MT05HVEVSTWAgZ2V0X3VzZXJfcGFnZXMgKEdVUCkgb3BlcmF0aW9ucyAoZS5nLiwgYHBpbl91c2VyX3BhZ2VzYCwgYG1lbWZkX3Bpbl9mb2xpb3NgKSB0byBtaWdyYXRlIHBhZ2VzIG91dCBvZiBtb3ZhYmxlIHpvbmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdWJzeXN0ZW1zIHRoYXQgcGluIG1lbW9yeSBsb25nLXRlcm0sIHN1Y2ggYXMgdWRtYWJ1ZiwgaW9fdXJpbmcsIGFuZCBWRklPL0lPTU1VRkQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjozNS41NTAzMTQ0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjQyODAyMTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRE1BQlVGXCIsXG4gICAgXCJJT19VUklOR1wiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiSU9NTVVGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbWZkX3Bpbl9mb2xpb3NcIixcbiAgICBcInVkbWFidWZfY3JlYXRlXCIsXG4gICAgXCJ1ZG1hYnVmX2lvY3RsX2NyZWF0ZVwiLFxuICAgIFwidWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdFwiLFxuICAgIFwiaW9fcGluX3BhZ2VzXCIsXG4gICAgXCJpb19zcWVfYnVmZmVyX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19zcWVfYnVmZmVyc19yZWdpc3RlclwiLFxuICAgIFwidmFkZHJfZ2V0X3BmbnNcIixcbiAgICBcInBpbl91c2VyX3BhZ2VzX2Zhc3RcIixcbiAgICBcInBpbl91c2VyX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgIHdoZXJlIHRoZSBleHBlY3RlZCByZWZlcmVuY2UgY291bnQgb2YgYSBmb2xpbyB3YXMgY2FsY3VsYXRlZCBpbmNvcnJlY3RseSBmb3Igb3JkZXItMCBmb2xpb3Mgd2hlbiBjaGVja2luZyBpZiB0aGV5IGNhbiBiZSBpc29sYXRlZC4gSXQgY2hhbmdlcyB0aGUgaGFyZGNvZGVkIGAxYCB0byBgcGluX3JlZnNgLCB3aGljaCBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIGZvciBvcmRlci0wIGZvbGlvcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGBGT0xMX0xPTkdURVJNYCBnZXRfdXNlcl9wYWdlcyAoR1VQKSBvcGVyYXRpb25zIChlLmcuLCBgcGluX3VzZXJfcGFnZXNgLCBgbWVtZmRfcGluX2ZvbGlvc2ApIHRvIG1pZ3JhdGUgcGFnZXMgb3V0IG9mIG1vdmFibGUgem9uZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN1YnN5c3RlbXMgdGhhdCBwaW4gbWVtb3J5IGxvbmctdGVybSwgc3VjaCBhcyB1ZG1hYnVmLCBpb191cmluZywgYW5kIFZGSU8vSU9NTVVGRC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6MzUuNTUwMzIxMjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODU3NjE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI1OTA5YzE1MTYxNjI1MTZlY2M4YjAyODI2ZDE2NTcyYWQzY2Y5YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAwNToyNjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jXFxuaW5kZXggOTk5MDJjMTU3MDNiMC4uNDFjMzMxN2UwZjBmNCAxMDA2NDRcXG4tLS0gYS9tbS9ndXAuY1xcbisrKyBiL21tL2d1cC5jXFxuQEAgLTIyNzMsNiArMjI3Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXFxuIFxcbiBcXHRmb3IgKGZvbGlvID0gcG9mc19nZXRfZm9saW8ocG9mcywgaSk7IGZvbGlvO1xcbiBcXHQgICAgIGZvbGlvID0gcG9mc19uZXh0X2ZvbGlvKGZvbGlvLCBwb2ZzLCBcXHUwMDI2aSkpIHtcXG4rXFx0XFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XFxuIFxcbiBcXHRcXHRpZiAoZm9saW9faXNfbG9uZ3Rlcm1fcGlubmFibGUoZm9saW8pKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMjI4NywxNSArMjI4OCwyMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogV2UgZHJhaW4gbm90IG9ubHkgdG8gbWFrZSB0aGUgZm9saW9faXNvbGF0ZV9scnUoKSBzdWNjZWVkLFxcbitcXHRcXHQgKiBidXQgYWxzbyB0byByZW1vdmUgYW55IG90aGVyIGZvbGlvIHJlZmVyZW5jZXMgZnJvbSBMUlVcXG4rXFx0XFx0ICogY2FjaGVzLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGRyYWluZWQgPT0gMCBcXHUwMDI2XFx1MDAyNiBmb2xpb19tYXlfYmVfbHJ1X2NhY2hlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0Zm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPVxcbi1cXHRcXHRcXHRcXHRmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICsgMSkge1xcbitcXHRcXHRcXHRcXHRmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICsgcGluX3JlZnMpIHtcXG4gXFx0XFx0XFx0bHJ1X2FkZF9kcmFpbigpO1xcbiBcXHRcXHRcXHRkcmFpbmVkID0gMTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZHJhaW5lZCA9PSAxIFxcdTAwMjZcXHUwMDI2IGZvbGlvX21heV9iZV9scnVfY2FjaGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHRmb2xpb19yZWZfY291bnQoZm9saW8pICE9XFxuLVxcdFxcdFxcdFxcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxKSB7XFxuK1xcdFxcdFxcdFxcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyBwaW5fcmVmcykge1xcbiBcXHRcXHRcXHRscnVfYWRkX2RyYWluX2FsbCgpO1xcbiBcXHRcXHRcXHRkcmFpbmVkID0gMjtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjozNS44NTk1NDQ2OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDYxMTg3ODMxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVURNQUJVRlwiLFxuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIklPTU1VRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1mZF9waW5fZm9saW9zXCIsXG4gICAgXCJ1ZG1hYnVmX2NyZWF0ZVwiLFxuICAgIFwidWRtYWJ1Zl9pb2N0bF9jcmVhdGVcIixcbiAgICBcInVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RcIixcbiAgICBcImlvX3Bpbl9wYWdlc1wiLFxuICAgIFwiaW9fc3FlX2J1ZmZlcl9yZWdpc3RlclwiLFxuICAgIFwiaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJcIixcbiAgICBcInZhZGRyX2dldF9wZm5zXCIsXG4gICAgXCJwaW5fdXNlcl9wYWdlc19mYXN0XCIsXG4gICAgXCJwaW5fdXNlcl9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCB3aGVyZSB0aGUgZXhwZWN0ZWQgcmVmZXJlbmNlIGNvdW50IG9mIGEgZm9saW8gd2FzIGNhbGN1bGF0ZWQgaW5jb3JyZWN0bHkgZm9yIG9yZGVyLTAgZm9saW9zIHdoZW4gY2hlY2tpbmcgaWYgdGhleSBjYW4gYmUgaXNvbGF0ZWQuIEl0IGNoYW5nZXMgdGhlIGhhcmRjb2RlZCBgMWAgdG8gYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBgRk9MTF9MT05HVEVSTWAgZ2V0X3VzZXJfcGFnZXMgKEdVUCkgb3BlcmF0aW9ucyAoZS5nLiwgYHBpbl91c2VyX3BhZ2VzYCwgYG1lbWZkX3Bpbl9mb2xpb3NgKSB0byBtaWdyYXRlIHBhZ2VzIG91dCBvZiBtb3ZhYmxlIHpvbmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdWJzeXN0ZW1zIHRoYXQgcGluIG1lbW9yeSBsb25nLXRlcm0sIHN1Y2ggYXMgdWRtYWJ1ZiwgaW9fdXJpbmcsIGFuZCBWRklPL0lPTU1VRkQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI1OTA5YzE1MTYxNjI1MTZlY2M4YjAyODI2ZDE2NTcyYWQzY2Y5YTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjI2OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuY1xuaW5kZXggOTk5MDJjMTU3MDNiMC4uNDFjMzMxN2UwZjBmNCAxMDA2NDRcbi0tLSBhL21tL2d1cC5jXG4rKysgYi9tbS9ndXAuY1xuQEAgLTIyNzMsNiArMjI3Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXG4gXG4gXHRmb3IgKGZvbGlvID0gcG9mc19nZXRfZm9saW8ocG9mcywgaSk7IGZvbGlvO1xuIFx0ICAgICBmb2xpbyA9IHBvZnNfbmV4dF9mb2xpbyhmb2xpbywgcG9mcywgXHUwMDI2aSkpIHtcbitcdFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XG4gXG4gXHRcdGlmIChmb2xpb19pc19sb25ndGVybV9waW5uYWJsZShmb2xpbykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMjI4NywxNSArMjI4OCwyMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFdlIGRyYWluIG5vdCBvbmx5IHRvIG1ha2UgdGhlIGZvbGlvX2lzb2xhdGVfbHJ1KCkgc3VjY2VlZCxcbitcdFx0ICogYnV0IGFsc28gdG8gcmVtb3ZlIGFueSBvdGhlciBmb2xpbyByZWZlcmVuY2VzIGZyb20gTFJVXG4rXHRcdCAqIGNhY2hlcy5cbitcdFx0ICovXG4gXHRcdGlmIChkcmFpbmVkID09IDAgXHUwMDI2XHUwMDI2IGZvbGlvX21heV9iZV9scnVfY2FjaGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdGZvbGlvX3JlZl9jb3VudChmb2xpbykgIT1cbi1cdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxKSB7XG4rXHRcdFx0XHRmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICsgcGluX3JlZnMpIHtcbiBcdFx0XHRscnVfYWRkX2RyYWluKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDE7XG4gXHRcdH1cbiBcdFx0aWYgKGRyYWluZWQgPT0gMSBcdTAwMjZcdTAwMjYgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0Zm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPVxuLVx0XHRcdFx0Zm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSArIDEpIHtcbitcdFx0XHRcdGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyBwaW5fcmVmcykge1xuIFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG4gXHRcdFx0ZHJhaW5lZCA9IDI7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjM1Ljg1OTU0NjIzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzkzODg2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHVVAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vZ3VwLmNgLiBJdCdzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIG9uIGxvbmctdGVybSBwaW5uaW5nIGJlaGF2aW9yLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGEgc3VidGxlIGFkanVzdG1lbnQgaW4gaG93IHdlIGRldGVybWluZSBpZiBhIGZvbGlvIGNhbiBiZSB1bnBpbm5lZC4gUHJldmlvdXNseSwgdGhlIGNoZWNrIGludm9sdmVkIGNvbXBhcmluZyB0aGUgZm9saW8ncyByZWZlcmVuY2UgY291bnQgd2l0aCBhbiBleHBlY3RlZCB2YWx1ZSBwbHVzIG9uZS4gTm93LCBpdCdzIGFkZGluZyBgcGluX3JlZnNgIHRvIHRoYXQgZXhwZWN0ZWQgY291bnQuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBjaGVjayBmcm9tIGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxYCB0byBgZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSArIHBpbl9yZWZzYC4gVGhlIGBwaW5fcmVmc2AgdmFyaWFibGUgaXRzZWxmIHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsOiBpdCdzIGVpdGhlciBgMWAgaWYgdGhlIGZvbGlvIGhhcyBhIHBpbiBjb3VudCBvciwgb3RoZXJ3aXNlLCBpdCdzIGVxdWFsIHRvIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgLlxuXG5JJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBtbS9ndXAuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCAnR1VQX1BJTl9DT1VOVElOR19CSUFTJyByZXByZXNlbnRzLCBhcyB3ZWxsIGFzIHRoZSBjb250ZXh0IG9mIGBmb2xpb19oYXNfcGluY291bnQoKWAuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgaXQgY291bGQgYmUgcmVsYXRlZCB0byBob3cgdGhlIEdVUCAoZ2V0X3VzZXJfcGFnZXMpIGlzIGludGVyYWN0aW5nIHdpdGggZm9saW8gcGlubmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjM5LjczODkzNzU3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAwOTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2d1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2d1cC5jPTIyMzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqcG9mc19uZXh0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ndXAuYy0yMjY0LSAqL1xcbm1tL2d1cC5jOjIyNjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhcXG5tbS9ndXAuYy0yMjY2LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jPTIzOTI9Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcXG4tLVxcbm1tL2d1cC5jLTIzOTYtXFxubW0vZ3VwLmM6MjM5NzpcXHRjb2xsZWN0ZWQgPSBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKFxcdTAwMjZtb3ZhYmxlX2ZvbGlvX2xpc3QsXFxubW0vZ3VwLmMtMjM5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcG9mcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjM5Ljc4Nzk1MzE3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDQyMTA2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYCBDYWxsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYC4gSSBzZWUgdGhhdCBpdCBjYWxscyBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AuIFRoYXQncyBhIGtleSBkZXBlbmRlbmN5IHRvIHVuZGVyc3RhbmQsIGJ1dCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvICp0aGF0KiwgSSB3YW50IHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGF0IHRyaWdnZXJzIGl0LiBTbywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsZXJzIG9mIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvc2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udGV4dCBhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCdzIGJlaW5nIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIGEgY3J1Y2lhbCBwaWVjZSB0byB0aGUgcHV6emxlIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IHRoYXQncyBhdCBwbGF5LiBMZXQncyBzZWUgd2hvJ3MgaW52b2tpbmcgdGhpcyByb3V0aW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDIuNjkyMTY2MzU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mzk2MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2d1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2d1cC5jPTIzOTE9c3RhdGljIGxvbmdcXG5tbS9ndXAuYzoyMzkyOmNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKHN0cnVjdCBwYWdlc19vcl9mb2xpb3MgKnBvZnMpXFxubW0vZ3VwLmMtMjM5My17XFxuLS1cXG5tbS9ndXAuYz0yNDI2PXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmMtMjQzNC1cXG5tbS9ndXAuYzoyNDM1OlxcdHJldHVybiBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzX29yX2ZvbGlvcyhcXHUwMDI2cG9mcyk7XFxubW0vZ3VwLmMtMjQzNi19XFxuLS1cXG5tbS9ndXAuYz0yNDQyPXN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL2d1cC5jLTI0NTAtXFxubW0vZ3VwLmM6MjQ1MTpcXHRyZXR1cm4gY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3MoXFx1MDAyNnBvZnMpO1xcbm1tL2d1cC5jLTI0NTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjo0Mi43NDA1NjY4MjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMDM1MjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgQ2FsbGluZyBTdHJ1Y3R1cmUgb2YgRm9saW8gYW5kIFBhZ2UgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3NgIGFuZCBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoZXNlIGFyZSBjZW50cmFsIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcywgcHJlc3VtYWJseSBvZiBkYXRhIHJlbGF0ZWQgdG8gZm9saW9zIGFuZCBwYWdlcywgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gYSBsYXJnZS1zY2FsZSBkYXRhIHN5c3RlbS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aG8gKnRyaWdnZXJzKiB0aGVzZSBtaWdyYXRpb25zPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBoaWdoZXItbGV2ZWwgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHRlbGwgbWUgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IHRoZXNlIG1pZ3JhdGlvbnMgYXJlIGluaXRpYXRlZC4gQXJlIHRoZXkgcGFydCBvZiBhIHNjaGVkdWxlZCBiYWNrZ3JvdW5kIHByb2Nlc3MsIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBvciBpbnZva2VkIGRpcmVjdGx5IGJ5IHVzZXIgYWN0aW9ucz8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0YXNrcy4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgdG9vbGluZyB0byB0cmFjZSB0aGUgY2FsbCBoaWVyYXJjaHkgYW5kIGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDYuMDQyNjA0MzA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTIxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZ3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjM5MT1zdGF0aWMgbG9uZ1xcbm1tL2d1cC5jOjIzOTI6Y2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3Moc3RydWN0IHBhZ2VzX29yX2ZvbGlvcyAqcG9mcylcXG5tbS9ndXAuYy0yMzkzLXtcXG4tLVxcbm1tL2d1cC5jPTI0MjY9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0yNDM0LVxcbm1tL2d1cC5jOjI0MzU6XFx0cmV0dXJuIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKFxcdTAwMjZwb2ZzKTtcXG5tbS9ndXAuYy0yNDM2LX1cXG4tLVxcbm1tL2d1cC5jLTI0NDEtICovXFxubW0vZ3VwLmM6MjQ0MjpzdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxubW0vZ3VwLmMtMjQ0My1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4tLVxcbm1tL2d1cC5jLTI0NTAtXFxubW0vZ3VwLmM6MjQ1MTpcXHRyZXR1cm4gY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3MoXFx1MDAyNnBvZnMpO1xcbm1tL2d1cC5jLTI0NTItfVxcbm1tL2d1cC5jLTI0NTMtI2Vsc2VcXG5tbS9ndXAuYzoyNDU0OnN0YXRpYyBsb25nIGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9ndXAuYy0yNDU1LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxcbi0tXFxubW0vZ3VwLmM9MjQ3MT1zdGF0aWMgbG9uZyBfX2d1cF9sb25ndGVybV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9ndXAuYy0yNDk1LVxcdFxcdC8qIEZPTExfTE9OR1RFUk0gaW1wbGllcyBGT0xMX1BJTiAqL1xcbm1tL2d1cC5jOjI0OTY6XFx0XFx0cmMgPSBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKG5yX3Bpbm5lZF9wYWdlcywgcGFnZXMpO1xcbm1tL2d1cC5jLTI0OTctXFx0fSB3aGlsZSAocmMgPT0gLUVBR0FJTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjQ2LjA4ODUzMDA0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTIxNDAxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgR1VQIExvY2sgYW5kIFBhZ2UgTWlncmF0aW9uKipcblxuUmlnaHQsIHNvIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGtpY2tzIHRoaW5ncyBvZmYgd2l0aCBhIGNhbGwgdG8gYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBkZWFsaW5nIHdpdGggdGhlc2Ugc29ydHMgb2YgbG9uZy10ZXJtIGxvY2tzIGFuZCBwYWdlIG9wZXJhdGlvbnMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJPa2F5LCBtYWtlcyBzZW5zZS4gV2UncmUgdHJ5aW5nIHRvIGhhbmRsZSBwb3RlbnRpYWxseSBtb3ZhYmxlIHBhZ2VzLCBhbmQgZW5zdXJpbmcgdGhleSdyZSBpbiB0aGUgcmlnaHQgcGxhY2UgYmVmb3JlIGNvbnRpbnVpbmcuXCJcblxuQnV0IHdoYXQgYWJvdXQgdGhlIGNvdW50ZXJwYXJ0PyBTaG91bGRuJ3QgdGhlcmUgYmUgYSBwYXJhbGxlbCBmdW5jdGlvbiBkZWRpY2F0ZWQgdG8gKmZvbGlvcyo/IFdlJ3JlIHN0YXJ0aW5nIHRvIGxlYW4gbW9yZSBpbnRvIGZvbGlvcyB0aGVzZSBkYXlzLiBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBPciBpcyBpdCBpbnRlbnRpb25hbGx5IG9taXR0ZWQ/IElzIHRoZSBmb2xpbyBoYW5kbGluZyBiZWluZyBzb21laG93IHN1YnN1bWVkIHdpdGhpbiB0aGUgcGFnZSBtaWdyYXRpb24sIG9yIGlzIGl0IGhhbmRsZWQgaW4gYSBkaWZmZXJlbnQgY29kZXBhdGggYWx0b2dldGhlcj8gSSBuZWVkIHRvIHJldmlldyB0aGlzIG1vcmUgY2FyZWZ1bGx5IHRvIHNlZSBob3cgdGhlIGZvbGlvIG1pZ3JhdGlvbiBpcyBiZWluZyBoYW5kbGVkIGluIGNvbnRleHQuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AgYW5kIGEgaHlwb3RoZXRpY2FsIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgbmVlZHMgY2xvc2VyIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDkuMTQwNjcyNjA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk4NTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ndXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ndXAuYz0yMzkyPWNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zKHN0cnVjdCBwYWdlc19vcl9mb2xpb3MgKnBvZnMpXFxuLS1cXG5tbS9ndXAuYy0yNDI1LSAqL1xcbm1tL2d1cC5jOjI0MjY6c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxubW0vZ3VwLmMtMjQyNy1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcylcXG4tLVxcbm1tL2d1cC5jLTI0MzktICogUmV0dXJuIHZhbHVlcyBhbmQgYmVoYXZpb3IgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvclxcbm1tL2d1cC5jOjI0NDA6ICogY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3MoKS5cXG5tbS9ndXAuYy0yNDQxLSAqL1xcbi0tXFxubW0vZ3VwLmM9MjQ1ND1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9ndXAuYy0yNDU5LVxcbm1tL2d1cC5jOjI0NjA6c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxubW0vZ3VwLmMtMjQ2MS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcylcXG4tLVxcbm1tL2d1cC5jPTM0NDc9bG9uZyBtZW1mZF9waW5fZm9saW9zKHN0cnVjdCBmaWxlICptZW1mZCwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxubW0vZ3VwLmMtMzUzMi1cXG5tbS9ndXAuYzozNTMzOlxcdFxcdHJldCA9IGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfZm9saW9zKG5yX2ZvbGlvcywgZm9saW9zKTtcXG5tbS9ndXAuYy0zNTM0LVxcdH0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NDkuMTg5NjY0NTc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjU0NTYwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZpeGVzIGZvciBGdXp6aW5nIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHJlY29nbml6ZSB0aGUgY29yZSBvZiBpdCByZXZvbHZlcyBhcm91bmQgaG93IGdldF91c2VyX3BhZ2VzIChHVVApIHdpdGggRk9MTF9MT05HVEVSTSBpbnRlcmFjdHMgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGxvbmctdGVybSBsb2NrcyBhbmQgcGlubmVkIG1lbW9yeS4gV2UndmUgZ290IGBtZW1mZF9waW5fZm9saW9zYCBjYWxsaW5nIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AgYW5kIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIGNhbGxpbmcgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNgLiBUaGVzZSBhcmUgYm90aCBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBhY3RpdmVseSB1c2VkLlxuXG5UaGUgaGVhcnQgb2YgdGhlIGZpeCBsaWVzIGluIGNvcnJlY3RpbmcgYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBjaGVjay4gVGhlIGNvZGUgd2FzIHVzaW5nIGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxYCwgYnV0IGZvciBmb2xpb3MgdGhhdCBhcmVuJ3QgdXNpbmcgYSBwaW4gY291bnQsIEdVUCBhZGRzIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIHJhdGhlciB0aGFuIGEgc2ltcGxlIGluY3JlbWVudCBvZiAxLiBDb25zZXF1ZW50bHksIHdlIG5lZWQgdG8gc3dhcCB0aGUgaW5jb3JyZWN0IGArIDFgIHdpdGggYSBjaGVjayBhZ2FpbnN0IGBwaW5fcmVmc2AuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGJlaGF2aW9yLlxuXG5Ob3csIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGNvcnJlY3RlZCBjb2RlIGlzIGV4ZWN1dGVkLiBgX19ndXBfbG9uZ3Rlcm1fbG9ja2VkYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBgcGluX3VzZXJfcGFnZXNgLCBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBgZ2V0X3VzZXJfcGFnZXNgLCBhbmQgcG90ZW50aWFsbHkgb3RoZXJzLiBUaGF0J3MgYSByaWNoIGxpc3Qgb2YgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gT24gdGhlIG90aGVyIGhhbmQsIGBtZW1mZF9waW5fZm9saW9zYCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgd2hpY2ggb3BlbnMgaXQgdXAgdG8gZnV6emluZyBhcyB3ZWxsLiBTbyBJIG5lZWQgdG8gZmluZCB0aGUgdmFyaW91cyBjYWxsZXJzIG9mIGBtZW1mZF9waW5fZm9saW9zYCwgYW5kIGNvbnNpZGVyIHRob3NlIGFzIGZ1enogdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjo1NC4zMTUxMjMwMDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDMzODYxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfcGluX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0zMDQ9c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNS1cXHRlbmQgPSBzdGFydCArIChwZ2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSAtIDE7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMTY6XFx0bnJfZm9saW9zID0gbWVtZmRfcGluX2ZvbGlvcyhtZW1mZCwgc3RhcnQsIGVuZCwgZm9saW9zLCBwZ2NudCwgXFx1MDAyNnBnb2ZmKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMxNy1cXHRpZiAobnJfZm9saW9zIFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzNy1cXHRcXHQgKiBJbiBhIGdpdmVuIHJhbmdlLCBvbmx5IHRoZSBmaXJzdCBzdWJwYWdlIG9mIHRoZSBmaXJzdCBmb2xpb1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzM4OlxcdFxcdCAqIGhhcyBhbiBvZmZzZXQsIHRoYXQgaXMgcmV0dXJuZWQgYnkgbWVtZmRfcGluX2ZvbGlvcygpLlxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzM5LVxcdFxcdCAqIFRoZSBmaXJzdCBzdWJwYWdlcyBvZiBvdGhlciBmb2xpb3MgKGluIHRoZSByYW5nZSkgaGF2ZSBhblxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM9ODI0PXN0YXRpYyBsb25nIHBpbl9tZW1mZF9wYWdlcyhzdHJ1Y3QgcGZuX3JlYWRlcl91c2VyICp1c2VyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM0LVxcdC8qXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM1OlxcdCAqIHRvZG86IG1lbWZkX3Bpbl9mb2xpb3Mgc2hvdWxkIHJldHVybiB0aGUgbGFzdCBwaW5uZWQgb2Zmc2V0IHNvXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODM2LVxcdCAqIHdlIGNhbiBjb21wdXRlIG5wYWdlcyBwaW5uZWQsIGFuZCBhdm9pZCBsb29waW5nIG92ZXIgZm9saW9zIGhlcmVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzOC1cXHQgKi9cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4Mzk6XFx0bmZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3ModXNlci1cXHUwMDNlZmlsZSwgc3RhcnQsIGVuZCwgdXNlci1cXHUwMDNldWZvbGlvcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04NDAtXFx0XFx0XFx0XFx0ICAgbmZvbGlvcywgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzMxNz1sb25nIHBpbl91c2VyX3BhZ2VzX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzMTgtXFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDozMzE5OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMzMyMC1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmM9MTkwPUVYUE9SVF9TWU1CT0wodW5waW5fdXNlcl9wYWdlKTtcXG4tLVxcbm1tL2d1cC5jLTE5NS0gKlxcbm1tL2d1cC5jOjE5NjogKiBGb2xpb3MgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgbWVtZmRfcGluX2ZvbGlvcygpIG9yIG90aGVyIHNpbWlsYXIgcm91dGluZXNcXG5tbS9ndXAuYy0xOTctICogbXVzdCBiZSByZWxlYXNlZCBlaXRoZXIgdXNpbmcgdW5waW5fZm9saW8oKSBvciB1bnBpbl9mb2xpb3MoKS5cXG4tLVxcbm1tL2d1cC5jPTM0MTk9RVhQT1JUX1NZTUJPTChwaW5fdXNlcl9wYWdlc191bmxvY2tlZCk7XFxuLS1cXG5tbS9ndXAuYy0zNDIxLS8qKlxcbm1tL2d1cC5jOjM0MjI6ICogbWVtZmRfcGluX2ZvbGlvcygpIC0gcGluIGZvbGlvcyBhc3NvY2lhdGVkIHdpdGggYSBtZW1mZFxcbm1tL2d1cC5jLTM0MjMtICogQG1lbWZkOiAgICAgIHRoZSBtZW1mZCB3aG9zZSBmb2xpb3MgYXJlIHRvIGJlIHBpbm5lZFxcbi0tXFxubW0vZ3VwLmMtMzQ0Ni0gKi9cXG5tbS9ndXAuYzozNDQ3OmxvbmcgbWVtZmRfcGluX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG5tbS9ndXAuYy0zNDQ4LVxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcywgdW5zaWduZWQgaW50IG1heF9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0zNTQzLX1cXG5tbS9ndXAuYzozNTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG1lbWZkX3Bpbl9mb2xpb3MpO1xcbm1tL2d1cC5jLTM1NDUtXFxuLS1cXG5tbS9ndXAuYy0zNTU1LSAqIFRoaXMgZnVuY3Rpb24gaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBvYnRhaW5lZCBhIHBpbiBvbiBhIGxhcmdlIGZvbGlvXFxubW0vZ3VwLmM6MzU1NjogKiB1c2luZyBtZW1mZF9waW5fZm9saW9zKCksIGJ1dCB3YW50aW5nIHRvIGxvZ2ljYWxseSB1bnBpbiBwYXJ0c1xcbm1tL2d1cC5jLTM1NTctICogKGUuZy4sIGluZGl2aWR1YWwgcGFnZXMpIG9mIHRoZSBmb2xpbyBsYXRlciwgZm9yIGV4YW1wbGUsIHVzaW5nXFxuLS1cXG5tbS9tZW1mZC5jPTM4PXN0YXRpYyB2b2lkIG1lbWZkX3RhZ19waW5zKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubW0vbWVtZmQuYy02NC0gKiBJdCBpcyBtYWlubHkgY2FsbGVkIHRvIGFsbG9jYXRlIGEgZm9saW8gaW4gYSBtZW1mZCB3aGVuIHRoZSBjYWxsZXJcXG5tbS9tZW1mZC5jOjY1OiAqIChtZW1mZF9waW5fZm9saW9zKCkpIGNhbm5vdCBmaW5kIGEgZm9saW8gaW4gdGhlIHBhZ2UgY2FjaGUgYXQgYSBnaXZlblxcbm1tL21lbWZkLmMtNjYtICogaW5kZXggaW4gdGhlIG1hcHBpbmcuXFxuLS1cXG5tbS9tZW1mZF9sdW8uYz04Nz1zdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy0xMjktXFx0ICogdGhhdCBpcyByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBmdXR1cmUsIHdlIGNhbiBoYXZlIGFcXG5tbS9tZW1mZF9sdW8uYzoxMzA6XFx0ICogbWVtZmRfcGluX2ZvbGlvcygpIHZhcmlhbnQgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhIHBhZ2Ugb24gZW1wdHlcXG5tbS9tZW1mZF9sdW8uYy0xMzEtXFx0ICogc2xvdHMuXFxubW0vbWVtZmRfbHVvLmMtMTMyLVxcdCAqL1xcbm1tL21lbWZkX2x1by5jOjEzMzpcXHRucl9waW5uZWQgPSBtZW1mZF9waW5fZm9saW9zKGZpbGUsIDAsIHNpemUgLSAxLCBmb2xpb3MsIG1heF9mb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMTM0LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZnNldCk7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMjkxLVxcdC8qXFxubW0vbWVtZmRfbHVvLmM6MjkyOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSBjYXBzIGF0IFVJTlRfTUFYIGZvbGlvczsgcmVmdXNlIGxhcmdlclxcbm1tL21lbWZkX2x1by5jLTI5My1cXHQgKiBmaWxlcyB0byBhdm9pZCBzaWxlbnRseSBwcmVzZXJ2aW5nIG9ubHkgYSBwcmVmaXguXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI2OjU1Ljk1ODUxMzUyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY1Njc0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlBpbm5pbmcgRG93biBNZW1vcnkgaW4gdGhlIEtlcm5lbCAtIExldCdzIFRyYWNlIHRoZSBGbG93KipcblxuT2theSwgc28gSSdtIHNlZWluZyBhIGZldyBrZXkgZnVuY3Rpb25zIGNhbGxpbmcgYG1lbWZkX3Bpbl9mb2xpb3NgLiBSaWdodCBvZmYgdGhlIGJhdCwgYHVkbWFidWZfcGluX2ZvbGlvc2AgYW5kIGBwaW5fbWVtZmRfcGFnZXNgIGZyb20gdGhlIGlvbW11ZmQgc3Vic3lzdGVtIGFyZSBkZWZpbml0ZWx5IHVzaW5nIGl0LiBUaGF0IG1ha2VzIHNlbnNlLCBib3RoIGFyZSBkZWFsaW5nIHdpdGggRE1BIGFuZCBtZW1vcnkgbWFwcGluZywgc28gcGlubmluZyBwYWdlcyB3b3VsZCBiZSBjcnVjaWFsIHRoZXJlLiBBbmQsIG9oLCB0aGVyZSdzIGBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zYCBpbiBgbW0vbWVtZmRfbHVvLmNgIHRvby4gVGhhdCBvbmXigJlzIGludGVyZXN0aW5nLCBtZW1vcnkgbGltaXRzIGFyZSBvZnRlbiB0aGUgbWFpbiByZWFzb24gZm9yIHBpbm5pbmcgZG93biB0aGUgbWVtb3J5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqcmVhbGx5KiBnb2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBtb3JlIGNsb3NlbHkgYXQgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhpcyBwaW5uaW5nIG1lY2hhbmlzbSBsaWtlbHkgbGllcywgaW4gaG93IGl0IHNlY3VyZXMgdGhlIHBoeXNpY2FsIHBhZ2VzLCB3aGF0IGl0cyBjb250ZXh0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6MjY6NTkuMzI0MTkwOTkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAzODIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2d1cF9sb25ndGVybV9sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZ3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jLTI0NjctLypcXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcXG5tbS9ndXAuYy0yNDY5LSAqIGFsbG93cyB1cyB0byBwcm9jZXNzIHRoZSBGT0xMX0xPTkdURVJNIGZsYWcuXFxubW0vZ3VwLmMtMjQ3MC0gKi9cXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9ndXAuYy0yNDcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2d1cC5jPTMxODY9c3RhdGljIGludCBndXBfZmFzdF9mYWxsYmFjayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzIxOS1cXHRwYWdlcyArPSBucl9waW5uZWQ7XFxubW0vZ3VwLmM6MzIyMDpcXHRyZXQgPSBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcXG5tbS9ndXAuYy0zMjIxLVxcdFxcdFxcdFxcdCAgICBwYWdlcywgXFx1MDAyNmxvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzNTM9bG9uZyBwaW5fdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9ndXAuYy0zMzYyLVxcdFxcdHJldHVybiAwO1xcbm1tL2d1cC5jOjMzNjM6XFx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChtbSwgc3RhcnQsIG5yX3BhZ2VzLCBwYWdlcyxcXG5tbS9ndXAuYy0zMzY0LVxcdFxcdFxcdFxcdCAgICAgbG9ja2VkID8gbG9ja2VkIDogXFx1MDAyNmxvY2FsX2xvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzODc9bG9uZyBwaW5fdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzM5My1cXHRcXHRyZXR1cm4gMDtcXG5tbS9ndXAuYzozMzk0OlxcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyxcXG5tbS9ndXAuYy0zMzk1LVxcdFxcdFxcdFxcdCAgICAgcGFnZXMsIFxcdTAwMjZsb2NrZWQsIGd1cF9mbGFncyk7XFxuLS1cXG5tbS9ndXAuYz0zNDA3PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL2d1cC5jLTM0MTUtXFxubW0vZ3VwLmM6MzQxNjpcXHRyZXR1cm4gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXFx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxcbm1tL2d1cC5jLTM0MTctXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNjo1OS4zNzgyMzY0MjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1OTMwODg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdVUCBMb25ndGVybSBMb2NraW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgZnVuY3Rpb24g4oCTIGl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGxvbmctdGVybSBHVVAgbG9ja2luZyBsb2dpYy4gSXQncyBjYWxsZWQgYnkgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGBwaW5fdXNlcl9wYWdlc191bmxvY2tlZGAsIGFuZCBgZ3VwX2Zhc3RfZmFsbGJhY2tgLCB3aGljaCBhcmUgYWxsIHN0YW5kYXJkIEdVUCBlbnRyeSBwb2ludHMuIE5vdGhpbmcgdW51c3VhbCB0aGVyZSwgc3RhbmRhcmQgR1VQIHN0dWZmLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2AuIFRoaXMgb25lIGlzIGNhbGxlZCBieSBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc19vcl9mb2xpb3NgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9wYWdlc2AgYW5kIGBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvc2AuXG5cblRoZSB0cmlnZ2VyIGZvciBhbGwgb2YgdGhpcyBpcyB3aGVuIGBGT0xMX0xPTkdURVJNYCBpcyBwYXNzZWQgdG8gR1VQLCBhbmQgdGhlIHRhcmdldCBwYWdlcyBvciBmb2xpb3MgcmVzaWRlIGluIGEgbW92YWJsZSB6b25lLCBsaWtlIFpPTkVfTU9WQUJMRSBvciBDTUEuIE1ha2VzIHNlbnNlLCB3ZSdyZSB0cnlpbmcgdG8gaGFuZGxlIGxvbmctdGVybSBwaW5uaW5nIGluIGEgd2F5IHRoYXQncyBjb21wYXRpYmxlIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi5cblxuQnV0IHdhaXQsIEkgc2VlIHRoZSBidWc6IGBmb2xpb19yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChmb2xpbykgKyAxYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb2RlLiBJIHJlY2FsbCB0aGF0IGZvciBsb25nLXRlcm0gcGlucywgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBpbmNyZW1lbnRlZCBieSBgR1VQX1BJTl9DT1VOVElOR19CSUFTYC4gVGhhdCBpcywgaWYgdGhlIGZvbGlvIGhhcyBhIHBpbmNvdW50LCB0aGVuIHRoZSByZWZjb3VudCBpcyBhY3R1YWxseSBpbmNyZW1lbnRlZCBieSAqMTAyNCohXG5cbkhvbGQgb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSBjb3JyZWN0bHkuIExldCdzIHNlZS4uLiBgZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKWAgaXMgdHJ1ZSBmb3IgbGFyZ2VyIGZvbGlvcywgdGhvc2Ugd2l0aCBhbiBvcmRlciBncmVhdGVyIHRoYW4gMCwgd2hlcmUgdGhlIHBpbiBjb3VudCBpcyBzdG9yZWQgc2VwYXJhdGVseS4gQnV0IGZvciBvcmRlci0wIGZvbGlvcywgdGhlIHBpbiBjb3VudCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIHJlZmNvdW50IGl0c2VsZi4gU28sIGZvciB0aG9zZSwgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgaXMgYWRkZWQgZGlyZWN0bHkgdG8gdGhlIHJlZmNvdW50ISBJdCdzIGEgYml0IHRyaWNreTsgSSBzaG91bGQgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBmb2xpb19oYXNfcGluY291bnRgIGxvZ2ljLiBUaGF0J3MgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzowNS4yMzc1NDg5NjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQ5OTY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9faGFzX3BpbmNvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9MjY2NT1zdGF0aWMgaW5saW5lIHB1ZF90IGZvbGlvX21rX3B1ZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwZ3Byb3RfdCBwZ3Byb3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjY3Mi1cXG5pbmNsdWRlL2xpbnV4L21tLmg6MjY3MzpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX3BpbmNvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9tbS5oLTI2NzQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTI3MDU9c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heWJlX2RtYV9waW5uZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjcwNi17XFxuaW5jbHVkZS9saW51eC9tbS5oOjI3MDc6XFx0aWYgKGZvbGlvX2hhc19waW5jb3VudChmb2xpbykpXFxuaW5jbHVkZS9saW51eC9tbS5oLTI3MDgtXFx0XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50KSBcXHUwMDNlIDA7XFxuLS1cXG5tbS9kZWJ1Zy5jPTcwPXN0YXRpYyB2b2lkIF9fZHVtcF9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2RlYnVnLmMtODUtXFxubW0vZGVidWcuYzo4NjpcXHRcXHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcXG5tbS9kZWJ1Zy5jLTg3LVxcdFxcdFxcdHBpbmNvdW50ID0gYXRvbWljX3JlYWQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfcGluY291bnQpO1xcbi0tXFxubW0vZ3VwLmM9MTAyPXN0YXRpYyB2b2lkIGd1cF9wdXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlZnMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm1tL2d1cC5jLTEwNy1cXHRcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GT0xMX1BJTl9SRUxFQVNFRCwgcmVmcyk7XFxubW0vZ3VwLmM6MTA4OlxcdFxcdGlmIChmb2xpb19oYXNfcGluY291bnQoZm9saW8pKVxcbm1tL2d1cC5jLTEwOS1cXHRcXHRcXHRhdG9taWNfc3ViKHJlZnMsIFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50KTtcXG4tLVxcbm1tL2d1cC5jPTE0MD1pbnQgX19tdXN0X2NoZWNrIHRyeV9ncmFiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWZzLFxcbi0tXFxubW0vZ3VwLmMtMTYyLVxcdFxcdCAqL1xcbm1tL2d1cC5jOjE2MzpcXHRcXHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSkge1xcbm1tL2d1cC5jLTE2NC1cXHRcXHRcXHRmb2xpb19yZWZfYWRkKGZvbGlvLCByZWZzKTtcXG4tLVxcbm1tL2d1cC5jPTIxMj12b2lkIGZvbGlvX2FkZF9waW4oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2d1cC5jLTIyMS1cXHQgKi9cXG5tbS9ndXAuYzoyMjI6XFx0aWYgKGZvbGlvX2hhc19waW5jb3VudChmb2xpbykpIHtcXG5tbS9ndXAuYy0yMjMtXFx0XFx0V0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKFxcdTAwMjZmb2xpby1cXHUwMDNlX3BpbmNvdW50KSBcXHUwMDNjIDEpO1xcbi0tXFxubW0vZ3VwLmM9NTE3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnRyeV9ncmFiX2ZvbGlvX2Zhc3Qoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCByZWZzLFxcbi0tXFxubW0vZ3VwLmMtNTY1LVxcdCAqL1xcbm1tL2d1cC5jOjU2NjpcXHRpZiAoZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSlcXG5tbS9ndXAuYy01NjctXFx0XFx0YXRvbWljX2FkZChyZWZzLCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9waW5jb3VudCk7XFxuLS1cXG5tbS9ndXAuYz0yMjY1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3MoXFxuLS1cXG5tbS9ndXAuYy0yMjc1LVxcdCAgICAgZm9saW8gPSBwb2ZzX25leHRfZm9saW8oZm9saW8sIHBvZnMsIFxcdTAwMjZpKSkge1xcbm1tL2d1cC5jOjIyNzY6XFx0XFx0Y29uc3QgaW50IHBpbl9yZWZzID0gZm9saW9faGFzX3BpbmNvdW50KGZvbGlvKSA/IDEgOiBHVVBfUElOX0NPVU5USU5HX0JJQVM7XFxubW0vZ3VwLmMtMjI3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MDcuMTAyNTUxMzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTkzNjkyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBGb2xpbyBQaW4gQ291bnQgQ2hhbmdlKipcblxuT2theSwgc28gYGZvbGlvX2hhc19waW5jb3VudGAgZGVmaW5pdGl2ZWx5IHJldHVybnMgdHJ1ZSBmb3IgdGhvc2UgbGFyZ2UgZm9saW9zIOKAkyB0aGF0J3MgdGhlIGZpcnN0IGtleSBwb2ludC4gQW5kIGZvciBvcmRlci0wIGZvbGlvcywgdGhlIHN5c3RlbSBpcyBub3cgYWRkaW5nIGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIHRvIHRoZSByZWZjb3VudC4gVGhpcyB0cmFuc2xhdGVzIGRpcmVjdGx5IHRvIHRoZSBgcGluX3JlZnNgIHZhbHVlLCB3aGljaCB3aWxsIGJlIGVpdGhlciAxIChmb3IgbGFyZ2UgZm9saW9zKSBvciB0aGF0IGBHVVBfUElOX0NPVU5USU5HX0JJQVNgIChmb3Igb3JkZXItMCBmb2xpb3MpLiBTbywgZnJvbSBhIGZ1bmRhbWVudGFsIHBlcnNwZWN0aXZlLCB0aGlzIGNvbnN0aXR1dGVzIGEgKmZ1bmN0aW9uYWwqIHNoaWZ0IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdCdzIG5vdCBqdXN0IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbDsgaXQncyBob3cgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3cgYmVpbmcgaGFuZGxlZC5cblxuVGhlIG5leHQgcXVlc3Rpb24g4oCTIGlzIHRoaXMgY2hhbmdlIGJyb2FkbHkgaW1wYWN0aW5nIHRoZSBrZXJuZWw/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBzZWVtcyBsaWtlbHksIGFuZCB5ZXMsIEkgcmVtZW1iZXIgYHBpbl91c2VyX3BhZ2VzYCB3aXRoIGBGT0xMX0xPTkdURVJNYCBiZWluZyB1c2VkIHdpZGVseSB0aHJvdWdob3V0IHRoZSBrZXJuZWwgYnkgYSB3aWRlIHZhcmlldHkgb2YgZHJpdmVycy4gYGlvX3VyaW5nYCB1c2VzIGBwaW5fdXNlcl9wYWdlc2AgZm9yIHJlZ2lzdGVyZWQgYnVmZmVycywgYW5kIHRoYXTigJlzIGEgY3JpdGljYWwgY2FzZSB0byBjb25zaWRlci4gVGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gaWYgYGlvX3VyaW5nYCB1dGlsaXplcyBgRk9MTF9MT05HVEVSTWAgaW4gaXRzIGBwaW5fdXNlcl9wYWdlc2AgY2FsbHMuIEkgbmVlZCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjExLjM2MTkyMzc5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNTUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRk9MTF9MT05HVEVSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9tZW1tYXAuYz00MD1zdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy02Mi1cXG5pb191cmluZy9tZW1tYXAuYzo2MzpcXHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuaW9fdXJpbmcvbWVtbWFwLmMtNjQtXFx0XFx0XFx0XFx0XFx0cGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzoxMS40MTMwODU1MTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzMjk4NzQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIGlvX3VyaW5nIHdpdGggRk9MTF9MT05HVEVSTTogUG90ZW50aWFsIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBgaW9fdXJpbmdgICpkb2VzKiBsZXZlcmFnZSBgRk9MTF9MT05HVEVSTWAuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enppbmcuIFRpbWUgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmb2N1cyBvdXIgZWZmb3J0cy5cblxuRmlyc3QsIGxldCdzIGxvb2sgYXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMuIGBjb2xsZWN0X2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zYCwgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNfb3JfZm9saW9zYCwgYGNoZWNrX2FuZF9taWdyYXRlX21vdmFibGVfcGFnZXNgLCBgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3NgLCBhbmQgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgYXJlIGFsbCBpbnRlcm5hbCwgc28gcG90ZW50aWFsbHkgcmVhY2hhYmxlIGJ1dCBsaWtlbHkgbGVzcyBleHBvc2VkIHRvIGV4dGVybmFsIGlucHV0LCB3aGljaCBtYWtlcyB0aGVtIHRyaWNraWVyIHRvIHRhcmdldCBkaXJlY3RseS4gUHJvYmFibHkgYmVzdCB0byB0cmVhdCB0aGVtIGFzIHBvdGVudGlhbCBzZWNvbmRhcnkgdGFyZ2V0cyBvciBjb25zaWRlciBob3cgb3VyIGNob3NlbiBpbnB1dHMgaW5mbHVlbmNlIHRoZW0gaW5kaXJlY3RseS5cblxuVGhlIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHRoZSByZWFsIGtleSBoZXJlLiBXZSBoYXZlIGBwaW5fdXNlcl9wYWdlc2AsIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGBwaW5fdXNlcl9wYWdlc191bmxvY2tlZGAsIGFuZCBgbWVtZmRfcGluX2ZvbGlvc2AuIEhtbSwgYHBpbl91c2VyX3BhZ2VzYC4uLiBpdCdzIGEgaG90IHBhdGgsIGJ1dCBwZXJoYXBzIG5vdCB0aGUgKmhvdHRlc3QqPyBJdCdzIHVzZWQgZm9yIHBpbm5pbmcsIHdoZXJlYXMgYGdldF91c2VyX3BhZ2VzYCBtaWdodCBiZSBhIG1vcmUgbGlrZWx5IGFyZWEgdG8gZmluZCBidWdzLiBXYWl0LCBgbWVtZmRfcGluX2ZvbGlvc2AgbG9va3MgcHJvbWlzaW5nISBJdCdzIHN1cGVyIHNwZWNpZmljIGFuZCBkaXJlY3RseSBoaXRzIHRoZSBjb2RlIHBhdGggd2UncmUgaW50ZXJlc3RlZCBpbi4gWWVzLCBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgZGVmaW5pdGVseSBnb2luZyBvbiB0aGUgbGlzdCwgYWxvbmdzaWRlIGBwaW5fdXNlcl9wYWdlc19mYXN0YCwgYHBpbl91c2VyX3BhZ2VzYCwgYHBpbl91c2VyX3BhZ2VzX3JlbW90ZWAsIGFuZCBgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWRgLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBnb29kIGVudHJ5IHBvaW50cy4gSSB3b25kZXIgYWJvdXQgYGlvX3Bpbl9wYWdlc2AgaW4gaW9fdXJpbmcuLi4gaXQncyB3b3J0aCBhIGxvb2suIExldCdzIGRpZyBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjE3LjQ0NjA3NTM2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NzkwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcGluX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL21lbW1hcC5jPTE4PXN0YXRpYyBib29sIGlvX21lbV9hbGxvY19jb21wb3VuZChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0zOS1cXG5pb191cmluZy9tZW1tYXAuYzo0MDpzdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDEte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTM0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX3Bpbl9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0xNDAtXFxuaW9fdXJpbmcvbWVtbWFwLmM6MTQxOlxcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHJlZy1cXHUwMDNldXNlcl9hZGRyLCBzaXplLCBcXHUwMDI2bnJfcGFnZXMpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTE0Mi1cXHRpZiAoSVNfRVJSKHBhZ2VzKSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTktXFxuaW9fdXJpbmcvbWVtbWFwLmg6MTA6c3RydWN0IHBhZ2UgKippb19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1YWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIGludCAqbnBhZ2VzKTtcXG5pb191cmluZy9tZW1tYXAuaC0xMS1cXG4tLVxcbmlvX3VyaW5nL3JzcmMuYz04NTU9c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtODgzLVxcdHJldCA9IC1FTk9NRU07XFxuaW9fdXJpbmcvcnNyYy5jOjg4NDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVxcdTAwM2Vpb3ZfYmFzZSwgaW92LVxcdTAwM2Vpb3ZfbGVuLFxcbmlvX3VyaW5nL3JzcmMuYy04ODUtXFx0XFx0XFx0XFx0XFx1MDAyNm5yX3BhZ2VzKTtcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0yMDI9c3RhdGljIGludCBpb19pbXBvcnRfdW1lbShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yMTMtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuaW9fdXJpbmcvemNyeC5jOjIxNDpcXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZylhcmVhX3JlZy1cXHUwMDNlYWRkciwgYXJlYV9yZWctXFx1MDAzZWxlbixcXG5pb191cmluZy96Y3J4LmMtMjE1LVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjE3LjQ5OTU1OTA5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAyMTE3NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBTdHJhdGVnaWVzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWdpZXMgZm9yIGVmZmljaWVudCBJL08uIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kOyB0aGF0J3MgYSBzb2xpZCBjb250ZW5kZXIuIEJ1dCBJIG5lZWQgdG8gZXhwbG9yZSBhbHRlcm5hdGl2ZXMgYW5kIHJlbGF0ZWQgbWV0aG9kcy4gSSB3b25kZXIgYWJvdXQgYG1lbWZkX3Bpbl9mb2xpb3NgLiBUaGF0IGZ1bmN0aW9uJ3MgaW50cmlndWluZywgZXNwZWNpYWxseSBnaXZlbiBpdHMgcm9sZSBpbiBgdWRtYWJ1Zl9waW5fZm9saW9zYCBhbmQgYHBpbl9tZW1mZF9wYWdlc2AsIHRoZSBpb21tdWZkIGNvbXBvbmVudC4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgYHVkbWFidWZfcGluX2ZvbGlvc2AgZnVuY3Rpb24sIGFzIGl0IHNlZW1zIGNlbnRyYWwgdG8gdGhpcyBsaW5lIG9mIGlucXVpcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MjAuNzAxNjc5NzQ2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0MDY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZG1hYnVmX3Bpbl9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTI5MD1zdGF0aWMgc3RydWN0IGRtYV9idWYgKmV4cG9ydF91ZG1hYnVmKHN0cnVjdCB1ZG1hYnVmICp1YnVmLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMDMtXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozMDQ6c3RhdGljIGxvbmcgdWRtYWJ1Zl9waW5fZm9saW9zKHN0cnVjdCB1ZG1hYnVmICp1YnVmLCBzdHJ1Y3QgZmlsZSAqbWVtZmQsXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMDUtXFx0XFx0XFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IHNpemUsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcylcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzUwPXN0YXRpYyBsb25nIHVkbWFidWZfY3JlYXRlKHN0cnVjdCBtaXNjZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQxMi1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQxMzpcXHRcXHRyZXQgPSB1ZG1hYnVmX3Bpbl9mb2xpb3ModWJ1ZiwgbWVtZmQsIGxpc3RbaV0ub2Zmc2V0LFxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDE0LVxcdFxcdFxcdFxcdFxcdCBsaXN0W2ldLnNpemUsIGZvbGlvcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjIwLjc1MDYyNjI3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1NzQ5NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gRnV6emluZyB1ZG1hYnVmKipcblxuT2theSwgc28gYHVkbWFidWZfY3JlYXRlYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgdWRtYWJ1ZiBmdXp6aW5nIGVmZm9ydHMuIEl0J3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGFuZCBpdCBjYWxscyBgdWRtYWJ1Zl9waW5fZm9saW9zYCwgd2hpY2ggaXMgbGlrZWx5IHdoZXJlIGEgbG90IG9mIHRoZSBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSU9NTVUgYWN0dWFsbHkgaGFwcGVucy4gVGhhdCBtYWtlcyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIGxpa2UgdGhhdCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBkaWcgaW50byB0aGF0IGBwaW5fbWVtZmRfcGFnZXNgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuY2AgbmV4dC4gSXQgc291bmRzIGxpa2UgdGhlIGtpbmQgb2YgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgb2Z0ZW4gY29udGFpbnMgaW50ZXJlc3RpbmcgYW5kIGV4cGxvaXRhYmxlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjI0LjE1NjM3ODQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk0MTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaW5fbWVtZmRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz04MDc9c3RhdGljIHZvaWQgcGZuX3JlYWRlcl91c2VyX2Rlc3Ryb3koc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlcixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgyMy1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4MjQ6c3RhdGljIGxvbmcgcGluX21lbWZkX3BhZ2VzKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODI1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTg3Nj1zdGF0aWMgaW50IHBmbl9yZWFkZXJfdXNlcl9waW4oc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlcixcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkyOC1cXHRcXHRzdGFydCA9IHBhZ2VzLVxcdTAwM2VzdGFydCArIChzdGFydF9pbmRleCAqIFBBR0VfU0laRSk7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6OTI5OlxcdFxcdHJjID0gcGluX21lbWZkX3BhZ2VzKHVzZXIsIHN0YXJ0LCBucGFnZXMpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTkzMC1cXHR9IGVsc2UgaWYgKCFyZW1vdGVfbW0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MjQuMjAwMzI0MjQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYxMDI2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgYXMgdGhvdWdoIGl0IHdlcmUgbXkgdHJhaW4gb2YgdGhvdWdodDpcblxuKipEaXNzZWN0aW5nIHRoZSBNZW1vcnkgUGlubmluZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYHBmbl9yZWFkZXJfdXNlcl9waW5gLiBUaGlzIGZ1bmN0aW9uJ3MgY2FsbGluZyBgcGluX21lbWZkX3BhZ2VzYCwgcmlnaHQ/IEludGVyZXN0aW5nLiBJdCdzIGNsZWFyIHRoYXQgdGhlcmUncyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGlzIGBwZm5fcmVhZGVyX3VzZXJfcGluYCBhbmQgdGhlIG1lbWZkIG1lY2hhbmlzbSwgYW5kIHRoYXQgYHBmbl9yZWFkZXJfdXNlcl9waW5gIG11c3QgYmUgdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbi5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIHRoaXMgYHBmbl9yZWFkZXJfdXNlcl9waW5gIGZ1bmN0aW9uLiBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB3aGVyZSB1c2VybGFuZCBtZW1vcnkgaXMgYmVpbmcgcGlubmVkIGJhc2VkIG9uIHBmbnMgLSBJIG5lZWQgdG8gc2VlIHdobydzIGFjdHVhbGx5ICp1c2luZyogaXQsIHdobyBuZWVkcyB0aG9zZSBwYWdlcyBwaW5uZWQgaW4gbWVtb3J5IGFuZCB3aHkgdGhleSdyZSBhc2tpbmcgYHBpbl9tZW1mZF9wYWdlc2AgdG8gYmUgY2FsbGVkIHRocm91Z2ggdGhpcyBwYXRoLiBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gVGhpcyBjYWxsIGNoYWluIGlzIGtleSB0byBmaWd1cmluZyBvdXQgaG93IG1lbW9yeSBpcyBiZWluZyBtYW5hZ2VkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjI3LjY5NjQyOTA4MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3Mjc0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZuX3JlYWRlcl91c2VyX3BpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lvbW11L2lvbW11ZmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTg3NS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzo4NzY6c3RhdGljIGludCBwZm5fcmVhZGVyX3VzZXJfcGluKHN0cnVjdCBwZm5fcmVhZGVyX3VzZXIgKnVzZXIsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODc3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW9wdF9wYWdlcyAqcGFnZXMsXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0xMTY4PXN0YXRpYyBpbnQgcGZuX3JlYWRlcl9maWxsX3NwYW4oc3RydWN0IHBmbl9yZWFkZXIgKnBmbnMpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0xMjA5LVxcdGlmIChzdGFydF9pbmRleCBcXHUwMDNlPSB1c2VyLVxcdTAwM2V1cGFnZXNfZW5kKSB7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MTIxMDpcXHRcXHRyYyA9IHBmbl9yZWFkZXJfdXNlcl9waW4odXNlciwgcGZucy1cXHUwMDNlcGFnZXMsIHN0YXJ0X2luZGV4LFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTEyMTEtXFx0XFx0XFx0XFx0XFx0IHNwYW4tXFx1MDAzZWxhc3RfaG9sZSk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0yMTQ3PXN0YXRpYyBpbnQgaW9wdF9wYWdlc19maWxsKHN0cnVjdCBpb3B0X3BhZ2VzICpwYWdlcyxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTIxNTctXFx0XFx0dXNlci1cXHUwMDNldXBhZ2VzID0gb3V0X3BhZ2VzICsgKGN1cl9pbmRleCAtIHN0YXJ0X2luZGV4KTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYzoyMTU4OlxcdFxcdHJjID0gcGZuX3JlYWRlcl91c2VyX3Bpbih1c2VyLCBwYWdlcywgY3VyX2luZGV4LCBsYXN0X2luZGV4KTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0yMTU5LVxcdFxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MjcuNzQxMTYwMzMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDE0NTQ0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERhdGEgRmlsbGluZyBXb3JrZmxvdyoqXG5cbkFscmlnaHQsIHNvIGBpb3B0X3BhZ2VzX2ZpbGxgIGlzIHRyaWdnZXJlZCBieSBgaW9wdF9wYWdlc19maWxsX3hhcnJheWAuIFRoYXQncyB0aGUga2V5IHJlbGF0aW9uc2hpcCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBoZXJlLiBOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byAqaG93KiBpdCdzIGZpbGxpbmcgdGhlIHBhZ2VzLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHVkbWFidWZfY3JlYXRlYCBjb25maWd1cmF0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIHVuZGVybHlpbmcgVURNQWJ1ZiBjcmVhdGlvbiBhbmQgc2V0dXAgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgdGhvc2UgcGFnZXMgYXJlIGZpbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgYnVmZmVyIGlzIGluc3RhbnRpYXRlZCwgd2hhdCBwcm9wZXJ0aWVzIGFyZSBzZXQsIGFuZCBhbnkgc3BlY2lmaWMgY29uc3RyYWludHMgdGhhdCBtaWdodCBiZSBpbiBwbGFjZSwgYmVjYXVzZSB0aG9zZSBjb25zdHJhaW50cyB3aWxsIGRpY3RhdGUgb3IgY29uc3RyYWluIGBpb3B0X3BhZ2VzX2ZpbGxgJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjMwLjc4MjYxODQyMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2ODg0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRtYWJ1Zl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTIwPW1vZHVsZV9wYXJhbShsaXN0X2xpbWl0LCBpbnQsIDA2NDQpO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MjE6TU9EVUxFX1BBUk1fREVTQyhsaXN0X2xpbWl0LCBcXFwidWRtYWJ1Zl9jcmVhdGVfbGlzdC1cXHUwMDNlY291bnQgbGltaXQuIERlZmF1bHQgaXMgMTAyNC5cXFwiKTtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTIyLVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz0yNz1zdHJ1Y3QgdWRtYWJ1ZiB7XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzLVxcdCAqIFNvLCBucl9waW5uZWQgaXMgbm90IHRoZSBzYW1lIHRvIHBhZ2Vjb3VudCwgdGhlIHBpbm5lZF9mb2xpb3NcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjM0OlxcdCAqIG9ubHkgc2V0IGVhY2ggZm9saW8gd2hpY2ggYWxyZWFkeSBwaW5uZWQgd2hlbiB1ZG1hYnVmX2NyZWF0ZS5cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTM1LVxcdCAqIE5vdGUgdGhhdCwgc2luY2UgYSBmb2xpbyBtYXkgYmUgcGlubmVkIG11bHRpcGxlIHRpbWVzLCBlYWNoIGZvbGlvXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jPTMwND1zdGF0aWMgbG9uZyB1ZG1hYnVmX3Bpbl9mb2xpb3Moc3RydWN0IHVkbWFidWYgKnVidWYsIHN0cnVjdCBmaWxlICptZW1mZCxcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtMzQ5LVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzUwOnN0YXRpYyBsb25nIHVkbWFidWZfY3JlYXRlKHN0cnVjdCBtaXNjZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTE6XFx0XFx0XFx0ICAgc3RydWN0IHVkbWFidWZfY3JlYXRlX2xpc3QgKmhlYWQsXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzozNTI6XFx0XFx0XFx0ICAgc3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gKmxpc3QpXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zNTMte1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00NDk9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDUwLXtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ1MTpcXHRzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUgY3JlYXRlO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDUyOlxcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IGhlYWQ7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NTM6XFx0c3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gbGlzdDtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ1NC1cXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDY0LVxcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDY1OlxcdHJldHVybiB1ZG1hYnVmX2NyZWF0ZShmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcdTAwMjZoZWFkLCBcXHUwMDI2bGlzdCk7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NjYtfVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYz00Njg9c3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00Njkte1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6NDcwOlxcdHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZV9saXN0IGhlYWQ7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0NzE6XFx0c3RydWN0IHVkbWFidWZfY3JlYXRlX2l0ZW0gKmxpc3Q7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00NzItXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTQ3OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjQ3OTpcXHRsc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdWRtYWJ1Zl9jcmVhdGVfaXRlbSkgKiBoZWFkLmNvdW50O1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMtNDgwLVxcdGxpc3QgPSBtZW1kdXBfdXNlcigodm9pZCBfX3VzZXIgKikoYXJnICsgc2l6ZW9mKGhlYWQpKSwgbHNpemUpO1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00ODMtXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYzo0ODQ6XFx0cmV0ID0gdWRtYWJ1Zl9jcmVhdGUoZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXHUwMDI2aGVhZCwgbGlzdCk7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy00ODUtXFx0a2ZyZWUobGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjMwLjgyNjMxMTE4MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg2NDQwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGAvZGV2L3VkbWFidWZgIElvY3RsIEludGVyZmFjZSBmb3IgRnV6emluZyoqXG5cblJpZ2h0LCBzbyBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgIGFuZCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGDigJR0aG9zZSBhcmUgdGhlIGtleSBpb2N0bHMgZm9yIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdWRtYWJ1ZmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIHdob2xlIGludGVyZmFjZSBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igb2ZmLWJ5LW9uZSBlcnJvcnMsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yLCBmcmFua2x5LCBhbnkga2luZCBvZiBtZW1vcnkgY29ycnVwdGlvbiBpbmhlcmVudCBpbiBETUEgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBpdCdzIHNjcmVhbWluZyBcInZ1bG5lcmFiaWxpdHkgb3Bwb3J0dW5pdHkuXCJcblxuQmVmb3JlIGRpdmluZyBpbiwgSSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGB1ZG1hYnVmYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBrbm9icyBhbmQgZGlhbHMgYXJlIGF2YWlsYWJsZSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFRoaXMgaW5jbHVkZXMga2VybmVsIGNvbXBpbGUgb3B0aW9ucywgbW9kdWxlIHBhcmFtZXRlcnMsIGFuZCBhbnkgcnVudGltZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byBrbm93IHRoZSBib3VuZHMsIGxpbWl0YXRpb25zLCBhbmQgYXNzdW1wdGlvbnMgYmFrZWQgaW50byBpdHMgZGVzaWduIGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIG1hbGZvcm1lZCBkYXRhIGF0IGl0LiBBcmUgdGhlcmUgYW55IHNpemUgbGltaXRzLCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBvciBhY2Nlc3MgY29udHJvbCBsaXN0cyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbmQgYnlwYXNzPyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kIGlmIHNvLCBob3c/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBwbGFjZSwgaWYgYW55dGhpbmcsIHRvIHByZXZlbnQgbWUgZnJvbSBkb2luZyBzb21ldGhpbmcgcmVhbGx5IG5hc3R5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjM0LjYxMjc1NDcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTA5NzMyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRtYWJ1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MzQuNjgxODc2OTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzkwOTU0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGg6IFRoZSBFbHVzaXZlIHVkbWFidWYqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIHRoaXMsIHdvcmtpbmcgb24gdGhhdCBuZXcgaW1wbGVtZW50YXRpb24sIGFuZCBub3cgSSd2ZSBoaXQgYSBzbmFnLiBUaGUgc3lzdGVtIGlzIGJlaGF2aW5nIGluIGFuIHVuZXhwZWN0ZWQgd2F5LCBhbmQgbXkgbWVudGFsIGNoZWNrbGlzdCBpcyBzY3JlYW1pbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZW4sIHRoZSBxdWVzdGlvbiBoaXRzIG1lOiB3aGVyZSBleGFjdGx5ICppcyogdGhlIGB1ZG1hYnVmYCBjb25maWd1cmVkPyBJIGtub3cgaXQncyBmdW5kYW1lbnRhbCB0byB0aGlzIGFyY2hpdGVjdHVyZSwgY3J1Y2lhbCBmb3IgdGhhdCBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gSSd2ZSB3b3JrZWQgd2l0aCB0aGlzIGJlZm9yZSwgSSAqc2hvdWxkKiBrbm93IHRoaXMgY29sZCwgYnV0IHJpZ2h0IG5vdywgbXkgbWVudGFsIG1hcCBpcyBhIGJpdCBmdXp6eS4gSXQncyB0aW1lIHRvIHBhdXNlIGFuZCBnbyBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgaXQgaW4gdGhlIGRldmljZSB0cmVlPyBUaGUga2VybmVsIGNvbmZpZz8gTWF5YmUgYSBkZWRpY2F0ZWQgZHJpdmVyIG1vZHVsZSBjb25maWd1cmF0aW9uIGZpbGUgSSd2ZSBvdmVybG9va2VkPyBJJ3ZlIGdvdCBhIG1lbnRhbCBpdGNoIG5vdzsgSSBuZWVkIHRvIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMgdW50aWwgSSBmaW5kIHRoZSBzb3VyY2UuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHBpZWNlIEkgbmVlZCB0byBnZXQgbW92aW5nIGFnYWluLiBHb3R0YSBkaWcgZGVlcGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MzcuOTYwOTc1NTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk4Nzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZG1hYnVmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZT03PW9iai0kKENPTkZJR19TV19TWU5DKVxcdFxcdCs9IHN3X3N5bmMubyBzeW5jX2RlYnVnLm9cXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfVURNQUJVRilcXHRcXHQrPSB1ZG1hYnVmLm9cXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUtOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6MzguMDA4OTY5OTg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzc0MzgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVURNQUJVRiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYENPTkZJR19VRE1BQlVGYCBpcyBhY3R1YWxseSBlbmFibGVkIG9yIHJlbGV2YW50IHdpdGhpbiB0aGlzIGNvbnRleHQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gRE1BLUJVRiAoRGlyZWN0IE1lbW9yeSBBY2Nlc3MgQnVmZmVyKSBsaWtlbHkgcmVzaWRlLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBzZWUgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwcm9wZXIgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIHNpZ25pZmljYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzo0MC44ODY0MTAyNzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mjk3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVETUFCVUZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWc9MjA9Y29uZmlnIFNXX1NZTkNcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTMyLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjMzOmNvbmZpZyBVRE1BQlVGXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzQtXFx0Ym9vbCBcXFwidXNlcnNwYWNlIGRtYWJ1ZiBtaXNjIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NDAuOTM0NzE0MTc3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjYyMzE4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIFVETUFCVUYgYW5kIGlvX3VyaW5nIEJ1ZmZlciBSZWdpc3RyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBtZW1vcnkgYnVmZmVycyBhcmUgYmVpbmcgbWFuYWdlZCwgYW5kIGBVRE1BQlVGYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgYmVpbmcgZXhwb3J0ZWQg4oCTIHRoYXQncyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZywgSSBzaG91bGQgbG9vayBpbnRvIHRoYXQgZnVydGhlci4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCB3aXRoaW4gYGlvX3VyaW5nL3JzcmMuY2AuIExvb2tzIGxpa2UgaXQncyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGNhbGxlZCBieSBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgdGhhdCBvdXQgYXMgd2VsbCwgYXMgSSdtIHN1cmUgdGhlcmUncyBtb3JlIGNvbnRleHQgaW4gaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIExldCdzIHNlZSB3aGF0IGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAgaXMgYWxsIGFib3V0LiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNyaXRpY2FsIHBhdGggZm9yIGJ1ZmZlciByZWdpc3RyYXRpb24gd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yaywgYW5kIGxpa2VseSB3aGVyZSB0aGUgYFVETUFCVUZgIGludGVncmF0aW9uIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NDcuMzAwOTUwMTQ0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc5MzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19zcWVfYnVmZmVyc19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcnNyYy5jPTQ2OT1fX2NvbGQgaW50IGlvX3JlZ2lzdGVyX3JzcmMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtNDk0LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JzcmMuYzo0OTU6XFx0XFx0cmV0dXJuIGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKGN0eCwgdTY0X3RvX3VzZXJfcHRyKHJyLmRhdGEpLFxcbmlvX3VyaW5nL3JzcmMuYy00OTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJyLm5yLCB1NjRfdG9fdXNlcl9wdHIocnIudGFncykpO1xcbi0tXFxuaW9fdXJpbmcvcnNyYy5jPTg1NT1zdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy05NDktXFxuaW9fdXJpbmcvcnNyYy5jOjk1MDppbnQgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvcnNyYy5jLTk1MS1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX2FyZ3MsIHU2NCBfX3VzZXIgKnRhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjQ3LjM1MTc0OTMxMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY3MDk2MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIEkvTyBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSS9PIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGFuZCBJJ20gc2VlaW5nIGEgY2xlYXIgcHJvZ3Jlc3Npb246IGBpb19yZWdpc3Rlcl9yc3JjYCBsZWFkcyBkaXJlY3RseSBpbnRvIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAuIEZyb20gdGhlcmUsIGl0IGRyaWxscyBkb3duIHRvIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCB3aGljaCB1bHRpbWF0ZWx5IGdldHMgdXMgdG8gYGlvX3Bpbl9wYWdlc2AgYW5kIGZpbmFsbHksIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhpcyBzZXF1ZW5jZSBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgYXJlYSB0byBmb2N1cyBvbi5cblxuTXkgYXR0ZW50aW9uIGlzIGFsc28gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBJJ20gbm90aW5nIHRoYXQgYElPX1VSSU5HYCBpcyB0aGUgbWFpbiBjb25maWcgZm9yIGlvX3VyaW5nLCBhbmQgZm9yIGlvbW11ZmQsIHdlIGhhdmUgYElPTU1VRkRgLiBXaXRoIHRoZSBmb2N1cyBvbiBpb21tdWZkLCBJIHRoaW5rIGl0J3MgdGltZSB0byBjaGVjayB0aGUgYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NTAuOTE4ODQ4Mzk1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg4MDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJT01NVUZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L0tjb25maWc9Nz1jb25maWcgSU9NTVVfQVBJXFxuLS1cXG5kcml2ZXJzL2lvbW11L0tjb25maWctOS1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MTA6Y29uZmlnIElPTU1VRkRfRFJJVkVSXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTExLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NTAuOTY4NzM1NzM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTE1Mjc0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQSBLZXJuZWwgQ29uZmlndXJhdGlvbiBQdXp6bGVyKipcblxuV2FpdCBhIHNlY29uZC4uLiAqYElPTU1VRkRgKj8gVGhhdCByaW5nIGEgYmVsbC4gTGV0IG1lIHRoaW5rLi4uIGlzbid0IHRoYXQgdGhlIHVzZXJzcGFjZSBJT01NVSBmcmFtZXdvcms/IFllcywgdGhhdCdzIGl0LiBTbywgd2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0PyBXZWxsLCBsb2dpY2FsbHksIGl0IHNob3VsZCBiZSBzb21ld2hlcmUgcmVsYXRlZCB0byBJT01NVS4gQW5kLi4uIGhvbGQgb24uLi4gaXMgaXQgcmVhbGx5IGxpc3RlZCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIGBkcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZ2A/IFNlcmlvdXNseT8gSSBoYXZlIHRvIGFkbWl0LCB0aGF0J3Mgbm90IHdoZXJlIEkgd291bGQgaGF2ZSBpbml0aWFsbHkgZ3Vlc3NlZC4gSSdkIGhhdmUgcHJvYmFibHkgYXNzdW1lZCBpdCB3YXMgdW5kZXIgYSBicm9hZGVyIElPTU1VIHVtYnJlbGxhLCBwZXJoYXBzIGluIGBkcml2ZXJzL2lvbW11L0tjb25maWdgLCBvciBtYXliZSBldmVuIHVuZGVyIGEgbW9yZSBnZW5lcmFsIFwicGxhdGZvcm1cIiBvciBcImRldmljZVwiIHNlY3Rpb24sIGRlcGVuZGluZyBvbiBob3cgaXQncyBhcmNoaXRlY3RlZC4gSG1tLCB0aGF0J3MgdW5leHBlY3RlZCBidXQgbG9naWNhbCwgYW5kIGtub3dpbmcgaXQgaXMgZm91bmQgdGhlcmUgd2lsbCBzdHJlYW1saW5lIGhvdyBJIGNvbmZpZ3VyZSBpdCBuZXh0IHRpbWUgSSBhbSB3b3JraW5nIHdpdGggdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyNzo1NC40NjAyNjcxMzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTE2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPTU1VRkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyOmNvbmZpZyBJT01NVUZEX0RSSVZFUl9DT1JFXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMy1cXHRib29sXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDpcXHRkZWZhdWx0IChJT01NVUZEX0RSSVZFUiB8fCBJT01NVUZEKSBpZiBJT01NVUZEIT1uXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzo2OmNvbmZpZyBJT01NVUZEXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSU9NTVUgVXNlcnNwYWNlIEFQSVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjE4OmlmIElPTU1VRkRcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoxOTpjb25maWcgSU9NTVVGRF9WRklPX0NPTlRBSU5FUlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjIwOlxcdGJvb2wgXFxcIklPTU1VRkQgcHJvdmlkZXMgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gVkZJT19HUk9VUCBcXHUwMDI2XFx1MDAyNiAhVkZJT19DT05UQUlORVJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTIzLVxcdGhlbHBcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyNDpcXHQgIElPTU1VRkQgd2lsbCBwcm92aWRlIC9kZXYvdmZpby92ZmlvIGluc3RlYWQgb2YgVkZJTy4gVGhpcyByZWxpZXMgb25cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzoyNTpcXHQgIElPTU1VRkQgcHJvdmlkaW5nIGNvbXBhdGliaWxpdHkgZW11bGF0aW9uIHRvIGdpdmUgdGhlIHNhbWUgaW9jdGxzLlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTI2LVxcdCAgSXQgcHJvdmlkZXMgYW4gb3B0aW9uIHRvIGJ1aWxkIGEga2VybmVsIHdpdGggbGVnYWN5IFZGSU8gY29tcG9uZW50c1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMjgtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mjk6XFx0ICBJT01NVUZEIFZGSU8gY29udGFpbmVyIGVtdWxhdGlvbiBpcyBrbm93biB0byBsYWNrIGNlcnRhaW4gZmVhdHVyZXNcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMC1cXHQgIG9mIHRoZSBuYXRpdmUgVkZJTyBjb250YWluZXIsIHN1Y2ggYXMgcGVlci10by1wZWVyXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zMi1cXHQgIHVuZGlzY292ZXJlZCBnYXBzLiAgVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IGludGVuZGVkIGZvciB0aGVcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzozMzpcXHQgIHB1cnBvc2Ugb2YgdGVzdGluZyBJT01NVUZEIHdpdGggdW5tb2RpZmllZCB1c2Vyc3BhY2Ugc3VwcG9ydGluZyBWRklPXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMzQtXFx0ICBhbmQgbWFraW5nIHVzZSBvZiB0aGUgVHlwZTEgVkZJTyBJT01NVSBiYWNrZW5kLiAgR2VuZXJhbCBwdXJwb3NlXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZzozNzpcXHQgIFVubGVzcyB0ZXN0aW5nIElPTU1VRkQsIHNheSBOIGhlcmUuXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctMzgtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6Mzk6Y29uZmlnIElPTU1VRkRfVEVTVFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklPTU1VIFVzZXJzcGFjZSBBUEkgVGVzdCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDMtXFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnOjQ0OlxcdGRlcGVuZHMgb24gSU9NTVVfUFRfQU1EVjE9eSB8fCBJT01NVUZEPUlPTU1VX1BUX0FNRFYxXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDUtXFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NDY6XFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNDctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjU0LjUwODM5MDE1NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAwODkyMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFzc2Vzc21lbnQgb2YgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cblJpZ2h0LCBzbyBgSU9NTVVGRGAgc2VlbXMgbGlrZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gY2hvaWNlLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQgbGlrZWx5IHByb3ZpZGVzIHNwZWNpZmljIGJlbmVmaXRzIHJlbGF0ZWQgdG8gRE1BIGFuZCBkZXZpY2UgaXNvbGF0aW9uLCBidXQgSSdkIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgbXkgYXBwbGljYXRpb24ncyByZXF1aXJlbWVudHMuIE5vdywgdGhlIGBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zYCBvcHRpb24gaGFzIG1lIGludHJpZ3VlZC4gSSB2YWd1ZWx5IHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaXQsIGJ1dCBhIHF1aWNrIHJlZnJlc2hlciBpcyBpbiBvcmRlci4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhlIGNvZGUgYW5kIGNvbnN1bHQgYG1tL21lbWZkX2x1by5jYCB0byBzZWUgcHJlY2lzZWx5IHdoYXQgdGhpcyBmbGFnIGVuYWJsZXMgYW5kIHRoZSB0cmFkZS1vZmZzIGl0IGVudGFpbHMgd2l0aCByZXNwZWN0IHRvIGZvbGlvIG1hbmFnZW1lbnQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbWlnaHQgaW1wYWN0IG1lbW9yeSBmcmFnbWVudGF0aW9uLCBOVU1BIGJlaGF2aW9yLCBvciBwZXJoYXBzIGV2ZW4gbGF0ZW5jeSBpbiBteSBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBMZXQncyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudHMgd2l0aGluIHRoZSBzb3VyY2UgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMxMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI3OjU3LjkwOTI4NTM4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNTg2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1mZF9sdW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1mZF9sdW8uYy04Ni1cXG5tbS9tZW1mZF9sdW8uYzo4NzpzdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxubW0vbWVtZmRfbHVvLmMtODgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxcbi0tXFxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTMwMi1cXG5tbS9tZW1mZF9sdW8uYzozMDM6XFx0ZXJyID0gbWVtZmRfbHVvX3ByZXNlcnZlX2ZvbGlvcyhhcmdzLVxcdTAwM2VmaWxlLCBcXHUwMDI2c2VyLVxcdTAwM2Vmb2xpb3MsXFxubW0vbWVtZmRfbHVvLmMtMzA0LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmb2xpb3Nfc2VyLCBcXHUwMDI2bnJfZm9saW9zKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjc6NTcuOTUxNDQ5OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYyNjkxNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYG1lbWZkX2x1by5jYCdzIFJvbGUqKlxuXG5Pa2F5LCBmaXJzdCB0aG91Z2h0OiBcIm1lbWZkX2x1by5jXCIg4oCTIHRoYXQgZmlsZW5hbWUgKmZlZWxzKiBsaWtlIGl0IG1pZ2h0IGJlIGNvbm5lY3RlZCB0byBLSE8sIHRoZSBLZXhlYyBIYW5kT3ZlciBmdW5jdGlvbmFsaXR5LiBNeSBndXQgc2F5cyB0aGVyZSdzIGEgc3Ryb25nIGNvcnJlbGF0aW9uIHRoZXJlLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIEknbSBmYW1pbGlhciB3aXRoIGluIHRoaXMgc3BhY2UuIFNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gTGV0J3MgZGlnIGludG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSByZXZlYWxzIGFib3V0IGBtZW1mZF9sdW8uY2AgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgaG9wZWZ1bGx5LCBLZXhlYyBIYW5kb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3OTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODowMC45MTQxNDQyMTJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDgxNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX2x1by5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcbm1tL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MDAuOTY4MjMzNTAyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mzg1NTc3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBQaW5uaW5nIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBwaW5uaW5nIGZvciBsaXZlIHVwZGF0ZXMsIGFuZCB0aGUgYENPTkZJR19MSVZFVVBEQVRFX01FTUZEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBrZWVwcyBjb21pbmcgdXAuIFdoaWxlIHRoYXQncyBhbiBvcHRpb24sIEknbSB0aGlua2luZyB0aGF0IGB1ZG1hYnVmYCBtaWdodCBiZSBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBnZW5lcmFsbHkgYWNjZXB0ZWQgYXBwcm9hY2guIEkgd2FudCB0byByZXZpc2l0IGBtZW1mZF9waW5fZm9saW9zYCBhZ2Fpbiwgc2luY2UgaXQncyBjYWxsZWQgYnkgYHVkbWFidWZfcGluX2ZvbGlvc2AuXG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgYmVzdCBwYXRoIGZvcndhcmQuIE15IGtleSBmb2N1cyByaWdodCBub3csIGJhc2VkIG9uIHRoZSBjdXJyZW50IHVuZGVyc3RhbmRpbmcsIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIG9uOiBgbWVtZmRfcGluX2ZvbGlvc2AsIGB1ZG1hYnVmX3Bpbl9mb2xpb3NgLCBgdWRtYWJ1Zl9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgLCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCwgYHBpbl91c2VyX3BhZ2VzX2Zhc3RgLCBhbmQgYHBpbl91c2VyX3BhZ2VzYC5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBgcGluX3VzZXJfcGFnZXNfZmFzdGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gYGlvX3VyaW5nYC4gVW5kZXJzdGFuZGluZyB0aGlzIHVzYWdlIHBhdHRlcm4gd2lsbCBwcm92aWRlIHNvbWUgY29udGV4dCBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgZm9yIG91ciBhcHBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MDUuNDA2NzkzODU5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY5MTc1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGluX3VzZXJfcGFnZXNfZmFzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9tZW1tYXAuYz00MD1zdHJ1Y3QgcGFnZSAqKmlvX3Bpbl9wYWdlcyh1bnNpZ25lZCBsb25nIHVhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgaW50ICpucGFnZXMpXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy02Mi1cXG5pb191cmluZy9tZW1tYXAuYzo2MzpcXHRyZXQgPSBwaW5fdXNlcl9wYWdlc19mYXN0KHVhZGRyLCBucl9wYWdlcywgRk9MTF9XUklURSB8IEZPTExfTE9OR1RFUk0sXFxuaW9fdXJpbmcvbWVtbWFwLmMtNjQtXFx0XFx0XFx0XFx0XFx0cGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODowNS42MDM3MTk3MDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1NDAzMzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBgaW9fcGluX3BhZ2VzYCoqXG5cbk9rYXksIHNvIEkndmUgcmVtZW1iZXJlZCB0aGF0IGBpb19waW5fcGFnZXNgIGNhbGxzIGBwaW5fdXNlcl9wYWdlc19mYXN0YC4gVGhhdCBtYWtlcyBgaW9fcGluX3BhZ2VzYCBhIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmdW5jdGlvbiB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LiBJdCdzIGEga2V5IHBvaW50IG9mIGludGVyYWN0aW9uLiBHaXZlbiBpdHMgZnVuY3Rpb24sIEknZCBsaWtlIHRvIGNoZWNrIGhvdyBpdCBpcyB1c2VkLiBJJ2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gZHJpdmVycyB1c2luZyBgdmZpb2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgYXBwbGljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MDguMjU3NzU2NDIzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ2OTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaW5fdXNlcl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfc3BhcHJfdGNlLmM9NDg0PXN0YXRpYyBpbnQgdGNlX2lvbW11X3VzZV9wYWdlKHVuc2lnbmVkIGxvbmcgdGNlLCB1bnNpZ25lZCBsb25nICpocGEpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV9zcGFwcl90Y2UuYy00ODgtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfc3BhcHJfdGNlLmM6NDg5OlxcdGlmIChwaW5fdXNlcl9wYWdlc19mYXN0KHRjZSBcXHUwMDI2IFBBR0VfTUFTSywgMSxcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV9zcGFwcl90Y2UuYy00OTAtXFx0XFx0XFx0ZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UgPyBGT0xMX1dSSVRFIDogMCxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9MTA0PXN0cnVjdCB2ZmlvX2JhdGNoIHtcXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjEwNTpcXHRzdHJ1Y3QgcGFnZVxcdFxcdCoqcGFnZXM7XFx0LyogZm9yIHBpbl91c2VyX3BhZ2VzX3JlbW90ZSAqL1xcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtMTA2LVxcdHN0cnVjdCBwYWdlXFx0XFx0KmZhbGxiYWNrX3BhZ2U7IC8qIGlmIHBhZ2VzIGFsbG9jIGZhaWxzICovXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTQ4MD1zdGF0aWMgaW50IHB1dF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBwcm90KVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy00ODQtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo0ODU6XFx0XFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFxcdTAwMjZwYWdlLCAxLCBwcm90IFxcdTAwMjYgSU9NTVVfV1JJVEUpO1xcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNDg2LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01ODQ9c3RhdGljIGxvbmcgdmFkZHJfZ2V0X3BmbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdmFkZHIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU5Ni1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1OTc6XFx0cmV0ID0gcGluX3VzZXJfcGFnZXNfcmVtb3RlKG1tLCB2YWRkciwgcGluX3BhZ2VzLCBmbGFncyB8IEZPTExfTE9OR1RFUk0sXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01OTgtXFx0XFx0XFx0XFx0ICAgIGJhdGNoLVxcdTAwM2VwYWdlcywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjA4LjMwMTIzMDI5MloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUxMzc4MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBLZXJuZWwgVnVsbmVyYWJpbGl0eSBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uc2lkZXJpbmcgVkZJTydzIHVzZSBvZiBgcGluX3VzZXJfcGFnZXNfcmVtb3RlYCB3aXRoIGBGT0xMX0xPTkdURVJNYC4gVGhhdCBtZWFucyBgdmFkZHJfZ2V0X3BmbnNgIGlzIGEga2V5IHN5bWJvbCB0byB1bmRlcnN0YW5kLiBIb3dldmVyLCBJIHN1c3BlY3QgdGhhdCBgaW9fcGluX3BhZ2VzYCBhbmQgYHVkbWFidWZfY3JlYXRlYCBtaWdodCBiZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBlbnRyeSBwb2ludHMgZm9yIGV4cGxvaXRhdGlvbiwgc28gdGhvc2UgYXJlIGFsc28gZ29vZCB0byBrZWVwIGluIG1pbmQuXG5cbkxldCBtZSB0YWtlIHN0b2NrIG9mIHRoZSBtYWluIHN5bWJvbHMgSSB3YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXI6XG5cbiogICBgbWVtZmRfcGluX2ZvbGlvc2BcbiogICBgdWRtYWJ1Zl9waW5fZm9saW9zYFxuKiAgIGB1ZG1hYnVmX2NyZWF0ZWBcbiogICBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVgXG4qICAgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgXG4qICAgYGlvX3Bpbl9wYWdlc2BcbiogICBgaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcmBcbiogICBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgXG4qICAgYHZhZGRyX2dldF9wZm5zYFxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIEl0J3MgYW4gaW9jdGwgb24gYC9kZXYvdWRtYWJ1ZmAsIHNvIGl0J3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLiBHb29kLCB0aGF0J3Mgb25lIGF2ZW51ZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYCBpcyByZWFjaGFibGUuIEl0IGlzIGNhbGxlZCBieSBgaW9fcmVnaXN0ZXJfcnNyY2AsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGlvX3VyaW5nX3JlZ2lzdGVyYC4gT2theSwgdGhhdCdzIGFsc28gY2xlYXJseSByZWFjaGFibGUuXG5cbkZpbmFsbHksIGxldCdzIGRvdWJsZS1jaGVjayBgdmFkZHJfZ2V0X3BmbnNgLiBUaGF0J3MgY2FsbGVkIGJ5IGB2ZmlvX3Bpbl9wYWdlc19yZW1vdGVgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHZmaW9fcGluX21hcF9kbWFgLiBZZXMsIGl0J3MgZGVmaW5pdGl2ZWx5IHJlYWNoYWJsZSBhcyB3ZWxsLlxuXG5TbyB0byBlbmFibGUgdGhlc2UgdGFyZ2V0cywgdGhlIGtleSBrZXJuZWwgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIGFyZTpcblxuKiAgIGBVRE1BQlVGYFxuKiAgIGBJT19VUklOR2BcbiogICBgVkZJT2BcbiogICBgSU9NTVVGRGBcblxuSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgYFVETUFCVUZgIGRlcGVuZGVuY2llcywganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MTQuNDUyNjExNjkyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1MzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVURNQUJVRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZz0yMD1jb25maWcgU1dfU1lOQ1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzItXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6MzM6Y29uZmlnIFVETUFCVUZcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJ1c2Vyc3BhY2UgZG1hYnVmIG1pc2MgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoxNC41MDMwNjg2MTFaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNTYwMzEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBVRE1BQlVGIGJsb2NrLCBhbmQgc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgVURNQUJVRiBCbG9jayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIFVETUFCVUYgYmxvY2suIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbiwgYWxsIHRoZSBkZXRhaWxzLiBJIHdhbnQgdG8gc2VlIHRoZSBjb21wbGV0ZSwgdW5lZGl0ZWQgc291cmNlIGNvZGUgb3IgYXQgbGVhc3QgYSBkZXRhaWxlZCBleHBsYW5hdGlvbi4gSSdtIG5vdCBsb29raW5nIGZvciBqdXN0IHNuaXBwZXRzIG9yIHN1bW1hcmllczsgSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gZ3Jhc3AgdGhlIG51YW5jZXMuIEknbSBhc3N1bWluZywgb2YgY291cnNlLCB0aGF0IHdlIGFyZSBkaXNjdXNzaW5nIFVETUFCVUYgYXMgaXQgcGVydGFpbnMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFsbG9jYXRpb24uIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyBpdOKAmXMgZGVzaWduZWQgdG8gaGFuZGxlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucyBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgRE1BIGNvbnRyb2xsZXIuIEkgd2FudCB0byBsb29rIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBidWZmZXIgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgcG90ZW50aWFsbHksIGZyYWdtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZW1vcnkgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdXNlcnNwYWNlLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZ2F1Z2UgaXRzIHBvdGVudGlhbCBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIGV4aXN0aW5nIHN5c3RlbS4gU28sIHNob3cgbWUgZXZlcnl0aGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoxNy43MTg2NzQyMDlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODc1NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVRE1BQlVGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTIwPWNvbmZpZyBTV19TWU5DXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzozMzpjb25maWcgVURNQUJVRlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM0LVxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjE3Ljc3MjU1NjUzOFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5Mzc4OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDb250ZXh0dWFsIEZsb3cqKlxuXG5SaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byBzZWUgKndoYXQgY29tZXMgbmV4dCouIFRoZSBzdGF0ZW1lbnQgaXRzZWxmIGlzIGxpa2VseSBpbmNvbXBsZXRlLCBvciBpdHMgZnVsbCBtZWFuaW5nIGhpbmdlcyBvbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEkga25vdyBjb250ZXh0IGlzICpldmVyeXRoaW5nKi4gSSBjYW4ndCBldmVuIGJlZ2luIHRvIGZvcm0gYSBzb2xpZCBpbnRlcnByZXRhdGlvbiwgbGV0IGFsb25lIGEgc291bmQgYXJndW1lbnQgb3IgcmVzcG9uc2UsIHVudGlsIEkgdW5kZXJzdGFuZCB0aGUgKmVudGlyZSogcGljdHVyZS4gSXMgdGhpcyBhIHN0YXRlbWVudCBvbiBpdHMgb3duIG9yIHBhcnQgb2YgYSBicm9hZGVyIGFyZ3VtZW50PyBBbSBJIG1pc3Npbmcga2V5IGluZm9ybWF0aW9uIGJlY2F1c2UgSSdtIG9ubHkgc2VlaW5nIGEgc2VnbWVudD8gSSBuZWVkIHRvIHNlZSB0aGUgc3VwcG9ydGluZyBldmlkZW5jZSwgdGhlIGNvdW50ZXJwb2ludHMsIHRoZSBpbXBsaWNhdGlvbnMuLi4gdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEluIHNob3J0LCBqdW1waW5nIHRvIHRoZSBjb25jbHVzaW9uIG5vdyB3b3VsZCBiZSBuZWdsaWdlbnQuIEkgbmVlZCB0byBlbnN1cmUgYWxsIHBvdGVudGlhbCBjb25uZWN0aW9ucyBhbmQgaW50ZXItZGVwZW5kZW5jaWVzIGFyZSBldmFsdWF0ZWQgKmJlZm9yZSogcmVzcG9uZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoyMS4xMjE5Mzg2NzRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzM6XFx0Y29uZmlnIFVETUFCVUZcXG4gIDM0OlxcdFxcdGJvb2wgXFxcInVzZXJzcGFjZSBkbWFidWYgbWlzYyBkcml2ZXJcXFwiXFxuICAzNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTUVNRkRfQ1JFQVRFIHx8IENPTVBJTEVfVEVTVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgQSBkcml2ZXIgdG8gbGV0IHVzZXJzcGFjZSB0dXJuIG1lbWZkIHJlZ2lvbnMgaW50byBkbWEtYnVmcy5cXG4gIDQxOlxcdFxcdCAgUWVtdSBjYW4gdXNlIHRoaXMgdG8gY3JlYXRlIGhvc3QgZG1hYnVmcyBmb3IgZ3Vlc3QgZnJhbWVidWZmZXJzLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgRE1BQlVGX0RFQlVHXFxuICA0NDpcXHRcXHRib29sIFxcXCJETUEtQlVGIGRlYnVnIGNoZWNrc1xcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gIDQ2OlxcdFxcdGRlZmF1bHQgeSBpZiBERUJVR1xcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGFkZGl0aW9uYWwgY2hlY2tzIGZvciBETUEtQlVGIGltcG9ydGVycyBhbmRcXG4gIDQ5OlxcdFxcdCAgZXhwb3J0ZXJzLiBTcGVjaWZpY2FsbHkgaXQgdmFsaWRhdGVzIHRoYXQgaW1wb3J0ZXJzIGRvIG5vdCBwZWVrIGF0IHRoZVxcbiAgNTA6XFx0XFx0ICB1bmRlcmx5aW5nIHN0cnVjdCBwYWdlIHdoZW4gdGhleSBpbXBvcnQgYSBidWZmZXIuXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBETUFCVUZfS1VOSVRfVEVTVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoyMS4xMjE5OTU0MDRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDcwNDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgVURNQUJVRioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYFVETUFCVUZgIGFuZCBob3cgaXQgZnVuY3Rpb25zLiBJdCdzIGJ1aWx0IG9uIGEgZmV3IGtleSBjb21wb25lbnRzLiBJIGtub3cgaXQgbGVhbnMgaGVhdmlseSBvbiBgRE1BX1NIQVJFRF9CVUZGRVJgLCBgTUVNRkRfQ1JFQVRFYCwgYW5kIHRoZSBNTVUuIFRob3NlIGFyZSB0aGUgYmlnIGJ1aWxkaW5nIGJsb2NrcyBpbiB0aGlzIGNhc2UuXG5cbkknZCBleHBlY3QgYERNQV9TSEFSRURfQlVGRkVSYCB0byBiZSBlbmFibGVkIGluIG1vc3Qgc2l0dWF0aW9ucyAtIGl0J3MgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0J3MgYWxtb3N0IGFsd2F5cyBhIGdpdmVuLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24sIGp1c3QgdG8gYmUgdGhvcm91Z2guIExldCdzIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBgRE1BX1NIQVJFRF9CVUZGRVJgIGZvciBhIGJpdCBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSXQncyBhbHdheXMgZ29vZCB0byByZXZpc2l0IGFzc3VtcHRpb25zLCBldmVuIHRoZSBvYnZpb3VzIG9uZXMuIExldCdzIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGFzIEkgZXhwZWN0IHRoZW0gdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODoyNC4zNjI3MDM4MTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzE3MDQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kbWEtYnVmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjI0LjQxMTQyODUyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjk1ODU0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqV2hlcmUgRGlkIFRoYXQgU2hhcmVkIEJ1ZmZlciBHbz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJ20gaW1tZWRpYXRlbHkgc3R1Y2suIFdoZXJlIHRoZSBoZWNrIGlzIGBETUFfU0hBUkVEX0JVRkZFUmAgZGVmaW5lZD8gSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBhIGRlY2xhcmF0aW9uIG9yIHNvbWUga2luZCBvZiBtYWNybyBkZWZpbml0aW9uIG5lYXJieSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSBpcyByZWZlcmVuY2luZyBpdC4gSXMgaXQgYSBnbG9iYWwgdmFyaWFibGUsIHBhcnQgb2YgYSBoZWFkZXIgZmlsZSBJJ20gbWlzc2luZywgb3IgcGVyaGFwcyBhIG1hY3JvIGRlZmluZWQgdGhyb3VnaCBzb21lIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBrbm93IHRoZSBtZW1vcnkgY2hhcmFjdGVyaXN0aWNzIG9mIHRoaXMgdGhpbmc7IElzIGl0IGluIHNoYXJlZCBtZW1vcnk/IElmIHNvLCB3aGF0IGFyZSB0aGUgYWNjZXNzIGxpbWl0YXRpb25zIGFuZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBidWZmZXI/IFdpdGhvdXQga25vd2luZyBpdHMgb3JpZ2luLCB0eXBlLCBhbmQgaW50ZW5kZWQgcHVycG9zZSBpbiB0aGlzIGFyY2hpdGVjdHVyZSwgSSBjYW4ndCBldmVuIGJlZ2luIHRvIGV2YWx1YXRlIHRoZSByZXN0IG9mIHRoZSBjb2RlIHRoYXQgdXNlcyBpdC4gVGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCB3aXRob3V0IGl0LCBJJ20ganVzdCBzdGFyaW5nIGF0IGFuIGluY29tcGxldGUgcGljdHVyZS4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGRlZXBlciwgc2VhcmNoIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBhbmQgcmVsYXRlZCBoZWFkZXJzIHRvIHRyYWNrIGRvd24gdGhpcyB2aXRhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBpcyBnb2luZyB0byBkZWxheSBtZSB1bmxlc3MgaXQncyBvYnZpb3VzbHkgZGVjbGFyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjY0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MjcuNzQxMDE2NTE2WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM1MjQzMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MjkuMjc2MjY1NjUxWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTIxMTQyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN5c3RlbSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgYm9vbGVhbiwgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24gc2VsZWN0ZWQgZWxzZXdoZXJlLiBDb25zaWRlcmluZyB0aGF0LCBgVURNQUJVRmAgc2VlbXMgbGlrZSB0aGUgc2Vuc2libGUgY2hvaWNlIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgc3RhbmRhcmQgc29sdXRpb24gZm9yIHRoaXMga2luZCBvZiBzZXR1cC5cblxuTm93LCBJIHdhbnQgdG8gZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgSU9fVVJJTkdgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBsaW5rZWQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSB3aWxsIGxpZSwgbGlrZWx5LiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCB3aGVuIHRoaXMgZmVhdHVyZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODozMi4wMjgzODM2MzdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzc3MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTE9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTgtXFxuaW5pdC9LY29uZmlnOjE5MTk6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MjAtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjg9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5NDAtXFxuaW5pdC9LY29uZmlnOjE5NDE6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQyLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjMyLjA3MTc2NDI1NloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk5MTQyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGRvY3VtZW50YXRpb24ncyByZXZlbGF0aW9uLCByZW5kZXJlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJT19VUklORydzIENvbmZpZ3VyYXRpb24gTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhcyBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYElPX1VSSU5HYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IG1pZ2h0IGJlIHR1Y2tlZCBhd2F5IGluIHNvbWUgb2JzY3VyZSBtb2R1bGUgZGlyZWN0b3J5LCBvciBtYXliZSBldmVuIGdlbmVyYXRlZCBkeW5hbWljYWxseS4gQnV0LCBsbyBhbmQgYmVob2xkLCBhIHF1aWNrIHNlYXJjaCBhbmQgSSBmb3VuZCBpdCByaWdodCB0aGVyZSBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIGFjdHVhbGx5IHByZXR0eSBsb2dpY2FsLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LiBUaGUgYGluaXRgIGRpcmVjdG9yeSBvZnRlbiBob3VzZXMgY29yZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgbWFraW5nIGl0IHRoZSBpZGVhbCBsb2NhdGlvbiBmb3IgYSBmb3VuZGF0aW9uYWwgZmVhdHVyZSBsaWtlIGBJT19VUklOR2AgdGhhdCBmdW5kYW1lbnRhbGx5IGltcGFjdHMgSS9PIG9wZXJhdGlvbnMgZnJvbSB0aGUga2VybmVsJ3MgdmVyeSBib290LiBJdCBnaXZlcyBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGl0cyBjb3JlIGZlYXR1cmVzLCBhbmQgbWFrZXMgbWUgY29uc2lkZXIgcG90ZW50aWFsIGNoYW5nZXMgdG8gbWFrZSwgZ29pbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODozNS40NzA5MTExMjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTE5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTE5OlxcdGNvbmZpZyBJT19VUklOR1xcbjE5MjA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5MjE6XFx0XFx0c2VsZWN0IElPX1dRXFxuMTkyMjpcXHRcXHRkZWZhdWx0IHlcXG4xOTIzOlxcdFxcdGhlbHBcXG4xOTI0OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgaW9fdXJpbmcgaW50ZXJmYWNlLCBlbmFibGluZ1xcbjE5MjU6XFx0XFx0ICBhcHBsaWNhdGlvbnMgdG8gc3VibWl0IGFuZCBjb21wbGV0ZSBJTyB0aHJvdWdoIHN1Ym1pc3Npb24gYW5kXFxuMTkyNjpcXHRcXHQgIGNvbXBsZXRpb24gcmluZ3MgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgYXBwbGljYXRpb24uXFxuMTkyNzpcXHRcXG4xOTI4OlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6MzUuNDcxMDUxNTgxWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjAyMjI2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVkZJTyBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBkZWZhdWx0IGlzIHNldCB0byAneScuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgaW5pdGlhbCBzdGF0ZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBnaXZlbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBpbnRlbmRlZCBhcHBsaWNhdGlvbi5cblxuQmVmb3JlIHByb2NlZWRpbmcgZnVydGhlciwgSSBuZWVkIHRvIG1ha2UgYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgYFZGSU9gIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBhc3BlY3QsIGFuZCBnZXR0aW5nIHRoaXMgd3JvbmcgY2FuIGxlYWQgdG8gZGlmZmljdWx0IGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLCBzbyBJJ2xsIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgY29uZmxpY3RzIG9yIG1pc3NpbmcgY29tcG9uZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSBrbm93IHRoZSBudWFuY2VzIG9mIHRoZSBkcml2ZXJzIEknbSB3b3JraW5nIHdpdGggYW5kIHdoZXJlIHRoZXkgdGVuZCB0byBydW4gaW50byB0cm91YmxlLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBmb2N1cyBteSBhdHRlbnRpb24uIEl0J3MgYSBrZXkgc3RlcCB0byBwcmV2ZW50aW5nIGxhdGVyIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjM4LjkzMTI3NzIyNFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg4MjY0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODItXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODozOS4wMTAxMDcxMDNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwOTU3ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKlZGSU8gU2V0dXAgXHUwMDI2IERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGlua2luZyBhYm91dCB2aXJ0dWFsaXphdGlvbiB3aXRoIFZGSU8sIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgVkZJTyBhbmQgdGhlIGBWRklPX0lPTU1VX1RZUEUxYCBzZXR0aW5nIGFyZSB0aGUgaWRlYWwgcGF0aCB0byBwdXJzdWUuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBtb3N0IHJvYnVzdCB3YXkgdG8gZ2V0IGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYElPTU1VRkRgIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuIEl0J3MgY3J1Y2lhbCB0byBjb25maXJtIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBjcnVjaWFsIGNvbXBvbmVudHMgb3IgY29uZmlndXJhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6NDIuMTE5Njg3NjQyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDY6XFx0Y29uZmlnIElPTU1VRkRcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJJT01NVSBVc2Vyc3BhY2UgQVBJXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IElOVEVSVkFMX1RSRUVcXG4gICA5OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxcbiAgMTA6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTE6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFByb3ZpZGVzIC9kZXYvaW9tbXUsIHRoZSB1c2VyIEFQSSB0byBjb250cm9sIHRoZSBJT01NVSBzdWJzeXN0ZW0gYXNcXG4gIDE0OlxcdFxcdCAgaXQgcmVsYXRlcyB0byBtYW5hZ2luZyBJTyBwYWdlIHRhYmxlcyB0aGF0IHBvaW50IGF0IHVzZXIgc3BhY2UgbWVtb3J5LlxcbiAgMTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjQyLjExOTc1MDMyMloiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY5MzI5NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBpbm5pbmcgRG93biBNZW1vcnk6IEEgU3RyYXRlZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYElPTU1VRkRgIGlzIGEgc29saWQgZm91bmRhdGlvbiwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBJIHdhbnQgdG8gcmV2aXNpdCBgbWVtZmRfcGluX2ZvbGlvc2AuIEkgbmVlZCB0byBlbnN1cmUgaXRzIHVzYWdlIGlzIGNvbnNpc3RlbnQgYW5kIHByZWRpY3RhYmxlIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5BIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBzaG93cyBpdCdzIGRpcmVjdGx5IGludm9rZWQgYnkgYHVkbWFidWZfcGluX2ZvbGlvc2AgYW5kIGBwaW5fbWVtZmRfcGFnZXNgLiBUaGF0IGhlbHBzIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzOiBgdWRtYWJ1Zl9jcmVhdGVgIHNlZW1zIGxpa2UgYSBwcmltYXJ5IGNhbmRpZGF0ZSBmb3IgcmV2aWV3LCBhbG9uZyB3aXRoIGBwaW5fbWVtZmRfcGFnZXNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcmVsZXZhbnQgYGlvX3Bpbl9wYWdlc2AgYW5kIGB2YWRkcl9nZXRfcGZuc2Agd2FycmFudCBleGFtaW5hdGlvbiBhcyB3ZWxsLiBUaGVzZSBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcyBmb3IgZGVlcCBkaXZlcy5cblxuSG9sZCBvbiBhIG1pbnV0ZS4uLiBgbWVtZmRfcGluX2ZvbGlvc2AgaXMgKmV4cG9ydGVkKj8gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gSWYgaXQncyBleHBvcnRlZCwgdGhlbiBvdGhlciBtb2R1bGVzLCBwb3RlbnRpYWxseSBsZXNzIHNjcnV0aW5pemVkIG9uZXMsIGNvdWxkIGJlIGNhbGxpbmcgaXQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGJyb2FkZW4gbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGZpbmQgKmV2ZXJ5KiBjYWxsZXIgb2YgYG1lbWZkX3Bpbl9mb2xpb3NgIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgdW5leHBlY3RlZCBpbnRlZ3JhdGlvbnMgb3IsIGV2ZW4gd29yc2UsIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHN0ZW1taW5nIGZyb20gaXRzIHVzYWdlLiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzaW5nLiBMZXQncyBzZWUgd2hvIGVsc2UgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg5NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjI4OjQ2LjU4OTA4MjU4WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4ODk0NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWZkX3Bpbl9mb2xpb3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM9MzA0PXN0YXRpYyBsb25nIHVkbWFidWZfcGluX2ZvbGlvcyhzdHJ1Y3QgdWRtYWJ1ZiAqdWJ1Ziwgc3RydWN0IGZpbGUgKm1lbWZkLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTUtXFx0ZW5kID0gc3RhcnQgKyAocGdjbnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgLSAxO1xcbmRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmM6MzE2OlxcdG5yX2ZvbGlvcyA9IG1lbWZkX3Bpbl9mb2xpb3MobWVtZmQsIHN0YXJ0LCBlbmQsIGZvbGlvcywgcGdjbnQsIFxcdTAwMjZwZ29mZik7XFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMTctXFx0aWYgKG5yX2ZvbGlvcyBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYy0zMzctXFx0XFx0ICogSW4gYSBnaXZlbiByYW5nZSwgb25seSB0aGUgZmlyc3Qgc3VicGFnZSBvZiB0aGUgZmlyc3QgZm9saW9cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jOjMzODpcXHRcXHQgKiBoYXMgYW4gb2Zmc2V0LCB0aGF0IGlzIHJldHVybmVkIGJ5IG1lbWZkX3Bpbl9mb2xpb3MoKS5cXG5kcml2ZXJzL2RtYS1idWYvdWRtYWJ1Zi5jLTMzOS1cXHRcXHQgKiBUaGUgZmlyc3Qgc3VicGFnZXMgb2Ygb3RoZXIgZm9saW9zIChpbiB0aGUgcmFuZ2UpIGhhdmUgYW5cXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTgyND1zdGF0aWMgbG9uZyBwaW5fbWVtZmRfcGFnZXMoc3RydWN0IHBmbl9yZWFkZXJfdXNlciAqdXNlciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNC1cXHQvKlxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjgzNTpcXHQgKiB0b2RvOiBtZW1mZF9waW5fZm9saW9zIHNob3VsZCByZXR1cm4gdGhlIGxhc3QgcGlubmVkIG9mZnNldCBzb1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTgzNi1cXHQgKiB3ZSBjYW4gY29tcHV0ZSBucGFnZXMgcGlubmVkLCBhbmQgYXZvaWQgbG9vcGluZyBvdmVyIGZvbGlvcyBoZXJlXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy04MzgtXFx0ICovXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6ODM5OlxcdG5mb2xpb3MgPSBtZW1mZF9waW5fZm9saW9zKHVzZXItXFx1MDAzZWZpbGUsIHN0YXJ0LCBlbmQsIHVzZXItXFx1MDAzZXVmb2xpb3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtODQwLVxcdFxcdFxcdFxcdCAgIG5mb2xpb3MsIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMzMTc9bG9uZyBwaW5fdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMzE4LVxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzMxOTpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMzMjAtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqZm9saW9zLCB1bnNpZ25lZCBpbnQgbWF4X2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jPTE5MD1FWFBPUlRfU1lNQk9MKHVucGluX3VzZXJfcGFnZSk7XFxuLS1cXG5tbS9ndXAuYy0xOTUtICpcXG5tbS9ndXAuYzoxOTY6ICogRm9saW9zIHRoYXQgd2VyZSBwaW5uZWQgdmlhIG1lbWZkX3Bpbl9mb2xpb3MoKSBvciBvdGhlciBzaW1pbGFyIHJvdXRpbmVzXFxubW0vZ3VwLmMtMTk3LSAqIG11c3QgYmUgcmVsZWFzZWQgZWl0aGVyIHVzaW5nIHVucGluX2ZvbGlvKCkgb3IgdW5waW5fZm9saW9zKCkuXFxuLS1cXG5tbS9ndXAuYz0zNDE5PUVYUE9SVF9TWU1CT0wocGluX3VzZXJfcGFnZXNfdW5sb2NrZWQpO1xcbi0tXFxubW0vZ3VwLmMtMzQyMS0vKipcXG5tbS9ndXAuYzozNDIyOiAqIG1lbWZkX3Bpbl9mb2xpb3MoKSAtIHBpbiBmb2xpb3MgYXNzb2NpYXRlZCB3aXRoIGEgbWVtZmRcXG5tbS9ndXAuYy0zNDIzLSAqIEBtZW1mZDogICAgICB0aGUgbWVtZmQgd2hvc2UgZm9saW9zIGFyZSB0byBiZSBwaW5uZWRcXG4tLVxcbm1tL2d1cC5jLTM0NDYtICovXFxubW0vZ3VwLmM6MzQ0Nzpsb25nIG1lbWZkX3Bpbl9mb2xpb3Moc3RydWN0IGZpbGUgKm1lbWZkLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxubW0vZ3VwLmMtMzQ0OC1cXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKipmb2xpb3MsIHVuc2lnbmVkIGludCBtYXhfZm9saW9zLFxcbi0tXFxubW0vZ3VwLmMtMzU0My19XFxubW0vZ3VwLmM6MzU0NDpFWFBPUlRfU1lNQk9MX0dQTChtZW1mZF9waW5fZm9saW9zKTtcXG5tbS9ndXAuYy0zNTQ1LVxcbi0tXFxubW0vZ3VwLmMtMzU1NS0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgb2J0YWluZWQgYSBwaW4gb24gYSBsYXJnZSBmb2xpb1xcbm1tL2d1cC5jOjM1NTY6ICogdXNpbmcgbWVtZmRfcGluX2ZvbGlvcygpLCBidXQgd2FudGluZyB0byBsb2dpY2FsbHkgdW5waW4gcGFydHNcXG5tbS9ndXAuYy0zNTU3LSAqIChlLmcuLCBpbmRpdmlkdWFsIHBhZ2VzKSBvZiB0aGUgZm9saW8gbGF0ZXIsIGZvciBleGFtcGxlLCB1c2luZ1xcbi0tXFxubW0vbWVtZmQuYz0zOD1zdGF0aWMgdm9pZCBtZW1mZF90YWdfcGlucyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbm1tL21lbWZkLmMtNjQtICogSXQgaXMgbWFpbmx5IGNhbGxlZCB0byBhbGxvY2F0ZSBhIGZvbGlvIGluIGEgbWVtZmQgd2hlbiB0aGUgY2FsbGVyXFxubW0vbWVtZmQuYzo2NTogKiAobWVtZmRfcGluX2ZvbGlvcygpKSBjYW5ub3QgZmluZCBhIGZvbGlvIGluIHRoZSBwYWdlIGNhY2hlIGF0IGEgZ2l2ZW5cXG5tbS9tZW1mZC5jLTY2LSAqIGluZGV4IGluIHRoZSBtYXBwaW5nLlxcbi0tXFxubW0vbWVtZmRfbHVvLmM9ODc9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbWVtZmRfbHVvLmMtMTI5LVxcdCAqIHRoYXQgaXMgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gaGF2ZSBhXFxubW0vbWVtZmRfbHVvLmM6MTMwOlxcdCAqIG1lbWZkX3Bpbl9mb2xpb3MoKSB2YXJpYW50IHRoYXQgZG9lcyBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGVtcHR5XFxubW0vbWVtZmRfbHVvLmMtMTMxLVxcdCAqIHNsb3RzLlxcbm1tL21lbWZkX2x1by5jLTEzMi1cXHQgKi9cXG5tbS9tZW1mZF9sdW8uYzoxMzM6XFx0bnJfcGlubmVkID0gbWVtZmRfcGluX2ZvbGlvcyhmaWxlLCAwLCBzaXplIC0gMSwgZm9saW9zLCBtYXhfZm9saW9zLFxcbm1tL21lbWZkX2x1by5jLTEzNC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxubW0vbWVtZmRfbHVvLmM9MjU4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTI5MS1cXHQvKlxcbm1tL21lbWZkX2x1by5jOjI5MjpcXHQgKiBtZW1mZF9waW5fZm9saW9zKCkgY2FwcyBhdCBVSU5UX01BWCBmb2xpb3M7IHJlZnVzZSBsYXJnZXJcXG5tbS9tZW1mZF9sdW8uYy0yOTMtXFx0ICogZmlsZXMgdG8gYXZvaWQgc2lsZW50bHkgcHJlc2VydmluZyBvbmx5IGEgcHJlZml4LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODo0OC4xMTc5ODUyMDVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MDcyMzEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIG1lbW9yeSBwaW5uaW5nIGFuZCB1c2VyIHNwYWNlIGludGVyYWN0aW9uLiBJJ20gc2VlaW5nIGEgc3Ryb25nIGNhc2UgZm9yIGZvY3VzaW5nIG9uIGBtZW1mZF9waW5fZm9saW9zYC4gSSBhbHNvIHRoaW5rIGB1ZG1hYnVmX2NyZWF0ZWAsIGB1ZG1hYnVmX2lvY3RsX2NyZWF0ZWAsIGFuZCBgdWRtYWJ1Zl9pb2N0bF9jcmVhdGVfbGlzdGAgYXJlIGdvb2QgY2FuZGlkYXRlcyBnaXZlbiB0aGVpciBzcGVjaWZpYyBpbnRlcmFjdGlvbnMuIFNpbWlsYXJseSwgYGlvX3Bpbl9wYWdlc2AsIGBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyYCwgYW5kIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAgc2VlbSB0byBkaXJlY3RseSBkZWFsIHdpdGggcGlubmluZyBwYWdlcyBpbiB0aGUgY29udGV4dCBvZiBJL08uIEFuZCBJIHNlZSBhIGxvdCB0byBsZWFybiBmcm9tIGB2YWRkcl9nZXRfcGZuc2AuXG5cbk5vdywgSSdtIGV2YWx1YXRpbmcgYHBpbl91c2VyX3BhZ2VzYCBhcyBhIGZvY3VzLiBJdCdzIGV4cG9ydGVkLCBidXQgaXQgZmVlbHMgYSBiaXQgYnJvYWQuIGBwaW5fdXNlcl9wYWdlc19mYXN0YCBoYXMgdGhlIHNhbWUgaXNzdWUuIEhvd2V2ZXIsIHRoZXkgYXJlIGRpcmVjdCBjYWxsZXJzIG9mIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgLCB3aGljaCBpbiB0dXJuLCBpcyB3aGVyZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGVyZWZvcmUsIHRoZWlyIGluY2x1c2lvbiBpcyBqdXN0aWZpZWQuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJlLWV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZGAgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4NDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjg6NTIuNjY4NzExOTAxWiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDI3Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2d1cF9sb25ndGVybV9sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZ3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjQ2MD1zdGF0aWMgbG9uZyBjaGVja19hbmRfbWlncmF0ZV9tb3ZhYmxlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX2ZvbGlvcyxcXG4tLVxcbm1tL2d1cC5jLTI0NjctLypcXG5tbS9ndXAuYzoyNDY4OiAqIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZCgpIGlzIGEgd3JhcHBlciBmb3IgX19nZXRfdXNlcl9wYWdlc19sb2NrZWQgd2hpY2hcXG5tbS9ndXAuYy0yNDY5LSAqIGFsbG93cyB1cyB0byBwcm9jZXNzIHRoZSBGT0xMX0xPTkdURVJNIGZsYWcuXFxubW0vZ3VwLmMtMjQ3MC0gKi9cXG5tbS9ndXAuYzoyNDcxOnN0YXRpYyBsb25nIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9ndXAuYy0yNDcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2d1cC5jPTMxODY9c3RhdGljIGludCBndXBfZmFzdF9mYWxsYmFjayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzIxOS1cXHRwYWdlcyArPSBucl9waW5uZWQ7XFxubW0vZ3VwLmM6MzIyMDpcXHRyZXQgPSBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyAtIG5yX3Bpbm5lZCxcXG5tbS9ndXAuYy0zMjIxLVxcdFxcdFxcdFxcdCAgICBwYWdlcywgXFx1MDAyNmxvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzNTM9bG9uZyBwaW5fdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9ndXAuYy0zMzYyLVxcdFxcdHJldHVybiAwO1xcbm1tL2d1cC5jOjMzNjM6XFx0cmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xvY2tlZChtbSwgc3RhcnQsIG5yX3BhZ2VzLCBwYWdlcyxcXG5tbS9ndXAuYy0zMzY0LVxcdFxcdFxcdFxcdCAgICAgbG9ja2VkID8gbG9ja2VkIDogXFx1MDAyNmxvY2FsX2xvY2tlZCxcXG4tLVxcbm1tL2d1cC5jPTMzODc9bG9uZyBwaW5fdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vZ3VwLmMtMzM5My1cXHRcXHRyZXR1cm4gMDtcXG5tbS9ndXAuYzozMzk0OlxcdHJldHVybiBfX2d1cF9sb25ndGVybV9sb2NrZWQoY3VycmVudC1cXHUwMDNlbW0sIHN0YXJ0LCBucl9wYWdlcyxcXG5tbS9ndXAuYy0zMzk1LVxcdFxcdFxcdFxcdCAgICAgcGFnZXMsIFxcdTAwMjZsb2NrZWQsIGd1cF9mbGFncyk7XFxuLS1cXG5tbS9ndXAuYz0zNDA3PWxvbmcgcGluX3VzZXJfcGFnZXNfdW5sb2NrZWQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL2d1cC5jLTM0MTUtXFxubW0vZ3VwLmM6MzQxNjpcXHRyZXR1cm4gX19ndXBfbG9uZ3Rlcm1fbG9ja2VkKGN1cnJlbnQtXFx1MDAzZW1tLCBzdGFydCwgbnJfcGFnZXMsIHBhZ2VzLFxcbm1tL2d1cC5jLTM0MTctXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bG9ja2VkLCBndXBfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNToyODo1Mi43Mjg5OTU1NVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTc1MTkwMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBQaW5uaW5nIGFuZCBGb2xpbyBJc29sYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1haW4gdGhvdWdodCBpcyB0aGF0IGBwaW5fdXNlcl9wYWdlc19mYXN0YCBzZWVtcyBsaWtlIGEga2V5IGVudHJ5IHBvaW50LCBhcyBpdCB1bHRpbWF0ZWx5IGxlYWRzIHRvIGBfX2d1cF9sb25ndGVybV9sb2NrZWRgIHZpYSBgZ3VwX2Zhc3RfZmFsbGJhY2tgIGFuZCBgaW50ZXJuYWxfZ2V0X3VzZXJfcGFnZXNfZmFzdGAuIFRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSBJIHdhbnQgdG8gc3RhcnQgaWYgSSdtIHRyYWNpbmcgdGhlIGZsb3cgb2YgbWVtb3J5IHBpbm5pbmcgb3BlcmF0aW9ucy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc2lnbmlmaWNhbnQgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEuIEknbSBmb2N1c2luZyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBwaW5uaW5nLiBJJ2xsIGluY2x1ZGUgdGhlc2U6IGBtZW1mZF9waW5fZm9saW9zYCwgYHVkbWFidWZfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlYCwgYHVkbWFidWZfaW9jdGxfY3JlYXRlX2xpc3RgLCBgaW9fcGluX3BhZ2VzYCwgYGlvX3NxZV9idWZmZXJfcmVnaXN0ZXJgLCBgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXJgLCBgdmFkZHJfZ2V0X3BmbnNgLCBgcGluX3VzZXJfcGFnZXNfZmFzdGAsIGFuZCBgcGluX3VzZXJfcGFnZXNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4uXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhpcyBwYXRjaCBpbXBhY3RzIHN5c3RlbXMgdXNpbmcgYFVETUFCVUZgLCBgSU9fVVJJTkdgLCBgVkZJT2AsIGFuZCBgSU9NTVVGRGAuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFsbCByZWx5IG9uIG1lbW9yeSBwaW5uaW5nIGluIHNvbWUgZmFzaGlvbi5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gYGNvbGxlY3RfbG9uZ3Rlcm1fdW5waW5uYWJsZV9mb2xpb3NgLiBUaGUgcHJvYmxlbSB3YXMgYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudCBjYWxjdWxhdGlvbiBmb3Igb3JkZXItMCBmb2xpb3Mgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGlzb2xhdGluZyB0aGVtLiBUaGUgaGFyZGNvZGVkIHZhbHVlIG9mIGAxYCBmb3IgcmVmZXJlbmNlIGNvdW50IHdhcyB3cm9uZy4gVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgdXNpbmcgYHBpbl9yZWZzYCwgd2hpY2ggY29ycmVjdGx5IGFjY291bnRzIGZvciBgR1VQX1BJTl9DT1VOVElOR19CSUFTYCBmb3Igb3JkZXItMCBmb2xpb3MuIFRoZSBjb3JyZWN0aW9uIGVuc3VyZXMgdGhlIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBpc29sYXRpbmcgcGFnZXMgZm9yIGxvbmctdGVybSBHVVAgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IG1pZ3JhdGUgcGFnZXMgZnJvbSBtb3ZhYmxlIHpvbmVzLiBUaGlzIGFmZmVjdHMgc3Vic3lzdGVtcyBzdWNoIGFzIGB1ZG1hYnVmYCwgYGlvX3VyaW5nYCwgYW5kIGBWRklPL0lPTU1VRkRgIHdoaWNoIHBpbiBtZW1vcnkgbG9uZyB0ZXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk1NCwiT3V0cHV0VG9rZW5zIjozMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6Mjk6MDEuOTA0MTg4MzcxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxMzY3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVETUFCVUZcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJJT01NVUZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiLFxuICAgIFwidWRtYWJ1Zl9jcmVhdGVcIixcbiAgICBcInVkbWFidWZfaW9jdGxfY3JlYXRlXCIsXG4gICAgXCJ1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0XCIsXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyXCIsXG4gICAgXCJ2YWRkcl9nZXRfcGZuc1wiLFxuICAgIFwicGluX3VzZXJfcGFnZXNfZmFzdFwiLFxuICAgIFwicGluX3VzZXJfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVETUFCVUZcIixcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJJT01NVUZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtZmRfcGluX2ZvbGlvc1wiLFxuICAgIFwidWRtYWJ1Zl9jcmVhdGVcIixcbiAgICBcInVkbWFidWZfaW9jdGxfY3JlYXRlXCIsXG4gICAgXCJ1ZG1hYnVmX2lvY3RsX2NyZWF0ZV9saXN0XCIsXG4gICAgXCJpb19waW5fcGFnZXNcIixcbiAgICBcImlvX3NxZV9idWZmZXJfcmVnaXN0ZXJcIixcbiAgICBcImlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyXCIsXG4gICAgXCJ2YWRkcl9nZXRfcGZuc1wiLFxuICAgIFwicGluX3VzZXJfcGFnZXNfZmFzdFwiLFxuICAgIFwicGluX3VzZXJfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgY29sbGVjdF9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvc2Agd2hlcmUgdGhlIGV4cGVjdGVkIHJlZmVyZW5jZSBjb3VudCBvZiBhIGZvbGlvIHdhcyBjYWxjdWxhdGVkIGluY29ycmVjdGx5IGZvciBvcmRlci0wIGZvbGlvcyB3aGVuIGNoZWNraW5nIGlmIHRoZXkgY2FuIGJlIGlzb2xhdGVkLiBJdCBjaGFuZ2VzIHRoZSBoYXJkY29kZWQgYDFgIHRvIGBwaW5fcmVmc2AsIHdoaWNoIGNvcnJlY3RseSBhY2NvdW50cyBmb3IgYEdVUF9QSU5fQ09VTlRJTkdfQklBU2AgZm9yIG9yZGVyLTAgZm9saW9zLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYEZPTExfTE9OR1RFUk1gIGdldF91c2VyX3BhZ2VzIChHVVApIG9wZXJhdGlvbnMgKGUuZy4sIGBwaW5fdXNlcl9wYWdlc2AsIGBtZW1mZF9waW5fZm9saW9zYCkgdG8gbWlncmF0ZSBwYWdlcyBvdXQgb2YgbW92YWJsZSB6b25lcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3Vic3lzdGVtcyB0aGF0IHBpbiBtZW1vcnkgbG9uZy10ZXJtLCBzdWNoIGFzIHVkbWFidWYsIGlvX3VyaW5nLCBhbmQgVkZJTy9JT01NVUZELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[1] Phase: Succeeded StartedAt: 2026-08-02 05:29:13 +0000 UTC FinishedAt: 2026-08-02 05:29:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 05:29:13 +0000 UTC FinishedAt: 2026-08-02 05:29:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2] Phase: Succeeded StartedAt: 2026-08-02 05:29:13 +0000 UTC FinishedAt: 2026-08-02 09:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 05:29:13 +0000 UTC FinishedAt: 2026-08-02 09:15:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 05:29:13 +0000 UTC FinishedAt: 2026-08-02 05:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 05:29:13 +0000 UTC FinishedAt: 2026-08-02 05:29:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8grc8/series-workflow8grc8-convert-artifact-1607929984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 05:29:23 +0000 UTC FinishedAt: 2026-08-02 05:48:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 05:29:23 +0000 UTC FinishedAt: 2026-08-02 05:48:03 +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:*c9357bfd-8a3c-4abf-a596-b6bd9f341f15,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-workflow8grc8/series-workflow8grc8-convert-artifact-1607929984/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": "1780ceaf-78ed-4cfb-9636-de6aa50f1fa3", "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-workflow8grc8/series-workflow8grc8-build-action-1038375750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 05:29:23 +0000 UTC FinishedAt: 2026-08-02 05:47:53 +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:*c9357bfd-8a3c-4abf-a596-b6bd9f341f15,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-workflow8grc8/series-workflow8grc8-convert-artifact-1607929984/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": "1780ceaf-78ed-4cfb-9636-de6aa50f1fa3", "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-workflow8grc8/series-workflow8grc8-build-action-1038375750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 05:48:03 +0000 UTC FinishedAt: 2026-08-02 05:48:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 05:48:03 +0000 UTC FinishedAt: 2026-08-02 05:48:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 05:48:03 +0000 UTC FinishedAt: 2026-08-02 05:48:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 05:48:03 +0000 UTC FinishedAt: 2026-08-02 05:48:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8grc8/series-workflow8grc8-convert-artifact-27872551/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 05:48:13 +0000 UTC FinishedAt: 2026-08-02 05:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 05:48:13 +0000 UTC FinishedAt: 2026-08-02 05:50:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1780ceaf-78ed-4cfb-9636-de6aa50f1fa3,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-workflow8grc8/series-workflow8grc8-build-action-1038375750/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-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 05:50:18 +0000 UTC FinishedAt: 2026-08-02 05:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 05:50:18 +0000 UTC FinishedAt: 2026-08-02 05:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 05:50:18 +0000 UTC FinishedAt: 2026-08-02 06:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 05:50:18 +0000 UTC FinishedAt: 2026-08-02 06:10:20 +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:*c9357bfd-8a3c-4abf-a596-b6bd9f341f15,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-workflow8grc8/series-workflow8grc8-convert-artifact-27872551/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": "73ede552-2e16-42ec-b177-763027edbae4", "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-workflow8grc8/series-workflow8grc8-build-action-1375321771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 05:50:18 +0000 UTC FinishedAt: 2026-08-02 06:10:09 +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:*c9357bfd-8a3c-4abf-a596-b6bd9f341f15,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-workflow8grc8/series-workflow8grc8-convert-artifact-27872551/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": "73ede552-2e16-42ec-b177-763027edbae4", "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-workflow8grc8/series-workflow8grc8-build-action-1375321771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 06:10:20 +0000 UTC FinishedAt: 2026-08-02 06:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 06:10:20 +0000 UTC FinishedAt: 2026-08-02 06:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 06:10:20 +0000 UTC FinishedAt: 2026-08-02 06:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 06:10:20 +0000 UTC FinishedAt: 2026-08-02 06:12:16 +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:*73ede552-2e16-42ec-b177-763027edbae4,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-workflow8grc8/series-workflow8grc8-build-action-1375321771/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-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 06:12:25 +0000 UTC FinishedAt: 2026-08-02 09:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 06:12:25 +0000 UTC FinishedAt: 2026-08-02 09:15:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1780ceaf-78ed-4cfb-9636-de6aa50f1fa3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73ede552-2e16-42ec-b177-763027edbae4,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-workflow8grc8/series-workflow8grc8-build-action-1038375750/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-workflow8grc8/series-workflow8grc8-build-action-1375321771/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 06:12:25 +0000 UTC FinishedAt: 2026-08-02 06:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 06:12:25 +0000 UTC FinishedAt: 2026-08-02 06:12:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8grc8/series-workflow8grc8-convert-artifact-1071273856/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 06:12:25 +0000 UTC FinishedAt: 2026-08-02 06:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 06:12:25 +0000 UTC FinishedAt: 2026-08-02 06:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 06:12:25 +0000 UTC FinishedAt: 2026-08-02 06:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 06:12:57 +0000 UTC FinishedAt: 2026-08-02 09:15:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8grc8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memfd_pin_folios","udmabuf_create","udmabuf_ioctl_create","udmabuf_ioctl_create_list","io_pin_pages","io_sqe_buffer_register","io_sqe_buffers_register","vaddr_get_pfns","pin_user_pages_fast","pin_user_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7fa9c260aad6683b23c3c863b1d0f79ab63c1bfb","config_name":"upstream-apparmor-kasan.config","enable_configs":["UDMABUF","IO_URING","VFIO","IOMMUFD"],"series_id":"674d050e-c580-4339-bc5e-d6aedad29bcf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 06:12:57 +0000 UTC FinishedAt: 2026-08-02 09:15:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1780ceaf-78ed-4cfb-9636-de6aa50f1fa3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73ede552-2e16-42ec-b177-763027edbae4,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-workflow8grc8/series-workflow8grc8-build-action-1038375750/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-workflow8grc8/series-workflow8grc8-build-action-1375321771/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-workflow8grc8/series-workflow8grc8-convert-artifact-1071273856/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,}